From d3258bbd970cc81063a85dedd408324f4a9cfce1 Mon Sep 17 00:00:00 2001 From: Livox-SDK Date: Wed, 1 Apr 2020 20:53:55 +0800 Subject: [PATCH] feat:replace boost library with C++11 std library --- CMakeLists.txt | 9 +- Doxyfile | 2 +- LICENSE.txt | 109 +- README.md | 95 +- README_CN.md | 219 + doc/Livox_LiDAR_SDK_API_Reference_V2.1.0.pdf | Bin 0 -> 220306 bytes docs/_fast_c_r_c_8h.html | 62 +- docs/_fast_c_r_c_8h_source.html | 153 +- docs/_r_e_a_d_m_e_8md.html | 64 +- docs/_r_e_a_d_m_e_8md_source.html | 124 + docs/android__sink_8h.html | 68 +- docs/android__sink_8h_source.html | 249 +- docs/annotated.html | 155 +- docs/ansicolor__sink_8h.html | 62 +- docs/ansicolor__sink_8h_source.html | 346 +- docs/arrowdown.png | Bin 0 -> 246 bytes docs/arrowright.png | Bin 0 -> 229 bytes docs/async_8h.html | 74 +- docs/async_8h.js | 4 +- docs/async_8h_source.html | 177 +- docs/async__logger_8h.html | 62 +- docs/async__logger_8h_source.html | 173 +- docs/async__logger__impl_8h.html | 62 +- docs/async__logger__impl_8h_source.html | 216 +- docs/base__sink_8h.html | 62 +- docs/base__sink_8h_source.html | 171 +- docs/basic__file__sink_8h.html | 62 +- docs/basic__file__sink_8h_source.html | 181 +- docs/bin__to__hex_8h.html | 62 +- docs/bin__to__hex_8h_source.html | 264 +- docs/chrono_8h.html | 62 +- docs/chrono_8h_source.html | 732 +- docs/circular__q_8h.html | 62 +- docs/circular__q_8h_source.html | 152 +- docs/class_fast_c_r_c16-members.html | 64 +- docs/class_fast_c_r_c16.html | 74 +- docs/class_fast_c_r_c32-members.html | 64 +- docs/class_fast_c_r_c32.html | 74 +- docs/classes.html | 624 +- ...ssfmt_1_1v5_1_1arg__formatter-members.html | 64 +- docs/classfmt_1_1v5_1_1arg__formatter.html | 110 +- ..._1_1v5_1_1back__insert__range-members.html | 68 +- ...classfmt_1_1v5_1_1back__insert__range.html | 98 +- ...1_1v5_1_1basic__cstring__view-members.html | 66 +- ...lassfmt_1_1v5_1_1basic__cstring__view.html | 94 +- .../classfmt_1_1v5_1_1basic__cstring__view.js | 2 +- ...t_1_1v5_1_1basic__format__arg-members.html | 72 +- .../classfmt_1_1v5_1_1basic__format__arg.html | 136 +- docs/classfmt_1_1v5_1_1basic__format__arg.js | 8 +- ...1basic__format__arg_1_1handle-members.html | 66 +- ...1_1v5_1_1basic__format__arg_1_1handle.html | 82 +- ...t_1_1v5_1_1basic__format__arg_1_1handle.js | 2 +- ..._1_1v5_1_1basic__format__args-members.html | 68 +- ...classfmt_1_1v5_1_1basic__format__args.html | 138 +- docs/classfmt_1_1v5_1_1basic__format__args.js | 4 +- ...1v5_1_1basic__format__context-members.html | 68 +- ...ssfmt_1_1v5_1_1basic__format__context.html | 150 +- ...lassfmt_1_1v5_1_1basic__format__context.js | 2 +- ..._1v5_1_1basic__memory__buffer-members.html | 76 +- ...assfmt_1_1v5_1_1basic__memory__buffer.html | 190 +- ...classfmt_1_1v5_1_1basic__memory__buffer.js | 6 +- ..._1v5_1_1basic__parse__context-members.html | 70 +- ...assfmt_1_1v5_1_1basic__parse__context.html | 198 +- ...classfmt_1_1v5_1_1basic__parse__context.js | 8 +- ...1v5_1_1basic__printf__context-members.html | 97 +- ...ssfmt_1_1v5_1_1basic__printf__context.html | 190 +- ...lassfmt_1_1v5_1_1basic__printf__context.js | 5 +- ..._1_1v5_1_1basic__string__view-members.html | 76 +- ...classfmt_1_1v5_1_1basic__string__view.html | 237 +- docs/classfmt_1_1v5_1_1basic__string__view.js | 14 +- ...assfmt_1_1v5_1_1basic__writer-members.html | 68 +- docs/classfmt_1_1v5_1_1basic__writer.html | 908 +- docs/classfmt_1_1v5_1_1basic__writer.js | 24 +- ...ssfmt_1_1v5_1_1buffered__file-members.html | 70 +- docs/classfmt_1_1v5_1_1buffered__file.html | 138 +- docs/classfmt_1_1v5_1_1buffered__file.js | 6 +- ...t_1_1v5_1_1dynamic__formatter-members.html | 64 +- .../classfmt_1_1v5_1_1dynamic__formatter.html | 78 +- ...classfmt_1_1v5_1_1error__code-members.html | 66 +- docs/classfmt_1_1v5_1_1error__code.html | 82 +- docs/classfmt_1_1v5_1_1error__code.js | 2 +- docs/classfmt_1_1v5_1_1file-members.html | 68 +- docs/classfmt_1_1v5_1_1file.html | 157 +- docs/classfmt_1_1v5_1_1file.js | 4 +- ...t_1_1v5_1_1format__arg__store-members.html | 66 +- .../classfmt_1_1v5_1_1format__arg__store.html | 102 +- docs/classfmt_1_1v5_1_1format__arg__store.js | 2 +- ...assfmt_1_1v5_1_1format__error-members.html | 64 +- docs/classfmt_1_1v5_1_1format__error.html | 82 +- ...classfmt_1_1v5_1_1format__int-members.html | 72 +- docs/classfmt_1_1v5_1_1format__int.html | 144 +- docs/classfmt_1_1v5_1_1format__int.js | 8 +- ...ternal_1_1add__thousands__sep-members.html | 64 +- ...v5_1_1internal_1_1add__thousands__sep.html | 93 +- ...1_1internal_1_1arg__converter-members.html | 64 +- ...t_1_1v5_1_1internal_1_1arg__converter.html | 96 +- ...ernal_1_1arg__formatter__base-members.html | 64 +- ...5_1_1internal_1_1arg__formatter__base.html | 316 +- ...1v5_1_1internal_1_1arg__formatter__base.js | 6 +- ...1_1v5_1_1internal_1_1arg__map-members.html | 66 +- ...lassfmt_1_1v5_1_1internal_1_1arg__map.html | 94 +- .../classfmt_1_1v5_1_1internal_1_1arg__map.js | 2 +- ..._1_1internal_1_1basic__buffer-members.html | 74 +- ...mt_1_1v5_1_1internal_1_1basic__buffer.html | 243 +- ...sfmt_1_1v5_1_1internal_1_1basic__buffer.js | 10 +- ..._1internal_1_1char__converter-members.html | 64 +- ..._1_1v5_1_1internal_1_1char__converter.html | 90 +- ...ernal_1_1char__specs__checker-members.html | 64 +- ...5_1_1internal_1_1char__specs__checker.html | 88 +- ...internal_1_1container__buffer-members.html | 74 +- ..._1v5_1_1internal_1_1container__buffer.html | 107 +- ..._1_1internal_1_1context__base-members.html | 68 +- ...mt_1_1v5_1_1internal_1_1context__base.html | 164 +- ...sfmt_1_1v5_1_1internal_1_1context__base.js | 4 +- ...nternal_1_1counting__iterator-members.html | 68 +- ...1v5_1_1internal_1_1counting__iterator.html | 140 +- ...1_1v5_1_1internal_1_1counting__iterator.js | 4 +- ...nal_1_1cstring__type__checker-members.html | 64 +- ...1_1internal_1_1cstring__type__checker.html | 88 +- ...internal_1_1custom__formatter-members.html | 68 +- ..._1v5_1_1internal_1_1custom__formatter.html | 150 +- ..._1_1v5_1_1internal_1_1custom__formatter.js | 4 +- ...nternal_1_1decimal__formatter-members.html | 64 +- ...1v5_1_1internal_1_1decimal__formatter.html | 84 +- ...l_1_1decimal__formatter__null-members.html | 64 +- ...1internal_1_1decimal__formatter__null.html | 84 +- ...al_1_1dynamic__specs__handler-members.html | 68 +- ..._1internal_1_1dynamic__specs__handler.html | 112 +- ...ernal_1_1float__type__checker-members.html | 64 +- ...5_1_1internal_1_1float__type__checker.html | 106 +- ...al_1_1format__string__checker-members.html | 64 +- ..._1internal_1_1format__string__checker.html | 164 +- ..._1_1internal_1_1format__string__checker.js | 2 +- ..._1v5_1_1internal_1_1formatbuf-members.html | 64 +- ...assfmt_1_1v5_1_1internal_1_1formatbuf.html | 88 +- ...ssfmt_1_1v5_1_1internal_1_1fp-members.html | 66 +- docs/classfmt_1_1v5_1_1internal_1_1fp.html | 122 +- docs/classfmt_1_1v5_1_1internal_1_1fp.js | 2 +- ...nternal_1_1int__type__checker-members.html | 64 +- ...1v5_1_1internal_1_1int__type__checker.html | 112 +- ...rnal_1_1is__like__std__string-members.html | 64 +- ..._1_1internal_1_1is__like__std__string.html | 77 +- ...ernal_1_1is__output__iterator-members.html | 64 +- ...5_1_1internal_1_1is__output__iterator.html | 72 +- ...1_1internal_1_1is__streamable-members.html | 64 +- ...t_1_1v5_1_1internal_1_1is__streamable.html | 72 +- ..._1_1internal_1_1is__zero__int-members.html | 64 +- ...mt_1_1v5_1_1internal_1_1is__zero__int.html | 84 +- ...v5_1_1internal_1_1locale__ref-members.html | 66 +- ...sfmt_1_1v5_1_1internal_1_1locale__ref.html | 96 +- ...assfmt_1_1v5_1_1internal_1_1locale__ref.js | 2 +- ..._1null__terminating__iterator-members.html | 78 +- ...ternal_1_1null__terminating__iterator.html | 275 +- ...internal_1_1null__terminating__iterator.js | 14 +- ...nternal_1_1precision__checker-members.html | 64 +- ...1v5_1_1internal_1_1precision__checker.html | 90 +- ...1_1printf__precision__handler-members.html | 64 +- ...nternal_1_1printf__precision__handler.html | 84 +- ...nal_1_1printf__width__handler-members.html | 64 +- ...1_1internal_1_1printf__width__handler.html | 90 +- ...1_1internal_1_1specs__checker-members.html | 64 +- ...t_1_1v5_1_1internal_1_1specs__checker.html | 124 +- ...1_1internal_1_1specs__handler-members.html | 68 +- ...t_1_1v5_1_1internal_1_1specs__handler.html | 106 +- ..._1_1internal_1_1specs__setter-members.html | 64 +- ...mt_1_1v5_1_1internal_1_1specs__setter.html | 150 +- ...5_1_1internal_1_1truncating__iterator.html | 66 +- ..._00_01std_1_1false__type_01_4-members.html | 70 +- ...utput_it_00_01std_1_1false__type_01_4.html | 114 +- ..._output_it_00_01std_1_1false__type_01_4.js | 2 +- ...t_00_01std_1_1true__type_01_4-members.html | 68 +- ...output_it_00_01std_1_1true__type_01_4.html | 116 +- ...1_1truncating__iterator__base-members.html | 68 +- ...nternal_1_1truncating__iterator__base.html | 146 +- ...1internal_1_1truncating__iterator__base.js | 4 +- ...mt_1_1v5_1_1internal_1_1value-members.html | 64 +- docs/classfmt_1_1v5_1_1internal_1_1value.html | 220 +- ...1_1internal_1_1width__checker-members.html | 64 +- ...t_1_1v5_1_1internal_1_1width__checker.html | 90 +- ...assfmt_1_1v5_1_1output__range-members.html | 66 +- docs/classfmt_1_1v5_1_1output__range.html | 94 +- docs/classfmt_1_1v5_1_1output__range.js | 2 +- ...1v5_1_1printf__arg__formatter-members.html | 64 +- ...ssfmt_1_1v5_1_1printf__arg__formatter.html | 400 +- ...lassfmt_1_1v5_1_1printf__arg__formatter.js | 10 +- ...assfmt_1_1v5_1_1system__error-members.html | 68 +- docs/classfmt_1_1v5_1_1system__error.html | 108 +- docs/classfmt_1_1v5_1_1system__error.js | 4 +- ...classfmt_1_1v5_1_1text__style-members.html | 76 +- docs/classfmt_1_1v5_1_1text__style.html | 168 +- docs/classfmt_1_1v5_1_1text__style.js | 12 +- ...ssfmt_1_1v5_1_1u8string__view-members.html | 76 +- docs/classfmt_1_1v5_1_1u8string__view.html | 118 +- docs/classlivox_1_1_comm_port-members.html | 64 +- docs/classlivox_1_1_comm_port.html | 94 +- docs/classlivox_1_1_protocol-members.html | 64 +- docs/classlivox_1_1_protocol.html | 100 +- .../classspdlog_1_1async__logger-members.html | 92 +- docs/classspdlog_1_1async__logger.html | 204 +- ...g_1_1details_1_1_a__formatter-members.html | 64 +- ...assspdlog_1_1details_1_1_a__formatter.html | 84 +- ...g_1_1details_1_1_b__formatter-members.html | 64 +- ...assspdlog_1_1details_1_1_b__formatter.html | 84 +- ...g_1_1details_1_1_c__formatter-members.html | 64 +- ...assspdlog_1_1details_1_1_c__formatter.html | 84 +- ...g_1_1details_1_1_d__formatter-members.html | 64 +- ...assspdlog_1_1details_1_1_d__formatter.html | 84 +- ...g_1_1details_1_1_e__formatter-members.html | 64 +- ...assspdlog_1_1details_1_1_e__formatter.html | 84 +- ...g_1_1details_1_1_f__formatter-members.html | 64 +- ...assspdlog_1_1details_1_1_f__formatter.html | 84 +- ...g_1_1details_1_1_h__formatter-members.html | 64 +- ...assspdlog_1_1details_1_1_h__formatter.html | 84 +- ...g_1_1details_1_1_i__formatter-members.html | 64 +- ...assspdlog_1_1details_1_1_i__formatter.html | 84 +- ...g_1_1details_1_1_m__formatter-members.html | 64 +- ...assspdlog_1_1details_1_1_m__formatter.html | 84 +- ...g_1_1details_1_1_r__formatter-members.html | 64 +- ...assspdlog_1_1details_1_1_r__formatter.html | 84 +- ...g_1_1details_1_1_s__formatter-members.html | 64 +- ...assspdlog_1_1details_1_1_s__formatter.html | 84 +- ...g_1_1details_1_1_t__formatter-members.html | 64 +- ...assspdlog_1_1details_1_1_t__formatter.html | 84 +- ...g_1_1details_1_1_y__formatter-members.html | 64 +- ...assspdlog_1_1details_1_1_y__formatter.html | 84 +- ...og_1_1details_1_1a__formatter-members.html | 64 +- ...lassspdlog_1_1details_1_1a__formatter.html | 84 +- ...tails_1_1aggregate__formatter-members.html | 64 +- ...og_1_1details_1_1aggregate__formatter.html | 88 +- ...og_1_1details_1_1b__formatter-members.html | 64 +- ...lassspdlog_1_1details_1_1b__formatter.html | 84 +- ...og_1_1details_1_1bytes__range-members.html | 68 +- ...lassspdlog_1_1details_1_1bytes__range.html | 92 +- .../classspdlog_1_1details_1_1bytes__range.js | 4 +- ...og_1_1details_1_1c__formatter-members.html | 64 +- ...lassspdlog_1_1details_1_1c__formatter.html | 84 +- ...g_1_1details_1_1ch__formatter-members.html | 64 +- ...assspdlog_1_1details_1_1ch__formatter.html | 84 +- ...log_1_1details_1_1circular__q-members.html | 66 +- ...classspdlog_1_1details_1_1circular__q.html | 112 +- docs/classspdlog_1_1details_1_1circular__q.js | 2 +- ...ls_1_1color__start__formatter-members.html | 64 +- ...1_1details_1_1color__start__formatter.html | 84 +- ...ils_1_1color__stop__formatter-members.html | 64 +- ..._1_1details_1_1color__stop__formatter.html | 84 +- ...og_1_1details_1_1d__formatter-members.html | 64 +- ...lassspdlog_1_1details_1_1d__formatter.html | 84 +- ...og_1_1details_1_1e__formatter-members.html | 64 +- ...lassspdlog_1_1details_1_1e__formatter.html | 84 +- ...og_1_1details_1_1f__formatter-members.html | 64 +- ...lassspdlog_1_1details_1_1f__formatter.html | 84 +- ...og_1_1details_1_1file__helper-members.html | 68 +- ...lassspdlog_1_1details_1_1file__helper.html | 158 +- .../classspdlog_1_1details_1_1file__helper.js | 4 +- ...1_1details_1_1flag__formatter-members.html | 64 +- ...sspdlog_1_1details_1_1flag__formatter.html | 98 +- ...1_1details_1_1full__formatter-members.html | 64 +- ...sspdlog_1_1details_1_1full__formatter.html | 84 +- ...og_1_1details_1_1i__formatter-members.html | 64 +- ...lassspdlog_1_1details_1_1i__formatter.html | 84 +- ..._1details_1_1level__formatter-members.html | 64 +- ...spdlog_1_1details_1_1level__formatter.html | 84 +- ...og_1_1details_1_1m__formatter-members.html | 64 +- ...lassspdlog_1_1details_1_1m__formatter.html | 84 +- ...ails_1_1mpmc__blocking__queue-members.html | 64 +- ...g_1_1details_1_1mpmc__blocking__queue.html | 102 +- ...1_1details_1_1name__formatter-members.html | 64 +- ...sspdlog_1_1details_1_1name__formatter.html | 84 +- ...og_1_1details_1_1p__formatter-members.html | 64 +- ...lassspdlog_1_1details_1_1p__formatter.html | 84 +- ..._1details_1_1periodic__worker-members.html | 64 +- ...spdlog_1_1details_1_1periodic__worker.html | 86 +- ..._1_1details_1_1pid__formatter-members.html | 64 +- ...ssspdlog_1_1details_1_1pid__formatter.html | 84 +- ...og_1_1details_1_1r__formatter-members.html | 64 +- ...lassspdlog_1_1details_1_1r__formatter.html | 84 +- ...spdlog_1_1details_1_1registry-members.html | 64 +- docs/classspdlog_1_1details_1_1registry.html | 206 +- ...log_1_1details_1_1scoped__pad-members.html | 64 +- ...classspdlog_1_1details_1_1scoped__pad.html | 84 +- ...ls_1_1short__level__formatter-members.html | 64 +- ...1_1details_1_1short__level__formatter.html | 84 +- ..._1source__filename__formatter-members.html | 64 +- ...etails_1_1source__filename__formatter.html | 84 +- ..._1source__funcname__formatter-members.html | 64 +- ...etails_1_1source__funcname__formatter.html | 84 +- ...1_1source__linenum__formatter-members.html | 64 +- ...details_1_1source__linenum__formatter.html | 84 +- ..._1source__location__formatter-members.html | 64 +- ...etails_1_1source__location__formatter.html | 84 +- ...og_1_1details_1_1t__formatter-members.html | 64 +- ...lassspdlog_1_1details_1_1t__formatter.html | 84 +- ...og_1_1details_1_1thread__pool-members.html | 64 +- ...lassspdlog_1_1details_1_1thread__pool.html | 116 +- ...og_1_1details_1_1v__formatter-members.html | 64 +- ...lassspdlog_1_1details_1_1v__formatter.html | 84 +- ...og_1_1details_1_1z__formatter-members.html | 64 +- ...lassspdlog_1_1details_1_1z__formatter.html | 102 +- docs/classspdlog_1_1formatter-members.html | 64 +- docs/classspdlog_1_1formatter.html | 82 +- docs/classspdlog_1_1logger-members.html | 92 +- docs/classspdlog_1_1logger.html | 668 +- docs/classspdlog_1_1logger.js | 30 +- ...sspdlog_1_1pattern__formatter-members.html | 64 +- docs/classspdlog_1_1pattern__formatter.html | 112 +- ...log_1_1sinks_1_1android__sink-members.html | 68 +- ...classspdlog_1_1sinks_1_1android__sink.html | 100 +- ...g_1_1sinks_1_1ansicolor__sink-members.html | 68 +- ...assspdlog_1_1sinks_1_1ansicolor__sink.html | 290 +- ...spdlog_1_1sinks_1_1base__sink-members.html | 68 +- docs/classspdlog_1_1sinks_1_1base__sink.html | 144 +- ...1_1sinks_1_1basic__file__sink-members.html | 70 +- ...sspdlog_1_1sinks_1_1basic__file__sink.html | 112 +- ...assspdlog_1_1sinks_1_1basic__file__sink.js | 2 +- ...1_1sinks_1_1daily__file__sink-members.html | 70 +- ...sspdlog_1_1sinks_1_1daily__file__sink.html | 110 +- ...assspdlog_1_1sinks_1_1daily__file__sink.js | 2 +- ...spdlog_1_1sinks_1_1dist__sink-members.html | 68 +- docs/classspdlog_1_1sinks_1_1dist__sink.html | 142 +- ...spdlog_1_1sinks_1_1null__sink-members.html | 68 +- docs/classspdlog_1_1sinks_1_1null__sink.html | 94 +- ...log_1_1sinks_1_1ostream__sink-members.html | 68 +- ...classspdlog_1_1sinks_1_1ostream__sink.html | 120 +- ...sinks_1_1rotating__file__sink-members.html | 70 +- ...dlog_1_1sinks_1_1rotating__file__sink.html | 118 +- ...spdlog_1_1sinks_1_1rotating__file__sink.js | 2 +- .../classspdlog_1_1sinks_1_1sink-members.html | 68 +- docs/classspdlog_1_1sinks_1_1sink.html | 150 +- docs/classspdlog_1_1sinks_1_1sink.js | 4 +- ...dlog_1_1sinks_1_1stdout__sink-members.html | 68 +- .../classspdlog_1_1sinks_1_1stdout__sink.html | 130 +- ...dlog_1_1sinks_1_1syslog__sink-members.html | 68 +- .../classspdlog_1_1sinks_1_1syslog__sink.html | 114 +- ...og_1_1sinks_1_1wincolor__sink-members.html | 76 +- ...lassspdlog_1_1sinks_1_1wincolor__sink.html | 186 +- .../classspdlog_1_1sinks_1_1wincolor__sink.js | 8 +- docs/classspdlog_1_1spdlog__ex-members.html | 66 +- docs/classspdlog_1_1spdlog__ex.html | 92 +- docs/classspdlog_1_1spdlog__ex.js | 2 +- ..._1internal_1_1dummy__int_01_4-members.html | 64 +- ..._01fmt_1_1internal_1_1dummy__int_01_4.html | 82 +- docs/color_8h.html | 74 +- docs/color_8h.js | 4 +- docs/color_8h_source.html | 1077 +- docs/comm__port_8h.html | 62 +- docs/comm__port_8h_source.html | 170 +- docs/common_8h.html | 169 +- docs/common_8h.js | 2 +- docs/common_8h_source.html | 424 +- docs/console__globals_8h.html | 62 +- docs/console__globals_8h_source.html | 160 +- docs/core_8h.html | 307 +- docs/core_8h.js | 66 +- docs/core_8h_source.html | 1925 +- docs/daily__file__sink_8h.html | 62 +- docs/daily__file__sink_8h_source.html | 270 +- .../dir_0c3a0641627b76fd80f03d211e44dc98.html | 62 +- .../dir_0edbe3cf21aa1980d331aee71a413a85.html | 62 +- .../dir_148a221396087d65c55fa0ea541856de.html | 62 +- .../dir_239a77e39c0fcb2f1e08881bb007ba07.html | 62 +- .../dir_248a80cf6760c7a1ab13394a1c16f7b2.html | 62 +- .../dir_5f1136fe404e0a548faf586fae339a6a.html | 62 +- .../dir_7bb3e31efd6b819bbb0704cee4a66d41.html | 62 +- .../dir_7d093cd833acfccb787639923feedd9d.html | 62 +- .../dir_92a4bcc0ca1142b221c58a95a60bf3b6.html | 62 +- .../dir_cf58c3a45797022668a1e269b5315a33.html | 62 +- .../dir_fef6b6f1028f30fedf17225feaaa02fe.html | 62 +- docs/dist__sink_8h.html | 62 +- docs/dist__sink_8h_source.html | 208 +- docs/doxygen.css | 431 +- docs/dynsections.js | 29 +- docs/file__helper_8h.html | 62 +- docs/file__helper_8h_source.html | 276 +- docs/files.html | 62 +- docs/files.js | 4 + docs/fmt_8h.html | 74 +- docs/fmt_8h_source.html | 91 +- docs/fmt__helper_8h.html | 62 +- docs/fmt__helper_8h_source.html | 240 +- docs/format-inl_8h.html | 121 +- docs/format-inl_8h_source.html | 1286 +- docs/format_8h.html | 212 +- docs/format_8h.js | 20 +- docs/format_8h_source.html | 4420 +-- docs/formatter_8h.html | 62 +- docs/formatter_8h_source.html | 100 +- docs/functions.html | 108 +- docs/functions_0x7e.html | 230 + docs/functions_a.html | 114 +- docs/functions_b.html | 118 +- docs/functions_c.html | 132 +- docs/functions_d.html | 120 +- docs/functions_dup.js | 2 +- docs/functions_e.html | 124 +- docs/functions_enum.html | 75 +- docs/functions_eval.html | 75 +- docs/functions_f.html | 143 +- docs/functions_func.html | 111 +- docs/functions_func.js | 2 +- docs/functions_func_0x7e.html | 227 + docs/functions_func_b.html | 115 +- docs/functions_func_c.html | 127 +- docs/functions_func_d.html | 115 +- docs/functions_func_e.html | 119 +- docs/functions_func_f.html | 129 +- docs/functions_func_g.html | 121 +- docs/functions_func_h.html | 117 +- docs/functions_func_i.html | 111 +- docs/functions_func_l.html | 115 +- docs/functions_func_m.html | 109 +- docs/functions_func_n.html | 107 +- docs/functions_func_o.html | 141 +- docs/functions_func_p.html | 107 +- docs/functions_func_r.html | 105 +- docs/functions_func_s.html | 138 +- docs/functions_func_t.html | 111 +- docs/functions_func_u.html | 105 +- docs/functions_func_v.html | 105 +- docs/functions_func_w.html | 113 +- docs/functions_func_x.html | 105 +- docs/functions_func_y.html | 105 +- docs/functions_func_z.html | 105 +- docs/functions_g.html | 124 +- docs/functions_h.html | 120 +- docs/functions_i.html | 116 +- docs/functions_k.html | 108 +- docs/functions_l.html | 116 +- docs/functions_m.html | 112 +- docs/functions_n.html | 110 +- docs/functions_o.html | 146 +- docs/functions_p.html | 114 +- docs/functions_q.html | 108 +- docs/functions_r.html | 110 +- docs/functions_rela.html | 77 +- docs/functions_s.html | 139 +- docs/functions_t.html | 114 +- docs/functions_type.html | 123 +- docs/functions_u.html | 108 +- docs/functions_v.html | 110 +- docs/functions_vars.html | 105 +- docs/functions_vars_b.html | 105 +- docs/functions_vars_c.html | 109 +- docs/functions_vars_d.html | 107 +- docs/functions_vars_e.html | 105 +- docs/functions_vars_f.html | 108 +- docs/functions_vars_g.html | 105 +- docs/functions_vars_h.html | 105 +- docs/functions_vars_i.html | 108 +- docs/functions_vars_k.html | 105 +- docs/functions_vars_l.html | 105 +- docs/functions_vars_m.html | 105 +- docs/functions_vars_n.html | 105 +- docs/functions_vars_o.html | 105 +- docs/functions_vars_p.html | 108 +- docs/functions_vars_r.html | 108 +- docs/functions_vars_s.html | 105 +- docs/functions_vars_t.html | 105 +- docs/functions_vars_u.html | 105 +- docs/functions_vars_v.html | 106 +- docs/functions_vars_w.html | 105 +- docs/functions_vars_x.html | 105 +- docs/functions_vars_y.html | 105 +- docs/functions_vars_z.html | 105 +- docs/functions_w.html | 116 +- docs/functions_x.html | 108 +- docs/functions_y.html | 108 +- docs/functions_z.html | 108 +- docs/globals.html | 95 +- docs/globals_a.html | 95 +- docs/globals_c.html | 95 +- docs/globals_d.html | 98 +- docs/globals_defs.html | 91 +- docs/globals_e.html | 95 +- docs/globals_enum.html | 72 +- docs/globals_eval.html | 79 +- docs/globals_f.html | 95 +- docs/globals_func.html | 109 +- docs/globals_g.html | 95 +- docs/globals_h.html | 95 +- docs/globals_i.html | 95 +- docs/globals_k.html | 95 +- docs/globals_l.html | 95 +- docs/globals_p.html | 95 +- docs/globals_q.html | 95 +- docs/globals_r.html | 95 +- docs/globals_s.html | 95 +- docs/globals_t.html | 95 +- docs/globals_type.html | 72 +- docs/globals_u.html | 95 +- docs/hierarchy.html | 320 +- docs/hierarchy.js | 9 +- docs/index.html | 162 +- docs/jquery.js | 95 +- docs/livox__def_8h.html | 318 +- docs/livox__def_8h_source.html | 1306 +- docs/livox__sdk_8h.html | 450 +- docs/livox__sdk_8h.js | 1 + docs/livox__sdk_8h_source.html | 594 +- docs/locale_8h.html | 74 +- docs/locale_8h.js | 4 +- docs/locale_8h_source.html | 194 +- docs/log__msg_8h.html | 62 +- docs/log__msg_8h_source.html | 157 +- docs/logger_8h.html | 62 +- docs/logger_8h_source.html | 359 +- docs/logger__impl_8h.html | 78 +- docs/logger__impl_8h_source.html | 640 +- docs/mpmc__blocking__q_8h.html | 62 +- docs/mpmc__blocking__q_8h_source.html | 203 +- docs/msvc__sink_8h.html | 62 +- docs/msvc__sink_8h_source.html | 130 +- docs/namespacefmt.html | 62 +- docs/namespacefmt_1_1v5.html | 2663 +- docs/namespacefmt_1_1v5_1_1internal.html | 3166 +- docs/namespacefmt_1_1v5_1_1internal.js | 5 - docs/namespacelivox.html | 143 +- docs/namespacemembers.html | 101 +- docs/namespacemembers_a.html | 101 +- docs/namespacemembers_b.html | 101 +- docs/namespacemembers_c.html | 107 +- docs/namespacemembers_d.html | 105 +- docs/namespacemembers_e.html | 103 +- docs/namespacemembers_enum.html | 72 +- docs/namespacemembers_eval.html | 127 +- docs/namespacemembers_f.html | 123 +- docs/namespacemembers_func.html | 100 +- docs/namespacemembers_func_a.html | 100 +- docs/namespacemembers_func_b.html | 100 +- docs/namespacemembers_func_c.html | 108 +- docs/namespacemembers_func_d.html | 100 +- docs/namespacemembers_func_e.html | 102 +- docs/namespacemembers_func_f.html | 120 +- docs/namespacemembers_func_g.html | 107 +- docs/namespacemembers_func_h.html | 100 +- docs/namespacemembers_func_i.html | 102 +- docs/namespacemembers_func_j.html | 100 +- docs/namespacemembers_func_l.html | 100 +- docs/namespacemembers_func_m.html | 110 +- docs/namespacemembers_func_n.html | 100 +- docs/namespacemembers_func_o.html | 100 +- docs/namespacemembers_func_p.html | 104 +- docs/namespacemembers_func_r.html | 100 +- docs/namespacemembers_func_s.html | 102 +- docs/namespacemembers_func_t.html | 102 +- docs/namespacemembers_func_u.html | 100 +- docs/namespacemembers_func_v.html | 100 +- docs/namespacemembers_func_w.html | 102 +- docs/namespacemembers_g.html | 108 +- docs/namespacemembers_h.html | 101 +- docs/namespacemembers_i.html | 106 +- docs/namespacemembers_j.html | 101 +- docs/namespacemembers_k.html | 101 +- docs/namespacemembers_l.html | 103 +- docs/namespacemembers_m.html | 116 +- docs/namespacemembers_n.html | 101 +- docs/namespacemembers_o.html | 101 +- docs/namespacemembers_p.html | 105 +- docs/namespacemembers_r.html | 101 +- docs/namespacemembers_s.html | 103 +- docs/namespacemembers_t.html | 103 +- docs/namespacemembers_type.html | 128 +- docs/namespacemembers_u.html | 101 +- docs/namespacemembers_v.html | 101 +- docs/namespacemembers_vars.html | 76 +- docs/namespacemembers_w.html | 103 +- docs/namespaces.html | 62 +- docs/namespaces.js | 7 + docs/namespacespdlog.html | 720 +- docs/namespacespdlog_1_1details.html | 141 +- ...spacespdlog_1_1details_1_1fmt__helper.html | 128 +- docs/namespacespdlog_1_1details_1_1os.html | 292 +- docs/namespacespdlog_1_1level.html | 129 +- docs/namespacespdlog_1_1sinks.html | 254 +- docs/namespacestd.html | 62 +- docs/navtree.css | 7 +- docs/navtree.js | 109 +- docs/navtreedata.js | 52 +- docs/navtreeindex0.js | 148 +- docs/navtreeindex1.js | 278 +- docs/navtreeindex10.js | 138 +- docs/navtreeindex11.js | 62 +- docs/navtreeindex2.js | 112 +- docs/navtreeindex3.js | 62 +- docs/navtreeindex4.js | 28 +- docs/navtreeindex5.js | 104 +- docs/navtreeindex6.js | 56 +- docs/navtreeindex7.js | 132 +- docs/navtreeindex8.js | 76 +- docs/navtreeindex9.js | 44 +- docs/null__mutex_8h.html | 62 +- docs/null__mutex_8h_source.html | 128 +- docs/null__sink_8h.html | 62 +- docs/null__sink_8h_source.html | 135 +- docs/os_8h.html | 88 +- docs/os_8h.js | 8 +- docs/os_8h_source.html | 549 +- docs/ostr_8h.html | 68 +- docs/ostr_8h_source.html | 84 +- docs/ostream_8h.html | 68 +- docs/ostream_8h.js | 2 +- docs/ostream_8h_source.html | 288 +- docs/ostream__sink_8h.html | 62 +- docs/ostream__sink_8h_source.html | 153 +- docs/pattern__formatter_8h.html | 62 +- docs/pattern__formatter_8h_source.html | 1788 +- docs/periodic__worker_8h.html | 62 +- docs/periodic__worker_8h_source.html | 143 +- docs/posix_8h.html | 97 +- docs/posix_8h_source.html | 428 +- docs/printf_8h.html | 98 +- docs/printf_8h.js | 14 +- docs/printf_8h_source.html | 1135 +- docs/protocol_8h.html | 62 +- docs/protocol_8h_source.html | 219 +- docs/ranges_8h.html | 112 +- docs/ranges_8h.js | 20 +- docs/ranges_8h_source.html | 469 +- docs/registry_8h.html | 62 +- docs/registry_8h_source.html | 422 +- docs/resize.js | 187 +- docs/rotating__file__sink_8h.html | 62 +- docs/rotating__file__sink_8h_source.html | 307 +- docs/search/all_0.html | 8 +- docs/search/all_0.js | 2 +- docs/search/all_1.html | 8 +- docs/search/all_1.js | 10 +- docs/search/all_10.html | 8 +- docs/search/all_10.js | 216 +- docs/search/all_11.html | 8 +- docs/search/all_11.js | 199 +- docs/search/all_12.html | 8 +- docs/search/all_12.js | 4 +- docs/search/all_13.html | 8 +- docs/search/all_13.js | 125 +- docs/search/all_14.html | 8 +- docs/search/all_14.js | 389 +- docs/search/all_15.html | 8 +- docs/search/all_15.js | 107 +- docs/search/all_16.html | 8 +- docs/search/all_16.js | 31 +- docs/search/all_17.html | 8 +- docs/search/all_17.js | 48 +- docs/search/all_18.html | 8 +- docs/search/all_18.js | 72 +- docs/search/all_19.html | 8 +- docs/search/all_19.js | 8 +- docs/search/all_1a.html | 8 +- docs/search/all_1a.js | 17 +- docs/search/all_1b.html | 8 +- docs/search/all_1b.js | 13 +- docs/search/all_1c.html | 8 +- docs/search/all_1c.js | 42 +- docs/search/all_2.html | 8 +- docs/search/all_2.js | 161 +- docs/search/all_3.html | 8 +- docs/search/all_3.js | 171 +- docs/search/all_4.html | 8 +- docs/search/all_4.js | 237 +- docs/search/all_5.html | 8 +- docs/search/all_5.js | 187 +- docs/search/all_6.html | 8 +- docs/search/all_6.js | 45 +- docs/search/all_7.html | 8 +- docs/search/all_7.js | 389 +- docs/search/all_8.html | 8 +- docs/search/all_8.js | 139 +- docs/search/all_9.html | 8 +- docs/search/all_9.js | 156 +- docs/search/all_a.html | 8 +- docs/search/all_a.js | 140 +- docs/search/all_b.html | 8 +- docs/search/all_b.js | 2 +- docs/search/all_c.html | 8 +- docs/search/all_c.js | 134 +- docs/search/all_d.html | 8 +- docs/search/all_d.js | 228 +- docs/search/all_e.html | 8 +- docs/search/all_e.js | 113 +- docs/search/all_f.html | 8 +- docs/search/all_f.js | 75 +- docs/search/classes_0.html | 8 +- docs/search/classes_0.js | 38 +- docs/search/classes_1.html | 8 +- docs/search/classes_1.js | 76 +- docs/search/classes_10.html | 8 +- docs/search/classes_10.js | 16 +- docs/search/classes_11.html | 8 +- docs/search/classes_11.js | 2 +- docs/search/classes_12.html | 8 +- docs/search/classes_12.js | 14 +- docs/search/classes_13.html | 8 +- docs/search/classes_13.js | 8 +- docs/search/classes_14.html | 8 +- docs/search/classes_14.js | 2 +- docs/search/classes_15.html | 8 +- docs/search/classes_15.js | 2 +- docs/search/classes_2.html | 8 +- docs/search/classes_2.js | 91 +- docs/search/classes_3.html | 8 +- docs/search/classes_3.js | 32 +- docs/search/classes_4.html | 8 +- docs/search/classes_4.js | 12 +- docs/search/classes_5.html | 8 +- docs/search/classes_5.js | 104 +- docs/search/classes_6.html | 8 +- docs/search/classes_6.js | 18 +- docs/search/classes_7.html | 8 +- docs/search/classes_7.js | 60 +- docs/search/classes_8.html | 8 +- docs/search/classes_8.js | 62 +- docs/search/classes_9.html | 8 +- docs/search/classes_9.js | 46 +- docs/search/classes_a.html | 8 +- docs/search/classes_a.js | 14 +- docs/search/classes_b.html | 8 +- docs/search/classes_b.js | 26 +- docs/search/classes_c.html | 8 +- docs/search/classes_c.js | 6 +- docs/search/classes_d.html | 8 +- docs/search/classes_d.js | 28 +- docs/search/classes_e.html | 8 +- docs/search/classes_e.js | 18 +- docs/search/classes_f.html | 8 +- docs/search/classes_f.js | 56 +- docs/search/defines_0.html | 8 +- docs/search/defines_0.js | 2 +- docs/search/defines_1.html | 8 +- docs/search/defines_1.js | 122 +- docs/search/defines_2.html | 8 +- docs/search/defines_2.js | 4 +- docs/search/defines_3.html | 8 +- docs/search/defines_3.js | 6 +- docs/search/defines_4.html | 8 +- docs/search/defines_4.js | 74 +- docs/search/enums_0.html | 8 +- docs/search/enums_0.js | 6 +- docs/search/enums_1.html | 8 +- docs/search/enums_1.js | 4 +- docs/search/enums_2.html | 8 +- docs/search/enums_2.js | 4 +- docs/search/enums_3.html | 8 +- docs/search/enums_3.js | 2 +- docs/search/enums_4.html | 8 +- docs/search/enums_4.js | 2 +- docs/search/enums_5.html | 8 +- docs/search/enums_5.js | 2 +- docs/search/enums_6.html | 8 +- docs/search/enums_6.js | 12 +- docs/search/enums_7.html | 8 +- docs/search/enums_7.js | 4 +- docs/search/enums_8.html | 8 +- docs/search/enums_8.js | 14 +- docs/search/enums_9.html | 8 +- docs/search/enums_9.js | 6 +- docs/search/enumvalues_0.html | 8 +- docs/search/enumvalues_0.js | 22 +- docs/search/enumvalues_1.html | 8 +- docs/search/enumvalues_1.js | 38 +- docs/search/enumvalues_10.html | 8 +- docs/search/enumvalues_10.js | 36 +- docs/search/enumvalues_11.html | 8 +- docs/search/enumvalues_11.js | 14 +- docs/search/enumvalues_12.html | 8 +- docs/search/enumvalues_12.js | 8 +- docs/search/enumvalues_13.html | 8 +- docs/search/enumvalues_13.js | 4 +- docs/search/enumvalues_14.html | 8 +- docs/search/enumvalues_14.js | 10 +- docs/search/enumvalues_15.html | 8 +- docs/search/enumvalues_15.js | 4 +- docs/search/enumvalues_2.html | 8 +- docs/search/enumvalues_2.js | 26 +- docs/search/enumvalues_3.html | 8 +- docs/search/enumvalues_3.js | 46 +- docs/search/enumvalues_4.html | 8 +- docs/search/enumvalues_4.js | 2 +- docs/search/enumvalues_5.html | 8 +- docs/search/enumvalues_5.js | 10 +- docs/search/enumvalues_6.html | 8 +- docs/search/enumvalues_6.js | 14 +- docs/search/enumvalues_7.html | 8 +- docs/search/enumvalues_7.js | 6 +- docs/search/enumvalues_8.html | 8 +- docs/search/enumvalues_8.js | 18 +- docs/search/enumvalues_9.html | 8 +- docs/search/enumvalues_9.js | 124 +- docs/search/enumvalues_a.html | 8 +- docs/search/enumvalues_a.js | 54 +- docs/search/enumvalues_b.html | 8 +- docs/search/enumvalues_b.js | 34 +- docs/search/enumvalues_c.html | 8 +- docs/search/enumvalues_c.js | 12 +- docs/search/enumvalues_d.html | 8 +- docs/search/enumvalues_d.js | 16 +- docs/search/enumvalues_e.html | 8 +- docs/search/enumvalues_e.js | 26 +- docs/search/enumvalues_f.html | 8 +- docs/search/enumvalues_f.js | 14 +- docs/search/files_0.html | 8 +- docs/search/files_0.js | 10 +- docs/search/files_1.html | 8 +- docs/search/files_1.js | 6 +- docs/search/files_2.html | 8 +- docs/search/files_2.js | 14 +- docs/search/files_3.html | 8 +- docs/search/files_3.js | 4 +- docs/search/files_4.html | 8 +- docs/search/files_4.js | 14 +- docs/search/files_5.html | 8 +- docs/search/files_5.js | 12 +- docs/search/files_6.html | 8 +- docs/search/files_6.js | 4 +- docs/search/files_7.html | 8 +- docs/search/files_7.js | 4 +- docs/search/files_8.html | 8 +- docs/search/files_8.js | 8 +- docs/search/files_9.html | 8 +- docs/search/files_9.js | 10 +- docs/search/files_a.html | 8 +- docs/search/files_a.js | 8 +- docs/search/files_b.html | 8 +- docs/search/files_b.js | 10 +- docs/search/files_c.html | 8 +- docs/search/files_c.js | 6 +- docs/search/files_d.html | 8 +- docs/search/files_d.js | 2 +- docs/search/files_e.html | 8 +- docs/search/files_e.js | 2 +- docs/search/functions_0.html | 8 +- docs/search/functions_0.js | 6 +- docs/search/functions_1.html | 8 +- docs/search/functions_1.js | 66 +- docs/search/functions_10.html | 8 +- docs/search/functions_10.js | 2 +- docs/search/functions_11.html | 8 +- docs/search/functions_11.js | 42 +- docs/search/functions_12.html | 8 +- docs/search/functions_12.js | 138 +- docs/search/functions_13.html | 8 +- docs/search/functions_13.js | 48 +- docs/search/functions_14.html | 8 +- docs/search/functions_14.js | 10 +- docs/search/functions_15.html | 8 +- docs/search/functions_15.js | 22 +- docs/search/functions_16.html | 8 +- docs/search/functions_16.js | 20 +- docs/search/functions_17.html | 8 +- docs/search/functions_17.js | 2 +- docs/search/functions_18.html | 8 +- docs/search/functions_18.js | 2 +- docs/search/functions_19.html | 8 +- docs/search/functions_19.js | 2 +- docs/search/functions_1a.html | 8 +- docs/search/functions_1a.js | 42 +- docs/search/functions_2.html | 8 +- docs/search/functions_2.js | 50 +- docs/search/functions_3.html | 8 +- docs/search/functions_3.js | 90 +- docs/search/functions_4.html | 8 +- docs/search/functions_4.js | 51 +- docs/search/functions_5.html | 8 +- docs/search/functions_5.js | 20 +- docs/search/functions_6.html | 8 +- docs/search/functions_6.js | 110 +- docs/search/functions_7.html | 8 +- docs/search/functions_7.js | 95 +- docs/search/functions_8.html | 8 +- docs/search/functions_8.js | 62 +- docs/search/functions_9.html | 8 +- docs/search/functions_9.js | 38 +- docs/search/functions_a.html | 8 +- docs/search/functions_a.js | 2 +- docs/search/functions_b.html | 8 +- docs/search/functions_b.js | 56 +- docs/search/functions_c.html | 8 +- docs/search/functions_c.js | 34 +- docs/search/functions_d.html | 8 +- docs/search/functions_d.js | 24 +- docs/search/functions_e.html | 8 +- docs/search/functions_e.js | 150 +- docs/search/functions_f.html | 8 +- docs/search/functions_f.js | 80 +- docs/search/mag_sel.png | Bin 465 -> 563 bytes docs/search/namespaces_0.html | 8 +- docs/search/namespaces_0.js | 6 +- docs/search/namespaces_1.html | 8 +- docs/search/namespaces_1.js | 2 +- docs/search/namespaces_2.html | 8 +- docs/search/namespaces_2.js | 14 +- docs/search/nomatches.html | 2 +- docs/search/pages_0.html | 8 +- docs/search/pages_0.js | 2 +- docs/search/related_0.html | 8 +- docs/search/related_0.js | 4 +- docs/search/related_1.html | 8 +- docs/search/related_1.js | 2 +- docs/search/related_2.html | 8 +- docs/search/related_2.js | 4 +- docs/search/related_3.html | 8 +- docs/search/related_3.js | 6 +- docs/search/related_4.html | 8 +- docs/search/related_4.js | 2 +- docs/search/related_5.html | 8 +- docs/search/related_5.js | 16 +- docs/search/related_6.html | 8 +- docs/search/related_6.js | 2 +- docs/search/related_7.html | 8 +- docs/search/related_7.js | 2 +- docs/search/search.css | 12 +- docs/search/search.js | 25 +- docs/search/search_l.png | Bin 567 -> 604 bytes docs/search/search_r.png | Bin 553 -> 612 bytes docs/search/typedefs_0.html | 8 +- docs/search/typedefs_0.js | 2 +- docs/search/typedefs_1.html | 8 +- docs/search/typedefs_1.js | 18 +- docs/search/typedefs_10.html | 8 +- docs/search/typedefs_10.js | 10 +- docs/search/typedefs_11.html | 8 +- docs/search/typedefs_11.js | 30 +- docs/search/typedefs_12.html | 8 +- docs/search/typedefs_12.js | 2 +- docs/search/typedefs_13.html | 8 +- docs/search/typedefs_13.js | 2 +- docs/search/typedefs_14.html | 8 +- docs/search/typedefs_14.js | 2 +- docs/search/typedefs_15.html | 8 +- docs/search/typedefs_15.js | 30 +- docs/search/typedefs_2.html | 8 +- docs/search/typedefs_2.js | 6 +- docs/search/typedefs_3.html | 8 +- docs/search/typedefs_3.js | 11 +- docs/search/typedefs_4.html | 8 +- docs/search/typedefs_4.js | 22 +- docs/search/typedefs_5.html | 8 +- docs/search/typedefs_5.js | 2 +- docs/search/typedefs_6.html | 8 +- docs/search/typedefs_6.js | 12 +- docs/search/typedefs_7.html | 8 +- docs/search/typedefs_7.js | 2 +- docs/search/typedefs_8.html | 8 +- docs/search/typedefs_8.js | 26 +- docs/search/typedefs_9.html | 8 +- docs/search/typedefs_9.js | 7 +- docs/search/typedefs_a.html | 8 +- docs/search/typedefs_a.js | 20 +- docs/search/typedefs_b.html | 8 +- docs/search/typedefs_b.js | 5 +- docs/search/typedefs_c.html | 8 +- docs/search/typedefs_c.js | 4 +- docs/search/typedefs_d.html | 8 +- docs/search/typedefs_d.js | 4 +- docs/search/typedefs_e.html | 8 +- docs/search/typedefs_e.js | 8 +- docs/search/typedefs_f.html | 8 +- docs/search/typedefs_f.js | 2 +- docs/search/variables_0.html | 8 +- docs/search/variables_0.js | 18 +- docs/search/variables_1.html | 8 +- docs/search/variables_1.js | 18 +- docs/search/variables_10.html | 8 +- docs/search/variables_10.js | 52 +- docs/search/variables_11.html | 8 +- docs/search/variables_11.js | 32 +- docs/search/variables_12.html | 8 +- docs/search/variables_12.js | 12 +- docs/search/variables_13.html | 8 +- docs/search/variables_13.js | 12 +- docs/search/variables_14.html | 8 +- docs/search/variables_14.js | 12 +- docs/search/variables_15.html | 8 +- docs/search/variables_15.js | 6 +- docs/search/variables_16.html | 8 +- docs/search/variables_16.js | 12 +- docs/search/variables_17.html | 8 +- docs/search/variables_17.js | 10 +- docs/search/variables_2.html | 8 +- docs/search/variables_2.js | 31 +- docs/search/variables_3.html | 8 +- docs/search/variables_3.js | 38 +- docs/search/variables_4.html | 8 +- docs/search/variables_4.js | 14 +- docs/search/variables_5.html | 8 +- docs/search/variables_5.js | 42 +- docs/search/variables_6.html | 8 +- docs/search/variables_6.js | 12 +- docs/search/variables_7.html | 8 +- docs/search/variables_7.js | 8 +- docs/search/variables_8.html | 8 +- docs/search/variables_8.js | 16 +- docs/search/variables_9.html | 8 +- docs/search/variables_9.js | 6 +- docs/search/variables_a.html | 8 +- docs/search/variables_a.js | 28 +- docs/search/variables_b.html | 8 +- docs/search/variables_b.js | 26 +- docs/search/variables_c.html | 8 +- docs/search/variables_c.js | 10 +- docs/search/variables_d.html | 8 +- docs/search/variables_d.js | 26 +- docs/search/variables_e.html | 8 +- docs/search/variables_e.js | 48 +- docs/search/variables_f.html | 8 +- docs/search/variables_f.js | 43 +- docs/sink_8h.html | 62 +- docs/sink_8h_source.html | 160 +- docs/spdlog_8h.html | 198 +- docs/spdlog_8h.js | 18 +- docs/spdlog_8h_source.html | 554 +- docs/stdout__color__sinks_8h.html | 62 +- docs/stdout__color__sinks_8h_source.html | 160 +- docs/stdout__sinks_8h.html | 62 +- docs/stdout__sinks_8h_source.html | 212 +- .../struct_broadcast_device_info-members.html | 64 +- docs/struct_broadcast_device_info.html | 90 +- docs/struct_connected_lidar_info-members.html | 64 +- docs/struct_connected_lidar_info.html | 96 +- .../struct_device_broadcast_code-members.html | 64 +- docs/struct_device_broadcast_code.html | 72 +- docs/struct_device_info-members.html | 81 +- docs/struct_device_info.html | 153 +- docs/struct_device_info.js | 1 + ...t_device_information_response-members.html | 64 +- docs/struct_device_information_response.html | 78 +- ...rinsic_parameter_request_item-members.html | 64 +- ...ruct_extrinsic_parameter_request_item.html | 108 +- ...insic_parameter_response_item-members.html | 64 +- ...uct_extrinsic_parameter_response_item.html | 114 +- ...ruct_fan_control_request_item-members.html | 64 +- docs/struct_fan_control_request_item.html | 78 +- ...t_get_device_ip_mode_response-members.html | 64 +- docs/struct_get_device_ip_mode_response.html | 96 +- ...ct_get_fan_state_request_item-members.html | 64 +- docs/struct_get_fan_state_request_item.html | 72 +- ...t_get_fan_state_response_item-members.html | 64 +- docs/struct_get_fan_state_response_item.html | 84 +- ...u_push_frequency_request_item-members.html | 64 +- ...t_get_imu_push_frequency_request_item.html | 72 +- ..._push_frequency_response_item-members.html | 64 +- ..._get_imu_push_frequency_response_item.html | 84 +- ...loud_return_mode_request_item-members.html | 64 +- ..._point_cloud_return_mode_request_item.html | 72 +- ...oud_return_mode_response_item-members.html | 64 +- ...point_cloud_return_mode_response_item.html | 84 +- docs/struct_handshake_request-members.html | 64 +- docs/struct_handshake_request.html | 90 +- docs/struct_heartbeat_response-members.html | 64 +- docs/struct_heartbeat_response.html | 90 +- ...ub_control_slot_power_request-members.html | 64 +- ...struct_hub_control_slot_power_request.html | 78 +- docs/struct_hub_error_code-members.html | 64 +- docs/struct_hub_error_code.html | 108 +- ...truct_hub_fan_control_request-members.html | 64 +- docs/struct_hub_fan_control_request.html | 78 +- ...ruct_hub_fan_control_response-members.html | 64 +- docs/struct_hub_fan_control_response.html | 84 +- ...t_extrinsic_parameter_request-members.html | 64 +- ...t_hub_get_extrinsic_parameter_request.html | 78 +- ..._extrinsic_parameter_response-members.html | 64 +- ..._hub_get_extrinsic_parameter_response.html | 84 +- ...uct_hub_get_fan_state_request-members.html | 64 +- docs/struct_hub_get_fan_state_request.html | 78 +- ...ct_hub_get_fan_state_response-members.html | 64 +- docs/struct_hub_get_fan_state_response.html | 84 +- ...et_imu_push_frequency_request-members.html | 64 +- ...ct_hub_get_imu_push_frequency_request.html | 78 +- ...t_imu_push_frequency_response-members.html | 64 +- ...t_hub_get_imu_push_frequency_response.html | 84 +- ...int_cloud_return_mode_request-members.html | 64 +- ...b_get_point_cloud_return_mode_request.html | 78 +- ...nt_cloud_return_mode_response-members.html | 64 +- ..._get_point_cloud_return_mode_response.html | 84 +- ...ry_lidar_information_response-members.html | 64 +- ..._hub_query_lidar_information_response.html | 84 +- ...b_query_lidar_status_response-members.html | 64 +- ...truct_hub_query_lidar_status_response.html | 84 +- ...ry_slot_power_status_response-members.html | 64 +- ..._hub_query_slot_power_status_response.html | 78 +- ...hub_rain_fog_suppress_request-members.html | 64 +- .../struct_hub_rain_fog_suppress_request.html | 78 +- ...ub_rain_fog_suppress_response-members.html | 64 +- ...struct_hub_rain_fog_suppress_response.html | 84 +- ...t_extrinsic_parameter_request-members.html | 64 +- ...t_hub_set_extrinsic_parameter_request.html | 78 +- ..._extrinsic_parameter_response-members.html | 64 +- ..._hub_set_extrinsic_parameter_response.html | 84 +- ...et_imu_push_frequency_request-members.html | 64 +- ...ct_hub_set_imu_push_frequency_request.html | 78 +- ...t_imu_push_frequency_response-members.html | 64 +- ...t_hub_set_imu_push_frequency_response.html | 84 +- docs/struct_hub_set_mode_request-members.html | 64 +- docs/struct_hub_set_mode_request.html | 78 +- .../struct_hub_set_mode_response-members.html | 64 +- docs/struct_hub_set_mode_response.html | 84 +- ...int_cloud_return_mode_request-members.html | 64 +- ...b_set_point_cloud_return_mode_request.html | 78 +- ...nt_cloud_return_mode_response-members.html | 64 +- ..._set_point_cloud_return_mode_response.html | 84 +- docs/struct_lidar_error_code-members.html | 64 +- docs/struct_lidar_error_code.html | 144 +- ..._extrinsic_parameter_response-members.html | 64 +- ...idar_get_extrinsic_parameter_response.html | 108 +- ..._lidar_get_fan_state_response-members.html | 64 +- docs/struct_lidar_get_fan_state_response.html | 78 +- ...t_imu_push_frequency_response-members.html | 64 +- ...lidar_get_imu_push_frequency_response.html | 78 +- ...nt_cloud_return_mode_response-members.html | 64 +- ..._get_point_cloud_return_mode_response.html | 78 +- ...truct_lidar_mode_request_item-members.html | 64 +- docs/struct_lidar_mode_request_item.html | 78 +- ...t_extrinsic_parameter_request-members.html | 64 +- ...lidar_set_extrinsic_parameter_request.html | 102 +- ...dar_set_utc_sync_time_request-members.html | 64 +- ...truct_lidar_set_utc_sync_time_request.html | 96 +- docs/struct_lidar_state_item-members.html | 64 +- docs/struct_lidar_state_item.html | 90 +- ...t_livox_dual_extend_raw_point-members.html | 64 +- docs/struct_livox_dual_extend_raw_point.html | 126 +- ...livox_dual_extend_spher_point-members.html | 64 +- .../struct_livox_dual_extend_spher_point.html | 122 +- docs/struct_livox_eth_packet-members.html | 64 +- docs/struct_livox_eth_packet.html | 120 +- ...struct_livox_extend_raw_point-members.html | 64 +- docs/struct_livox_extend_raw_point.html | 96 +- ...ruct_livox_extend_spher_point-members.html | 64 +- docs/struct_livox_extend_spher_point.html | 102 +- docs/struct_livox_imu_point-members.html | 64 +- docs/struct_livox_imu_point.html | 102 +- docs/struct_livox_point-members.html | 64 +- docs/struct_livox_point.html | 90 +- docs/struct_livox_raw_point-members.html | 64 +- docs/struct_livox_raw_point.html | 90 +- docs/struct_livox_sdk_version-members.html | 64 +- docs/struct_livox_sdk_version.html | 87 +- docs/struct_livox_spher_point-members.html | 64 +- docs/struct_livox_spher_point.html | 96 +- ...ain_fog_suppress_request_item-members.html | 64 +- ...struct_rain_fog_suppress_request_item.html | 78 +- docs/struct_return_code-members.html | 64 +- docs/struct_return_code.html | 78 +- ...t_set_device_i_p_mode_request-members.html | 64 +- docs/struct_set_device_i_p_mode_request.html | 78 +- ...u_push_frequency_request_item-members.html | 64 +- ...t_set_imu_push_frequency_request_item.html | 78 +- ...loud_return_mode_request_item-members.html | 64 +- ..._point_cloud_return_mode_request_item.html | 78 +- ...static_device_ip_mode_request-members.html | 64 +- ...uct_set_static_device_ip_mode_request.html | 84 +- ...bytes__range_3_01_t_01_4_01_4-members.html | 64 +- ...ails_1_1bytes__range_3_01_t_01_4_01_4.html | 120 +- ...tructfmt_1_1v5_1_1align__spec-members.html | 70 +- docs/structfmt_1_1v5_1_1align__spec.html | 126 +- docs/structfmt_1_1v5_1_1align__spec.js | 6 +- .../structfmt_1_1v5_1_1arg__join-members.html | 64 +- docs/structfmt_1_1v5_1_1arg__join.html | 90 +- ...t__context_1_1formatter__type-members.html | 64 +- ...c__format__context_1_1formatter__type.html | 72 +- ...1_1v5_1_1basic__format__specs-members.html | 72 +- ...ructfmt_1_1v5_1_1basic__format__specs.html | 94 +- ...f__context_1_1formatter__type-members.html | 64 +- ...c__printf__context_1_1formatter__type.html | 74 +- ..._1_1basic__printf__context__t-members.html | 64 +- ...mt_1_1v5_1_1basic__printf__context__t.html | 72 +- ...1_1int__writer_1_1bin__writer-members.html | 66 +- ..._writer_1_1int__writer_1_1bin__writer.html | 96 +- ...c__writer_1_1int__writer_1_1bin__writer.js | 2 +- ...1_1int__writer_1_1dec__writer-members.html | 66 +- ..._writer_1_1int__writer_1_1dec__writer.html | 96 +- ...c__writer_1_1int__writer_1_1dec__writer.js | 2 +- ...1_1int__writer_1_1hex__writer-members.html | 66 +- ..._writer_1_1int__writer_1_1hex__writer.html | 96 +- ...c__writer_1_1int__writer_1_1hex__writer.js | 2 +- ...1_1int__writer_1_1num__writer-members.html | 66 +- ..._writer_1_1int__writer_1_1num__writer.html | 104 +- ...c__writer_1_1int__writer_1_1num__writer.js | 2 +- ...tfmt_1_1v5_1_1buffer__context-members.html | 64 +- docs/structfmt_1_1v5_1_1buffer__context.html | 72 +- docs/structfmt_1_1v5_1_1char__t.html | 70 +- docs/structfmt_1_1v5_1_1compile__string.html | 66 +- docs/structfmt_1_1v5_1_1convert__to__int.html | 70 +- docs/structfmt_1_1v5_1_1convert__to__int.png | Bin 1520 -> 1517 bytes ...1_t_00_01_char_00_01void_01_4-members.html | 64 +- ..._int_3_01_t_00_01_char_00_01void_01_4.html | 78 +- ..._1_1v5_1_1core__format__specs-members.html | 66 +- ...tructfmt_1_1v5_1_1core__format__specs.html | 106 +- .../structfmt_1_1v5_1_1core__format__specs.js | 2 +- ...1_1v5_1_1float__spec__handler-members.html | 64 +- ...ructfmt_1_1v5_1_1float__spec__handler.html | 114 +- ...ructfmt_1_1v5_1_1format__args-members.html | 70 +- docs/structfmt_1_1v5_1_1format__args.html | 94 +- docs/structfmt_1_1v5_1_1format__args.js | 2 +- ...tfmt_1_1v5_1_1format__args__t-members.html | 64 +- docs/structfmt_1_1v5_1_1format__args__t.html | 72 +- ...t_1_1v5_1_1format__context__t-members.html | 64 +- ...structfmt_1_1v5_1_1format__context__t.html | 72 +- ...tfmt_1_1v5_1_1format__handler-members.html | 64 +- docs/structfmt_1_1v5_1_1format__handler.html | 182 +- docs/structfmt_1_1v5_1_1format__handler.js | 2 +- ..._1_1v5_1_1format__to__n__args-members.html | 64 +- ...tructfmt_1_1v5_1_1format__to__n__args.html | 72 +- ...1v5_1_1format__to__n__context-members.html | 64 +- ...ctfmt_1_1v5_1_1format__to__n__context.html | 72 +- ..._1v5_1_1format__to__n__result-members.html | 64 +- ...uctfmt_1_1v5_1_1format__to__n__result.html | 78 +- .../structfmt_1_1v5_1_1formatter-members.html | 64 +- docs/structfmt_1_1v5_1_1formatter.html | 74 +- ...fmt_129f3c94877dea4ec3d39c173a7bba127.html | 84 +- ...fmt_165831b345301abd8a34fe63a7b6bd976.html | 64 +- ...al_1_1f973664f75bfeb268a178cca3627036.html | 64 +- ...al_1_8f67657c5a3f8dbcc6236217f928ccb5.html | 78 +- ...al_1_911fdfea5f2db8de801caa1552f2e4ef.html | 64 +- ...al_1_a6b64300f4f7ee1d24250c7c28e1fdc2.html | 78 +- ...fmt_102216fc8d8be12d4442006c3947ddce9.html | 84 +- ...fmt_1973a2aadb951058c325e7f27789142aa.html | 64 +- ..._01_char_01_4_00_01_char_01_4-members.html | 64 +- ...01_it_00_01_char_01_4_00_01_char_01_4.html | 78 +- ...1_period_01_4_00_01_char_01_4-members.html | 64 +- ...rep_00_01_period_01_4_00_01_char_01_4.html | 84 +- ...3_01std_1_1tm_00_01_char_01_4-members.html | 64 +- ...rmatter_3_01std_1_1tm_00_01_char_01_4.html | 84 +- ...fmt_1_1v5_1_1formatting__base-members.html | 64 +- docs/structfmt_1_1v5_1_1formatting__base.html | 78 +- ...mt_1_1v5_1_1formatting__range-members.html | 64 +- .../structfmt_1_1v5_1_1formatting__range.html | 118 +- ...mt_1_1v5_1_1formatting__tuple-members.html | 64 +- .../structfmt_1_1v5_1_1formatting__tuple.html | 108 +- ...ternal_1_1ansi__color__escape-members.html | 66 +- ...v5_1_1internal_1_1ansi__color__escape.html | 94 +- ..._1v5_1_1internal_1_1ansi__color__escape.js | 2 +- ...__base_1_1char__spec__handler-members.html | 64 +- ...ormatter__base_1_1char__spec__handler.html | 102 +- ...ase_1_1cstring__spec__handler-members.html | 64 +- ...atter__base_1_1cstring__spec__handler.html | 102 +- ...1_1v5_1_1internal_1_1arg__ref-members.html | 64 +- ...ructfmt_1_1v5_1_1internal_1_1arg__ref.html | 127 +- ...ructfmt_1_1v5_1_1internal_1_1auto__id.html | 66 +- ...v5_1_1internal_1_1basic__data-members.html | 64 +- ...tfmt_1_1v5_1_1internal_1_1basic__data.html | 164 +- ..._1_1internal_1_1char__counter-members.html | 64 +- ...mt_1_1v5_1_1internal_1_1char__counter.html | 172 +- ...tfmt_1_1v5_1_1internal_1_1char__counter.js | 4 +- ..._1_1v5_1_1internal_1_1char__t-members.html | 64 +- ...tructfmt_1_1v5_1_1internal_1_1char__t.html | 78 +- ...fmt_1_1v5_1_1internal_1_1char__traits.html | 66 +- ...1_1char__traits_3_01char_01_4-members.html | 64 +- ...nternal_1_1char__traits_3_01char_01_4.html | 74 +- ...har__traits_3_01wchar__t_01_4-members.html | 64 +- ...nal_1_1char__traits_3_01wchar__t_01_4.html | 74 +- ..._1_1v5_1_1internal_1_1checked-members.html | 64 +- ...tructfmt_1_1v5_1_1internal_1_1checked.html | 72 +- ..._1_1internal_1_1checked__args-members.html | 70 +- ...mt_1_1v5_1_1internal_1_1checked__args.html | 102 +- ...tfmt_1_1v5_1_1internal_1_1checked__args.js | 4 +- ...al_1_1chrono__format__checker-members.html | 64 +- ..._1internal_1_1chrono__format__checker.html | 204 +- ...internal_1_1chrono__formatter-members.html | 74 +- ..._1v5_1_1internal_1_1chrono__formatter.html | 368 +- ..._1_1v5_1_1internal_1_1chrono__formatter.js | 10 +- ...v5_1_1internal_1_1color__type-members.html | 64 +- ...tfmt_1_1v5_1_1internal_1_1color__type.html | 100 +- ...v5_1_1internal_1_1conditional__helper.html | 66 +- ..._1_1internal_1_1custom__value-members.html | 64 +- ...mt_1_1v5_1_1internal_1_1custom__value.html | 78 +- ...1v5_1_1internal_1_1dummy__int-members.html | 66 +- ...ctfmt_1_1v5_1_1internal_1_1dummy__int.html | 82 +- ...ructfmt_1_1v5_1_1internal_1_1dummy__int.js | 2 +- ...ternal_1_1dummy__string__view-members.html | 64 +- ...v5_1_1internal_1_1dummy__string__view.html | 72 +- ...nal_1_1dynamic__format__specs-members.html | 72 +- ...1_1internal_1_1dynamic__format__specs.html | 100 +- ...1_1internal_1_1error__handler-members.html | 64 +- ...t_1_1v5_1_1internal_1_1error__handler.html | 90 +- ...fmt_1_1v5_1_1internal_1_1fill-members.html | 66 +- docs/structfmt_1_1v5_1_1internal_1_1fill.html | 82 +- docs/structfmt_1_1v5_1_1internal_1_1fill.js | 2 +- ...fmt_1_1v5_1_1internal_1_1format__type.html | 70 +- ...tfmt_1_1v5_1_1internal_1_1format__type.png | Bin 1324 -> 1318 bytes ...ructfmt_1_1v5_1_1internal_1_1function.html | 66 +- ...nternal_1_1function_1_1result-members.html | 64 +- ...1v5_1_1internal_1_1function_1_1result.html | 72 +- ...ternal_1_1gen__digits__params-members.html | 64 +- ...v5_1_1internal_1_1gen__digits__params.html | 90 +- ..._1v5_1_1internal_1_1get__type-members.html | 64 +- ...uctfmt_1_1v5_1_1internal_1_1get__type.html | 78 +- ...v5_1_1internal_1_1id__adapter-members.html | 64 +- ...tfmt_1_1v5_1_1internal_1_1id__adapter.html | 148 +- ...uctfmt_1_1v5_1_1internal_1_1id__adapter.js | 2 +- ...fmt_1_1v5_1_1internal_1_1init-members.html | 66 +- docs/structfmt_1_1v5_1_1internal_1_1init.html | 94 +- docs/structfmt_1_1v5_1_1internal_1_1init.js | 2 +- ...5_1_1internal_1_1int__checker-members.html | 64 +- ...fmt_1_1v5_1_1internal_1_1int__checker.html | 130 +- ...ctfmt_1_1v5_1_1internal_1_1int__checker.js | 4 +- ...1_1int__checker_3_01true_01_4-members.html | 64 +- ...nternal_1_1int__checker_3_01true_01_4.html | 126 +- ...1internal_1_1int__checker_3_01true_01_4.js | 4 +- ...tfmt_1_1v5_1_1internal_1_1int__traits.html | 66 +- ...v5_1_1internal_1_1is__integer-members.html | 64 +- ...tfmt_1_1v5_1_1internal_1_1is__integer.html | 75 +- ...sic__string__view_3_01_char_01_4_01_4.html | 70 +- ...tfmt_1_1v5_1_1internal_1_1is__range__.html | 70 +- ...ctfmt_1_1v5_1_1internal_1_1is__string.html | 70 +- ...uctfmt_1_1v5_1_1internal_1_1is__string.png | Bin 1599 -> 1583 bytes ...3_01const_01std_1_1_f_i_l_e_01_5_01_4.html | 70 +- ..._string_3_01std_1_1_f_i_l_e_01_5_01_4.html | 70 +- ...fmt_1_1v5_1_1internal_1_1it__category.html | 70 +- ..._1_1i55f37030f49edbf93d30ce405dc090ef.html | 64 +- ..._1_1id61388ae7521fb5f9bdb01fd14083b7f.html | 72 +- ...it__category_3_01_t_01_5_01_4-members.html | 64 +- ...rnal_1_1it__category_3_01_t_01_5_01_4.html | 72 +- ...1internal_1_1make__unsigned__or__bool.html | 70 +- ...igned__or__bool_3_01bool_01_4-members.html | 64 +- ...ake__unsigned__or__bool_3_01bool_01_4.html | 72 +- ...1v5_1_1internal_1_1named__arg-members.html | 68 +- ...ctfmt_1_1v5_1_1internal_1_1named__arg.html | 94 +- ...1internal_1_1named__arg__base-members.html | 68 +- ...1_1v5_1_1internal_1_1named__arg__base.html | 108 +- ...t_1_1v5_1_1internal_1_1named__arg__base.js | 4 +- ..._1v5_1_1internal_1_1needs__conversion.html | 70 +- ...5_1_1internal_1_1no__formatter__error.html | 70 +- ...nternal_1_1no__thousands__sep-members.html | 64 +- ...1v5_1_1internal_1_1no__thousands__sep.html | 87 +- docs/structfmt_1_1v5_1_1internal_1_1null.html | 66 +- ...nternal_1_1precision__adapter-members.html | 64 +- ...1v5_1_1internal_1_1precision__adapter.html | 154 +- ...1_1v5_1_1internal_1_1precision__adapter.js | 2 +- ...internal_1_1prettify__handler-members.html | 64 +- ..._1v5_1_1internal_1_1prettify__handler.html | 196 +- ..._1_1v5_1_1internal_1_1prettify__handler.js | 4 +- ...ctfmt_1_1v5_1_1internal_1_1result__of.html | 66 +- ..._of_3_01_f_07_args_8_8_8_08_4-members.html | 64 +- ...1result__of_3_01_f_07_args_8_8_8_08_4.html | 72 +- ..._1_1internal_1_1string__value-members.html | 64 +- ...mt_1_1v5_1_1internal_1_1string__value.html | 78 +- ...5_1_1internal_1_1test__stream-members.html | 67 +- ...fmt_1_1v5_1_1internal_1_1test__stream.html | 70 +- ...t_1_1v5_1_1internal_1_1void__-members.html | 64 +- ...structfmt_1_1v5_1_1internal_1_1void__.html | 72 +- ...1_1internal_1_1width__adapter-members.html | 64 +- ...t_1_1v5_1_1internal_1_1width__adapter.html | 154 +- ...fmt_1_1v5_1_1internal_1_1width__adapter.js | 2 +- ...tructfmt_1_1v5_1_1is__compile__string.html | 70 +- .../structfmt_1_1v5_1_1is__constructible.html | 70 +- docs/structfmt_1_1v5_1_1is__contiguous.html | 70 +- ..._1_1basic__buffer_3_01_char_01_4_01_4.html | 70 +- ..._1_1basic__string_3_01_char_01_4_01_4.html | 70 +- .../structfmt_1_1v5_1_1is__range-members.html | 64 +- docs/structfmt_1_1v5_1_1is__range.html | 77 +- ...tfmt_1_1v5_1_1is__tuple__like-members.html | 64 +- docs/structfmt_1_1v5_1_1is__tuple__like.html | 77 +- docs/structfmt_1_1v5_1_1monostate.html | 66 +- ...mt_1_1v5_1_1printf__formatter-members.html | 64 +- .../structfmt_1_1v5_1_1printf__formatter.html | 78 +- docs/structfmt_1_1v5_1_1rgb-members.html | 64 +- docs/structfmt_1_1v5_1_1rgb.html | 108 +- ...uctfmt_1_1v5_1_1wformat__args-members.html | 70 +- docs/structfmt_1_1v5_1_1wformat__args.html | 94 +- docs/structfmt_1_1v5_1_1wformat__args.js | 2 +- docs/structlivox_1_1_comm_packet-members.html | 64 +- docs/structlivox_1_1_comm_packet.html | 144 +- docs/structlivox_1_1_port_cache-members.html | 64 +- docs/structlivox_1_1_port_cache.html | 90 +- ...pdlog_1_1async__factory__impl-members.html | 66 +- .../structspdlog_1_1async__factory__impl.html | 78 +- docs/structspdlog_1_1async__factory__impl.js | 2 +- ...dlog_1_1details_1_1async__msg-members.html | 64 +- ...structspdlog_1_1details_1_1async__msg.html | 158 +- ..._1_1details_1_1console__mutex-members.html | 64 +- ...ctspdlog_1_1details_1_1console__mutex.html | 78 +- ...details_1_1console__nullmutex-members.html | 64 +- ...dlog_1_1details_1_1console__nullmutex.html | 78 +- ...1_1details_1_1console__stderr-members.html | 64 +- ...tspdlog_1_1details_1_1console__stderr.html | 72 +- ...1_1details_1_1console__stdout-members.html | 64 +- ...tspdlog_1_1details_1_1console__stdout.html | 72 +- ...spdlog_1_1details_1_1log__msg-members.html | 64 +- docs/structspdlog_1_1details_1_1log__msg.html | 136 +- ...1details_1_1null__atomic__int-members.html | 66 +- ...pdlog_1_1details_1_1null__atomic__int.html | 98 +- ...tspdlog_1_1details_1_1null__atomic__int.js | 2 +- ...log_1_1details_1_1null__mutex-members.html | 64 +- ...tructspdlog_1_1details_1_1null__mutex.html | 84 +- ...g_1_1details_1_1padding__info-members.html | 66 +- ...uctspdlog_1_1details_1_1padding__info.html | 113 +- ...tructspdlog_1_1details_1_1padding__info.js | 2 +- ..._1daily__filename__calculator-members.html | 64 +- ...1sinks_1_1daily__filename__calculator.html | 72 +- docs/structspdlog_1_1source__loc-members.html | 64 +- docs/structspdlog_1_1source__loc.html | 108 +- ...pdlog_1_1synchronous__factory-members.html | 66 +- .../structspdlog_1_1synchronous__factory.html | 78 +- docs/structspdlog_1_1synchronous__factory.js | 2 +- docs/syslog__sink_8h.html | 62 +- docs/syslog__sink_8h_source.html | 199 +- docs/tabs.css | 61 +- docs/thread__pool_8h.html | 62 +- docs/thread__pool_8h_source.html | 414 +- docs/time_8h.html | 68 +- docs/time_8h_source.html | 284 +- docs/tweakme_8h.html | 62 +- docs/tweakme_8h_source.html | 178 +- docs/union_error_message-members.html | 64 +- docs/union_error_message.html | 84 +- docs/union_status_union-members.html | 64 +- docs/union_status_union.html | 78 +- ..._1color__type_1_1color__union-members.html | 64 +- ...ternal_1_1color__type_1_1color__union.html | 78 +- docs/version_8h.html | 86 +- docs/version_8h_source.html | 76 +- docs/wincolor__sink_8h.html | 62 +- docs/wincolor__sink_8h_source.html | 283 +- sample/hub/CMakeLists.txt | 8 + sample/hub_lvx_file/CMakeLists.txt | 8 + sample/lidar/CMakeLists.txt | 8 + sample/lidar_lvx_file/CMakeLists.txt | 8 + sample_cc/hub/CMakeLists.txt | 8 + sample_cc/lidar/CMakeLists.txt | 8 + sample_cc/lidar_utc_sync/CMakeLists.txt | 14 +- sample_cc/trouble_shooting/CMakeLists.txt | 10 +- sdk_core/CMakeLists.txt | 48 +- sdk_core/include/livox_def.h | 23 +- sdk_core/include/livox_sdk.h | 9 +- sdk_core/src/base/command_callback.h | 34 +- sdk_core/src/base/io_loop.cpp | 20 +- sdk_core/src/base/io_loop.h | 12 +- sdk_core/src/base/io_thread.h | 6 +- sdk_core/src/base/logging.cpp | 9 +- sdk_core/src/base/logging.h | 1 + sdk_core/src/base/network_util.cpp | 4 +- sdk_core/src/base/thread_base.h | 4 +- .../src/command_handler/command_channel.cpp | 10 +- .../src/command_handler/command_channel.h | 9 +- .../src/command_handler/command_handler.cpp | 9 +- .../src/command_handler/command_handler.h | 13 +- sdk_core/src/command_handler/command_impl.cpp | 25 +- .../src/command_handler/hub_command_handler.h | 4 +- .../command_handler/lidar_command_handler.cpp | 4 +- .../command_handler/lidar_command_handler.h | 4 +- sdk_core/src/data_handler/data_handler.h | 16 +- sdk_core/src/data_handler/hub_data_handler.h | 4 +- .../src/data_handler/lidar_data_handler.cpp | 13 +- .../src/data_handler/lidar_data_handler.h | 11 +- sdk_core/src/device_discovery.cpp | 19 +- sdk_core/src/device_discovery.h | 10 +- sdk_core/src/device_manager.cpp | 81 +- sdk_core/src/device_manager.h | 25 +- sdk_core/src/livox_sdk.cpp | 4 + third_party/apr/apr-1.6.5/CHANGES | 157 + third_party/apr/apr-1.6.5/CMakeLists.txt | 431 + third_party/apr/apr-1.6.5/LICENSE | 341 + third_party/apr/apr-1.6.5/Makefile.in | 151 + third_party/apr/apr-1.6.5/Makefile.win | 171 + third_party/apr/apr-1.6.5/NOTICE | 15 + third_party/apr/apr-1.6.5/NWGNUmakefile | 434 + third_party/apr/apr-1.6.5/README | 167 + third_party/apr/apr-1.6.5/README.cmake | 112 + third_party/apr/apr-1.6.5/apr-config.in | 251 + third_party/apr/apr-1.6.5/apr.dep | 1916 + third_party/apr/apr-1.6.5/apr.dsp | 818 + third_party/apr/apr-1.6.5/apr.dsw | 101 + third_party/apr/apr-1.6.5/apr.mak | 1508 + third_party/apr/apr-1.6.5/apr.pc.in | 11 + third_party/apr/apr-1.6.5/apr.spec | 100 + .../apr/apr-1.6.5/atomic/netware/apr_atomic.c | 75 + .../apr/apr-1.6.5/atomic/os390/atomic.c | 137 + .../apr/apr-1.6.5/atomic/unix/builtins.c | 81 + third_party/apr/apr-1.6.5/atomic/unix/ia32.c | 127 + third_party/apr/apr-1.6.5/atomic/unix/mutex.c | 205 + third_party/apr/apr-1.6.5/atomic/unix/ppc.c | 207 + third_party/apr/apr-1.6.5/atomic/unix/s390.c | 155 + .../apr/apr-1.6.5/atomic/unix/solaris.c | 79 + .../apr/apr-1.6.5/atomic/win32/apr_atomic.c | 113 + third_party/apr/apr-1.6.5/build-outputs.mk | 324 + third_party/apr/apr-1.6.5/build.conf | 29 + third_party/apr/apr-1.6.5/build/MakeEtags | 41 + .../apr/apr-1.6.5/build/NWGNUenvironment.inc | 365 + third_party/apr/apr-1.6.5/build/NWGNUhead.inc | 96 + third_party/apr/apr-1.6.5/build/NWGNUmakefile | 101 + third_party/apr/apr-1.6.5/build/NWGNUtail.inc | 373 + third_party/apr/apr-1.6.5/build/PrintPath | 130 + third_party/apr/apr-1.6.5/build/aplibtool.c | 750 + third_party/apr/apr-1.6.5/build/apr_common.m4 | 990 + third_party/apr/apr-1.6.5/build/apr_hints.m4 | 517 + .../apr/apr-1.6.5/build/apr_network.m4 | 994 + .../apr/apr-1.6.5/build/apr_rules.mk.in | 212 + .../apr/apr-1.6.5/build/apr_threads.m4 | 283 + third_party/apr/apr-1.6.5/build/apr_win32.m4 | 33 + third_party/apr/apr-1.6.5/build/aprapp.dep | 32 + third_party/apr/apr-1.6.5/build/aprapp.dsp | 191 + third_party/apr/apr-1.6.5/build/aprapp.mak | 614 + third_party/apr/apr-1.6.5/build/buildcheck.sh | 70 + third_party/apr/apr-1.6.5/build/config.guess | 1466 + third_party/apr/apr-1.6.5/build/config.sub | 1848 + third_party/apr/apr-1.6.5/build/cvtdsp.pl | 679 + third_party/apr/apr-1.6.5/build/find_apr.m4 | 202 + .../apr/apr-1.6.5/build/fixwin32mak.pl | 167 + third_party/apr/apr-1.6.5/build/gen-build.py | 230 + .../apr/apr-1.6.5/build/get-version.sh | 37 + third_party/apr/apr-1.6.5/build/install.sh | 112 + third_party/apr/apr-1.6.5/build/jlibtool.c | 2056 + third_party/apr/apr-1.6.5/build/libaprapp.dep | 63 + third_party/apr/apr-1.6.5/build/libaprapp.dsp | 195 + third_party/apr/apr-1.6.5/build/libaprapp.mak | 632 + third_party/apr/apr-1.6.5/build/libtool.m4 | 8372 ++++ third_party/apr/apr-1.6.5/build/lineends.pl | 150 + third_party/apr/apr-1.6.5/build/ltmain.sh | 11147 ++++++ third_party/apr/apr-1.6.5/build/ltoptions.m4 | 437 + third_party/apr/apr-1.6.5/build/ltsugar.m4 | 124 + third_party/apr/apr-1.6.5/build/ltversion.m4 | 23 + .../apr/apr-1.6.5/build/lt~obsolete.m4 | 99 + .../apr/apr-1.6.5/build/make_exports.awk | 150 + .../apr/apr-1.6.5/build/make_nw_export.awk | 108 + .../apr/apr-1.6.5/build/make_var_export.awk | 59 + third_party/apr/apr-1.6.5/build/mkdir.sh | 43 + third_party/apr/apr-1.6.5/build/nw_export.inc | 52 + .../apr/apr-1.6.5/build/nw_make_header.awk | 27 + third_party/apr/apr-1.6.5/build/nw_ver.awk | 56 + third_party/apr/apr-1.6.5/build/pkg/README | 20 + .../apr/apr-1.6.5/build/pkg/buildpkg.sh | 72 + .../apr/apr-1.6.5/build/pkg/pkginfo.in | 11 + third_party/apr/apr-1.6.5/build/preaprapp.dsp | 179 + .../apr/apr-1.6.5/build/prelibaprapp.dsp | 179 + .../apr/apr-1.6.5/build/rpm/apr.spec.in | 100 + third_party/apr/apr-1.6.5/build/run-gcov.sh | 130 + third_party/apr/apr-1.6.5/build/win32ver.awk | 124 + third_party/apr/apr-1.6.5/buildconf | 134 + third_party/apr/apr-1.6.5/config.layout | 232 + third_party/apr/apr-1.6.5/configure | 31578 ++++++++++++++++ third_party/apr/apr-1.6.5/configure.in | 2925 ++ third_party/apr/apr-1.6.5/docs/APRDesign.html | 399 + .../apr-1.6.5/docs/canonical_filenames.html | 156 + third_party/apr/apr-1.6.5/docs/doxygen.conf | 38 + .../apr/apr-1.6.5/docs/incomplete_types | 84 + .../apr/apr-1.6.5/docs/non_apr_programs | 47 + .../apr/apr-1.6.5/docs/pool-design.html | 96 + .../apr/apr-1.6.5/docs/win32_builds.html | 57 + third_party/apr/apr-1.6.5/dso/aix/dso.c | 714 + third_party/apr/apr-1.6.5/dso/beos/dso.c | 98 + third_party/apr/apr-1.6.5/dso/netware/dso.c | 137 + third_party/apr/apr-1.6.5/dso/os2/dso.c | 132 + third_party/apr/apr-1.6.5/dso/os390/dso.c | 109 + third_party/apr/apr-1.6.5/dso/unix/dso.c | 251 + third_party/apr/apr-1.6.5/dso/win32/dso.c | 167 + third_party/apr/apr-1.6.5/emacs-mode | 15 + .../apr/apr-1.6.5/encoding/apr_escape.c | 1254 + .../apr/apr-1.6.5/file_io/netware/filepath.c | 4 + .../apr/apr-1.6.5/file_io/netware/filestat.c | 417 + .../apr/apr-1.6.5/file_io/netware/filesys.c | 106 + .../apr/apr-1.6.5/file_io/netware/flock.c | 39 + .../apr/apr-1.6.5/file_io/netware/mktemp.c | 64 + .../apr/apr-1.6.5/file_io/netware/pipe.c | 239 + .../apr/apr-1.6.5/file_io/os2/buffer.c | 59 + third_party/apr/apr-1.6.5/file_io/os2/copy.c | 1 + third_party/apr/apr-1.6.5/file_io/os2/dir.c | 167 + .../apr-1.6.5/file_io/os2/dir_make_recurse.c | 90 + .../apr/apr-1.6.5/file_io/os2/fileacc.c | 18 + .../apr/apr-1.6.5/file_io/os2/filedup.c | 125 + .../apr/apr-1.6.5/file_io/os2/filepath.c | 16 + .../apr/apr-1.6.5/file_io/os2/filepath_util.c | 1 + .../apr/apr-1.6.5/file_io/os2/filestat.c | 241 + .../apr/apr-1.6.5/file_io/os2/filesys.c | 148 + third_party/apr/apr-1.6.5/file_io/os2/flock.c | 37 + .../apr/apr-1.6.5/file_io/os2/fullrw.c | 1 + .../apr/apr-1.6.5/file_io/os2/maperrorcode.c | 95 + .../apr/apr-1.6.5/file_io/os2/mktemp.c | 1 + third_party/apr/apr-1.6.5/file_io/os2/open.c | 304 + third_party/apr/apr-1.6.5/file_io/os2/pipe.c | 236 + .../apr/apr-1.6.5/file_io/os2/readwrite.c | 388 + third_party/apr/apr-1.6.5/file_io/os2/seek.c | 120 + .../apr/apr-1.6.5/file_io/os2/tempdir.c | 1 + .../apr/apr-1.6.5/file_io/unix/buffer.c | 60 + third_party/apr/apr-1.6.5/file_io/unix/copy.c | 119 + third_party/apr/apr-1.6.5/file_io/unix/dir.c | 364 + .../apr/apr-1.6.5/file_io/unix/fileacc.c | 119 + .../apr/apr-1.6.5/file_io/unix/filedup.c | 181 + .../apr/apr-1.6.5/file_io/unix/filepath.c | 314 + .../apr-1.6.5/file_io/unix/filepath_util.c | 111 + .../apr/apr-1.6.5/file_io/unix/filestat.c | 339 + .../apr/apr-1.6.5/file_io/unix/flock.c | 120 + .../apr/apr-1.6.5/file_io/unix/fullrw.c | 111 + .../apr/apr-1.6.5/file_io/unix/mktemp.c | 223 + third_party/apr/apr-1.6.5/file_io/unix/open.c | 417 + third_party/apr/apr-1.6.5/file_io/unix/pipe.c | 292 + .../apr/apr-1.6.5/file_io/unix/readwrite.c | 528 + third_party/apr/apr-1.6.5/file_io/unix/seek.c | 136 + .../apr/apr-1.6.5/file_io/unix/tempdir.c | 129 + .../apr/apr-1.6.5/file_io/win32/buffer.c | 65 + third_party/apr/apr-1.6.5/file_io/win32/dir.c | 408 + .../apr/apr-1.6.5/file_io/win32/filedup.c | 229 + .../apr/apr-1.6.5/file_io/win32/filepath.c | 1005 + .../apr/apr-1.6.5/file_io/win32/filestat.c | 825 + .../apr/apr-1.6.5/file_io/win32/filesys.c | 229 + .../apr/apr-1.6.5/file_io/win32/flock.c | 86 + .../apr/apr-1.6.5/file_io/win32/open.c | 755 + .../apr/apr-1.6.5/file_io/win32/pipe.c | 486 + .../apr/apr-1.6.5/file_io/win32/readwrite.c | 592 + .../apr/apr-1.6.5/file_io/win32/seek.c | 203 + .../apr/apr-1.6.5/helpers/apr_rename.pl | 106 + third_party/apr/apr-1.6.5/include/apr.h.in | 638 + third_party/apr/apr-1.6.5/include/apr.hnw | 444 + third_party/apr/apr-1.6.5/include/apr.hw | 666 + third_party/apr/apr-1.6.5/include/apr.hwc | 663 + .../apr/apr-1.6.5/include/apr_allocator.h | 179 + .../apr/apr-1.6.5/include/apr_atomic.h | 140 + third_party/apr/apr-1.6.5/include/apr_cstr.h | 292 + third_party/apr/apr-1.6.5/include/apr_dso.h | 94 + third_party/apr/apr-1.6.5/include/apr_env.h | 67 + third_party/apr/apr-1.6.5/include/apr_errno.h | 1342 + .../apr/apr-1.6.5/include/apr_escape.h | 418 + .../apr/apr-1.6.5/include/apr_file_info.h | 428 + .../apr/apr-1.6.5/include/apr_file_io.h | 1005 + .../apr/apr-1.6.5/include/apr_fnmatch.h | 153 + .../apr/apr-1.6.5/include/apr_general.h | 244 + .../apr/apr-1.6.5/include/apr_getopt.h | 160 + .../apr/apr-1.6.5/include/apr_global_mutex.h | 182 + third_party/apr/apr-1.6.5/include/apr_hash.h | 283 + .../apr/apr-1.6.5/include/apr_inherit.h | 51 + third_party/apr/apr-1.6.5/include/apr_lib.h | 241 + third_party/apr/apr-1.6.5/include/apr_mmap.h | 171 + .../apr/apr-1.6.5/include/apr_network_io.h | 926 + .../apr/apr-1.6.5/include/apr_perms_set.h | 65 + third_party/apr/apr-1.6.5/include/apr_poll.h | 446 + third_party/apr/apr-1.6.5/include/apr_pools.h | 815 + .../apr/apr-1.6.5/include/apr_portable.h | 549 + .../apr/apr-1.6.5/include/apr_proc_mutex.h | 179 + .../apr/apr-1.6.5/include/apr_random.h | 153 + third_party/apr/apr-1.6.5/include/apr_ring.h | 513 + third_party/apr/apr-1.6.5/include/apr_shm.h | 229 + .../apr/apr-1.6.5/include/apr_signal.h | 109 + .../apr/apr-1.6.5/include/apr_skiplist.h | 381 + .../apr/apr-1.6.5/include/apr_strings.h | 380 + .../apr/apr-1.6.5/include/apr_support.h | 57 + .../apr/apr-1.6.5/include/apr_tables.h | 507 + .../apr/apr-1.6.5/include/apr_thread_cond.h | 139 + .../apr/apr-1.6.5/include/apr_thread_mutex.h | 110 + .../apr/apr-1.6.5/include/apr_thread_proc.h | 839 + .../apr/apr-1.6.5/include/apr_thread_rwlock.h | 129 + third_party/apr/apr-1.6.5/include/apr_time.h | 235 + third_party/apr/apr-1.6.5/include/apr_user.h | 158 + .../apr/apr-1.6.5/include/apr_version.h | 164 + third_party/apr/apr-1.6.5/include/apr_want.h | 124 + .../apr-1.6.5/include/arch/aix/apr_arch_dso.h | 41 + .../include/arch/apr_private_common.h | 41 + .../include/arch/beos/apr_arch_dso.h | 41 + .../include/arch/beos/apr_arch_proc_mutex.h | 36 + .../include/arch/beos/apr_arch_thread_cond.h | 46 + .../include/arch/beos/apr_arch_thread_mutex.h | 42 + .../arch/beos/apr_arch_thread_rwlock.h | 45 + .../include/arch/beos/apr_arch_threadproc.h | 95 + .../include/arch/netware/apr_arch_dso.h | 43 + .../include/arch/netware/apr_arch_file_io.h | 176 + .../arch/netware/apr_arch_global_mutex.h | 29 + .../arch/netware/apr_arch_internal_time.h | 26 + .../include/arch/netware/apr_arch_networkio.h | 31 + .../include/arch/netware/apr_arch_pre_nw.h | 57 + .../arch/netware/apr_arch_proc_mutex.h | 29 + .../arch/netware/apr_arch_thread_cond.h | 29 + .../arch/netware/apr_arch_thread_mutex.h | 29 + .../arch/netware/apr_arch_thread_rwlock.h | 29 + .../arch/netware/apr_arch_threadproc.h | 80 + .../include/arch/netware/apr_private.h | 205 + .../apr-1.6.5/include/arch/os2/apr_arch_dso.h | 37 + .../include/arch/os2/apr_arch_file_io.h | 86 + .../include/arch/os2/apr_arch_inherit.h | 50 + .../include/arch/os2/apr_arch_networkio.h | 76 + .../include/arch/os2/apr_arch_os2calls.h | 59 + .../include/arch/os2/apr_arch_proc_mutex.h | 31 + .../include/arch/os2/apr_arch_thread_cond.h | 28 + .../include/arch/os2/apr_arch_thread_mutex.h | 29 + .../include/arch/os2/apr_arch_thread_rwlock.h | 31 + .../include/arch/os2/apr_arch_threadproc.h | 67 + .../include/arch/os390/apr_arch_dso.h | 39 + .../include/arch/unix/apr_arch_atomic.h | 45 + .../include/arch/unix/apr_arch_dso.h | 63 + .../include/arch/unix/apr_arch_file_io.h | 174 + .../include/arch/unix/apr_arch_global_mutex.h | 37 + .../include/arch/unix/apr_arch_inherit.h | 64 + .../arch/unix/apr_arch_internal_time.h | 24 + .../include/arch/unix/apr_arch_misc.h | 67 + .../include/arch/unix/apr_arch_networkio.h | 145 + .../include/arch/unix/apr_arch_poll_private.h | 189 + .../include/arch/unix/apr_arch_proc_mutex.h | 119 + .../include/arch/unix/apr_arch_shm.h | 74 + .../include/arch/unix/apr_arch_thread_cond.h | 42 + .../include/arch/unix/apr_arch_thread_mutex.h | 39 + .../arch/unix/apr_arch_thread_rwlock.h | 49 + .../include/arch/unix/apr_arch_threadproc.h | 119 + .../include/arch/unix/apr_private.h.in | 1020 + .../include/arch/win32/apr_arch_atime.h | 63 + .../include/arch/win32/apr_arch_dso.h | 36 + .../include/arch/win32/apr_arch_file_io.h | 265 + .../include/arch/win32/apr_arch_inherit.h | 123 + .../include/arch/win32/apr_arch_misc.h | 487 + .../include/arch/win32/apr_arch_networkio.h | 90 + .../include/arch/win32/apr_arch_proc_mutex.h | 29 + .../include/arch/win32/apr_arch_thread_cond.h | 32 + .../arch/win32/apr_arch_thread_mutex.h | 40 + .../arch/win32/apr_arch_thread_rwlock.h | 30 + .../include/arch/win32/apr_arch_threadproc.h | 74 + .../include/arch/win32/apr_arch_utf8.h | 56 + .../arch/win32/apr_dbg_win32_handles.h | 217 + .../include/arch/win32/apr_private.h | 173 + third_party/apr/apr-1.6.5/libapr.dep | 1920 + third_party/apr/apr-1.6.5/libapr.dsp | 860 + third_party/apr/apr-1.6.5/libapr.mak | 1650 + third_party/apr/apr-1.6.5/libapr.rc | 64 + .../apr/apr-1.6.5/locks/beos/proc_mutex.c | 206 + .../apr/apr-1.6.5/locks/beos/thread_cond.c | 186 + .../apr/apr-1.6.5/locks/beos/thread_mutex.c | 147 + .../apr/apr-1.6.5/locks/beos/thread_rwlock.c | 190 + .../apr/apr-1.6.5/locks/netware/proc_mutex.c | 181 + .../apr/apr-1.6.5/locks/netware/thread_cond.c | 100 + .../apr-1.6.5/locks/netware/thread_mutex.c | 92 + .../apr-1.6.5/locks/netware/thread_rwlock.c | 102 + .../apr/apr-1.6.5/locks/os2/proc_mutex.c | 267 + .../apr/apr-1.6.5/locks/os2/thread_cond.c | 60 + .../apr/apr-1.6.5/locks/os2/thread_mutex.c | 102 + .../apr/apr-1.6.5/locks/os2/thread_rwlock.c | 200 + .../apr/apr-1.6.5/locks/unix/global_mutex.c | 204 + .../apr/apr-1.6.5/locks/unix/proc_mutex.c | 1261 + .../apr/apr-1.6.5/locks/unix/thread_cond.c | 135 + .../apr/apr-1.6.5/locks/unix/thread_mutex.c | 138 + .../apr/apr-1.6.5/locks/unix/thread_rwlock.c | 181 + .../apr/apr-1.6.5/locks/win32/proc_mutex.c | 268 + .../apr/apr-1.6.5/locks/win32/thread_cond.c | 168 + .../apr/apr-1.6.5/locks/win32/thread_mutex.c | 136 + .../apr/apr-1.6.5/locks/win32/thread_rwlock.c | 165 + .../apr/apr-1.6.5/memory/unix/apr_pools.c | 2932 ++ .../apr/apr-1.6.5/misc/netware/apr.xdc | Bin 0 -> 128 bytes .../apr/apr-1.6.5/misc/netware/aprlib.def | 3 + .../apr/apr-1.6.5/misc/netware/charset.c | 34 + .../apr/apr-1.6.5/misc/netware/libprews.c | 186 + third_party/apr/apr-1.6.5/misc/netware/rand.c | 70 + .../apr/apr-1.6.5/misc/netware/start.c | 203 + third_party/apr/apr-1.6.5/misc/unix/charset.c | 83 + third_party/apr/apr-1.6.5/misc/unix/env.c | 88 + .../apr/apr-1.6.5/misc/unix/errorcodes.c | 443 + third_party/apr/apr-1.6.5/misc/unix/getopt.c | 309 + .../apr/apr-1.6.5/misc/unix/otherchild.c | 221 + third_party/apr/apr-1.6.5/misc/unix/rand.c | 250 + .../apr/apr-1.6.5/misc/unix/randbyte_os2.inc | 123 + third_party/apr/apr-1.6.5/misc/unix/start.c | 89 + third_party/apr/apr-1.6.5/misc/unix/version.c | 35 + .../apr/apr-1.6.5/misc/win32/apr_app.c | 80 + .../apr/apr-1.6.5/misc/win32/charset.c | 55 + third_party/apr/apr-1.6.5/misc/win32/env.c | 192 + .../apr/apr-1.6.5/misc/win32/internal.c | 101 + third_party/apr/apr-1.6.5/misc/win32/misc.c | 266 + third_party/apr/apr-1.6.5/misc/win32/rand.c | 69 + third_party/apr/apr-1.6.5/misc/win32/start.c | 232 + third_party/apr/apr-1.6.5/misc/win32/utf8.c | 259 + third_party/apr/apr-1.6.5/mmap/unix/common.c | 43 + third_party/apr/apr-1.6.5/mmap/unix/mmap.c | 172 + third_party/apr/apr-1.6.5/mmap/win32/mmap.c | 161 + .../apr/apr-1.6.5/network_io/beos/sendrecv.c | 216 + .../apr-1.6.5/network_io/beos/socketcommon.c | 6 + .../apr/apr-1.6.5/network_io/os2/inet_ntop.c | 1 + .../apr/apr-1.6.5/network_io/os2/inet_pton.c | 1 + .../apr/apr-1.6.5/network_io/os2/os2calls.c | 132 + .../apr/apr-1.6.5/network_io/os2/sendrecv.c | 155 + .../apr-1.6.5/network_io/os2/sendrecv_udp.c | 104 + .../apr/apr-1.6.5/network_io/os2/sockaddr.c | 1 + .../apr-1.6.5/network_io/os2/socket_util.c | 1 + .../apr/apr-1.6.5/network_io/os2/sockets.c | 317 + .../apr/apr-1.6.5/network_io/os2/sockopt.c | 144 + .../apr/apr-1.6.5/network_io/unix/inet_ntop.c | 243 + .../apr/apr-1.6.5/network_io/unix/inet_pton.c | 240 + .../apr/apr-1.6.5/network_io/unix/multicast.c | 313 + .../apr/apr-1.6.5/network_io/unix/sendrecv.c | 1110 + .../apr/apr-1.6.5/network_io/unix/sockaddr.c | 1185 + .../apr-1.6.5/network_io/unix/socket_util.c | 75 + .../apr/apr-1.6.5/network_io/unix/sockets.c | 572 + .../apr/apr-1.6.5/network_io/unix/sockopt.c | 465 + .../apr/apr-1.6.5/network_io/win32/sendrecv.c | 457 + .../apr/apr-1.6.5/network_io/win32/sockets.c | 538 + .../apr/apr-1.6.5/network_io/win32/sockopt.c | 302 + .../apr/apr-1.6.5/passwd/apr_getpass.c | 256 + third_party/apr/apr-1.6.5/poll/os2/poll.c | 105 + third_party/apr/apr-1.6.5/poll/os2/pollset.c | 321 + third_party/apr/apr-1.6.5/poll/unix/epoll.c | 490 + third_party/apr/apr-1.6.5/poll/unix/kqueue.c | 505 + third_party/apr/apr-1.6.5/poll/unix/poll.c | 460 + third_party/apr/apr-1.6.5/poll/unix/pollcb.c | 224 + third_party/apr/apr-1.6.5/poll/unix/pollset.c | 247 + third_party/apr/apr-1.6.5/poll/unix/port.c | 595 + third_party/apr/apr-1.6.5/poll/unix/select.c | 449 + third_party/apr/apr-1.6.5/poll/unix/wakeup.c | 151 + third_party/apr/apr-1.6.5/poll/unix/z_asio.c | 782 + .../apr/apr-1.6.5/random/unix/apr_random.c | 326 + third_party/apr/apr-1.6.5/random/unix/sha2.c | 528 + third_party/apr/apr-1.6.5/random/unix/sha2.h | 59 + .../apr/apr-1.6.5/random/unix/sha2_glue.c | 49 + third_party/apr/apr-1.6.5/shmem/beos/shm.c | 195 + third_party/apr/apr-1.6.5/shmem/os2/shm.c | 168 + third_party/apr/apr-1.6.5/shmem/unix/shm.c | 731 + third_party/apr/apr-1.6.5/shmem/win32/shm.c | 452 + .../apr/apr-1.6.5/strings/apr_cpystrn.c | 315 + third_party/apr/apr-1.6.5/strings/apr_cstr.c | 403 + .../apr/apr-1.6.5/strings/apr_fnmatch.c | 482 + .../apr/apr-1.6.5/strings/apr_snprintf.c | 1408 + .../apr/apr-1.6.5/strings/apr_strings.c | 467 + .../apr/apr-1.6.5/strings/apr_strnatcmp.c | 149 + .../apr/apr-1.6.5/strings/apr_strtok.c | 56 + .../apr/apr-1.6.5/support/unix/waitio.c | 123 + third_party/apr/apr-1.6.5/tables/apr_hash.c | 552 + .../apr/apr-1.6.5/tables/apr_skiplist.c | 852 + third_party/apr/apr-1.6.5/tables/apr_tables.c | 1300 + third_party/apr/apr-1.6.5/test/Makefile.in | 188 + third_party/apr/apr-1.6.5/test/Makefile.win | 273 + third_party/apr/apr-1.6.5/test/NWGNUaprtest | 307 + third_party/apr/apr-1.6.5/test/NWGNUechod | 253 + .../apr/apr-1.6.5/test/NWGNUglobalmutexchild | 252 + third_party/apr/apr-1.6.5/test/NWGNUmakefile | 60 + third_party/apr/apr-1.6.5/test/NWGNUmod_test | 254 + .../apr/apr-1.6.5/test/NWGNUproc_child | 252 + third_party/apr/apr-1.6.5/test/NWGNUreadchild | 252 + third_party/apr/apr-1.6.5/test/NWGNUsockchild | 252 + third_party/apr/apr-1.6.5/test/NWGNUsockperf | 253 + third_party/apr/apr-1.6.5/test/NWGNUtestatmc | 255 + third_party/apr/apr-1.6.5/test/NWGNUtryread | 252 + third_party/apr/apr-1.6.5/test/README | 332 + third_party/apr/apr-1.6.5/test/abts.c | 435 + third_party/apr/apr-1.6.5/test/abts.h | 108 + third_party/apr/apr-1.6.5/test/abts_tests.h | 74 + .../apr/apr-1.6.5/test/data/file_datafile.txt | 1 + .../apr/apr-1.6.5/test/data/mmap_datafile.txt | 1 + third_party/apr/apr-1.6.5/test/echod.c | 134 + .../apr/apr-1.6.5/test/globalmutexchild.c | 64 + .../apr/apr-1.6.5/test/internal/Makefile.in | 37 + .../apr/apr-1.6.5/test/internal/Makefile.win | 109 + .../apr/apr-1.6.5/test/internal/testregex.c | 91 + .../apr/apr-1.6.5/test/internal/testucs.c | 348 + third_party/apr/apr-1.6.5/test/mod_test.c | 32 + third_party/apr/apr-1.6.5/test/nw_misc.c | 23 + third_party/apr/apr-1.6.5/test/occhild.c | 26 + third_party/apr/apr-1.6.5/test/proc_child.c | 21 + third_party/apr/apr-1.6.5/test/readchild.c | 46 + third_party/apr/apr-1.6.5/test/sendfile.c | 770 + third_party/apr/apr-1.6.5/test/sockchild.c | 90 + third_party/apr/apr-1.6.5/test/sockperf.c | 256 + third_party/apr/apr-1.6.5/test/testall.dsw | 137 + third_party/apr/apr-1.6.5/test/testapp.c | 10 + third_party/apr/apr-1.6.5/test/testargs.c | 236 + third_party/apr/apr-1.6.5/test/testatomic.c | 536 + third_party/apr/apr-1.6.5/test/testcond.c | 670 + third_party/apr/apr-1.6.5/test/testdir.c | 399 + third_party/apr/apr-1.6.5/test/testdll.dsp | 442 + third_party/apr/apr-1.6.5/test/testdso.c | 263 + third_party/apr/apr-1.6.5/test/testdup.c | 198 + third_party/apr/apr-1.6.5/test/testenv.c | 144 + third_party/apr/apr-1.6.5/test/testescape.c | 311 + third_party/apr/apr-1.6.5/test/testfile.c | 1269 + third_party/apr/apr-1.6.5/test/testfilecopy.c | 138 + third_party/apr/apr-1.6.5/test/testfileinfo.c | 263 + third_party/apr/apr-1.6.5/test/testflock.c | 104 + third_party/apr/apr-1.6.5/test/testflock.h | 27 + third_party/apr/apr-1.6.5/test/testfmt.c | 166 + third_party/apr/apr-1.6.5/test/testfnmatch.c | 256 + .../apr/apr-1.6.5/test/testglobalmutex.c | 135 + .../apr/apr-1.6.5/test/testglobalmutex.h | 27 + third_party/apr/apr-1.6.5/test/testhash.c | 541 + third_party/apr/apr-1.6.5/test/testipsub.c | 226 + third_party/apr/apr-1.6.5/test/testlfs.c | 378 + third_party/apr/apr-1.6.5/test/testlib.dsp | 442 + third_party/apr/apr-1.6.5/test/testlock.c | 333 + third_party/apr/apr-1.6.5/test/testlockperf.c | 286 + third_party/apr/apr-1.6.5/test/testmmap.c | 165 + .../apr/apr-1.6.5/test/testmutexscope.c | 221 + third_party/apr/apr-1.6.5/test/testnames.c | 387 + third_party/apr/apr-1.6.5/test/testoc.c | 120 + third_party/apr/apr-1.6.5/test/testpath.c | 138 + third_party/apr/apr-1.6.5/test/testpipe.c | 205 + third_party/apr/apr-1.6.5/test/testpoll.c | 965 + third_party/apr/apr-1.6.5/test/testpools.c | 156 + third_party/apr/apr-1.6.5/test/testproc.c | 174 + .../apr/apr-1.6.5/test/testprocmutex.c | 220 + third_party/apr/apr-1.6.5/test/testrand.c | 359 + third_party/apr/apr-1.6.5/test/testshm.c | 332 + third_party/apr/apr-1.6.5/test/testshm.h | 33 + .../apr/apr-1.6.5/test/testshmconsumer.c | 94 + .../apr/apr-1.6.5/test/testshmproducer.c | 89 + third_party/apr/apr-1.6.5/test/testskiplist.c | 546 + third_party/apr/apr-1.6.5/test/testsleep.c | 53 + third_party/apr/apr-1.6.5/test/testsock.c | 607 + third_party/apr/apr-1.6.5/test/testsock.h | 34 + third_party/apr/apr-1.6.5/test/testsockets.c | 238 + third_party/apr/apr-1.6.5/test/testsockopt.c | 139 + third_party/apr/apr-1.6.5/test/teststr.c | 418 + .../apr/apr-1.6.5/test/teststrnatcmp.c | 78 + third_party/apr/apr-1.6.5/test/testtable.c | 245 + third_party/apr/apr-1.6.5/test/testtemp.c | 55 + third_party/apr/apr-1.6.5/test/testthread.c | 132 + third_party/apr/apr-1.6.5/test/testtime.c | 316 + third_party/apr/apr-1.6.5/test/testud.c | 91 + third_party/apr/apr-1.6.5/test/testuser.c | 174 + third_party/apr/apr-1.6.5/test/testutil.c | 44 + third_party/apr/apr-1.6.5/test/testutil.h | 108 + third_party/apr/apr-1.6.5/test/testvsn.c | 56 + third_party/apr/apr-1.6.5/test/tryread.c | 49 + .../apr-1.6.5/threadproc/beos/apr_proc_stub.c | 76 + .../apr/apr-1.6.5/threadproc/beos/proc.c | 454 + .../apr/apr-1.6.5/threadproc/beos/thread.c | 237 + .../apr-1.6.5/threadproc/beos/threadpriv.c | 180 + .../threadproc/beos/threadproc_common.c | 21 + .../apr/apr-1.6.5/threadproc/netware/proc.c | 515 + .../apr-1.6.5/threadproc/netware/procsup.c | 102 + .../apr-1.6.5/threadproc/netware/signals.c | 81 + .../apr/apr-1.6.5/threadproc/netware/thread.c | 254 + .../apr-1.6.5/threadproc/netware/threadpriv.c | 102 + .../apr/apr-1.6.5/threadproc/os2/proc.c | 672 + .../apr/apr-1.6.5/threadproc/os2/signals.c | 1 + .../apr/apr-1.6.5/threadproc/os2/thread.c | 260 + .../apr/apr-1.6.5/threadproc/os2/threadpriv.c | 88 + .../apr/apr-1.6.5/threadproc/unix/proc.c | 739 + .../apr/apr-1.6.5/threadproc/unix/procsup.c | 104 + .../apr/apr-1.6.5/threadproc/unix/signals.c | 487 + .../apr/apr-1.6.5/threadproc/unix/thread.c | 334 + .../apr-1.6.5/threadproc/unix/threadpriv.c | 129 + .../apr/apr-1.6.5/threadproc/win32/proc.c | 1158 + .../apr/apr-1.6.5/threadproc/win32/signals.c | 67 + .../apr/apr-1.6.5/threadproc/win32/thread.c | 281 + .../apr-1.6.5/threadproc/win32/threadpriv.c | 101 + third_party/apr/apr-1.6.5/time/unix/time.c | 352 + third_party/apr/apr-1.6.5/time/unix/timestr.c | 153 + third_party/apr/apr-1.6.5/time/win32/time.c | 343 + .../apr/apr-1.6.5/time/win32/timestr.c | 220 + .../apr/apr-1.6.5/tools/gen_test_char.c | 131 + .../apr/apr-1.6.5/user/netware/groupinfo.c | 41 + .../apr/apr-1.6.5/user/netware/userinfo.c | 70 + .../apr/apr-1.6.5/user/unix/groupinfo.c | 87 + .../apr/apr-1.6.5/user/unix/userinfo.c | 146 + .../apr/apr-1.6.5/user/win32/groupinfo.c | 100 + .../apr/apr-1.6.5/user/win32/userinfo.c | 280 + third_party/apr/apr_build.bat | 84 + third_party/apr/apr_build.sh | 62 + third_party/apr/apr_cross_build.sh | 81 + 1936 files changed, 241862 insertions(+), 60153 deletions(-) create mode 100644 README_CN.md create mode 100644 doc/Livox_LiDAR_SDK_API_Reference_V2.1.0.pdf create mode 100644 docs/_r_e_a_d_m_e_8md_source.html create mode 100644 docs/arrowdown.png create mode 100644 docs/arrowright.png create mode 100644 docs/files.js create mode 100644 docs/functions_0x7e.html create mode 100644 docs/functions_func_0x7e.html create mode 100644 docs/namespaces.js create mode 100644 third_party/apr/apr-1.6.5/CHANGES create mode 100644 third_party/apr/apr-1.6.5/CMakeLists.txt create mode 100644 third_party/apr/apr-1.6.5/LICENSE create mode 100644 third_party/apr/apr-1.6.5/Makefile.in create mode 100644 third_party/apr/apr-1.6.5/Makefile.win create mode 100644 third_party/apr/apr-1.6.5/NOTICE create mode 100644 third_party/apr/apr-1.6.5/NWGNUmakefile create mode 100644 third_party/apr/apr-1.6.5/README create mode 100644 third_party/apr/apr-1.6.5/README.cmake create mode 100644 third_party/apr/apr-1.6.5/apr-config.in create mode 100644 third_party/apr/apr-1.6.5/apr.dep create mode 100644 third_party/apr/apr-1.6.5/apr.dsp create mode 100644 third_party/apr/apr-1.6.5/apr.dsw create mode 100644 third_party/apr/apr-1.6.5/apr.mak create mode 100644 third_party/apr/apr-1.6.5/apr.pc.in create mode 100644 third_party/apr/apr-1.6.5/apr.spec create mode 100644 third_party/apr/apr-1.6.5/atomic/netware/apr_atomic.c create mode 100644 third_party/apr/apr-1.6.5/atomic/os390/atomic.c create mode 100644 third_party/apr/apr-1.6.5/atomic/unix/builtins.c create mode 100644 third_party/apr/apr-1.6.5/atomic/unix/ia32.c create mode 100644 third_party/apr/apr-1.6.5/atomic/unix/mutex.c create mode 100644 third_party/apr/apr-1.6.5/atomic/unix/ppc.c create mode 100644 third_party/apr/apr-1.6.5/atomic/unix/s390.c create mode 100644 third_party/apr/apr-1.6.5/atomic/unix/solaris.c create mode 100644 third_party/apr/apr-1.6.5/atomic/win32/apr_atomic.c create mode 100644 third_party/apr/apr-1.6.5/build-outputs.mk create mode 100644 third_party/apr/apr-1.6.5/build.conf create mode 100755 third_party/apr/apr-1.6.5/build/MakeEtags create mode 100644 third_party/apr/apr-1.6.5/build/NWGNUenvironment.inc create mode 100644 third_party/apr/apr-1.6.5/build/NWGNUhead.inc create mode 100644 third_party/apr/apr-1.6.5/build/NWGNUmakefile create mode 100644 third_party/apr/apr-1.6.5/build/NWGNUtail.inc create mode 100755 third_party/apr/apr-1.6.5/build/PrintPath create mode 100644 third_party/apr/apr-1.6.5/build/aplibtool.c create mode 100644 third_party/apr/apr-1.6.5/build/apr_common.m4 create mode 100644 third_party/apr/apr-1.6.5/build/apr_hints.m4 create mode 100644 third_party/apr/apr-1.6.5/build/apr_network.m4 create mode 100644 third_party/apr/apr-1.6.5/build/apr_rules.mk.in create mode 100644 third_party/apr/apr-1.6.5/build/apr_threads.m4 create mode 100644 third_party/apr/apr-1.6.5/build/apr_win32.m4 create mode 100644 third_party/apr/apr-1.6.5/build/aprapp.dep create mode 100644 third_party/apr/apr-1.6.5/build/aprapp.dsp create mode 100644 third_party/apr/apr-1.6.5/build/aprapp.mak create mode 100755 third_party/apr/apr-1.6.5/build/buildcheck.sh create mode 100755 third_party/apr/apr-1.6.5/build/config.guess create mode 100755 third_party/apr/apr-1.6.5/build/config.sub create mode 100644 third_party/apr/apr-1.6.5/build/cvtdsp.pl create mode 100644 third_party/apr/apr-1.6.5/build/find_apr.m4 create mode 100644 third_party/apr/apr-1.6.5/build/fixwin32mak.pl create mode 100755 third_party/apr/apr-1.6.5/build/gen-build.py create mode 100755 third_party/apr/apr-1.6.5/build/get-version.sh create mode 100755 third_party/apr/apr-1.6.5/build/install.sh create mode 100644 third_party/apr/apr-1.6.5/build/jlibtool.c create mode 100644 third_party/apr/apr-1.6.5/build/libaprapp.dep create mode 100644 third_party/apr/apr-1.6.5/build/libaprapp.dsp create mode 100644 third_party/apr/apr-1.6.5/build/libaprapp.mak create mode 100644 third_party/apr/apr-1.6.5/build/libtool.m4 create mode 100644 third_party/apr/apr-1.6.5/build/lineends.pl create mode 100755 third_party/apr/apr-1.6.5/build/ltmain.sh create mode 100644 third_party/apr/apr-1.6.5/build/ltoptions.m4 create mode 100644 third_party/apr/apr-1.6.5/build/ltsugar.m4 create mode 100644 third_party/apr/apr-1.6.5/build/ltversion.m4 create mode 100644 third_party/apr/apr-1.6.5/build/lt~obsolete.m4 create mode 100644 third_party/apr/apr-1.6.5/build/make_exports.awk create mode 100644 third_party/apr/apr-1.6.5/build/make_nw_export.awk create mode 100644 third_party/apr/apr-1.6.5/build/make_var_export.awk create mode 100755 third_party/apr/apr-1.6.5/build/mkdir.sh create mode 100644 third_party/apr/apr-1.6.5/build/nw_export.inc create mode 100644 third_party/apr/apr-1.6.5/build/nw_make_header.awk create mode 100644 third_party/apr/apr-1.6.5/build/nw_ver.awk create mode 100644 third_party/apr/apr-1.6.5/build/pkg/README create mode 100755 third_party/apr/apr-1.6.5/build/pkg/buildpkg.sh create mode 100644 third_party/apr/apr-1.6.5/build/pkg/pkginfo.in create mode 100644 third_party/apr/apr-1.6.5/build/preaprapp.dsp create mode 100644 third_party/apr/apr-1.6.5/build/prelibaprapp.dsp create mode 100644 third_party/apr/apr-1.6.5/build/rpm/apr.spec.in create mode 100755 third_party/apr/apr-1.6.5/build/run-gcov.sh create mode 100644 third_party/apr/apr-1.6.5/build/win32ver.awk create mode 100755 third_party/apr/apr-1.6.5/buildconf create mode 100644 third_party/apr/apr-1.6.5/config.layout create mode 100755 third_party/apr/apr-1.6.5/configure create mode 100644 third_party/apr/apr-1.6.5/configure.in create mode 100644 third_party/apr/apr-1.6.5/docs/APRDesign.html create mode 100644 third_party/apr/apr-1.6.5/docs/canonical_filenames.html create mode 100644 third_party/apr/apr-1.6.5/docs/doxygen.conf create mode 100644 third_party/apr/apr-1.6.5/docs/incomplete_types create mode 100644 third_party/apr/apr-1.6.5/docs/non_apr_programs create mode 100644 third_party/apr/apr-1.6.5/docs/pool-design.html create mode 100644 third_party/apr/apr-1.6.5/docs/win32_builds.html create mode 100644 third_party/apr/apr-1.6.5/dso/aix/dso.c create mode 100644 third_party/apr/apr-1.6.5/dso/beos/dso.c create mode 100644 third_party/apr/apr-1.6.5/dso/netware/dso.c create mode 100644 third_party/apr/apr-1.6.5/dso/os2/dso.c create mode 100644 third_party/apr/apr-1.6.5/dso/os390/dso.c create mode 100644 third_party/apr/apr-1.6.5/dso/unix/dso.c create mode 100644 third_party/apr/apr-1.6.5/dso/win32/dso.c create mode 100644 third_party/apr/apr-1.6.5/emacs-mode create mode 100644 third_party/apr/apr-1.6.5/encoding/apr_escape.c create mode 100644 third_party/apr/apr-1.6.5/file_io/netware/filepath.c create mode 100644 third_party/apr/apr-1.6.5/file_io/netware/filestat.c create mode 100644 third_party/apr/apr-1.6.5/file_io/netware/filesys.c create mode 100644 third_party/apr/apr-1.6.5/file_io/netware/flock.c create mode 100644 third_party/apr/apr-1.6.5/file_io/netware/mktemp.c create mode 100644 third_party/apr/apr-1.6.5/file_io/netware/pipe.c create mode 100644 third_party/apr/apr-1.6.5/file_io/os2/buffer.c create mode 100644 third_party/apr/apr-1.6.5/file_io/os2/copy.c create mode 100644 third_party/apr/apr-1.6.5/file_io/os2/dir.c create mode 100644 third_party/apr/apr-1.6.5/file_io/os2/dir_make_recurse.c create mode 100644 third_party/apr/apr-1.6.5/file_io/os2/fileacc.c create mode 100644 third_party/apr/apr-1.6.5/file_io/os2/filedup.c create mode 100644 third_party/apr/apr-1.6.5/file_io/os2/filepath.c create mode 100644 third_party/apr/apr-1.6.5/file_io/os2/filepath_util.c create mode 100644 third_party/apr/apr-1.6.5/file_io/os2/filestat.c create mode 100644 third_party/apr/apr-1.6.5/file_io/os2/filesys.c create mode 100644 third_party/apr/apr-1.6.5/file_io/os2/flock.c create mode 100644 third_party/apr/apr-1.6.5/file_io/os2/fullrw.c create mode 100644 third_party/apr/apr-1.6.5/file_io/os2/maperrorcode.c create mode 100644 third_party/apr/apr-1.6.5/file_io/os2/mktemp.c create mode 100644 third_party/apr/apr-1.6.5/file_io/os2/open.c create mode 100644 third_party/apr/apr-1.6.5/file_io/os2/pipe.c create mode 100644 third_party/apr/apr-1.6.5/file_io/os2/readwrite.c create mode 100644 third_party/apr/apr-1.6.5/file_io/os2/seek.c create mode 100644 third_party/apr/apr-1.6.5/file_io/os2/tempdir.c create mode 100644 third_party/apr/apr-1.6.5/file_io/unix/buffer.c create mode 100644 third_party/apr/apr-1.6.5/file_io/unix/copy.c create mode 100644 third_party/apr/apr-1.6.5/file_io/unix/dir.c create mode 100644 third_party/apr/apr-1.6.5/file_io/unix/fileacc.c create mode 100644 third_party/apr/apr-1.6.5/file_io/unix/filedup.c create mode 100644 third_party/apr/apr-1.6.5/file_io/unix/filepath.c create mode 100644 third_party/apr/apr-1.6.5/file_io/unix/filepath_util.c create mode 100644 third_party/apr/apr-1.6.5/file_io/unix/filestat.c create mode 100644 third_party/apr/apr-1.6.5/file_io/unix/flock.c create mode 100644 third_party/apr/apr-1.6.5/file_io/unix/fullrw.c create mode 100644 third_party/apr/apr-1.6.5/file_io/unix/mktemp.c create mode 100644 third_party/apr/apr-1.6.5/file_io/unix/open.c create mode 100644 third_party/apr/apr-1.6.5/file_io/unix/pipe.c create mode 100644 third_party/apr/apr-1.6.5/file_io/unix/readwrite.c create mode 100644 third_party/apr/apr-1.6.5/file_io/unix/seek.c create mode 100644 third_party/apr/apr-1.6.5/file_io/unix/tempdir.c create mode 100644 third_party/apr/apr-1.6.5/file_io/win32/buffer.c create mode 100644 third_party/apr/apr-1.6.5/file_io/win32/dir.c create mode 100644 third_party/apr/apr-1.6.5/file_io/win32/filedup.c create mode 100644 third_party/apr/apr-1.6.5/file_io/win32/filepath.c create mode 100644 third_party/apr/apr-1.6.5/file_io/win32/filestat.c create mode 100644 third_party/apr/apr-1.6.5/file_io/win32/filesys.c create mode 100644 third_party/apr/apr-1.6.5/file_io/win32/flock.c create mode 100644 third_party/apr/apr-1.6.5/file_io/win32/open.c create mode 100644 third_party/apr/apr-1.6.5/file_io/win32/pipe.c create mode 100644 third_party/apr/apr-1.6.5/file_io/win32/readwrite.c create mode 100644 third_party/apr/apr-1.6.5/file_io/win32/seek.c create mode 100644 third_party/apr/apr-1.6.5/helpers/apr_rename.pl create mode 100644 third_party/apr/apr-1.6.5/include/apr.h.in create mode 100644 third_party/apr/apr-1.6.5/include/apr.hnw create mode 100644 third_party/apr/apr-1.6.5/include/apr.hw create mode 100644 third_party/apr/apr-1.6.5/include/apr.hwc create mode 100644 third_party/apr/apr-1.6.5/include/apr_allocator.h create mode 100644 third_party/apr/apr-1.6.5/include/apr_atomic.h create mode 100644 third_party/apr/apr-1.6.5/include/apr_cstr.h create mode 100644 third_party/apr/apr-1.6.5/include/apr_dso.h create mode 100644 third_party/apr/apr-1.6.5/include/apr_env.h create mode 100644 third_party/apr/apr-1.6.5/include/apr_errno.h create mode 100644 third_party/apr/apr-1.6.5/include/apr_escape.h create mode 100644 third_party/apr/apr-1.6.5/include/apr_file_info.h create mode 100644 third_party/apr/apr-1.6.5/include/apr_file_io.h create mode 100644 third_party/apr/apr-1.6.5/include/apr_fnmatch.h create mode 100644 third_party/apr/apr-1.6.5/include/apr_general.h create mode 100644 third_party/apr/apr-1.6.5/include/apr_getopt.h create mode 100644 third_party/apr/apr-1.6.5/include/apr_global_mutex.h create mode 100644 third_party/apr/apr-1.6.5/include/apr_hash.h create mode 100644 third_party/apr/apr-1.6.5/include/apr_inherit.h create mode 100644 third_party/apr/apr-1.6.5/include/apr_lib.h create mode 100644 third_party/apr/apr-1.6.5/include/apr_mmap.h create mode 100644 third_party/apr/apr-1.6.5/include/apr_network_io.h create mode 100644 third_party/apr/apr-1.6.5/include/apr_perms_set.h create mode 100644 third_party/apr/apr-1.6.5/include/apr_poll.h create mode 100644 third_party/apr/apr-1.6.5/include/apr_pools.h create mode 100644 third_party/apr/apr-1.6.5/include/apr_portable.h create mode 100644 third_party/apr/apr-1.6.5/include/apr_proc_mutex.h create mode 100644 third_party/apr/apr-1.6.5/include/apr_random.h create mode 100644 third_party/apr/apr-1.6.5/include/apr_ring.h create mode 100644 third_party/apr/apr-1.6.5/include/apr_shm.h create mode 100644 third_party/apr/apr-1.6.5/include/apr_signal.h create mode 100644 third_party/apr/apr-1.6.5/include/apr_skiplist.h create mode 100644 third_party/apr/apr-1.6.5/include/apr_strings.h create mode 100644 third_party/apr/apr-1.6.5/include/apr_support.h create mode 100644 third_party/apr/apr-1.6.5/include/apr_tables.h create mode 100644 third_party/apr/apr-1.6.5/include/apr_thread_cond.h create mode 100644 third_party/apr/apr-1.6.5/include/apr_thread_mutex.h create mode 100644 third_party/apr/apr-1.6.5/include/apr_thread_proc.h create mode 100644 third_party/apr/apr-1.6.5/include/apr_thread_rwlock.h create mode 100644 third_party/apr/apr-1.6.5/include/apr_time.h create mode 100644 third_party/apr/apr-1.6.5/include/apr_user.h create mode 100644 third_party/apr/apr-1.6.5/include/apr_version.h create mode 100644 third_party/apr/apr-1.6.5/include/apr_want.h create mode 100644 third_party/apr/apr-1.6.5/include/arch/aix/apr_arch_dso.h create mode 100644 third_party/apr/apr-1.6.5/include/arch/apr_private_common.h create mode 100644 third_party/apr/apr-1.6.5/include/arch/beos/apr_arch_dso.h create mode 100644 third_party/apr/apr-1.6.5/include/arch/beos/apr_arch_proc_mutex.h create mode 100644 third_party/apr/apr-1.6.5/include/arch/beos/apr_arch_thread_cond.h create mode 100644 third_party/apr/apr-1.6.5/include/arch/beos/apr_arch_thread_mutex.h create mode 100644 third_party/apr/apr-1.6.5/include/arch/beos/apr_arch_thread_rwlock.h create mode 100644 third_party/apr/apr-1.6.5/include/arch/beos/apr_arch_threadproc.h create mode 100644 third_party/apr/apr-1.6.5/include/arch/netware/apr_arch_dso.h create mode 100644 third_party/apr/apr-1.6.5/include/arch/netware/apr_arch_file_io.h create mode 100644 third_party/apr/apr-1.6.5/include/arch/netware/apr_arch_global_mutex.h create mode 100644 third_party/apr/apr-1.6.5/include/arch/netware/apr_arch_internal_time.h create mode 100644 third_party/apr/apr-1.6.5/include/arch/netware/apr_arch_networkio.h create mode 100644 third_party/apr/apr-1.6.5/include/arch/netware/apr_arch_pre_nw.h create mode 100644 third_party/apr/apr-1.6.5/include/arch/netware/apr_arch_proc_mutex.h create mode 100644 third_party/apr/apr-1.6.5/include/arch/netware/apr_arch_thread_cond.h create mode 100644 third_party/apr/apr-1.6.5/include/arch/netware/apr_arch_thread_mutex.h create mode 100644 third_party/apr/apr-1.6.5/include/arch/netware/apr_arch_thread_rwlock.h create mode 100644 third_party/apr/apr-1.6.5/include/arch/netware/apr_arch_threadproc.h create mode 100644 third_party/apr/apr-1.6.5/include/arch/netware/apr_private.h create mode 100644 third_party/apr/apr-1.6.5/include/arch/os2/apr_arch_dso.h create mode 100644 third_party/apr/apr-1.6.5/include/arch/os2/apr_arch_file_io.h create mode 100644 third_party/apr/apr-1.6.5/include/arch/os2/apr_arch_inherit.h create mode 100644 third_party/apr/apr-1.6.5/include/arch/os2/apr_arch_networkio.h create mode 100644 third_party/apr/apr-1.6.5/include/arch/os2/apr_arch_os2calls.h create mode 100644 third_party/apr/apr-1.6.5/include/arch/os2/apr_arch_proc_mutex.h create mode 100644 third_party/apr/apr-1.6.5/include/arch/os2/apr_arch_thread_cond.h create mode 100644 third_party/apr/apr-1.6.5/include/arch/os2/apr_arch_thread_mutex.h create mode 100644 third_party/apr/apr-1.6.5/include/arch/os2/apr_arch_thread_rwlock.h create mode 100644 third_party/apr/apr-1.6.5/include/arch/os2/apr_arch_threadproc.h create mode 100644 third_party/apr/apr-1.6.5/include/arch/os390/apr_arch_dso.h create mode 100644 third_party/apr/apr-1.6.5/include/arch/unix/apr_arch_atomic.h create mode 100644 third_party/apr/apr-1.6.5/include/arch/unix/apr_arch_dso.h create mode 100644 third_party/apr/apr-1.6.5/include/arch/unix/apr_arch_file_io.h create mode 100644 third_party/apr/apr-1.6.5/include/arch/unix/apr_arch_global_mutex.h create mode 100644 third_party/apr/apr-1.6.5/include/arch/unix/apr_arch_inherit.h create mode 100644 third_party/apr/apr-1.6.5/include/arch/unix/apr_arch_internal_time.h create mode 100644 third_party/apr/apr-1.6.5/include/arch/unix/apr_arch_misc.h create mode 100644 third_party/apr/apr-1.6.5/include/arch/unix/apr_arch_networkio.h create mode 100644 third_party/apr/apr-1.6.5/include/arch/unix/apr_arch_poll_private.h create mode 100644 third_party/apr/apr-1.6.5/include/arch/unix/apr_arch_proc_mutex.h create mode 100644 third_party/apr/apr-1.6.5/include/arch/unix/apr_arch_shm.h create mode 100644 third_party/apr/apr-1.6.5/include/arch/unix/apr_arch_thread_cond.h create mode 100644 third_party/apr/apr-1.6.5/include/arch/unix/apr_arch_thread_mutex.h create mode 100644 third_party/apr/apr-1.6.5/include/arch/unix/apr_arch_thread_rwlock.h create mode 100644 third_party/apr/apr-1.6.5/include/arch/unix/apr_arch_threadproc.h create mode 100644 third_party/apr/apr-1.6.5/include/arch/unix/apr_private.h.in create mode 100644 third_party/apr/apr-1.6.5/include/arch/win32/apr_arch_atime.h create mode 100644 third_party/apr/apr-1.6.5/include/arch/win32/apr_arch_dso.h create mode 100644 third_party/apr/apr-1.6.5/include/arch/win32/apr_arch_file_io.h create mode 100644 third_party/apr/apr-1.6.5/include/arch/win32/apr_arch_inherit.h create mode 100644 third_party/apr/apr-1.6.5/include/arch/win32/apr_arch_misc.h create mode 100644 third_party/apr/apr-1.6.5/include/arch/win32/apr_arch_networkio.h create mode 100644 third_party/apr/apr-1.6.5/include/arch/win32/apr_arch_proc_mutex.h create mode 100644 third_party/apr/apr-1.6.5/include/arch/win32/apr_arch_thread_cond.h create mode 100644 third_party/apr/apr-1.6.5/include/arch/win32/apr_arch_thread_mutex.h create mode 100644 third_party/apr/apr-1.6.5/include/arch/win32/apr_arch_thread_rwlock.h create mode 100644 third_party/apr/apr-1.6.5/include/arch/win32/apr_arch_threadproc.h create mode 100644 third_party/apr/apr-1.6.5/include/arch/win32/apr_arch_utf8.h create mode 100644 third_party/apr/apr-1.6.5/include/arch/win32/apr_dbg_win32_handles.h create mode 100644 third_party/apr/apr-1.6.5/include/arch/win32/apr_private.h create mode 100644 third_party/apr/apr-1.6.5/libapr.dep create mode 100644 third_party/apr/apr-1.6.5/libapr.dsp create mode 100644 third_party/apr/apr-1.6.5/libapr.mak create mode 100644 third_party/apr/apr-1.6.5/libapr.rc create mode 100644 third_party/apr/apr-1.6.5/locks/beos/proc_mutex.c create mode 100644 third_party/apr/apr-1.6.5/locks/beos/thread_cond.c create mode 100644 third_party/apr/apr-1.6.5/locks/beos/thread_mutex.c create mode 100644 third_party/apr/apr-1.6.5/locks/beos/thread_rwlock.c create mode 100644 third_party/apr/apr-1.6.5/locks/netware/proc_mutex.c create mode 100644 third_party/apr/apr-1.6.5/locks/netware/thread_cond.c create mode 100644 third_party/apr/apr-1.6.5/locks/netware/thread_mutex.c create mode 100644 third_party/apr/apr-1.6.5/locks/netware/thread_rwlock.c create mode 100644 third_party/apr/apr-1.6.5/locks/os2/proc_mutex.c create mode 100644 third_party/apr/apr-1.6.5/locks/os2/thread_cond.c create mode 100644 third_party/apr/apr-1.6.5/locks/os2/thread_mutex.c create mode 100644 third_party/apr/apr-1.6.5/locks/os2/thread_rwlock.c create mode 100644 third_party/apr/apr-1.6.5/locks/unix/global_mutex.c create mode 100644 third_party/apr/apr-1.6.5/locks/unix/proc_mutex.c create mode 100644 third_party/apr/apr-1.6.5/locks/unix/thread_cond.c create mode 100644 third_party/apr/apr-1.6.5/locks/unix/thread_mutex.c create mode 100644 third_party/apr/apr-1.6.5/locks/unix/thread_rwlock.c create mode 100644 third_party/apr/apr-1.6.5/locks/win32/proc_mutex.c create mode 100644 third_party/apr/apr-1.6.5/locks/win32/thread_cond.c create mode 100644 third_party/apr/apr-1.6.5/locks/win32/thread_mutex.c create mode 100644 third_party/apr/apr-1.6.5/locks/win32/thread_rwlock.c create mode 100644 third_party/apr/apr-1.6.5/memory/unix/apr_pools.c create mode 100644 third_party/apr/apr-1.6.5/misc/netware/apr.xdc create mode 100644 third_party/apr/apr-1.6.5/misc/netware/aprlib.def create mode 100644 third_party/apr/apr-1.6.5/misc/netware/charset.c create mode 100644 third_party/apr/apr-1.6.5/misc/netware/libprews.c create mode 100644 third_party/apr/apr-1.6.5/misc/netware/rand.c create mode 100644 third_party/apr/apr-1.6.5/misc/netware/start.c create mode 100644 third_party/apr/apr-1.6.5/misc/unix/charset.c create mode 100644 third_party/apr/apr-1.6.5/misc/unix/env.c create mode 100644 third_party/apr/apr-1.6.5/misc/unix/errorcodes.c create mode 100644 third_party/apr/apr-1.6.5/misc/unix/getopt.c create mode 100644 third_party/apr/apr-1.6.5/misc/unix/otherchild.c create mode 100644 third_party/apr/apr-1.6.5/misc/unix/rand.c create mode 100644 third_party/apr/apr-1.6.5/misc/unix/randbyte_os2.inc create mode 100644 third_party/apr/apr-1.6.5/misc/unix/start.c create mode 100644 third_party/apr/apr-1.6.5/misc/unix/version.c create mode 100644 third_party/apr/apr-1.6.5/misc/win32/apr_app.c create mode 100644 third_party/apr/apr-1.6.5/misc/win32/charset.c create mode 100644 third_party/apr/apr-1.6.5/misc/win32/env.c create mode 100644 third_party/apr/apr-1.6.5/misc/win32/internal.c create mode 100644 third_party/apr/apr-1.6.5/misc/win32/misc.c create mode 100644 third_party/apr/apr-1.6.5/misc/win32/rand.c create mode 100644 third_party/apr/apr-1.6.5/misc/win32/start.c create mode 100644 third_party/apr/apr-1.6.5/misc/win32/utf8.c create mode 100644 third_party/apr/apr-1.6.5/mmap/unix/common.c create mode 100644 third_party/apr/apr-1.6.5/mmap/unix/mmap.c create mode 100644 third_party/apr/apr-1.6.5/mmap/win32/mmap.c create mode 100644 third_party/apr/apr-1.6.5/network_io/beos/sendrecv.c create mode 100644 third_party/apr/apr-1.6.5/network_io/beos/socketcommon.c create mode 100644 third_party/apr/apr-1.6.5/network_io/os2/inet_ntop.c create mode 100644 third_party/apr/apr-1.6.5/network_io/os2/inet_pton.c create mode 100644 third_party/apr/apr-1.6.5/network_io/os2/os2calls.c create mode 100644 third_party/apr/apr-1.6.5/network_io/os2/sendrecv.c create mode 100644 third_party/apr/apr-1.6.5/network_io/os2/sendrecv_udp.c create mode 100644 third_party/apr/apr-1.6.5/network_io/os2/sockaddr.c create mode 100644 third_party/apr/apr-1.6.5/network_io/os2/socket_util.c create mode 100644 third_party/apr/apr-1.6.5/network_io/os2/sockets.c create mode 100644 third_party/apr/apr-1.6.5/network_io/os2/sockopt.c create mode 100644 third_party/apr/apr-1.6.5/network_io/unix/inet_ntop.c create mode 100644 third_party/apr/apr-1.6.5/network_io/unix/inet_pton.c create mode 100644 third_party/apr/apr-1.6.5/network_io/unix/multicast.c create mode 100644 third_party/apr/apr-1.6.5/network_io/unix/sendrecv.c create mode 100644 third_party/apr/apr-1.6.5/network_io/unix/sockaddr.c create mode 100644 third_party/apr/apr-1.6.5/network_io/unix/socket_util.c create mode 100644 third_party/apr/apr-1.6.5/network_io/unix/sockets.c create mode 100644 third_party/apr/apr-1.6.5/network_io/unix/sockopt.c create mode 100644 third_party/apr/apr-1.6.5/network_io/win32/sendrecv.c create mode 100644 third_party/apr/apr-1.6.5/network_io/win32/sockets.c create mode 100644 third_party/apr/apr-1.6.5/network_io/win32/sockopt.c create mode 100644 third_party/apr/apr-1.6.5/passwd/apr_getpass.c create mode 100644 third_party/apr/apr-1.6.5/poll/os2/poll.c create mode 100644 third_party/apr/apr-1.6.5/poll/os2/pollset.c create mode 100644 third_party/apr/apr-1.6.5/poll/unix/epoll.c create mode 100644 third_party/apr/apr-1.6.5/poll/unix/kqueue.c create mode 100644 third_party/apr/apr-1.6.5/poll/unix/poll.c create mode 100644 third_party/apr/apr-1.6.5/poll/unix/pollcb.c create mode 100644 third_party/apr/apr-1.6.5/poll/unix/pollset.c create mode 100644 third_party/apr/apr-1.6.5/poll/unix/port.c create mode 100644 third_party/apr/apr-1.6.5/poll/unix/select.c create mode 100644 third_party/apr/apr-1.6.5/poll/unix/wakeup.c create mode 100644 third_party/apr/apr-1.6.5/poll/unix/z_asio.c create mode 100644 third_party/apr/apr-1.6.5/random/unix/apr_random.c create mode 100644 third_party/apr/apr-1.6.5/random/unix/sha2.c create mode 100644 third_party/apr/apr-1.6.5/random/unix/sha2.h create mode 100644 third_party/apr/apr-1.6.5/random/unix/sha2_glue.c create mode 100644 third_party/apr/apr-1.6.5/shmem/beos/shm.c create mode 100644 third_party/apr/apr-1.6.5/shmem/os2/shm.c create mode 100644 third_party/apr/apr-1.6.5/shmem/unix/shm.c create mode 100644 third_party/apr/apr-1.6.5/shmem/win32/shm.c create mode 100644 third_party/apr/apr-1.6.5/strings/apr_cpystrn.c create mode 100644 third_party/apr/apr-1.6.5/strings/apr_cstr.c create mode 100644 third_party/apr/apr-1.6.5/strings/apr_fnmatch.c create mode 100644 third_party/apr/apr-1.6.5/strings/apr_snprintf.c create mode 100644 third_party/apr/apr-1.6.5/strings/apr_strings.c create mode 100644 third_party/apr/apr-1.6.5/strings/apr_strnatcmp.c create mode 100644 third_party/apr/apr-1.6.5/strings/apr_strtok.c create mode 100644 third_party/apr/apr-1.6.5/support/unix/waitio.c create mode 100644 third_party/apr/apr-1.6.5/tables/apr_hash.c create mode 100644 third_party/apr/apr-1.6.5/tables/apr_skiplist.c create mode 100644 third_party/apr/apr-1.6.5/tables/apr_tables.c create mode 100644 third_party/apr/apr-1.6.5/test/Makefile.in create mode 100644 third_party/apr/apr-1.6.5/test/Makefile.win create mode 100644 third_party/apr/apr-1.6.5/test/NWGNUaprtest create mode 100644 third_party/apr/apr-1.6.5/test/NWGNUechod create mode 100644 third_party/apr/apr-1.6.5/test/NWGNUglobalmutexchild create mode 100644 third_party/apr/apr-1.6.5/test/NWGNUmakefile create mode 100644 third_party/apr/apr-1.6.5/test/NWGNUmod_test create mode 100644 third_party/apr/apr-1.6.5/test/NWGNUproc_child create mode 100644 third_party/apr/apr-1.6.5/test/NWGNUreadchild create mode 100644 third_party/apr/apr-1.6.5/test/NWGNUsockchild create mode 100644 third_party/apr/apr-1.6.5/test/NWGNUsockperf create mode 100644 third_party/apr/apr-1.6.5/test/NWGNUtestatmc create mode 100644 third_party/apr/apr-1.6.5/test/NWGNUtryread create mode 100644 third_party/apr/apr-1.6.5/test/README create mode 100644 third_party/apr/apr-1.6.5/test/abts.c create mode 100644 third_party/apr/apr-1.6.5/test/abts.h create mode 100644 third_party/apr/apr-1.6.5/test/abts_tests.h create mode 100644 third_party/apr/apr-1.6.5/test/data/file_datafile.txt create mode 100644 third_party/apr/apr-1.6.5/test/data/mmap_datafile.txt create mode 100644 third_party/apr/apr-1.6.5/test/echod.c create mode 100644 third_party/apr/apr-1.6.5/test/globalmutexchild.c create mode 100644 third_party/apr/apr-1.6.5/test/internal/Makefile.in create mode 100644 third_party/apr/apr-1.6.5/test/internal/Makefile.win create mode 100644 third_party/apr/apr-1.6.5/test/internal/testregex.c create mode 100644 third_party/apr/apr-1.6.5/test/internal/testucs.c create mode 100644 third_party/apr/apr-1.6.5/test/mod_test.c create mode 100644 third_party/apr/apr-1.6.5/test/nw_misc.c create mode 100644 third_party/apr/apr-1.6.5/test/occhild.c create mode 100644 third_party/apr/apr-1.6.5/test/proc_child.c create mode 100644 third_party/apr/apr-1.6.5/test/readchild.c create mode 100644 third_party/apr/apr-1.6.5/test/sendfile.c create mode 100644 third_party/apr/apr-1.6.5/test/sockchild.c create mode 100644 third_party/apr/apr-1.6.5/test/sockperf.c create mode 100644 third_party/apr/apr-1.6.5/test/testall.dsw create mode 100644 third_party/apr/apr-1.6.5/test/testapp.c create mode 100644 third_party/apr/apr-1.6.5/test/testargs.c create mode 100644 third_party/apr/apr-1.6.5/test/testatomic.c create mode 100644 third_party/apr/apr-1.6.5/test/testcond.c create mode 100644 third_party/apr/apr-1.6.5/test/testdir.c create mode 100644 third_party/apr/apr-1.6.5/test/testdll.dsp create mode 100644 third_party/apr/apr-1.6.5/test/testdso.c create mode 100644 third_party/apr/apr-1.6.5/test/testdup.c create mode 100644 third_party/apr/apr-1.6.5/test/testenv.c create mode 100644 third_party/apr/apr-1.6.5/test/testescape.c create mode 100644 third_party/apr/apr-1.6.5/test/testfile.c create mode 100644 third_party/apr/apr-1.6.5/test/testfilecopy.c create mode 100644 third_party/apr/apr-1.6.5/test/testfileinfo.c create mode 100644 third_party/apr/apr-1.6.5/test/testflock.c create mode 100644 third_party/apr/apr-1.6.5/test/testflock.h create mode 100644 third_party/apr/apr-1.6.5/test/testfmt.c create mode 100644 third_party/apr/apr-1.6.5/test/testfnmatch.c create mode 100644 third_party/apr/apr-1.6.5/test/testglobalmutex.c create mode 100644 third_party/apr/apr-1.6.5/test/testglobalmutex.h create mode 100644 third_party/apr/apr-1.6.5/test/testhash.c create mode 100644 third_party/apr/apr-1.6.5/test/testipsub.c create mode 100644 third_party/apr/apr-1.6.5/test/testlfs.c create mode 100644 third_party/apr/apr-1.6.5/test/testlib.dsp create mode 100644 third_party/apr/apr-1.6.5/test/testlock.c create mode 100644 third_party/apr/apr-1.6.5/test/testlockperf.c create mode 100644 third_party/apr/apr-1.6.5/test/testmmap.c create mode 100644 third_party/apr/apr-1.6.5/test/testmutexscope.c create mode 100644 third_party/apr/apr-1.6.5/test/testnames.c create mode 100644 third_party/apr/apr-1.6.5/test/testoc.c create mode 100644 third_party/apr/apr-1.6.5/test/testpath.c create mode 100644 third_party/apr/apr-1.6.5/test/testpipe.c create mode 100644 third_party/apr/apr-1.6.5/test/testpoll.c create mode 100644 third_party/apr/apr-1.6.5/test/testpools.c create mode 100644 third_party/apr/apr-1.6.5/test/testproc.c create mode 100644 third_party/apr/apr-1.6.5/test/testprocmutex.c create mode 100644 third_party/apr/apr-1.6.5/test/testrand.c create mode 100644 third_party/apr/apr-1.6.5/test/testshm.c create mode 100644 third_party/apr/apr-1.6.5/test/testshm.h create mode 100644 third_party/apr/apr-1.6.5/test/testshmconsumer.c create mode 100644 third_party/apr/apr-1.6.5/test/testshmproducer.c create mode 100644 third_party/apr/apr-1.6.5/test/testskiplist.c create mode 100644 third_party/apr/apr-1.6.5/test/testsleep.c create mode 100644 third_party/apr/apr-1.6.5/test/testsock.c create mode 100644 third_party/apr/apr-1.6.5/test/testsock.h create mode 100644 third_party/apr/apr-1.6.5/test/testsockets.c create mode 100644 third_party/apr/apr-1.6.5/test/testsockopt.c create mode 100644 third_party/apr/apr-1.6.5/test/teststr.c create mode 100644 third_party/apr/apr-1.6.5/test/teststrnatcmp.c create mode 100644 third_party/apr/apr-1.6.5/test/testtable.c create mode 100644 third_party/apr/apr-1.6.5/test/testtemp.c create mode 100644 third_party/apr/apr-1.6.5/test/testthread.c create mode 100644 third_party/apr/apr-1.6.5/test/testtime.c create mode 100644 third_party/apr/apr-1.6.5/test/testud.c create mode 100644 third_party/apr/apr-1.6.5/test/testuser.c create mode 100644 third_party/apr/apr-1.6.5/test/testutil.c create mode 100644 third_party/apr/apr-1.6.5/test/testutil.h create mode 100644 third_party/apr/apr-1.6.5/test/testvsn.c create mode 100644 third_party/apr/apr-1.6.5/test/tryread.c create mode 100644 third_party/apr/apr-1.6.5/threadproc/beos/apr_proc_stub.c create mode 100644 third_party/apr/apr-1.6.5/threadproc/beos/proc.c create mode 100644 third_party/apr/apr-1.6.5/threadproc/beos/thread.c create mode 100644 third_party/apr/apr-1.6.5/threadproc/beos/threadpriv.c create mode 100644 third_party/apr/apr-1.6.5/threadproc/beos/threadproc_common.c create mode 100644 third_party/apr/apr-1.6.5/threadproc/netware/proc.c create mode 100644 third_party/apr/apr-1.6.5/threadproc/netware/procsup.c create mode 100644 third_party/apr/apr-1.6.5/threadproc/netware/signals.c create mode 100644 third_party/apr/apr-1.6.5/threadproc/netware/thread.c create mode 100644 third_party/apr/apr-1.6.5/threadproc/netware/threadpriv.c create mode 100644 third_party/apr/apr-1.6.5/threadproc/os2/proc.c create mode 100644 third_party/apr/apr-1.6.5/threadproc/os2/signals.c create mode 100644 third_party/apr/apr-1.6.5/threadproc/os2/thread.c create mode 100644 third_party/apr/apr-1.6.5/threadproc/os2/threadpriv.c create mode 100644 third_party/apr/apr-1.6.5/threadproc/unix/proc.c create mode 100644 third_party/apr/apr-1.6.5/threadproc/unix/procsup.c create mode 100644 third_party/apr/apr-1.6.5/threadproc/unix/signals.c create mode 100644 third_party/apr/apr-1.6.5/threadproc/unix/thread.c create mode 100644 third_party/apr/apr-1.6.5/threadproc/unix/threadpriv.c create mode 100644 third_party/apr/apr-1.6.5/threadproc/win32/proc.c create mode 100644 third_party/apr/apr-1.6.5/threadproc/win32/signals.c create mode 100644 third_party/apr/apr-1.6.5/threadproc/win32/thread.c create mode 100644 third_party/apr/apr-1.6.5/threadproc/win32/threadpriv.c create mode 100644 third_party/apr/apr-1.6.5/time/unix/time.c create mode 100644 third_party/apr/apr-1.6.5/time/unix/timestr.c create mode 100644 third_party/apr/apr-1.6.5/time/win32/time.c create mode 100644 third_party/apr/apr-1.6.5/time/win32/timestr.c create mode 100644 third_party/apr/apr-1.6.5/tools/gen_test_char.c create mode 100644 third_party/apr/apr-1.6.5/user/netware/groupinfo.c create mode 100644 third_party/apr/apr-1.6.5/user/netware/userinfo.c create mode 100644 third_party/apr/apr-1.6.5/user/unix/groupinfo.c create mode 100644 third_party/apr/apr-1.6.5/user/unix/userinfo.c create mode 100644 third_party/apr/apr-1.6.5/user/win32/groupinfo.c create mode 100644 third_party/apr/apr-1.6.5/user/win32/userinfo.c create mode 100644 third_party/apr/apr_build.bat create mode 100755 third_party/apr/apr_build.sh create mode 100755 third_party/apr/apr_cross_build.sh diff --git a/CMakeLists.txt b/CMakeLists.txt index e7ef558..76fd774 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -6,6 +6,13 @@ set(CMAKE_CXX_STANDARD 11) message(STATUS "main project dir: " ${PROJECT_SOURCE_DIR}) +if (CMAKE_CROSSCOMPILING) + set(THREADS_PTHREAD_ARG + "PLEASE_FILL_OUT-FAILED_TO_RUN" + CACHE STRING "Result from TRY_RUN" FORCE) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread") +endif() + add_subdirectory(sdk_core sdk_core) add_subdirectory(sample/hub) add_subdirectory(sample/lidar) @@ -14,4 +21,4 @@ add_subdirectory(sample/lidar_lvx_file) add_subdirectory(sample_cc/hub) add_subdirectory(sample_cc/lidar) add_subdirectory(sample_cc/trouble_shooting) -add_subdirectory(sample_cc/lidar_utc_sync) \ No newline at end of file +add_subdirectory(sample_cc/lidar_utc_sync) diff --git a/Doxyfile b/Doxyfile index e551807..95d2872 100644 --- a/Doxyfile +++ b/Doxyfile @@ -38,7 +38,7 @@ PROJECT_NAME = "Livox SDK API" # could be handy for archiving the generated documentation or if some version # control system is used. -PROJECT_NUMBER = V2.0.0 +PROJECT_NUMBER = V2.1.0 # Using the PROJECT_BRIEF tag one can provide an optional one line description # for a project that appears at the top of each page and should give viewer a diff --git a/LICENSE.txt b/LICENSE.txt index 49f1b29..f039854 100644 --- a/LICENSE.txt +++ b/LICENSE.txt @@ -40,59 +40,62 @@ Livox-SDK │   └── trouble_shooting │   ├── CMakeLists.txt │   └── main.cpp -└── sdk_core - ├── CMakeLists.txt - ├── include - │   ├── comm - │   │   ├── comm_port.h - │   │   └── protocol.h - │   ├── livox_def.h - │   └── livox_sdk.h - └── src - ├── base - │   ├── command_callback.h - │   ├── io_loop.cpp - │   ├── io_loop.h - │   ├── io_thread.cpp - │   ├── io_thread.h - │   ├── logging.cpp - │   ├── logging.h - │   ├── network_util.cpp - │   ├── network_util.h - │   ├── noncopyable.h - │   ├── thread_base.cpp - │   ├── thread_base.h - │   ├── util.cpp - │   └── util.h - ├── comm - │   ├── comm_port.cpp - │   ├── sdk_protocol.cpp - │   └── sdk_protocol.h - ├── command_handler - │   ├── command_channel.cpp - │   ├── command_channel.h - │   ├── command_handler.cpp - │   ├── command_handler.h - │   ├── command_impl.cpp - │   ├── command_impl.h - │   ├── hub_command_handler.cpp - │   ├── hub_command_handler.h - │   ├── lidar_command_handler.cpp - │   └── lidar_command_handler.h - ├── data_handler - │   ├── data_handler.cpp - │   ├── data_handler.h - │   ├── hub_data_handler.cpp - │   ├── hub_data_handler.h - │   ├── lidar_data_handler.cpp - │   └── lidar_data_handler.h - ├── device_discovery.cpp - ├── device_discovery.h - ├── device_manager.cpp - ├── device_manager.h - └── livox_sdk.cpp - - +├── sdk_core +│   ├── CMakeLists.txt +│   ├── include +│   │   ├── comm +│   │   │   ├── comm_port.h +│   │   │   └── protocol.h +│   │   ├── livox_def.h +│   │   └── livox_sdk.h +│   └── src +│   ├── base +│   │   ├── command_callback.h +│   │   ├── io_loop.cpp +│   │   ├── io_loop.h +│   │   ├── io_thread.cpp +│   │   ├── io_thread.h +│   │   ├── logging.cpp +│   │   ├── logging.h +│   │   ├── network_util.cpp +│   │   ├── network_util.h +│   │   ├── noncopyable.h +│   │   ├── thread_base.cpp +│   │   ├── thread_base.h +│   │   ├── util.cpp +│   │   └── util.h +│   ├── comm +│   │   ├── comm_port.cpp +│   │   ├── sdk_protocol.cpp +│   │   └── sdk_protocol.h +│   ├── command_handler +│   │   ├── command_channel.cpp +│   │   ├── command_channel.h +│   │   ├── command_handler.cpp +│   │   ├── command_handler.h +│   │   ├── command_impl.cpp +│   │   ├── command_impl.h +│   │   ├── hub_command_handler.cpp +│   │   ├── hub_command_handler.h +│   │   ├── lidar_command_handler.cpp +│   │   └── lidar_command_handler.h +│   ├── data_handler +│   │   ├── data_handler.cpp +│   │   ├── data_handler.h +│   │   ├── hub_data_handler.cpp +│   │   ├── hub_data_handler.h +│   │   ├── lidar_data_handler.cpp +│   │   └── lidar_data_handler.h +│   ├── device_discovery.cpp +│   ├── device_discovery.h +│   ├── device_manager.cpp +│   ├── device_manager.h +│   └── livox_sdk.cpp +└── third_party + └── apr + ├── apr_build.bat + ├── apr_build.sh + └── apr_cross_build.sh ------------------------------------------------------------- The MIT License (MIT) diff --git a/README.md b/README.md index ea61dc9..8dfc4ef 100644 --- a/README.md +++ b/README.md @@ -31,51 +31,98 @@ Livox SDK API provides a set of C style functions which can be conveniently inte The installation procedures in Ubuntu 18.04/16.04/14.04 LTS and Windows 7/10 are shown here as examples. For Ubuntu 18.04/16.04/14.04 32-bit LTS and Mac, you can get it in [Livox-SDK wiki](https://github.com/Livox-SDK/Livox-SDK/wiki). ### 4.1.1 Ubuntu 18.04/16.04/14.04 LTS #### Dependencies -Livox SDK requires [CMake 3.0.0+](https://cmake.org/), [Apache Portable Runtime (APR) 1.61+](http://apr.apache.org/) and [Boost 1.54+](https://www.boost.org/) as dependencies. You can install these packages using apt: +Livox SDK requires [CMake 3.0.0+](https://cmake.org/) as dependencies. You can install these packages using apt: ``` -sudo apt install cmake pkg-config libapr1-dev libboost-atomic-dev libboost-system-dev +sudo apt install cmake pkg-config ``` #### Compile Livox SDK + In the Livox SDK directory, run the following commands to compile the project: ``` git clone https://github.com/Livox-SDK/Livox-SDK.git -cd Livox-SDK/build -cmake .. +cd Livox-SDK +sudo ./third_party/apr/apr_build.sh +cd build && cmake .. make sudo make install ``` ### 4.1.2 Windows 7/10 #### Dependencies -Livox SDK supports Visual Studio 2015/2017 and requires [CMake 3.0.0+](https://cmake.org/), [Apache Portable Runtime (APR) 1.61+](http://apr.apache.org/) and [Boost 1.54+](https://www.boost.org/) as dependencies. [vcpkg](https://github.com/Microsoft/vcpkg) is recommended for building the dependency libraries as follows: -For the 32-bit project: -``` -.\vcpkg install apr -.\vcpkg install boost-atomic -.\vcpkg install boost-system -.\vcpkg install boost-thread -.\vcpkg integrate install -``` -For the 64-bit project: -``` -.\vcpkg install apr:x64-windows -.\vcpkg install boost-atomic:x64-windows -.\vcpkg install boost-system:x64-windows -.\vcpkg install boost-thread:x64-windows -.\vcpkg integrate install -``` -Then, in the Livox SDK directory, run the following commands to create the Visual Studio solution file. Please replace [vcpkgroot] with your vcpkg installation path. +Livox SDK supports Visual Studio 2015/2017 and requires install [CMake 3.0.0+](https://cmake.org/) as dependencies. + +In the Livox SDK directory, run the following commands to create the Visual Studio solution file. Generate the 32-bit project: + ``` +cd Livox-SDK +.\third_party\apr\apr_build.bat cd build && \ -cmake .. "-DCMAKE_TOOLCHAIN_FILE=[vcpkgroot]\scripts\buildsystems\vcpkg.cmake" +cmake .. ``` Generate the 64-bit project: ``` +cd Livox-SDK +.\third_party\apr\apr_build.bat amd64 cd build && \ -cmake .. -G "Visual Studio 15 2017 Win64" "-DCMAKE_TOOLCHAIN_FILE=[vcpkgroot]\scripts\buildsystems\vcpkg.cmake" +cmake .. -G "Visual Studio 15 2017 Win64" ``` #### Compile Livox SDK You can now compile the Livox SDK in Visual Studio. + +### 4.1.3 ARM-Linux Cross Compile + +The procedure of cross compile Livox-SDK in ARM-Linux are shown below。 + +#### Dependencies + +Host machine requires install cmake and gcc。You can install these packages using apt: + +``` +sudo apt install cmake gcc +``` + +#### Cross Compile Toolchain + +If your ARM board vendor provides a cross compile toolchain, you can skip the following step of installing the toolchain and use the vendor-supplied cross compile toolchain instead. + +The following commands will install C and C++ cross compiler toolchains for 32bit and 64bit ARM board. You need to install the correct toolchain for your ARM board. For 64bit SoC ARM board, only install 64bit toolchain, and for 32bit SoC ARM board, only install 32bit toolchain. + +Install **ARM 32 bits cross compile toolchain**: + +``` + sudo apt-get install gcc-arm-linux-gnueabi g++-arm-linux-gnueabi +``` + +Install **ARM 64 bits cross compile toolchain**: + +``` +sudo apt-get install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu +``` + +#### Cross Compile Livox-SDK + +For **ARM 32 bits toolchain**,In the Livox SDK directory,run the following commands to cross compile the project: + +``` +cd Livox-SDK +cd build && \ +cmake .. -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_C_COMPILER=arm-linux-gnueabi-gcc -DCMAKE_CXX_COMPILER=arm-linux-gnueabi-g++ +make +``` + +For **ARM 64 bits toolchain**,In the Livox SDK directory,run the following commands to cross compile the project: + +``` +cd Livox-SDK +cd build && \ +cmake .. -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_C_COMPILER=aarch64-linux-gnu-gcc -DCMAKE_CXX_COMPILER=aarch64-linux-gnu-g++ +make +``` + +**Note:** + +- gcc cross compiler need to support C ++11 standard + ## 4.2 Run Livox SDK Sample Two samples are provided in Sample/Lidar and Sample/Hub, which demonstrate how to configure Livox LiDAR units and receive the point cloud data when directly connecting Livox SDK to LiDAR units or by using a Livox Hub, respectively. The sequence diagram is shown as below: diff --git a/README_CN.md b/README_CN.md new file mode 100644 index 0000000..43c33e1 --- /dev/null +++ b/README_CN.md @@ -0,0 +1,219 @@ +# 1 简介 + +Livox SDK 是为 Livox 公司旗下所有产品设计的软件开发套件。它基于 C/C++ 语言开发,遵循 Livox SDK 通信协议,并为用户提供了易用的 C 语言风格的接口。通过 Livox SDK,用户可以快速地连接 Livox 产品并接收点云数据。 + +Livox SDK 包括了 Livox SDK 通信协议,Livox SDK 内核,Livox SDK 应用接口,Windows/Linux 示例以及 ROS 示例。 + +## 前置依赖 +* Ubuntu 14.04/Ubuntu 16.04/Ubuntu 18.04, x86 和 ARM (Nvidia TX2) +* Windows 7/10, Visual Studio 2015/2017 +* C++11 编译器 + +# 2 Livox SDK 通信协议 + +Livox SDK 通信协议对所有用户开放. 它定义了用户应用程序和 Livox 产品之间的通信协议. 协议内容包含了控制命令和点云数据格式。有关协议更详细的信息请查阅 [Livox SDK Communication Protocol]() 。 + +# 3 Livox SDK 内核 + +Livox SDK 提供了控制指令和点云数据传输的实现,以及提供了 C/C++ 应用接口。Livox SDK 内核的基本架构如下图所示 : + +![Livox SDK Architecture](doc/images/sdk.png) + +UDP 协议被用于 Livox SDK 和 LiDAR 传感器之间的通信。请参照 Livox SDK 通信协议了解更多的信息. Point cloud data handler 负责点云数据传输,command handler 负责接收和发送控制指令。 C/C++ API 的实现基于 command handler 和 point cloud data handler。 + +Livox LiDAR 传感器可以直接连接主机或者通过 Livox Hub 连接到主机,Livox SDK 支持了以上两种连接方式。当 LiDAR 直接连接到主机,主机会与每个 LiDAR 都各自通信,如果 LiDAR 通过 Hub 连接到主机,主机仅与 Livox Hub 通信,Hub 再与每个 LiDAR 进行通信。 + +# 4 Livox SDK 应用接口 + +Livox SDK 应用接口提供了一系列 C 风格的接口,可以很方便地集成进 C/C++ 程序。请查阅 [Livox SDK API Reference](https://livox-sdk.github.io/Livox-SDK/) 获取更多信息。 + +## 4.1 安装 +以下将介绍 Ubuntu 18.04/16.04/14.04 LTS 系统、 Windows 7/10 系统和 ARM-Linux 交叉编译的安装过程. 对于 Ubuntu 18.04/16.04/14.04 32-bit LTS 和 Mac 系统, 您可以查阅 [Livox-SDK wiki](https://github.com/Livox-SDK/Livox-SDK/wiki)。 +### 4.1.1 Ubuntu 18.04/16.04/14.04 LTS +#### 依赖 +Livox SDK 依赖于 cmake 。你可以通过 apt 工具安装这些依赖包 : +``` +sudo apt install cmake pkg-config +``` +#### 编译 Livox SDK + +在 Livox SDK 目录中,执行以下指令编译工程: +``` +git clone https://github.com/Livox-SDK/Livox-SDK.git +cd Livox-SDK +sudo ./third_party/apr/apr_build.sh +cd build && cmake .. +make +sudo make install +``` +### 4.1.2 Windows 7/10 +#### 依赖 +Livox SDK 支持 Visual Studio 2015/2017,需要安装 [CMake 3.0.0+](https://cmake.org/) 依赖。 + +在 Livox SDK 目录中,执行以下指令生成 Visual Studio solution 文件。 +生成 32-bit 工程: + +``` +cd Livox-SDK +.\third_party\apr\apr_build.bat +cd build && cmake .. +``` +生成 64-bit 工程: +``` +cd Livox-SDK +.\third_party\apr\apr_build.bat amd64 +cd build && \ +cmake .. -G "Visual Studio 15 2017 Win64" +``` +#### 编译 Livox SDK +然后就可以在 Visual Studio 中编译 Livox SDK 。 + +### 4.1.3 ARM-Linux 交叉编译 + +以下将介绍 ARM-Linux 的交叉编译过程。 + +#### 依赖 + +交叉编译需要在主机安装 cmake 和 gcc。 你可以通过 apt 工具安装这些依赖包 : + +``` +sudo apt install cmake gcc +``` + +#### 交叉编译工具链 + +如果你的 ARM 板厂商提供了交叉编译工具链,则可以跳过以下交叉编译工具链的安装步骤,采用厂商提供的交叉编译工具链。 + +以下的指令分别对应 32bit 和 64bit ARM 板的 C 和 C++ 的交叉编译工具链的安装。你需要根据你 ARM 板的类型正确地安装交叉编译工具链,如果你的 ARM 板是 64bit SoC 架构,只需要安装 64bit 交叉编译工具链,如果你的 ARM板是 32bit SoC 架构,只需要安装 32bit 的交叉编译工具链。 + +安装 **ARM 32 bits 交叉编译工具链**: + +``` + sudo apt-get install gcc-arm-linux-gnueabi g++-arm-linux-gnueabi +``` + +安装 **ARM 64 bits 交叉编译工具链**: + +``` +sudo apt-get install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu +``` + +#### 交叉编译 Livox-SDK + +以 **ARM 32 bits 交叉编译工具链**为例,在 Livox SDK 目录中,执行以下指令交叉编译工程: + +``` +cd Livox-SDK +cd build && \ +cmake .. -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_C_COMPILER=arm-linux-gnueabi-gcc -DCMAKE_CXX_COMPILER=arm-linux-gnueabi-g++ +make +``` + +以 **ARM 64 bits 交叉编译工具链**为例,在 Livox SDK 目录中,执行以下指令交叉编译工程: + +``` +cd Livox-SDK +cd build && \ +cmake .. -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_C_COMPILER=aarch64-linux-gnu-gcc -DCMAKE_CXX_COMPILER=aarch64-linux-gnu-g++ +make +``` + +**注意:** + +- gcc交叉编译器的版本需要支持 C ++11 标准 + +## 4.2 运行 Livox SDK 样例 + +Livox SDK 中提供了两种类型的示例 : Sample/Lidar 和 Sample/Hub, 分别展示了 Livox SDK 直接连接 Livox LiDAR 和通过 Livox Hub 连接的情况下,如何配置 Livox 雷达和接收点云数据。Sample 运行的时序如下图所示 : + +![](doc/images/sample.png) + +### 4.2.1 Ubuntu 18.04/16.04 /14.04 LTS +对于 Ubuntu 18.04/16.04/14.04 LTS 系统,如果直接连接 Livox LiDAR,则运行 *lidar_sample* : +``` +cd sample/lidar && ./lidar_sample +``` +或者如果通过 Livox Hub 连接雷达,则运行 *hub_sample* : +``` +cd sample/hub && ./hub_sample +``` +### 4.2.2 Windows 7/10 +在完成 4.1.2 章节中 Livox SDK 编译后,你可以分别在 {Livox-SDK}\build\sample\hub\Debug 或者 {Livox-SDK}\build\sample\lidar\Debug 文件夹中找到 `hub_sample.exe` 或者 `lidar_sample.exe` 。 + +直接运行以上的程序,然后你就可以看到以下信息: + +![](doc/images/sdk_init.png) + +### 4.3 连接指定的 LiDAR + +默认情况下,我们提供的 Samples 会连接局域网络中的所有广播设备。有两种方式可以连接指定的 LiDAR 设备 + +* 运行 sample 并指定输入程序选项 + +* 在源代码中编辑 Broadcast Code list + +**注意:** + +每个 Livox LiDAR 都拥有一个唯一的广播码 。 广播码包含了序列号和一个额外的数字 (1,2, or 3)。序列号可以 LiDAR 机身找到 (在QR 码下面)。广播码在你想要连接指定的 LiDAR 时可能会用到. 具体的格式如下图所示 : + +![Broadcast Code](doc/images/broadcast_code.png) + +#### 4.3.1 程序选项 + +我们提供了以下程序选项去连接指定的设备和生成日志文件 : +``` +[-c]:Register LiDAR units by Broadcast Code. Connect the registered units ONLY. +[-l]:Save the log file(In the executable file's directory). +[-h]:Show help. +``` +这里是示例 : +``` +./lidar_sample -c "00000000000002&00000000000003&00000000000004" -l +./hub_sample -c "00000000000001" -l +``` + +#### 4.3.2 编辑广播码 + +注释以下的代码块: + +``` +/** Connect all the broadcast device. */ +int lidar_count = 0; +char broadcast_code_list[kMaxLidarCount][kBroadcastCodeSize]; +``` + +在编译前移除以下代码块的注释,并且替换 broadcast code lists 为你指定的LiDAR 的广播码,对于 LiDAR sample ({Livox-SDK}/sample/lidar/main.c) 和 Hub sample ({Livox-SDK}/sample/hub/main.c),设置 BROADCAST_CODE_LIST_SIZE 并且替换 在`main.c` 的 broadcast code lists。 + +``` +/** Connect the broadcast device in list, please input the broadcast code and modify the BROADCAST_CODE_LIST_SIZE. */ +/*#define BROADCAST_CODE_LIST_SIZE 3 +int lidar_count = BROADCAST_CODE_LIST_SIZE; +char broadcast_code_list[kMaxLidarCount][kBroadcastCodeSize] = { + "000000000000002", + "000000000000003", + "000000000000004" +};*/ +``` + +### 4.4 生成 lvx 文件 + +我们为 Hub 连接和 LiDAR 直连的方式都提供了 C++ 生成 lvx 文件示例. 你可以通过 `4.2.1` and `4.2.2` 中描述的相同方式去运行它们。 + +#### 4.4.1 程序选项 + +你可以使用 `4.3.1` 提到的程序选项去连接指定的设备和生成日志文件, 我们为 lvx 文件提供了两个新的选项: +``` +[-t] Time to save point cloud to the lvx file.(unit: s) +[-p] Get the extrinsic parameter from standard extrinsic.xml file(The same as viewer) in the executable file's directory.(Especially for LiDAR unit(s) as the hub will calculate the extrinsic parameter by itself) +``` +这里是示例 : +``` +./lidar_lvx_sample -c "00000000000002&00000000000003&00000000000004" -l -t 10 -p +./hub_lvx_sample -c "00000000000001" -l -t 10 +``` + +# 5 支持 + +你可以通过以下方式获取 Livox 的技术支持 : +* 发送邮件到 dev@livoxtech.com 描述清楚问题和使用场景 +* Github Issues diff --git a/doc/Livox_LiDAR_SDK_API_Reference_V2.1.0.pdf b/doc/Livox_LiDAR_SDK_API_Reference_V2.1.0.pdf new file mode 100644 index 0000000000000000000000000000000000000000..b57b69604bce2d47fcfbe678f7e7fb2b92439d51 GIT binary patch literal 220306 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%0Dg7EWSD4^ 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

UG?CFj; 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 I6&bYu0llyytpET3 literal 0 HcmV?d00001 diff --git a/docs/_fast_c_r_c_8h.html b/docs/_fast_c_r_c_8h.html index 5552f2c..b33c27e 100644 --- a/docs/_fast_c_r_c_8h.html +++ b/docs/_fast_c_r_c_8h.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: sdk_core/include/third_party/FastCRC/FastCRC.h File Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,40 @@ - + - - - - +
+
@@ -112,7 +130,7 @@ Classes + doxygen 1.8.11
diff --git a/docs/_fast_c_r_c_8h_source.html b/docs/_fast_c_r_c_8h_source.html index 1dfcb80..c436916 100644 --- a/docs/_fast_c_r_c_8h_source.html +++ b/docs/_fast_c_r_c_8h_source.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: sdk_core/include/third_party/FastCRC/FastCRC.h Source File @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,40 @@ - + - - - - + +
@@ -91,101 +109,20 @@ $(document).ready(function(){initNavTree('_fast_c_r_c_8h_source.html','');});
FastCRC.h
-Go to the documentation of this file.
1 /* FastCRC library code is placed under the MIT license
-
2  * Copyright (c) 2014,2015 Frank Bosing
-
3  *
-
4  * Permission is hereby granted, free of charge, to any person obtaining
-
5  * a copy of this software and associated documentation files (the
-
6  * "Software"), to deal in the Software without restriction, including
-
7  * without limitation the rights to use, copy, modify, merge, publish,
-
8  * distribute, sublicense, and/or sell copies of the Software, and to
-
9  * permit persons to whom the Software is furnished to do so, subject to
-
10  * the following conditions:
-
11  *
-
12  * The above copyright notice and this permission notice shall be
-
13  * included in all copies or substantial portions of the Software.
-
14  *
-
15  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-
16  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-
17  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-
18  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
-
19  * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
-
20  * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-
21  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-
22  * SOFTWARE.
-
23  */
-
24 
-
25 
-
26 // Teensy 3.0, Teensy 3.1:
-
27 // See K20P64M72SF1RM.pdf (Kinetis), Pages 638 - 641 for documentation of CRC Device
-
28 // See KINETIS_4N30D.pdf for Errata (Errata ID 2776)
-
29 //
-
30 // So, ALL HW-calculations are done as 32 bit.
-
31 //
-
32 //
-
33 //
-
34 // Thanks to:
-
35 // - Catalogue of parametrised CRC algorithms, CRC RevEng
-
36 // http://reveng.sourceforge.net/crc-catalogue/
-
37 //
-
38 // - Danjel McGougan (CRC-Table-Generator)
-
39 //
-
40 
-
41 //
-
42 // modify from FastCRC library @ 2018/11/20
-
43 //
-
44 
-
45 #ifndef FASTCRC_FASTCRC_H_
-
46 #define FASTCRC_FASTCRC_H_
-
47 
-
48 #include <stdint.h>
-
49 
-
50 
-
51 // ================= 16-BIT CRC ===================
-
52 
-
53 class FastCRC16 {
-
54 public:
-
55  FastCRC16(uint16_t seed);
-
56 
-
57  // change function name from mcrf4xx_upd to mcrf4xx
-
58  uint16_t mcrf4xx_calc(const uint8_t *data,const uint16_t datalen); // Equivalent to _crc_ccitt_update() in crc16.h from avr_libc
-
59 
-
60 private:
-
61  uint16_t seed_;
-
62 
-
63 };
-
64 
-
65 // ================= 32-BIT CRC ===================
-
66 
-
67 class FastCRC32 {
-
68 public:
-
69  FastCRC32(uint32_t seed);
-
70 
-
71  // change function name from crc32_upd to crc32
-
72  uint32_t crc32_calc(const uint8_t *data, uint16_t len); // Call for subsequent calculations with previous seed
-
73 
-
74 private:
-
75  uint32_t seed_;
-
76 };
-
77 
-
78 #endif // FASTCRC_FASTCRC_H_
-
79 
+Go to the documentation of this file.
1 /* FastCRC library code is placed under the MIT license
2  * Copyright (c) 2014,2015 Frank Bosing
3  *
4  * Permission is hereby granted, free of charge, to any person obtaining
5  * a copy of this software and associated documentation files (the
6  * "Software"), to deal in the Software without restriction, including
7  * without limitation the rights to use, copy, modify, merge, publish,
8  * distribute, sublicense, and/or sell copies of the Software, and to
9  * permit persons to whom the Software is furnished to do so, subject to
10  * the following conditions:
11  *
12  * The above copyright notice and this permission notice shall be
13  * included in all copies or substantial portions of the Software.
14  *
15  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
19  * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
20  * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
21  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22  * SOFTWARE.
23  */
24 
25 
26 // Teensy 3.0, Teensy 3.1:
27 // See K20P64M72SF1RM.pdf (Kinetis), Pages 638 - 641 for documentation of CRC Device
28 // See KINETIS_4N30D.pdf for Errata (Errata ID 2776)
29 //
30 // So, ALL HW-calculations are done as 32 bit.
31 //
32 //
33 //
34 // Thanks to:
35 // - Catalogue of parametrised CRC algorithms, CRC RevEng
36 // http://reveng.sourceforge.net/crc-catalogue/
37 //
38 // - Danjel McGougan (CRC-Table-Generator)
39 //
40 
41 //
42 // modify from FastCRC library @ 2018/11/20
43 //
44 
45 #ifndef FASTCRC_FASTCRC_H_
46 #define FASTCRC_FASTCRC_H_
47 
48 #include <stdint.h>
49 
50 
51 // ================= 16-BIT CRC ===================
52 
53 class FastCRC16 {
54 public:
55  FastCRC16(uint16_t seed);
56 
57  // change function name from mcrf4xx_upd to mcrf4xx
58  uint16_t mcrf4xx_calc(const uint8_t *data,const uint16_t datalen); // Equivalent to _crc_ccitt_update() in crc16.h from avr_libc
59 
60 private:
61  uint16_t seed_;
62 
63 };
64 
65 // ================= 32-BIT CRC ===================
66 
67 class FastCRC32 {
68 public:
69  FastCRC32(uint32_t seed);
70 
71  // change function name from crc32_upd to crc32
72  uint32_t crc32_calc(const uint8_t *data, uint16_t len); // Call for subsequent calculations with previous seed
73 
74 private:
75  uint32_t seed_;
76 };
77 
78 #endif // FASTCRC_FASTCRC_H_
79 
uint16_t mcrf4xx_calc(const uint8_t *data, const uint16_t datalen)
+ + +
basic_data data
Definition: format.h:764
+
FastCRC16(uint16_t seed)
-
basic_data data
Definition: format.h:764
- -
FastCRC16(uint16_t seed)
-
uint32_t crc32_calc(const uint8_t *data, uint16_t len)
-
uint16_t mcrf4xx_calc(const uint8_t *data, const uint16_t datalen)
-
FastCRC32(uint32_t seed)
- diff --git a/docs/_r_e_a_d_m_e_8md.html b/docs/_r_e_a_d_m_e_8md.html index da374e4..a25fa2f 100644 --- a/docs/_r_e_a_d_m_e_8md.html +++ b/docs/_r_e_a_d_m_e_8md.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: README.md File Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,40 @@ - + - - - - + +
@@ -91,6 +109,8 @@ $(document).ready(function(){initNavTree('_r_e_a_d_m_e_8md.html','');});
README.md File Reference
@@ -99,7 +119,7 @@ $(document).ready(function(){initNavTree('_r_e_a_d_m_e_8md.html','');}); + doxygen 1.8.11 diff --git a/docs/_r_e_a_d_m_e_8md_source.html b/docs/_r_e_a_d_m_e_8md_source.html new file mode 100644 index 0000000..c4c66c2 --- /dev/null +++ b/docs/_r_e_a_d_m_e_8md_source.html @@ -0,0 +1,124 @@ + + + + + + +Livox SDK API: README.md Source File + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Livox SDK API +  V2.1.0 +
+
+
+ + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
README.md
+
+
+Go to the documentation of this file.
1 # 1 Introduction
2 
3 Livox SDK is the software development kit designed for all Livox products. It is developed based on C/C++ following Livox SDK Communication Protocol, and provides easy-to-use C style API. With Livox SDK, users can quickly connect to Livox products and receive point cloud data.
4 
5 Livox SDK consists of Livox SDK communication protocol, Livox SDK core, Livox SDK API, Linux sample, and ROS demo.
6 
7 ## Prerequisites
8 * Ubuntu 14.04/Ubuntu 16.04/Ubuntu 18.04, both x86 and ARM (Nvidia TX2)
9 * Windows 7/10, Visual Studio 2015/2017
10 * C++11 compiler
11 
12 # 2 Livox SDK Communication Protocol
13 
14 Livox SDK communication protocol opens to all users. It is the communication protocol between user programs and Livox products. The protocol consists of control commands and data format. Please refer to the [Livox SDK Communication Protocol](<https://github.com/Livox-SDK/Livox-SDK/wiki/Livox-SDK-Communication-Protocol>) for detailed information.
15 
16 # 3 Livox SDK Core
17 
18 Livox SDK provides the implementation of control commands and point cloud data transmission, as well as the C/C++ API. The basic structure of Livox SDK core is shown as below:
19 
20 ![Livox SDK Architecture](doc/images/sdk.png)
21 
22 User Datagram Protocol (UDP) is used for communication between Livox SDK and LiDAR sensors. Please refer to the Livox SDK Communication Protocol for further information. Point cloud data handler supports point cloud data transmission, while command handler receives and sends control commands. And the C/C++ API is based on command handler and point cloud data handler.
23 
24 The Livox LiDAR sensors can be connected to host directly or through the Livox Hub. Livox SDK supports both connection methods. When LiDAR units are connected to host directly, the host will establish communication with each LiDAR unit individually. And if the LiDAR units connect to host through Hub, then the host only communicates with the Livox Hub while the Hub communicates with each LiDAR unit.
25 
26 # 4 Livox SDK API
27 
28 Livox SDK API provides a set of C style functions which can be conveniently integrated in C/C++ programs. Please refer to the [Livox SDK API Reference](https://livox-sdk.github.io/Livox-SDK/) for further information.
29 
30 ## 4.1 Installation
31 The installation procedures in Ubuntu 18.04/16.04/14.04 LTS and Windows 7/10 are shown here as examples. For Ubuntu 18.04/16.04/14.04 32-bit LTS and Mac, you can get it in [Livox-SDK wiki](https://github.com/Livox-SDK/Livox-SDK/wiki).
32 ### 4.1.1 Ubuntu 18.04/16.04/14.04 LTS
33 #### Dependencies
34 Livox SDK requires [CMake 3.0.0+](https://cmake.org/) as dependencies. You can install these packages using apt:
35 ```
36 sudo apt install cmake pkg-config
37 ```
38 #### Compile Livox SDK
39 
40 In the Livox SDK directory, run the following commands to compile the project:
41 ```
42 git clone https://github.com/Livox-SDK/Livox-SDK.git
43 cd Livox-SDK
44 sudo ./third_party/apr/apr_build.sh
45 cd build && cmake ..
46 make
47 sudo make install
48 ```
49 ### 4.1.2 Windows 7/10
50 #### Dependencies
51 Livox SDK supports Visual Studio 2015/2017 and requires install [CMake 3.0.0+](https://cmake.org/) as dependencies.
52 
53 In the Livox SDK directory, run the following commands to create the Visual Studio solution file.
54 Generate the 32-bit project:
55 
56 ```
57 .\third_party\apr\apr_build.bat
58 cd build && \
59 cmake ..
60 ```
61 Generate the 64-bit project:
62 ```
63 cd Livox-SDK
64 .\third_party\apr\apr_build.bat amd64
65 cd build && \
66 cmake .. -G "Visual Studio 15 2017 Win64"
67 ```
68 #### Compile Livox SDK
69 You can now compile the Livox SDK in Visual Studio.
70 
71 ### 4.1.3 ARM-Linux Cross Compile
72 
73 The procedure of cross compile Livox-SDK in ARM-Linux are shown below。
74 
75 #### Dependencies
76 
77 Host machine requires install cmake and gcc。You can install these packages using apt:
78 
79 ```
80 sudo apt install cmake gcc
81 ```
82 
83 #### Cross Compile Toolchain
84 
85 If your ARM board vendor provides a cross compile toolchain, you can skip the following step of installing the toolchain and use the vendor-supplied cross compile toolchain instead.
86 
87 The following commands will install C and C++ cross compiler toolchains for 32bit and 64bit ARM board. You need to install the correct toolchain for your ARM board. For 64bit SoC ARM board, only install 64bit toolchain, and for 32bit SoC ARM board, only install 32bit toolchain.
88 
89 Install **ARM 32 bits cross compile toolchain**:
90 
91 ```
92  sudo apt-get install gcc-arm-linux-gnueabi g++-arm-linux-gnueabi
93 ```
94 
95 Install **ARM 64 bits cross compile toolchain**:
96 
97 ```
98 sudo apt-get install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu
99 ```
100 
101 #### Cross Compile Livox-SDK
102 
103 For **ARM 32 bits toolchain**,In the Livox SDK directory,run the following commands to cross compile the project:
104 
105 ```
106 cd Livox-SDK
107 cd build && \
108 cmake .. -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_C_COMPILER=arm-linux-gnueabi-gcc -DCMAKE_CXX_COMPILER=arm-linux-gnueabi-g++
109 make
110 ```
111 
112 For **ARM 64 bits toolchain**,In the Livox SDK directory,run the following commands to cross compile the project:
113 
114 ```
115 cd Livox-SDK
116 cd build && \
117 cmake .. -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_C_COMPILER=aarch64-linux-gnu-gcc -DCMAKE_CXX_COMPILER=aarch64-linux-gnu-g++
118 make
119 ```
120 
121 **Note:**
122 
123 - gcc cross compiler need to support C ++11 standard
124 
125 ## 4.2 Run Livox SDK Sample
126 Two samples are provided in Sample/Lidar and Sample/Hub, which demonstrate how to configure Livox LiDAR units and receive the point cloud data when directly connecting Livox SDK to LiDAR units or by using a Livox Hub, respectively. The sequence diagram is shown as below:
127 
128 ![](doc/images/sample.png)
129 
130 ### 4.2.1 Ubuntu 18.04/16.04 /14.04 LTS
131 For Ubuntun 18.04/16.04/14.04 LTS, run the *lidar_sample* if connect with the LiDAR unit(s):
132 ```
133 cd sample/lidar && ./lidar_sample
134 ```
135 or run the *hub_sample* if connect with the hub unit(s):
136 ```
137 cd sample/hub && ./hub_sample
138 ```
139 ### 4.2.2 Windows 7/10
140 After compiling the Livox SDK as shown in section 4.1.2, you can find `hub_sample.exe` or `lidar_sample.exe` in the {Livox-SDK}\build\sample\hub\Debug or {Livox-SDK}\build\sample\lidar\Debug folder, respectively, which can be run directly.
141 
142 Then you can see the information as below:
143 
144 ![](doc/images/sdk_init.png)
145 
146 ### 4.3 Connect to the specific LiDAR units
147 
148 Samples we provided will connect all the broadcast device in you LAN in default.There are two ways to connect the specific units:
149 
150 * run sample with input options
151 
152 * edit the Broadcast Code list in source code
153 
154 **NOTE:**
155 
156 Each Livox LiDAR unit owns a unique Broadcast Code . The broadcast code consists of its serial number and an additional number (1,2, or 3). The serial number can be found on the body of the LiDAR unit (below the QR code).The Broadcast Code may be used when you want to connect to the specific LiDAR unit(s). The detailed format is shown as below:
157 
158 ![Broadcast Code](doc/images/broadcast_code.png)
159 
160 #### 4.3.1 Program Options
161 
162 We provide the following program options for connecting the specific units and saving log file:
163 ```
164 [-c]:Register LiDAR units by Broadcast Code. Connect the registered units ONLY.
165 [-l]:Save the log file(In the executable file's directory).
166 [-h]:Show help.
167 ```
168 Here is the example:
169 ```
170 ./lidar_sample -c "00000000000002&00000000000003&00000000000004" -l
171 ./hub_sample -c "00000000000001" -l
172 ```
173 
174 #### 4.3.2 Edit Broadcast Code List
175 
176  Comment the following code section:
177 
178 ```
179 /** Connect all the broadcast device. */
180 int lidar_count = 0;
181 char broadcast_code_list[kMaxLidarCount][kBroadcastCodeSize];
182 ```
183 
184 Remove the comment of the following code section, set the BROADCAST_CODE_LIST_SIZE and replace the broadcast code lists in the `main.c` for both LiDAR sample ({Livox-SDK}/sample/lidar/main.c) and Hub sample ({Livox-SDK}/sample/hub/main.c) with the broadcast code of your devices before building.
185 
186 ```
187 /** Connect the broadcast device in list, please input the broadcast code and modify the BROADCAST_CODE_LIST_SIZE. */
188 /*#define BROADCAST_CODE_LIST_SIZE 3
189 int lidar_count = BROADCAST_CODE_LIST_SIZE;
190 char broadcast_code_list[kMaxLidarCount][kBroadcastCodeSize] = {
191  "000000000000002",
192  "000000000000003",
193  "000000000000004"
194 };*/
195 ```
196 
197 ### 4.4 Generate the lvx file
198 
199 We provide the C++ sample to generate the lvx file for hub and LiDAR unit(s). You can use the same way in `4.2.1` and `4.2.2` to run them.
200 
201 #### 4.4.1 Program Options
202 
203 You can alse use the program options in `4.3.1` to connect specific device and generate the log file, and we provide two new options for lvx file:
204 ```
205 [-t] Time to save point cloud to the lvx file.(unit: s)
206 [-p] Get the extrinsic parameter from standard extrinsic.xml file(The same as viewer) in the executable file's directory.(Especially for LiDAR unit(s) as the hub will calculate the extrinsic parameter by itself)
207 ```
208 Here is the example:
209 ```
210 ./lidar_lvx_sample -c "00000000000002&00000000000003&00000000000004" -l -t 10 -p
211 ./hub_lvx_sample -c "00000000000001" -l -t 10
212 ```
213 
214 # 5 Support
215 
216 You can get support from Livox with the following methods:
217 * Send email to dev@livoxtech.com with a clear description of your problem and your setup
218 * Github Issues
+
+ + + + diff --git a/docs/android__sink_8h.html b/docs/android__sink_8h.html index fbbb580..6ac66ef 100644 --- a/docs/android__sink_8h.html +++ b/docs/android__sink_8h.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: sdk_core/include/third_party/spdlog/spdlog/sinks/android_sink.h File Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,40 @@ - + - - - - + +
@@ -144,9 +162,7 @@ Functions  

Macro Definition Documentation

- -

◆ SPDLOG_ANDROID_RETRIES

- +
@@ -156,7 +172,7 @@ Functions
-

Definition at line 24 of file android_sink.h.

+

Definition at line 24 of file android_sink.h.

@@ -168,7 +184,7 @@ Functions + doxygen 1.8.11
diff --git a/docs/android__sink_8h_source.html b/docs/android__sink_8h_source.html index 6655dc8..a9a0e00 100644 --- a/docs/android__sink_8h_source.html +++ b/docs/android__sink_8h_source.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: sdk_core/include/third_party/spdlog/spdlog/sinks/android_sink.h Source File @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,40 @@ - + - - - - + +
@@ -91,169 +109,48 @@ $(document).ready(function(){initNavTree('android__sink_8h_source.html','');});
android_sink.h
-Go to the documentation of this file.
1 //
-
2 // Copyright(c) 2015 Gabi Melman.
-
3 // Distributed under the MIT License (http://opensource.org/licenses/MIT)
-
4 //
-
5 
-
6 #pragma once
-
7 
-
8 #ifndef SPDLOG_H
-
9 #include "spdlog/spdlog.h"
-
10 #endif
-
11 
- - -
14 #include "spdlog/details/os.h"
-
15 #include "spdlog/sinks/base_sink.h"
-
16 
-
17 #include <android/log.h>
-
18 #include <chrono>
-
19 #include <mutex>
-
20 #include <string>
-
21 #include <thread>
-
22 
-
23 #if !defined(SPDLOG_ANDROID_RETRIES)
-
24 #define SPDLOG_ANDROID_RETRIES 2
-
25 #endif
-
26 
-
27 namespace spdlog {
-
28 namespace sinks {
-
29 
-
30 /*
-
31  * Android sink (logging using __android_log_write)
-
32  */
-
33 template<typename Mutex>
-
34 class android_sink final : public base_sink<Mutex>
-
35 {
-
36 public:
-
37  explicit android_sink(std::string tag = "spdlog", bool use_raw_msg = false)
-
38  : tag_(std::move(tag))
-
39  , use_raw_msg_(use_raw_msg)
-
40  {
-
41  }
-
42 
-
43 protected:
-
44  void sink_it_(const details::log_msg &msg) override
-
45  {
-
46  const android_LogPriority priority = convert_to_android_(msg.level);
-
47  fmt::memory_buffer formatted;
-
48  if (use_raw_msg_)
-
49  {
- -
51  }
-
52  else
-
53  {
-
54  sink::formatter_->format(msg, formatted);
-
55  }
-
56  formatted.push_back('\0');
-
57  const char *msg_output = formatted.data();
-
58 
-
59  // See system/core/liblog/logger_write.c for explanation of return value
-
60  int ret = __android_log_write(priority, tag_.c_str(), msg_output);
-
61  int retry_count = 0;
-
62  while ((ret == -11 /*EAGAIN*/) && (retry_count < SPDLOG_ANDROID_RETRIES))
-
63  {
- -
65  ret = __android_log_write(priority, tag_.c_str(), msg_output);
-
66  retry_count++;
-
67  }
-
68 
-
69  if (ret < 0)
-
70  {
-
71  throw spdlog_ex("__android_log_write() failed", ret);
-
72  }
-
73  }
-
74 
-
75  void flush_() override {}
-
76 
-
77 private:
-
78  static android_LogPriority convert_to_android_(spdlog::level::level_enum level)
-
79  {
-
80  switch (level)
-
81  {
- -
83  return ANDROID_LOG_VERBOSE;
- -
85  return ANDROID_LOG_DEBUG;
- -
87  return ANDROID_LOG_INFO;
- -
89  return ANDROID_LOG_WARN;
-
90  case spdlog::level::err:
-
91  return ANDROID_LOG_ERROR;
- -
93  return ANDROID_LOG_FATAL;
-
94  default:
-
95  return ANDROID_LOG_DEFAULT;
-
96  }
-
97  }
-
98 
-
99  std::string tag_;
-
100  bool use_raw_msg_;
-
101 };
-
102 
- - -
105 } // namespace sinks
-
106 
-
107 // Create and register android syslog logger
-
108 
-
109 template<typename Factory = default_factory>
-
110 inline std::shared_ptr<logger> android_logger_mt(const std::string &logger_name, const std::string &tag = "spdlog")
-
111 {
-
112  return Factory::template create<sinks::android_sink_mt>(logger_name, tag);
-
113 }
-
114 
-
115 template<typename Factory = default_factory>
-
116 inline std::shared_ptr<logger> android_logger_st(const std::string &logger_name, const std::string &tag = "spdlog")
-
117 {
-
118  return Factory::template create<sinks::android_sink_st>(logger_name, tag);
-
119 }
-
120 
-
121 } // namespace spdlog
+Go to the documentation of this file.
1 //
2 // Copyright(c) 2015 Gabi Melman.
3 // Distributed under the MIT License (http://opensource.org/licenses/MIT)
4 //
5 
6 #pragma once
7 
8 #ifndef SPDLOG_H
9 #include "spdlog/spdlog.h"
10 #endif
11 
14 #include "spdlog/details/os.h"
15 #include "spdlog/sinks/base_sink.h"
16 
17 #include <android/log.h>
18 #include <chrono>
19 #include <mutex>
20 #include <string>
21 #include <thread>
22 
23 #if !defined(SPDLOG_ANDROID_RETRIES)
24 #define SPDLOG_ANDROID_RETRIES 2
25 #endif
26 
27 namespace spdlog {
28 namespace sinks {
29 
30 /*
31  * Android sink (logging using __android_log_write)
32  */
33 template<typename Mutex>
34 class android_sink final : public base_sink<Mutex>
35 {
36 public:
37  explicit android_sink(std::string tag = "spdlog", bool use_raw_msg = false)
38  : tag_(std::move(tag))
39  , use_raw_msg_(use_raw_msg)
40  {
41  }
42 
43 protected:
44  void sink_it_(const details::log_msg &msg) override
45  {
46  const android_LogPriority priority = convert_to_android_(msg.level);
47  fmt::memory_buffer formatted;
48  if (use_raw_msg_)
49  {
51  }
52  else
53  {
54  sink::formatter_->format(msg, formatted);
55  }
56  formatted.push_back('\0');
57  const char *msg_output = formatted.data();
58 
59  // See system/core/liblog/logger_write.c for explanation of return value
60  int ret = __android_log_write(priority, tag_.c_str(), msg_output);
61  int retry_count = 0;
62  while ((ret == -11 /*EAGAIN*/) && (retry_count < SPDLOG_ANDROID_RETRIES))
63  {
65  ret = __android_log_write(priority, tag_.c_str(), msg_output);
66  retry_count++;
67  }
68 
69  if (ret < 0)
70  {
71  throw spdlog_ex("__android_log_write() failed", ret);
72  }
73  }
74 
75  void flush_() override {}
76 
77 private:
78  static android_LogPriority convert_to_android_(spdlog::level::level_enum level)
79  {
80  switch (level)
81  {
83  return ANDROID_LOG_VERBOSE;
85  return ANDROID_LOG_DEBUG;
87  return ANDROID_LOG_INFO;
89  return ANDROID_LOG_WARN;
90  case spdlog::level::err:
91  return ANDROID_LOG_ERROR;
93  return ANDROID_LOG_FATAL;
94  default:
95  return ANDROID_LOG_DEFAULT;
96  }
97  }
98 
99  std::string tag_;
100  bool use_raw_msg_;
101 };
102 
105 } // namespace sinks
106 
107 // Create and register android syslog logger
108 
109 template<typename Factory = default_factory>
110 inline std::shared_ptr<logger> android_logger_mt(const std::string &logger_name, const std::string &tag = "spdlog")
111 {
112  return Factory::template create<sinks::android_sink_mt>(logger_name, tag);
113 }
114 
115 template<typename Factory = default_factory>
116 inline std::shared_ptr<logger> android_logger_st(const std::string &logger_name, const std::string &tag = "spdlog")
117 {
118  return Factory::template create<sinks::android_sink_st>(logger_name, tag);
119 }
120 
121 } // namespace spdlog
std::shared_ptr< logger > android_logger_st(const std::string &logger_name, const std::string &tag="spdlog")
Definition: android_sink.h:116
+ + +
void sleep_for_millis(int milliseconds) noexcept
Definition: os.h:351
+ +
void sink_it_(const details::log_msg &msg) override
Definition: android_sink.h:44
+ +
std::unique_ptr< spdlog::formatter > formatter_
Definition: sink.h:50
+
std::shared_ptr< logger > android_logger_mt(const std::string &logger_name, const std::string &tag="spdlog")
Definition: android_sink.h:110
+ + +
Definition: format.h:297
+ +
#define SPDLOG_ANDROID_RETRIES
Definition: android_sink.h:24
+ + + +
Definition: async.h:27
+ +
android_sink(std::string tag="spdlog", bool use_raw_msg=false)
Definition: android_sink.h:37
+
level::level_enum level
Definition: log_msg.h:42
+ + +
void append_string_view(spdlog::string_view_t view, fmt::basic_memory_buffer< char, Buffer_Size > &dest)
Definition: fmt_helper.h:30
+ +
level::level_enum level() const
Definition: sink.h:40
+
void push_back(const T &value)
Definition: core.h:278
+ + + +
const string_view_t payload
Definition: log_msg.h:52
+ +
- - - - -
std::unique_ptr< spdlog::formatter > formatter_
Definition: sink.h:50
-
void sleep_for_millis(int milliseconds) noexcept
Definition: os.h:351
- -
void append_string_view(spdlog::string_view_t view, fmt::basic_memory_buffer< char, Buffer_Size > &dest)
Definition: fmt_helper.h:30
- -
void sink_it_(const details::log_msg &msg) override
Definition: android_sink.h:44
- - -
void push_back(const T &value)
Definition: core.h:278
- - -
Definition: async.h:27
-
#define SPDLOG_ANDROID_RETRIES
Definition: android_sink.h:24
- - - -
const string_view_t payload
Definition: log_msg.h:52
- -
level::level_enum level
Definition: log_msg.h:42
- - - -
android_sink(std::string tag="spdlog", bool use_raw_msg=false)
Definition: android_sink.h:37
-
std::shared_ptr< logger > android_logger_st(const std::string &logger_name, const std::string &tag="spdlog")
Definition: android_sink.h:116
-
std::shared_ptr< logger > android_logger_mt(const std::string &logger_name, const std::string &tag="spdlog")
Definition: android_sink.h:110
- -
Definition: format.h:297
- -
level::level_enum level() const
Definition: sink.h:40
diff --git a/docs/annotated.html b/docs/annotated.html index ff64040..78f06cf 100644 --- a/docs/annotated.html +++ b/docs/annotated.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Class List @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -150,54 +170,49 @@ $(document).ready(function(){initNavTree('annotated.html','');});  Cint_checker< true >  Cint_traits  Cint_type_checker - Cinteger_sequence - Cis_integer - Cis_like_std_stringReturn true value if T has std::string interface, like std::string_view - Cis_like_std_string< fmt::basic_string_view< Char > > - Cis_output_iterator - Cis_range_ - Cis_range_< T, typename std::conditional< false, conditional_helper< decltype(internal::declval< T >().begin()), decltype(internal::declval< T >().end())>, void >::type > - Cis_streamable - Cis_string - Cis_string< const std::FILE * > - Cis_string< std::FILE * > - Cis_tuple_like_Tuple_size and tuple_element check - Cis_zero_int - Cit_category - Cit_category< T * > - Cit_category< T, typename void_< typename T::iterator_category >::type > - Clocale_ref - Cmake_integer_sequence - Cmake_integer_sequence< T, 0, Ns... > - Cmake_unsigned_or_bool - Cmake_unsigned_or_bool< bool > - Cnamed_arg - Cnamed_arg_base - Cneeds_conversion - Cno_formatter_error - Cno_thousands_sep - Cnull - Cnull_terminating_iterator - Cprecision_adapter - Cprecision_checker - Cprettify_handler - Cprintf_precision_handler - Cprintf_width_handler - Cresult_of - Cresult_of< F(Args...)> - Cspecs_checker - Cspecs_handler - Cspecs_setter - Cstring_value - Ctest_stream - Ctruncating_iterator - Ctruncating_iterator< OutputIt, std::false_type > - Ctruncating_iterator< OutputIt, std::true_type > - Ctruncating_iterator_base - Cvalue - Cvoid_ - Cwidth_adapter - Cwidth_checker + Cis_integer + Cis_like_std_stringReturn true value if T has std::string interface, like std::string_view + Cis_like_std_string< fmt::basic_string_view< Char > > + Cis_output_iterator + Cis_range_ + Cis_streamable + Cis_string + Cis_string< const std::FILE * > + Cis_string< std::FILE * > + Cis_zero_int + Cit_category + Cit_category< T * > + Cit_category< T, typename void_< typename T::iterator_category >::type > + Clocale_ref + Cmake_unsigned_or_bool + Cmake_unsigned_or_bool< bool > + Cnamed_arg + Cnamed_arg_base + Cneeds_conversion + Cno_formatter_error + Cno_thousands_sep + Cnull + Cnull_terminating_iterator + Cprecision_adapter + Cprecision_checker + Cprettify_handler + Cprintf_precision_handler + Cprintf_width_handler + Cresult_of + Cresult_of< F(Args...)> + Cspecs_checker + Cspecs_handler + Cspecs_setter + Cstring_value + Ctest_stream + Ctruncating_iterator + Ctruncating_iterator< OutputIt, std::false_type > + Ctruncating_iterator< OutputIt, std::true_type > + Ctruncating_iterator_base + Cvalue + Cvoid_ + Cwidth_adapter + Cwidth_checker  Calign_spec  Carg_formatter  Carg_join @@ -434,7 +449,7 @@ $(document).ready(function(){initNavTree('annotated.html','');});
    + doxygen 1.8.11
diff --git a/docs/ansicolor__sink_8h.html b/docs/ansicolor__sink_8h.html index bef5d42..1fe4f7b 100644 --- a/docs/ansicolor__sink_8h.html +++ b/docs/ansicolor__sink_8h.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: sdk_core/include/third_party/spdlog/spdlog/sinks/ansicolor_sink.h File Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,40 @@ - + - - - - + +
@@ -138,7 +156,7 @@ Typedefs + doxygen 1.8.11
diff --git a/docs/ansicolor__sink_8h_source.html b/docs/ansicolor__sink_8h_source.html index 5cfd82d..0237b04 100644 --- a/docs/ansicolor__sink_8h_source.html +++ b/docs/ansicolor__sink_8h_source.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: sdk_core/include/third_party/spdlog/spdlog/sinks/ansicolor_sink.h Source File @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,40 @@ - + - - - - + +
@@ -91,236 +109,78 @@ $(document).ready(function(){initNavTree('ansicolor__sink_8h_source.html','');})
ansicolor_sink.h
-Go to the documentation of this file.
1 //
-
2 // Copyright(c) 2017 spdlog authors.
-
3 // Distributed under the MIT License (http://opensource.org/licenses/MIT)
-
4 //
-
5 
-
6 #pragma once
-
7 
-
8 #ifndef SPDLOG_H
-
9 #include "spdlog/spdlog.h"
-
10 #endif
-
11 
- - -
14 #include "spdlog/details/os.h"
-
15 #include "spdlog/sinks/sink.h"
-
16 
-
17 #include <memory>
-
18 #include <mutex>
-
19 #include <string>
-
20 #include <unordered_map>
-
21 
-
22 namespace spdlog {
-
23 namespace sinks {
-
24 
-
31 template<typename TargetStream, class ConsoleMutex>
-
32 class ansicolor_sink final : public sink
-
33 {
-
34 public:
-
35  using mutex_t = typename ConsoleMutex::mutex_t;
- -
37  : target_file_(TargetStream::stream())
-
38  , mutex_(ConsoleMutex::mutex())
-
39 
-
40  {
-
41  should_do_colors_ = details::os::in_terminal(target_file_) && details::os::is_color_terminal();
-
42  colors_[level::trace] = white;
-
43  colors_[level::debug] = cyan;
-
44  colors_[level::info] = green;
-
45  colors_[level::warn] = yellow + bold;
-
46  colors_[level::err] = red + bold;
-
47  colors_[level::critical] = bold + on_red;
-
48  colors_[level::off] = reset;
-
49  }
-
50 
-
51  ~ansicolor_sink() override = default;
-
52 
-
53  ansicolor_sink(const ansicolor_sink &other) = delete;
-
54  ansicolor_sink &operator=(const ansicolor_sink &other) = delete;
-
55 
-
56  void set_color(level::level_enum color_level, const std::string &color)
-
57  {
-
58  std::lock_guard<mutex_t> lock(mutex_);
-
59  colors_[color_level] = color;
-
60  }
-
61 
-
63  const std::string reset = "\033[m";
-
64  const std::string bold = "\033[1m";
-
65  const std::string dark = "\033[2m";
-
66  const std::string underline = "\033[4m";
-
67  const std::string blink = "\033[5m";
-
68  const std::string reverse = "\033[7m";
-
69  const std::string concealed = "\033[8m";
-
70  const std::string clear_line = "\033[K";
-
71 
-
72  // Foreground colors
-
73  const std::string black = "\033[30m";
-
74  const std::string red = "\033[31m";
-
75  const std::string green = "\033[32m";
-
76  const std::string yellow = "\033[33m";
-
77  const std::string blue = "\033[34m";
-
78  const std::string magenta = "\033[35m";
-
79  const std::string cyan = "\033[36m";
-
80  const std::string white = "\033[37m";
-
81 
-
83  const std::string on_black = "\033[40m";
-
84  const std::string on_red = "\033[41m";
-
85  const std::string on_green = "\033[42m";
-
86  const std::string on_yellow = "\033[43m";
-
87  const std::string on_blue = "\033[44m";
-
88  const std::string on_magenta = "\033[45m";
-
89  const std::string on_cyan = "\033[46m";
-
90  const std::string on_white = "\033[47m";
-
91 
-
92  void log(const details::log_msg &msg) override
-
93  {
-
94  // Wrap the originally formatted message in color codes.
-
95  // If color is not supported in the terminal, log as is instead.
-
96  std::lock_guard<mutex_t> lock(mutex_);
-
97 
-
98  fmt::memory_buffer formatted;
-
99  formatter_->format(msg, formatted);
-
100  if (should_do_colors_ && msg.color_range_end > msg.color_range_start)
-
101  {
-
102  // before color range
-
103  print_range_(formatted, 0, msg.color_range_start);
-
104  // in color range
-
105  print_ccode_(colors_[msg.level]);
-
106  print_range_(formatted, msg.color_range_start, msg.color_range_end);
-
107  print_ccode_(reset);
-
108  // after color range
-
109  print_range_(formatted, msg.color_range_end, formatted.size());
-
110  }
-
111  else // no color
-
112  {
-
113  print_range_(formatted, 0, formatted.size());
-
114  }
-
115  fflush(target_file_);
-
116  }
-
117 
-
118  void flush() override
-
119  {
-
120  std::lock_guard<mutex_t> lock(mutex_);
-
121  fflush(target_file_);
-
122  }
-
123 
-
124  void set_pattern(const std::string &pattern) final
-
125  {
-
126  std::lock_guard<mutex_t> lock(mutex_);
-
127  formatter_ = std::unique_ptr<spdlog::formatter>(new pattern_formatter(pattern));
-
128  }
-
129 
-
130  void set_formatter(std::unique_ptr<spdlog::formatter> sink_formatter) override
-
131  {
-
132  std::lock_guard<mutex_t> lock(mutex_);
-
133  formatter_ = std::move(sink_formatter);
-
134  }
-
135 
- -
137  {
-
138  return should_do_colors_;
-
139  }
-
140 
-
141 private:
-
142  void print_ccode_(const std::string &color_code)
-
143  {
-
144  fwrite(color_code.data(), sizeof(char), color_code.size(), target_file_);
-
145  }
-
146  void print_range_(const fmt::memory_buffer &formatted, size_t start, size_t end)
-
147  {
-
148  fwrite(formatted.data() + start, sizeof(char), end - start, target_file_);
-
149  }
-
150 
-
151  FILE *target_file_;
-
152  mutex_t &mutex_;
-
153 
-
154  bool should_do_colors_;
-
155  std::unordered_map<level::level_enum, std::string, level::level_hasher> colors_;
-
156 };
-
157 
- - -
160 
- - -
163 
-
164 } // namespace sinks
-
165 
-
166 } // namespace spdlog
+Go to the documentation of this file.
1 //
2 // Copyright(c) 2017 spdlog authors.
3 // Distributed under the MIT License (http://opensource.org/licenses/MIT)
4 //
5 
6 #pragma once
7 
8 #ifndef SPDLOG_H
9 #include "spdlog/spdlog.h"
10 #endif
11 
14 #include "spdlog/details/os.h"
15 #include "spdlog/sinks/sink.h"
16 
17 #include <memory>
18 #include <mutex>
19 #include <string>
20 #include <unordered_map>
21 
22 namespace spdlog {
23 namespace sinks {
24 
31 template<typename TargetStream, class ConsoleMutex>
32 class ansicolor_sink final : public sink
33 {
34 public:
35  using mutex_t = typename ConsoleMutex::mutex_t;
37  : target_file_(TargetStream::stream())
38  , mutex_(ConsoleMutex::mutex())
39 
40  {
41  should_do_colors_ = details::os::in_terminal(target_file_) && details::os::is_color_terminal();
42  colors_[level::trace] = white;
43  colors_[level::debug] = cyan;
44  colors_[level::info] = green;
45  colors_[level::warn] = yellow + bold;
46  colors_[level::err] = red + bold;
47  colors_[level::critical] = bold + on_red;
48  colors_[level::off] = reset;
49  }
50 
51  ~ansicolor_sink() override = default;
52 
53  ansicolor_sink(const ansicolor_sink &other) = delete;
54  ansicolor_sink &operator=(const ansicolor_sink &other) = delete;
55 
56  void set_color(level::level_enum color_level, const std::string &color)
57  {
58  std::lock_guard<mutex_t> lock(mutex_);
59  colors_[color_level] = color;
60  }
61 
63  const std::string reset = "\033[m";
64  const std::string bold = "\033[1m";
65  const std::string dark = "\033[2m";
66  const std::string underline = "\033[4m";
67  const std::string blink = "\033[5m";
68  const std::string reverse = "\033[7m";
69  const std::string concealed = "\033[8m";
70  const std::string clear_line = "\033[K";
71 
72  // Foreground colors
73  const std::string black = "\033[30m";
74  const std::string red = "\033[31m";
75  const std::string green = "\033[32m";
76  const std::string yellow = "\033[33m";
77  const std::string blue = "\033[34m";
78  const std::string magenta = "\033[35m";
79  const std::string cyan = "\033[36m";
80  const std::string white = "\033[37m";
81 
83  const std::string on_black = "\033[40m";
84  const std::string on_red = "\033[41m";
85  const std::string on_green = "\033[42m";
86  const std::string on_yellow = "\033[43m";
87  const std::string on_blue = "\033[44m";
88  const std::string on_magenta = "\033[45m";
89  const std::string on_cyan = "\033[46m";
90  const std::string on_white = "\033[47m";
91 
92  void log(const details::log_msg &msg) override
93  {
94  // Wrap the originally formatted message in color codes.
95  // If color is not supported in the terminal, log as is instead.
96  std::lock_guard<mutex_t> lock(mutex_);
97 
98  fmt::memory_buffer formatted;
99  formatter_->format(msg, formatted);
100  if (should_do_colors_ && msg.color_range_end > msg.color_range_start)
101  {
102  // before color range
103  print_range_(formatted, 0, msg.color_range_start);
104  // in color range
105  print_ccode_(colors_[msg.level]);
106  print_range_(formatted, msg.color_range_start, msg.color_range_end);
107  print_ccode_(reset);
108  // after color range
109  print_range_(formatted, msg.color_range_end, formatted.size());
110  }
111  else // no color
112  {
113  print_range_(formatted, 0, formatted.size());
114  }
115  fflush(target_file_);
116  }
117 
118  void flush() override
119  {
120  std::lock_guard<mutex_t> lock(mutex_);
121  fflush(target_file_);
122  }
123 
124  void set_pattern(const std::string &pattern) final
125  {
126  std::lock_guard<mutex_t> lock(mutex_);
127  formatter_ = std::unique_ptr<spdlog::formatter>(new pattern_formatter(pattern));
128  }
129 
130  void set_formatter(std::unique_ptr<spdlog::formatter> sink_formatter) override
131  {
132  std::lock_guard<mutex_t> lock(mutex_);
133  formatter_ = std::move(sink_formatter);
134  }
135 
137  {
138  return should_do_colors_;
139  }
140 
141 private:
142  void print_ccode_(const std::string &color_code)
143  {
144  fwrite(color_code.data(), sizeof(char), color_code.size(), target_file_);
145  }
146  void print_range_(const fmt::memory_buffer &formatted, size_t start, size_t end)
147  {
148  fwrite(formatted.data() + start, sizeof(char), end - start, target_file_);
149  }
150 
151  FILE *target_file_;
152  mutex_t &mutex_;
153 
154  bool should_do_colors_;
155  std::unordered_map<level::level_enum, std::string, level::level_hasher> colors_;
156 };
157 
160 
163 
164 } // namespace sinks
165 
166 } // namespace spdlog
+ + + +
const std::string on_black
Background colors.
+
~ansicolor_sink() override=default
+
const std::string reset
Formatting codes.
+ + +
std::unique_ptr< spdlog::formatter > formatter_
Definition: sink.h:50
+ + + + +
bool is_color_terminal() noexcept
Definition: os.h:388
+ + + + + + + +
std::size_t size() const
Definition: core.h:250
+ + + + +
Definition: async.h:27
+ + + +
level::level_enum level
Definition: log_msg.h:42
+ + + +
bool in_terminal(FILE *file) noexcept
Definition: os.h:410
+ + +
void set_pattern(const std::string &pattern) final
+
color
Definition: color.h:50
+ + +
typename ConsoleMutex::mutex_t mutex_t
+ +
const std::string clear_line
+ + + + + +
void log(const details::log_msg &msg) override
+
void set_color(level::level_enum color_level, const std::string &color)
+ + + +
void set_formatter(std::unique_ptr< spdlog::formatter > sink_formatter) override
+ +
const std::string on_magenta
+ + +
auto end(const C &c) -> decltype(c.end())
Definition: format.h:257
+
ansicolor_sink & operator=(const ansicolor_sink &other)=delete
+
- - - -
typename ConsoleMutex::mutex_t mutex_t
- - - - - -
const std::string on_magenta
-
std::unique_ptr< spdlog::formatter > formatter_
Definition: sink.h:50
-
bool in_terminal(FILE *file) noexcept
Definition: os.h:410
- - - -
std::size_t size() const
Definition: core.h:250
- - -
auto end(const C &c) -> decltype(c.end())
Definition: format.h:257
-
ansicolor_sink & operator=(const ansicolor_sink &other)=delete
-
void set_formatter(std::unique_ptr< spdlog::formatter > sink_formatter) override
- -
const std::string on_black
Background colors.
- - -
void set_color(level::level_enum color_level, const std::string &color)
- - - -
const std::string clear_line
- - - -
Definition: async.h:27
- -
const std::string reset
Formatting codes.
- - - - -
level::level_enum level
Definition: log_msg.h:42
- -
color
Definition: color.h:50
- - - - - - - - - - - - - -
~ansicolor_sink() override=default
-
void set_pattern(const std::string &pattern) final
- - -
bool is_color_terminal() noexcept
Definition: os.h:388
-
void log(const details::log_msg &msg) override
- diff --git a/docs/arrowdown.png b/docs/arrowdown.png new file mode 100644 index 0000000000000000000000000000000000000000..0b63f6d38c4b9ec907b820192ebe9724ed6eca22 GIT binary patch literal 246 zcmVkw!R34#Lv2LOS^S2tZA31X++9RY}n zChwn@Z)Wz*WWHH{)HDtJnq&A2hk$b-y(>?@z0iHr41EKCGp#T5?07*qoM6N<$f(V3Pvj6}9 literal 0 HcmV?d00001 diff --git a/docs/arrowright.png b/docs/arrowright.png new file mode 100644 index 0000000000000000000000000000000000000000..c6ee22f937a07d1dbfc27c669d11f8ed13e2f152 GIT binary patch literal 229 zcmV^P)R?RzRoKvklcaQ%HF6%rK2&ZgO(-ihJ_C zzrKgp4jgO( fd_(yg|3PpEQb#9`a?Pz_00000NkvXXu0mjftR`5K literal 0 HcmV?d00001 diff --git a/docs/async_8h.html b/docs/async_8h.html index 11cf89e..e1188fd 100644 --- a/docs/async_8h.html +++ b/docs/async_8h.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: sdk_core/include/third_party/spdlog/spdlog/async.h File Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,40 @@ - + - - - - + +
@@ -126,12 +144,12 @@ Typedefs - - - - - - + + + + + + @@ -150,7 +168,7 @@ Variables + doxygen 1.8.11 diff --git a/docs/async_8h.js b/docs/async_8h.js index 2770ad9..3be9ced 100644 --- a/docs/async_8h.js +++ b/docs/async_8h.js @@ -3,8 +3,8 @@ var async_8h = [ "async_factory_impl", "structspdlog_1_1async__factory__impl.html", "structspdlog_1_1async__factory__impl" ], [ "async_factory", "async_8h.html#a962b94a80258f9a202d590888349577c", null ], [ "async_factory_nonblock", "async_8h.html#a796f2e548cff4f12a5b2a52b07d3128b", null ], - [ "create_async", "async_8h.html#a220f834b057b45ef730c435bcc60b0aa", null ], - [ "create_async_nb", "async_8h.html#ac5db26987120ac7b1ba0fbefe551ee52", null ], + [ "create_async", "async_8h.html#af77f6ade95bb20dc2cf121403fbe1542", null ], + [ "create_async_nb", "async_8h.html#ae58cce84c661c9d8726ab60c4d40e455", null ], [ "init_thread_pool", "async_8h.html#a17a4d95759b4076827905fd8f6b10d36", null ], [ "thread_pool", "async_8h.html#a6676a1ffb5ea174a2392ab0317bbcff2", null ], [ "default_async_q_size", "async_8h.html#a050e412794a5af8916ef36e4ed100c25", null ] diff --git a/docs/async_8h_source.html b/docs/async_8h_source.html index 36169d6..c82b89c 100644 --- a/docs/async_8h_source.html +++ b/docs/async_8h_source.html @@ -1,10 +1,9 @@ - + - - +Livox SDK API: sdk_core/include/third_party/spdlog/spdlog/async.h Source File @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ @@ -39,22 +41,40 @@

Functions

template<typename Sink , typename... SinkArgs>
std::shared_ptr< spdlog::loggerspdlog::create_async (std::string logger_name, SinkArgs &&... sink_args)
 
template<typename Sink , typename... SinkArgs>
std::shared_ptr< spdlog::loggerspdlog::create_async_nb (std::string logger_name, SinkArgs &&... sink_args)
 
template<typename Sink , typename... SinkArgs>
std::shared_ptr< spdlog::loggerspdlog::create_async (std::string logger_name, SinkArgs &&...sink_args)
 
template<typename Sink , typename... SinkArgs>
std::shared_ptr< spdlog::loggerspdlog::create_async_nb (std::string logger_name, SinkArgs &&...sink_args)
 
void spdlog::init_thread_pool (size_t q_size, size_t thread_count)
 
std::shared_ptr< spdlog::details::thread_poolspdlog::thread_pool ()
Livox SDK API -  V2.0.0 +  V2.1.0
- + - - - - + +
@@ -91,116 +109,29 @@ $(document).ready(function(){initNavTree('async_8h_source.html','');});
async.h
-Go to the documentation of this file.
1 
-
2 //
-
3 // Copyright(c) 2018 Gabi Melman.
-
4 // Distributed under the MIT License (http://opensource.org/licenses/MIT)
-
5 //
-
6 
-
7 #pragma once
-
8 
-
9 //
-
10 // Async logging using global thread pool
-
11 // All loggers created here share same global thread pool.
-
12 // Each log message is pushed to a queue along withe a shared pointer to the
-
13 // logger.
-
14 // If a logger deleted while having pending messages in the queue, it's actual
-
15 // destruction will defer
-
16 // until all its messages are processed by the thread pool.
-
17 // This is because each message in the queue holds a shared_ptr to the
-
18 // originating logger.
-
19 
-
20 #include "spdlog/async_logger.h"
- - -
23 
-
24 #include <memory>
-
25 #include <mutex>
-
26 
-
27 namespace spdlog {
-
28 
-
29 namespace details {
-
30 static const size_t default_async_q_size = 8192;
-
31 }
-
32 
-
33 // async logger factory - creates async loggers backed with thread pool.
-
34 // if a global thread pool doesn't already exist, create it with default queue
-
35 // size of 8192 items and single thread.
-
36 template<async_overflow_policy OverflowPolicy = async_overflow_policy::block>
- -
38 {
-
39  template<typename Sink, typename... SinkArgs>
-
40  static std::shared_ptr<async_logger> create(std::string logger_name, SinkArgs &&... args)
-
41  {
-
42  auto &registry_inst = details::registry::instance();
-
43 
-
44  // create global thread pool if not already exists..
-
45  std::lock_guard<std::recursive_mutex> tp_lock(registry_inst.tp_mutex());
-
46  auto tp = registry_inst.get_tp();
-
47  if (tp == nullptr)
-
48  {
-
49  tp = std::make_shared<details::thread_pool>(details::default_async_q_size, 1);
-
50  registry_inst.set_tp(tp);
-
51  }
-
52 
-
53  auto sink = std::make_shared<Sink>(std::forward<SinkArgs>(args)...);
-
54  auto new_logger = std::make_shared<async_logger>(std::move(logger_name), std::move(sink), std::move(tp), OverflowPolicy);
-
55  registry_inst.initialize_logger(new_logger);
-
56  return new_logger;
-
57  }
-
58 };
-
59 
- - -
62 
-
63 template<typename Sink, typename... SinkArgs>
-
64 inline std::shared_ptr<spdlog::logger> create_async(std::string logger_name, SinkArgs &&... sink_args)
-
65 {
-
66  return async_factory::create<Sink>(std::move(logger_name), std::forward<SinkArgs>(sink_args)...);
-
67 }
-
68 
-
69 template<typename Sink, typename... SinkArgs>
-
70 inline std::shared_ptr<spdlog::logger> create_async_nb(std::string logger_name, SinkArgs &&... sink_args)
-
71 {
-
72  return async_factory_nonblock::create<Sink>(std::move(logger_name), std::forward<SinkArgs>(sink_args)...);
-
73 }
-
74 
-
75 // set global thread pool.
-
76 inline void init_thread_pool(size_t q_size, size_t thread_count)
-
77 {
-
78  auto tp = std::make_shared<details::thread_pool>(q_size, thread_count);
-
79  details::registry::instance().set_tp(std::move(tp));
-
80 }
-
81 
-
82 // get the global thread pool.
-
83 inline std::shared_ptr<spdlog::details::thread_pool> thread_pool()
-
84 {
- -
86 }
-
87 } // namespace spdlog
+Go to the documentation of this file.
1 
2 //
3 // Copyright(c) 2018 Gabi Melman.
4 // Distributed under the MIT License (http://opensource.org/licenses/MIT)
5 //
6 
7 #pragma once
8 
9 //
10 // Async logging using global thread pool
11 // All loggers created here share same global thread pool.
12 // Each log message is pushed to a queue along withe a shared pointer to the
13 // logger.
14 // If a logger deleted while having pending messages in the queue, it's actual
15 // destruction will defer
16 // until all its messages are processed by the thread pool.
17 // This is because each message in the queue holds a shared_ptr to the
18 // originating logger.
19 
20 #include "spdlog/async_logger.h"
23 
24 #include <memory>
25 #include <mutex>
26 
27 namespace spdlog {
28 
29 namespace details {
30 static const size_t default_async_q_size = 8192;
31 }
32 
33 // async logger factory - creates async loggers backed with thread pool.
34 // if a global thread pool doesn't already exist, create it with default queue
35 // size of 8192 items and single thread.
36 template<async_overflow_policy OverflowPolicy = async_overflow_policy::block>
38 {
39  template<typename Sink, typename... SinkArgs>
40  static std::shared_ptr<async_logger> create(std::string logger_name, SinkArgs &&... args)
41  {
42  auto &registry_inst = details::registry::instance();
43 
44  // create global thread pool if not already exists..
45  std::lock_guard<std::recursive_mutex> tp_lock(registry_inst.tp_mutex());
46  auto tp = registry_inst.get_tp();
47  if (tp == nullptr)
48  {
49  tp = std::make_shared<details::thread_pool>(details::default_async_q_size, 1);
50  registry_inst.set_tp(tp);
51  }
52 
53  auto sink = std::make_shared<Sink>(std::forward<SinkArgs>(args)...);
54  auto new_logger = std::make_shared<async_logger>(std::move(logger_name), std::move(sink), std::move(tp), OverflowPolicy);
55  registry_inst.initialize_logger(new_logger);
56  return new_logger;
57  }
58 };
59 
62 
63 template<typename Sink, typename... SinkArgs>
64 inline std::shared_ptr<spdlog::logger> create_async(std::string logger_name, SinkArgs &&... sink_args)
65 {
66  return async_factory::create<Sink>(std::move(logger_name), std::forward<SinkArgs>(sink_args)...);
67 }
68 
69 template<typename Sink, typename... SinkArgs>
70 inline std::shared_ptr<spdlog::logger> create_async_nb(std::string logger_name, SinkArgs &&... sink_args)
71 {
72  return async_factory_nonblock::create<Sink>(std::move(logger_name), std::forward<SinkArgs>(sink_args)...);
73 }
74 
75 // set global thread pool.
76 inline void init_thread_pool(size_t q_size, size_t thread_count)
77 {
78  auto tp = std::make_shared<details::thread_pool>(q_size, thread_count);
79  details::registry::instance().set_tp(std::move(tp));
80 }
81 
82 // get the global thread pool.
83 inline std::shared_ptr<spdlog::details::thread_pool> thread_pool()
84 {
86 }
87 } // namespace spdlog
std::shared_ptr< thread_pool > get_tp()
Definition: registry.h:112
+
void init_thread_pool(size_t q_size, size_t thread_count)
Definition: async.h:76
+
static std::shared_ptr< async_logger > create(std::string logger_name, SinkArgs &&...args)
Definition: async.h:40
+
static registry & instance()
Definition: registry.h:228
+
void set_tp(std::shared_ptr< thread_pool > tp)
Definition: registry.h:106
+
Definition: async.h:27
+
std::shared_ptr< spdlog::details::thread_pool > thread_pool()
Definition: async.h:83
+ +
static const size_t default_async_q_size
Definition: async.h:30
+ +
std::shared_ptr< spdlog::logger > create_async(std::string logger_name, SinkArgs &&...sink_args)
Definition: async.h:64
+ +
std::shared_ptr< spdlog::logger > create_async_nb(std::string logger_name, SinkArgs &&...sink_args)
Definition: async.h:70
+
-
std::shared_ptr< thread_pool > get_tp()
Definition: registry.h:112
-
static const size_t default_async_q_size
Definition: async.h:30
- -
static registry & instance()
Definition: registry.h:228
-
void set_tp(std::shared_ptr< thread_pool > tp)
Definition: registry.h:106
- -
void init_thread_pool(size_t q_size, size_t thread_count)
Definition: async.h:76
-
Definition: async.h:27
- - -
static std::shared_ptr< async_logger > create(std::string logger_name, SinkArgs &&... args)
Definition: async.h:40
-
std::shared_ptr< spdlog::details::thread_pool > thread_pool()
Definition: async.h:83
-
std::shared_ptr< spdlog::logger > create_async_nb(std::string logger_name, SinkArgs &&... sink_args)
Definition: async.h:70
-
std::shared_ptr< spdlog::logger > create_async(std::string logger_name, SinkArgs &&... sink_args)
Definition: async.h:64
diff --git a/docs/async__logger_8h.html b/docs/async__logger_8h.html index 971af6e..de9da09 100644 --- a/docs/async__logger_8h.html +++ b/docs/async__logger_8h.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: sdk_core/include/third_party/spdlog/spdlog/async_logger.h File Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,40 @@ - + - - - - + +
@@ -131,7 +149,7 @@ Enumerations + doxygen 1.8.11
diff --git a/docs/async__logger_8h_source.html b/docs/async__logger_8h_source.html index a505011..ce98bab 100644 --- a/docs/async__logger_8h_source.html +++ b/docs/async__logger_8h_source.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: sdk_core/include/third_party/spdlog/spdlog/async_logger.h Source File @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,40 @@ - + - - - - + +
@@ -91,110 +109,31 @@ $(document).ready(function(){initNavTree('async__logger_8h_source.html','');});
async_logger.h
-Go to the documentation of this file.
1 //
-
2 // Copyright(c) 2015 Gabi Melman.
-
3 // Distributed under the MIT License (http://opensource.org/licenses/MIT)
-
4 //
-
5 
-
6 #pragma once
-
7 
-
8 // Very fast asynchronous logger (millions of logs per second on an average
-
9 // desktop)
-
10 // Uses pre allocated lockfree queue for maximum throughput even under large
-
11 // number of threads.
-
12 // Creates a single back thread to pop messages from the queue and log them.
-
13 //
-
14 // Upon each log write the logger:
-
15 // 1. Checks if its log level is enough to log the message
-
16 // 2. Push a new copy of the message to a queue (or block the caller until
-
17 // space is available in the queue)
-
18 // 3. will throw spdlog_ex upon log exceptions
-
19 // Upon destruction, logs all remaining messages in the queue before
-
20 // destructing..
-
21 
-
22 #include "spdlog/common.h"
-
23 #include "spdlog/logger.h"
-
24 
-
25 #include <chrono>
-
26 #include <memory>
-
27 #include <string>
-
28 
-
29 namespace spdlog {
-
30 
-
31 // Async overflow policy - block by default.
- -
33 {
-
34  block, // Block until message can be enqueued
-
35  overrun_oldest // Discard oldest message in the queue if full when trying to
-
36  // add new item.
-
37 };
-
38 
-
39 namespace details {
-
40 class thread_pool;
-
41 }
-
42 
-
43 class async_logger final : public std::enable_shared_from_this<async_logger>, public logger
-
44 {
-
45  friend class details::thread_pool;
-
46 
-
47 public:
-
48  template<typename It>
-
49  async_logger(std::string logger_name, It begin, It end, std::weak_ptr<details::thread_pool> tp,
- -
51 
-
52  async_logger(std::string logger_name, sinks_init_list sinks_list, std::weak_ptr<details::thread_pool> tp,
- -
54 
-
55  async_logger(std::string logger_name, sink_ptr single_sink, std::weak_ptr<details::thread_pool> tp,
- -
57 
-
58  std::shared_ptr<logger> clone(std::string new_name) override;
-
59 
-
60 protected:
-
61  void sink_it_(details::log_msg &msg) override;
-
62  void flush_() override;
-
63 
-
64  void backend_log_(const details::log_msg &incoming_log_msg);
-
65  void backend_flush_();
-
66 
-
67 private:
-
68  std::weak_ptr<details::thread_pool> thread_pool_;
-
69  async_overflow_policy overflow_policy_;
-
70 };
-
71 } // namespace spdlog
-
72 
- +Go to the documentation of this file.
1 //
2 // Copyright(c) 2015 Gabi Melman.
3 // Distributed under the MIT License (http://opensource.org/licenses/MIT)
4 //
5 
6 #pragma once
7 
8 // Very fast asynchronous logger (millions of logs per second on an average
9 // desktop)
10 // Uses pre allocated lockfree queue for maximum throughput even under large
11 // number of threads.
12 // Creates a single back thread to pop messages from the queue and log them.
13 //
14 // Upon each log write the logger:
15 // 1. Checks if its log level is enough to log the message
16 // 2. Push a new copy of the message to a queue (or block the caller until
17 // space is available in the queue)
18 // 3. will throw spdlog_ex upon log exceptions
19 // Upon destruction, logs all remaining messages in the queue before
20 // destructing..
21 
22 #include "spdlog/common.h"
23 #include "spdlog/logger.h"
24 
25 #include <chrono>
26 #include <memory>
27 #include <string>
28 
29 namespace spdlog {
30 
31 // Async overflow policy - block by default.
33 {
34  block, // Block until message can be enqueued
35  overrun_oldest // Discard oldest message in the queue if full when trying to
36  // add new item.
37 };
38 
39 namespace details {
40 class thread_pool;
41 }
42 
43 class async_logger final : public std::enable_shared_from_this<async_logger>, public logger
44 {
45  friend class details::thread_pool;
46 
47 public:
48  template<typename It>
49  async_logger(std::string logger_name, It begin, It end, std::weak_ptr<details::thread_pool> tp,
51 
52  async_logger(std::string logger_name, sinks_init_list sinks_list, std::weak_ptr<details::thread_pool> tp,
54 
55  async_logger(std::string logger_name, sink_ptr single_sink, std::weak_ptr<details::thread_pool> tp,
57 
58  std::shared_ptr<logger> clone(std::string new_name) override;
59 
60 protected:
61  void sink_it_(details::log_msg &msg) override;
62  void flush_() override;
63 
64  void backend_log_(const details::log_msg &incoming_log_msg);
65  void backend_flush_();
66 
67 private:
68  std::weak_ptr<details::thread_pool> thread_pool_;
69  async_overflow_policy overflow_policy_;
70 };
71 } // namespace spdlog
72 
auto begin(const C &c) -> decltype(c.begin())
Definition: format.h:251
+ +
async_overflow_policy
Definition: async_logger.h:32
+
std::initializer_list< sink_ptr > sinks_init_list
Definition: common.h:81
+ + + +
std::shared_ptr< sinks::sink > sink_ptr
Definition: common.h:80
+
Definition: async.h:27
+
std::shared_ptr< spdlog::details::thread_pool > thread_pool()
Definition: async.h:83
+ + + + + +
auto end(const C &c) -> decltype(c.end())
Definition: format.h:257
-
async_logger(std::string logger_name, It begin, It end, std::weak_ptr< details::thread_pool > tp, async_overflow_policy overflow_policy=async_overflow_policy::block)
- - -
std::shared_ptr< sinks::sink > sink_ptr
Definition: common.h:80
-
auto end(const C &c) -> decltype(c.end())
Definition: format.h:257
- -
std::initializer_list< sink_ptr > sinks_init_list
Definition: common.h:81
- -
Definition: async.h:27
- -
std::shared_ptr< logger > clone(std::string new_name) override
-
void flush_() override
- - - - -
std::shared_ptr< spdlog::details::thread_pool > thread_pool()
Definition: async.h:83
- -
void sink_it_(details::log_msg &msg) override
-
auto begin(const C &c) -> decltype(c.begin())
Definition: format.h:251
-
void backend_log_(const details::log_msg &incoming_log_msg)
-
async_overflow_policy
Definition: async_logger.h:32
diff --git a/docs/async__logger__impl_8h.html b/docs/async__logger__impl_8h.html index 6002f3f..ca39f67 100644 --- a/docs/async__logger__impl_8h.html +++ b/docs/async__logger__impl_8h.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: sdk_core/include/third_party/spdlog/spdlog/details/async_logger_impl.h File Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,40 @@ - + - - - - + +
@@ -105,7 +123,7 @@ $(document).ready(function(){initNavTree('async__logger__impl_8h.html','');}); + doxygen 1.8.11
diff --git a/docs/async__logger__impl_8h_source.html b/docs/async__logger__impl_8h_source.html index 7c13fc0..af6439d 100644 --- a/docs/async__logger__impl_8h_source.html +++ b/docs/async__logger__impl_8h_source.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: sdk_core/include/third_party/spdlog/spdlog/details/async_logger_impl.h Source File @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,40 @@ - + - - - - + +
@@ -91,144 +109,40 @@ $(document).ready(function(){initNavTree('async__logger__impl_8h_source.html',''
async_logger_impl.h
-Go to the documentation of this file.
1 //
-
2 // Copyright(c) 2015 Gabi Melman.
-
3 // Distributed under the MIT License (http://opensource.org/licenses/MIT)
-
4 //
-
5 
-
6 #pragma once
-
7 
-
8 // async logger implementation
-
9 // uses a thread pool to perform the actual logging
-
10 
- -
12 
-
13 #include <chrono>
-
14 #include <memory>
-
15 #include <string>
-
16 
-
17 template<typename It>
- -
19  std::string logger_name, It begin, It end, std::weak_ptr<details::thread_pool> tp, async_overflow_policy overflow_policy)
-
20  : logger(std::move(logger_name), begin, end)
-
21  , thread_pool_(std::move(tp))
-
22  , overflow_policy_(overflow_policy)
-
23 {
-
24 }
-
25 
- -
27  std::string logger_name, sinks_init_list sinks_list, std::weak_ptr<details::thread_pool> tp, async_overflow_policy overflow_policy)
-
28  : async_logger(std::move(logger_name), sinks_list.begin(), sinks_list.end(), std::move(tp), overflow_policy)
-
29 {
-
30 }
-
31 
- -
33  std::string logger_name, sink_ptr single_sink, std::weak_ptr<details::thread_pool> tp, async_overflow_policy overflow_policy)
-
34  : async_logger(std::move(logger_name), {std::move(single_sink)}, std::move(tp), overflow_policy)
-
35 {
-
36 }
-
37 
-
38 // send the log message to the thread pool
- -
40 {
-
41 #if defined(SPDLOG_ENABLE_MESSAGE_COUNTER)
-
42  incr_msg_counter_(msg);
-
43 #endif
-
44  if (auto pool_ptr = thread_pool_.lock())
-
45  {
-
46  pool_ptr->post_log(shared_from_this(), msg, overflow_policy_);
-
47  }
-
48  else
-
49  {
-
50  throw spdlog_ex("async log: thread pool doesn't exist anymore");
-
51  }
-
52 }
-
53 
-
54 // send flush request to the thread pool
- -
56 {
-
57  if (auto pool_ptr = thread_pool_.lock())
-
58  {
-
59  pool_ptr->post_flush(shared_from_this(), overflow_policy_);
-
60  }
-
61  else
-
62  {
-
63  throw spdlog_ex("async flush: thread pool doesn't exist anymore");
-
64  }
-
65 }
-
66 
-
67 //
-
68 // backend functions - called from the thread pool to do the actual job
-
69 //
-
70 inline void spdlog::async_logger::backend_log_(const details::log_msg &incoming_log_msg)
-
71 {
-
72  try
-
73  {
-
74  for (auto &s : sinks_)
-
75  {
-
76  if (s->should_log(incoming_log_msg.level))
-
77  {
-
78  s->log(incoming_log_msg);
-
79  }
-
80  }
-
81  }
- -
83 
-
84  if (should_flush_(incoming_log_msg))
-
85  {
-
86  backend_flush_();
-
87  }
-
88 }
-
89 
- -
91 {
-
92  try
-
93  {
-
94  for (auto &sink : sinks_)
-
95  {
-
96  sink->flush();
-
97  }
-
98  }
- -
100 }
-
101 
-
102 inline std::shared_ptr<spdlog::logger> spdlog::async_logger::clone(std::string new_name)
-
103 {
-
104  auto cloned = std::make_shared<spdlog::async_logger>(std::move(new_name), sinks_.begin(), sinks_.end(), thread_pool_, overflow_policy_);
-
105 
-
106  cloned->set_level(this->level());
-
107  cloned->flush_on(this->flush_level());
-
108  cloned->set_error_handler(this->error_handler());
-
109  return std::move(cloned);
-
110 }
+Go to the documentation of this file.
1 //
2 // Copyright(c) 2015 Gabi Melman.
3 // Distributed under the MIT License (http://opensource.org/licenses/MIT)
4 //
5 
6 #pragma once
7 
8 // async logger implementation
9 // uses a thread pool to perform the actual logging
10 
12 
13 #include <chrono>
14 #include <memory>
15 #include <string>
16 
17 template<typename It>
19  std::string logger_name, It begin, It end, std::weak_ptr<details::thread_pool> tp, async_overflow_policy overflow_policy)
20  : logger(std::move(logger_name), begin, end)
21  , thread_pool_(std::move(tp))
22  , overflow_policy_(overflow_policy)
23 {
24 }
25 
27  std::string logger_name, sinks_init_list sinks_list, std::weak_ptr<details::thread_pool> tp, async_overflow_policy overflow_policy)
28  : async_logger(std::move(logger_name), sinks_list.begin(), sinks_list.end(), std::move(tp), overflow_policy)
29 {
30 }
31 
33  std::string logger_name, sink_ptr single_sink, std::weak_ptr<details::thread_pool> tp, async_overflow_policy overflow_policy)
34  : async_logger(std::move(logger_name), {std::move(single_sink)}, std::move(tp), overflow_policy)
35 {
36 }
37 
38 // send the log message to the thread pool
40 {
41 #if defined(SPDLOG_ENABLE_MESSAGE_COUNTER)
42  incr_msg_counter_(msg);
43 #endif
44  if (auto pool_ptr = thread_pool_.lock())
45  {
46  pool_ptr->post_log(shared_from_this(), msg, overflow_policy_);
47  }
48  else
49  {
50  throw spdlog_ex("async log: thread pool doesn't exist anymore");
51  }
52 }
53 
54 // send flush request to the thread pool
56 {
57  if (auto pool_ptr = thread_pool_.lock())
58  {
59  pool_ptr->post_flush(shared_from_this(), overflow_policy_);
60  }
61  else
62  {
63  throw spdlog_ex("async flush: thread pool doesn't exist anymore");
64  }
65 }
66 
67 //
68 // backend functions - called from the thread pool to do the actual job
69 //
70 inline void spdlog::async_logger::backend_log_(const details::log_msg &incoming_log_msg)
71 {
72  try
73  {
74  for (auto &s : sinks_)
75  {
76  if (s->should_log(incoming_log_msg.level))
77  {
78  s->log(incoming_log_msg);
79  }
80  }
81  }
83 
84  if (should_flush_(incoming_log_msg))
85  {
87  }
88 }
89 
91 {
92  try
93  {
94  for (auto &sink : sinks_)
95  {
96  sink->flush();
97  }
98  }
100 }
101 
102 inline std::shared_ptr<spdlog::logger> spdlog::async_logger::clone(std::string new_name)
103 {
104  auto cloned = std::make_shared<spdlog::async_logger>(std::move(new_name), sinks_.begin(), sinks_.end(), thread_pool_, overflow_policy_);
105 
106  cloned->set_level(this->level());
107  cloned->flush_on(this->flush_level());
108  cloned->set_error_handler(this->error_handler());
109  return std::move(cloned);
110 }
auto begin(const C &c) -> decltype(c.begin())
Definition: format.h:251
+
level::level_enum flush_level() const
Definition: logger_impl.h:342
+
void incr_msg_counter_(details::log_msg &msg)
Definition: logger_impl.h:413
+ + +
async_overflow_policy
Definition: async_logger.h:32
+
log_err_handler error_handler() const
Definition: logger_impl.h:323
+
std::initializer_list< sink_ptr > sinks_init_list
Definition: common.h:81
+ +
#define SPDLOG_CATCH_AND_HANDLE
Definition: logger_impl.h:13
+
Definition: format.h:297
+
std::shared_ptr< sinks::sink > sink_ptr
Definition: common.h:80
+
std::vector< sink_ptr > sinks_
Definition: logger.h:174
+
std::shared_ptr< logger > clone(std::string new_name) override
+
bool should_flush_(const details::log_msg &msg)
Definition: logger_impl.h:347
+
void flush_() override
+
level::level_enum level
Definition: log_msg.h:42
+
async_logger(std::string logger_name, It begin, It end, std::weak_ptr< details::thread_pool > tp, async_overflow_policy overflow_policy=async_overflow_policy::block)
+ +
void sink_it_(details::log_msg &msg) override
+ +
level::level_enum level() const
Definition: logger_impl.h:358
+
void backend_log_(const details::log_msg &incoming_log_msg)
+ +
auto end(const C &c) -> decltype(c.end())
Definition: format.h:257
-
async_logger(std::string logger_name, It begin, It end, std::weak_ptr< details::thread_pool > tp, async_overflow_policy overflow_policy=async_overflow_policy::block)
- -
std::shared_ptr< sinks::sink > sink_ptr
Definition: common.h:80
-
auto end(const C &c) -> decltype(c.end())
Definition: format.h:257
- -
std::initializer_list< sink_ptr > sinks_init_list
Definition: common.h:81
-
std::shared_ptr< logger > clone(std::string new_name) override
-
void flush_() override
-
level::level_enum level
Definition: log_msg.h:42
- - - -
Definition: format.h:297
- -
#define SPDLOG_CATCH_AND_HANDLE
Definition: logger_impl.h:13
-
void sink_it_(details::log_msg &msg) override
-
auto begin(const C &c) -> decltype(c.begin())
Definition: format.h:251
-
void backend_log_(const details::log_msg &incoming_log_msg)
-
async_overflow_policy
Definition: async_logger.h:32
diff --git a/docs/base__sink_8h.html b/docs/base__sink_8h.html index 7096c65..d2ddbd6 100644 --- a/docs/base__sink_8h.html +++ b/docs/base__sink_8h.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: sdk_core/include/third_party/spdlog/spdlog/sinks/base_sink.h File Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,40 @@ - + - - - - + +
@@ -121,7 +139,7 @@ Namespaces + doxygen 1.8.11
diff --git a/docs/base__sink_8h_source.html b/docs/base__sink_8h_source.html index 92a86c1..0d1e453 100644 --- a/docs/base__sink_8h_source.html +++ b/docs/base__sink_8h_source.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: sdk_core/include/third_party/spdlog/spdlog/sinks/base_sink.h Source File @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,40 @@ - + - - - - + +
@@ -91,104 +109,35 @@ $(document).ready(function(){initNavTree('base__sink_8h_source.html','');});
base_sink.h
-Go to the documentation of this file.
1 //
-
2 // Copyright(c) 2015 Gabi Melman.
-
3 // Distributed under the MIT License (http://opensource.org/licenses/MIT)
-
4 //
-
5 
-
6 #pragma once
-
7 //
-
8 // base sink templated over a mutex (either dummy or real)
-
9 // concrete implementation should override the sink_it_() and flush_() methods.
-
10 // locking is taken care of in this class - no locking needed by the
-
11 // implementers..
-
12 //
-
13 
-
14 #include "spdlog/common.h"
-
15 #include "spdlog/details/log_msg.h"
-
16 #include "spdlog/formatter.h"
-
17 #include "spdlog/sinks/sink.h"
-
18 
-
19 namespace spdlog {
-
20 namespace sinks {
-
21 template<typename Mutex>
-
22 class base_sink : public sink
-
23 {
-
24 public:
-
25  base_sink() = default;
-
26  base_sink(const base_sink &) = delete;
-
27  base_sink &operator=(const base_sink &) = delete;
-
28 
-
29  void log(const details::log_msg &msg) final
-
30  {
-
31  std::lock_guard<Mutex> lock(mutex_);
-
32  sink_it_(msg);
-
33  }
-
34 
-
35  void flush() final
-
36  {
-
37  std::lock_guard<Mutex> lock(mutex_);
-
38  flush_();
-
39  }
-
40 
-
41  void set_pattern(const std::string &pattern) final
-
42  {
-
43  std::lock_guard<Mutex> lock(mutex_);
-
44  set_pattern_(pattern);
-
45  }
-
46 
-
47  void set_formatter(std::unique_ptr<spdlog::formatter> sink_formatter) final
-
48  {
-
49  std::lock_guard<Mutex> lock(mutex_);
-
50  set_formatter_(std::move(sink_formatter));
-
51  }
-
52 
-
53 protected:
-
54  virtual void sink_it_(const details::log_msg &msg) = 0;
-
55  virtual void flush_() = 0;
-
56 
-
57  virtual void set_pattern_(const std::string &pattern)
-
58  {
-
59  set_formatter_(details::make_unique<spdlog::pattern_formatter>(pattern));
-
60  }
-
61 
-
62  virtual void set_formatter_(std::unique_ptr<spdlog::formatter> sink_formatter)
-
63  {
-
64  formatter_ = std::move(sink_formatter);
-
65  }
-
66  Mutex mutex_;
-
67 };
-
68 } // namespace sinks
-
69 } // namespace spdlog
+Go to the documentation of this file.
1 //
2 // Copyright(c) 2015 Gabi Melman.
3 // Distributed under the MIT License (http://opensource.org/licenses/MIT)
4 //
5 
6 #pragma once
7 //
8 // base sink templated over a mutex (either dummy or real)
9 // concrete implementation should override the sink_it_() and flush_() methods.
10 // locking is taken care of in this class - no locking needed by the
11 // implementers..
12 //
13 
14 #include "spdlog/common.h"
15 #include "spdlog/details/log_msg.h"
16 #include "spdlog/formatter.h"
17 #include "spdlog/sinks/sink.h"
18 
19 namespace spdlog {
20 namespace sinks {
21 template<typename Mutex>
22 class base_sink : public sink
23 {
24 public:
25  base_sink() = default;
26  base_sink(const base_sink &) = delete;
27  base_sink &operator=(const base_sink &) = delete;
28 
29  void log(const details::log_msg &msg) final
30  {
31  std::lock_guard<Mutex> lock(mutex_);
32  sink_it_(msg);
33  }
34 
35  void flush() final
36  {
37  std::lock_guard<Mutex> lock(mutex_);
38  flush_();
39  }
40 
41  void set_pattern(const std::string &pattern) final
42  {
43  std::lock_guard<Mutex> lock(mutex_);
44  set_pattern_(pattern);
45  }
46 
47  void set_formatter(std::unique_ptr<spdlog::formatter> sink_formatter) final
48  {
49  std::lock_guard<Mutex> lock(mutex_);
50  set_formatter_(std::move(sink_formatter));
51  }
52 
53 protected:
54  virtual void sink_it_(const details::log_msg &msg) = 0;
55  virtual void flush_() = 0;
56 
57  virtual void set_pattern_(const std::string &pattern)
58  {
59  set_formatter_(details::make_unique<spdlog::pattern_formatter>(pattern));
60  }
61 
62  virtual void set_formatter_(std::unique_ptr<spdlog::formatter> sink_formatter)
63  {
64  formatter_ = std::move(sink_formatter);
65  }
66  Mutex mutex_;
67 };
68 } // namespace sinks
69 } // namespace spdlog
virtual void set_formatter_(std::unique_ptr< spdlog::formatter > sink_formatter)
Definition: base_sink.h:62
+
std::unique_ptr< spdlog::formatter > formatter_
Definition: sink.h:50
+
void log(const details::log_msg &msg) final
Definition: base_sink.h:29
+
virtual void flush_()=0
+ + +
Definition: async.h:27
+
void flush() final
Definition: base_sink.h:35
+ +
void set_formatter(std::unique_ptr< spdlog::formatter > sink_formatter) final
Definition: base_sink.h:47
+ +
base_sink & operator=(const base_sink &)=delete
+
void set_pattern(const std::string &pattern) final
Definition: base_sink.h:41
+ + + + +
virtual void set_pattern_(const std::string &pattern)
Definition: base_sink.h:57
+
virtual void sink_it_(const details::log_msg &msg)=0
+
-
virtual void set_pattern_(const std::string &pattern)
Definition: base_sink.h:57
-
base_sink & operator=(const base_sink &)=delete
- -
std::unique_ptr< spdlog::formatter > formatter_
Definition: sink.h:50
-
virtual void flush_()=0
- -
Definition: async.h:27
-
void flush() final
Definition: base_sink.h:35
- -
virtual void set_formatter_(std::unique_ptr< spdlog::formatter > sink_formatter)
Definition: base_sink.h:62
-
void set_pattern(const std::string &pattern) final
Definition: base_sink.h:41
- - - -
void set_formatter(std::unique_ptr< spdlog::formatter > sink_formatter) final
Definition: base_sink.h:47
-
void log(const details::log_msg &msg) final
Definition: base_sink.h:29
- - -
virtual void sink_it_(const details::log_msg &msg)=0
- diff --git a/docs/basic__file__sink_8h.html b/docs/basic__file__sink_8h.html index 010b42c..748b974 100644 --- a/docs/basic__file__sink_8h.html +++ b/docs/basic__file__sink_8h.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: sdk_core/include/third_party/spdlog/spdlog/sinks/basic_file_sink.h File Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,40 @@ - + - - - - + +
@@ -141,7 +159,7 @@ Functions + doxygen 1.8.11
diff --git a/docs/basic__file__sink_8h_source.html b/docs/basic__file__sink_8h_source.html index 4bc1868..e626a13 100644 --- a/docs/basic__file__sink_8h_source.html +++ b/docs/basic__file__sink_8h_source.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: sdk_core/include/third_party/spdlog/spdlog/sinks/basic_file_sink.h Source File @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,40 @@ - + - - - - + +
@@ -91,112 +109,37 @@ $(document).ready(function(){initNavTree('basic__file__sink_8h_source.html','');
basic_file_sink.h
-Go to the documentation of this file.
1 //
-
2 // Copyright(c) 2015-2018 Gabi Melman.
-
3 // Distributed under the MIT License (http://opensource.org/licenses/MIT)
-
4 //
-
5 
-
6 #pragma once
-
7 
-
8 #ifndef SPDLOG_H
-
9 #include "spdlog/spdlog.h"
-
10 #endif
-
11 
- - -
14 #include "spdlog/sinks/base_sink.h"
-
15 
-
16 #include <mutex>
-
17 #include <string>
-
18 
-
19 namespace spdlog {
-
20 namespace sinks {
-
21 /*
-
22  * Trivial file sink with single file as target
-
23  */
-
24 template<typename Mutex>
-
25 class basic_file_sink final : public base_sink<Mutex>
-
26 {
-
27 public:
-
28  explicit basic_file_sink(const filename_t &filename, bool truncate = false)
-
29  {
-
30  file_helper_.open(filename, truncate);
-
31  }
-
32 
-
33  const filename_t &filename() const
-
34  {
-
35  return file_helper_.filename();
-
36  }
-
37 
-
38 protected:
-
39  void sink_it_(const details::log_msg &msg) override
-
40  {
-
41  fmt::memory_buffer formatted;
-
42  sink::formatter_->format(msg, formatted);
-
43  file_helper_.write(formatted);
-
44  }
-
45 
-
46  void flush_() override
-
47  {
-
48  file_helper_.flush();
-
49  }
-
50 
-
51 private:
-
52  details::file_helper file_helper_;
-
53 };
-
54 
- - -
57 
-
58 } // namespace sinks
-
59 
-
60 //
-
61 // factory functions
-
62 //
-
63 template<typename Factory = default_factory>
-
64 inline std::shared_ptr<logger> basic_logger_mt(const std::string &logger_name, const filename_t &filename, bool truncate = false)
-
65 {
-
66  return Factory::template create<sinks::basic_file_sink_mt>(logger_name, filename, truncate);
-
67 }
-
68 
-
69 template<typename Factory = default_factory>
-
70 inline std::shared_ptr<logger> basic_logger_st(const std::string &logger_name, const filename_t &filename, bool truncate = false)
-
71 {
-
72  return Factory::template create<sinks::basic_file_sink_st>(logger_name, filename, truncate);
-
73 }
-
74 
-
75 } // namespace spdlog
+Go to the documentation of this file.
1 //
2 // Copyright(c) 2015-2018 Gabi Melman.
3 // Distributed under the MIT License (http://opensource.org/licenses/MIT)
4 //
5 
6 #pragma once
7 
8 #ifndef SPDLOG_H
9 #include "spdlog/spdlog.h"
10 #endif
11 
14 #include "spdlog/sinks/base_sink.h"
15 
16 #include <mutex>
17 #include <string>
18 
19 namespace spdlog {
20 namespace sinks {
21 /*
22  * Trivial file sink with single file as target
23  */
24 template<typename Mutex>
25 class basic_file_sink final : public base_sink<Mutex>
26 {
27 public:
28  explicit basic_file_sink(const filename_t &filename, bool truncate = false)
29  {
30  file_helper_.open(filename, truncate);
31  }
32 
33  const filename_t &filename() const
34  {
35  return file_helper_.filename();
36  }
37 
38 protected:
39  void sink_it_(const details::log_msg &msg) override
40  {
41  fmt::memory_buffer formatted;
42  sink::formatter_->format(msg, formatted);
43  file_helper_.write(formatted);
44  }
45 
46  void flush_() override
47  {
48  file_helper_.flush();
49  }
50 
51 private:
52  details::file_helper file_helper_;
53 };
54 
57 
58 } // namespace sinks
59 
60 //
61 // factory functions
62 //
63 template<typename Factory = default_factory>
64 inline std::shared_ptr<logger> basic_logger_mt(const std::string &logger_name, const filename_t &filename, bool truncate = false)
65 {
66  return Factory::template create<sinks::basic_file_sink_mt>(logger_name, filename, truncate);
67 }
68 
69 template<typename Factory = default_factory>
70 inline std::shared_ptr<logger> basic_logger_st(const std::string &logger_name, const filename_t &filename, bool truncate = false)
71 {
72  return Factory::template create<sinks::basic_file_sink_st>(logger_name, filename, truncate);
73 }
74 
75 } // namespace spdlog
std::shared_ptr< logger > basic_logger_mt(const std::string &logger_name, const filename_t &filename, bool truncate=false)
+ +
void open(const filename_t &fname, bool truncate=false)
Definition: file_helper.h:42
+ +
std::unique_ptr< spdlog::formatter > formatter_
Definition: sink.h:50
+
void sink_it_(const details::log_msg &msg) override
+ + +
Definition: async.h:27
+ + +
const filename_t & filename() const
+
void write(const fmt::memory_buffer &buf)
Definition: file_helper.h:83
+
std::string filename_t
Definition: common.h:205
+
const filename_t & filename() const
Definition: file_helper.h:102
+ +
std::shared_ptr< logger > basic_logger_st(const std::string &logger_name, const filename_t &filename, bool truncate=false)
+ + +
basic_file_sink(const filename_t &filename, bool truncate=false)
+ +
- - -
std::shared_ptr< logger > basic_logger_st(const std::string &logger_name, const filename_t &filename, bool truncate=false)
-
std::unique_ptr< spdlog::formatter > formatter_
Definition: sink.h:50
- -
const filename_t & filename() const
Definition: file_helper.h:102
- - -
void open(const filename_t &fname, bool truncate=false)
Definition: file_helper.h:42
-
const filename_t & filename() const
-
basic_file_sink(const filename_t &filename, bool truncate=false)
- - -
Definition: async.h:27
- -
void sink_it_(const details::log_msg &msg) override
-
std::shared_ptr< logger > basic_logger_mt(const std::string &logger_name, const filename_t &filename, bool truncate=false)
- - -
void write(const fmt::memory_buffer &buf)
Definition: file_helper.h:83
- -
std::string filename_t
Definition: common.h:205
diff --git a/docs/bin__to__hex_8h.html b/docs/bin__to__hex_8h.html index e2e58ae..330b548 100644 --- a/docs/bin__to__hex_8h.html +++ b/docs/bin__to__hex_8h.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: sdk_core/include/third_party/spdlog/spdlog/fmt/bin_to_hex.h File Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,40 @@ - + - - - - + +
@@ -131,7 +149,7 @@ Functions + doxygen 1.8.11
diff --git a/docs/bin__to__hex_8h_source.html b/docs/bin__to__hex_8h_source.html index f50429d..c0dd1c0 100644 --- a/docs/bin__to__hex_8h_source.html +++ b/docs/bin__to__hex_8h_source.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: sdk_core/include/third_party/spdlog/spdlog/fmt/bin_to_hex.h Source File @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,40 @@ - + - - - - + +
@@ -91,202 +109,30 @@ $(document).ready(function(){initNavTree('bin__to__hex_8h_source.html','');});
bin_to_hex.h
-Go to the documentation of this file.
1 //
-
2 // Copyright(c) 2015 Gabi Melman.
-
3 // Distributed under the MIT License (http://opensource.org/licenses/MIT)
-
4 //
-
5 
-
6 #pragma once
-
7 
-
8 //
-
9 // Support for logging binary data as hex
-
10 // format flags:
-
11 // {:X} - print in uppercase.
-
12 // {:s} - don't separate each byte with space.
-
13 // {:p} - don't print the position on each line start.
-
14 // {:n} - don't split the output to lines.
-
15 
-
16 //
-
17 // Examples:
-
18 //
-
19 // std::vector<char> v(200, 0x0b);
-
20 // logger->info("Some buffer {}", spdlog::to_hex(v));
-
21 // char buf[128];
-
22 // logger->info("Some buffer {:X}", spdlog::to_hex(std::begin(buf), std::end(buf)));
-
23 
-
24 namespace spdlog {
-
25 namespace details {
-
26 
-
27 template<typename It>
- -
29 {
-
30 public:
-
31  bytes_range(It range_begin, It range_end)
-
32  : begin_(range_begin)
-
33  , end_(range_end)
-
34  {
-
35  }
-
36 
-
37  It begin() const
-
38  {
-
39  return begin_;
-
40  }
-
41  It end() const
-
42  {
-
43  return end_;
-
44  }
-
45 
-
46 private:
-
47  It begin_, end_;
-
48 };
-
49 } // namespace details
-
50 
-
51 // create a bytes_range that wraps the given container
-
52 template<typename Container>
- -
54 {
-
55  static_assert(sizeof(typename Container::value_type) == 1, "sizeof(Container::value_type) != 1");
-
56  using Iter = typename Container::const_iterator;
-
57  return details::bytes_range<Iter>(std::begin(container), std::end(container));
-
58 }
-
59 
-
60 // create bytes_range from ranges
-
61 template<typename It>
-
62 inline details::bytes_range<It> to_hex(const It range_begin, const It range_end)
-
63 {
-
64  return details::bytes_range<It>(range_begin, range_end);
-
65 }
-
66 
-
67 } // namespace spdlog
-
68 
-
69 namespace fmt {
-
70 
-
71 template<typename T>
-
72 struct formatter<spdlog::details::bytes_range<T>>
-
73 {
-
74  const std::size_t line_size = 100;
-
75  const char delimiter = ' ';
-
76 
-
77  bool put_newlines = true;
-
78  bool put_delimiters = true;
-
79  bool use_uppercase = false;
-
80  bool put_positions = true; // position on start of each line
-
81 
-
82  // parse the format string flags
-
83  template<typename ParseContext>
-
84  auto parse(ParseContext &ctx) -> decltype(ctx.begin())
-
85  {
-
86  auto it = ctx.begin();
-
87  while (*it && *it != '}')
-
88  {
-
89  switch (*it)
-
90  {
-
91  case 'X':
-
92  use_uppercase = true;
-
93  break;
-
94  case 's':
-
95  put_delimiters = false;
-
96  break;
-
97  case 'p':
-
98  put_positions = false;
-
99  break;
-
100  case 'n':
-
101  put_newlines = false;
-
102  break;
-
103  }
-
104 
-
105  ++it;
-
106  }
-
107  return it;
-
108  }
-
109 
-
110  // format the given bytes range as hex
-
111  template<typename FormatContext, typename Container>
-
112  auto format(const spdlog::details::bytes_range<Container> &the_range, FormatContext &ctx) -> decltype(ctx.out())
-
113  {
-
114  SPDLOG_CONSTEXPR const char *hex_upper = "0123456789ABCDEF";
-
115  SPDLOG_CONSTEXPR const char *hex_lower = "0123456789abcdef";
-
116  const char *hex_chars = use_uppercase ? hex_upper : hex_lower;
-
117 
-
118  std::size_t pos = 0;
-
119  std::size_t column = line_size;
-
120  auto inserter = ctx.begin();
-
121 
-
122  for (auto &item : the_range)
-
123  {
-
124  auto ch = static_cast<unsigned char>(item);
-
125  pos++;
-
126 
-
127  if (put_newlines && column >= line_size)
-
128  {
-
129  column = put_newline(inserter, pos);
-
130 
-
131  // put first byte without delimiter in front of it
-
132  *inserter++ = hex_chars[(ch >> 4) & 0x0f];
-
133  *inserter++ = hex_chars[ch & 0x0f];
-
134  column += 2;
-
135  continue;
-
136  }
-
137 
-
138  if (put_delimiters)
-
139  {
-
140  *inserter++ = delimiter;
-
141  ++column;
-
142  }
-
143 
-
144  *inserter++ = hex_chars[(ch >> 4) & 0x0f];
-
145  *inserter++ = hex_chars[ch & 0x0f];
-
146  column += 2;
-
147  }
-
148  return inserter;
-
149  }
-
150 
-
151  // put newline(and position header)
-
152  // return the next column
-
153  template<typename It>
-
154  std::size_t put_newline(It inserter, std::size_t pos)
-
155  {
-
156 #ifdef _WIN32
-
157  *inserter++ = '\r';
-
158 #endif
-
159  *inserter++ = '\n';
-
160 
-
161  if (put_positions)
-
162  {
-
163  fmt::format_to(inserter, "{:<04X}: ", pos - 1);
-
164  return 7;
-
165  }
-
166  else
-
167  {
-
168  return 1;
-
169  }
-
170  }
-
171 };
-
172 } // namespace fmt
+Go to the documentation of this file.
1 //
2 // Copyright(c) 2015 Gabi Melman.
3 // Distributed under the MIT License (http://opensource.org/licenses/MIT)
4 //
5 
6 #pragma once
7 
8 //
9 // Support for logging binary data as hex
10 // format flags:
11 // {:X} - print in uppercase.
12 // {:s} - don't separate each byte with space.
13 // {:p} - don't print the position on each line start.
14 // {:n} - don't split the output to lines.
15 
16 //
17 // Examples:
18 //
19 // std::vector<char> v(200, 0x0b);
20 // logger->info("Some buffer {}", spdlog::to_hex(v));
21 // char buf[128];
22 // logger->info("Some buffer {:X}", spdlog::to_hex(std::begin(buf), std::end(buf)));
23 
24 namespace spdlog {
25 namespace details {
26 
27 template<typename It>
29 {
30 public:
31  bytes_range(It range_begin, It range_end)
32  : begin_(range_begin)
33  , end_(range_end)
34  {
35  }
36 
37  It begin() const
38  {
39  return begin_;
40  }
41  It end() const
42  {
43  return end_;
44  }
45 
46 private:
47  It begin_, end_;
48 };
49 } // namespace details
50 
51 // create a bytes_range that wraps the given container
52 template<typename Container>
54 {
55  static_assert(sizeof(typename Container::value_type) == 1, "sizeof(Container::value_type) != 1");
56  using Iter = typename Container::const_iterator;
57  return details::bytes_range<Iter>(std::begin(container), std::end(container));
58 }
59 
60 // create bytes_range from ranges
61 template<typename It>
62 inline details::bytes_range<It> to_hex(const It range_begin, const It range_end)
63 {
64  return details::bytes_range<It>(range_begin, range_end);
65 }
66 
67 } // namespace spdlog
68 
69 namespace fmt {
70 
71 template<typename T>
72 struct formatter<spdlog::details::bytes_range<T>>
73 {
74  const std::size_t line_size = 100;
75  const char delimiter = ' ';
76 
77  bool put_newlines = true;
78  bool put_delimiters = true;
79  bool use_uppercase = false;
80  bool put_positions = true; // position on start of each line
81 
82  // parse the format string flags
83  template<typename ParseContext>
84  auto parse(ParseContext &ctx) -> decltype(ctx.begin())
85  {
86  auto it = ctx.begin();
87  while (*it && *it != '}')
88  {
89  switch (*it)
90  {
91  case 'X':
92  use_uppercase = true;
93  break;
94  case 's':
95  put_delimiters = false;
96  break;
97  case 'p':
98  put_positions = false;
99  break;
100  case 'n':
101  put_newlines = false;
102  break;
103  }
104 
105  ++it;
106  }
107  return it;
108  }
109 
110  // format the given bytes range as hex
111  template<typename FormatContext, typename Container>
112  auto format(const spdlog::details::bytes_range<Container> &the_range, FormatContext &ctx) -> decltype(ctx.out())
113  {
114  SPDLOG_CONSTEXPR const char *hex_upper = "0123456789ABCDEF";
115  SPDLOG_CONSTEXPR const char *hex_lower = "0123456789abcdef";
116  const char *hex_chars = use_uppercase ? hex_upper : hex_lower;
117 
118  std::size_t pos = 0;
119  std::size_t column = line_size;
120  auto inserter = ctx.begin();
121 
122  for (auto &item : the_range)
123  {
124  auto ch = static_cast<unsigned char>(item);
125  pos++;
126 
127  if (put_newlines && column >= line_size)
128  {
129  column = put_newline(inserter, pos);
130 
131  // put first byte without delimiter in front of it
132  *inserter++ = hex_chars[(ch >> 4) & 0x0f];
133  *inserter++ = hex_chars[ch & 0x0f];
134  column += 2;
135  continue;
136  }
137 
138  if (put_delimiters)
139  {
140  *inserter++ = delimiter;
141  ++column;
142  }
143 
144  *inserter++ = hex_chars[(ch >> 4) & 0x0f];
145  *inserter++ = hex_chars[ch & 0x0f];
146  column += 2;
147  }
148  return inserter;
149  }
150 
151  // put newline(and position header)
152  // return the next column
153  template<typename It>
154  std::size_t put_newline(It inserter, std::size_t pos)
155  {
156 #ifdef _WIN32
157  *inserter++ = '\r';
158 #endif
159  *inserter++ = '\n';
160 
161  if (put_positions)
162  {
163  fmt::format_to(inserter, "{:<04X}: ", pos - 1);
164  return 7;
165  }
166  else
167  {
168  return 1;
169  }
170  }
171 };
172 } // namespace fmt
auto begin(const C &c) -> decltype(c.begin())
Definition: format.h:251
+
details::bytes_range< typename Container::const_iterator > to_hex(const Container &container)
Definition: bin_to_hex.h:53
+ +
bytes_range(It range_begin, It range_end)
Definition: bin_to_hex.h:31
+ +
Definition: async.h:27
+
auto parse(ParseContext &ctx) -> decltype(ctx.begin())
Definition: bin_to_hex.h:84
+ +
std::size_t put_newline(It inserter, std::size_t pos)
Definition: bin_to_hex.h:154
+ +
auto format(const spdlog::details::bytes_range< Container > &the_range, FormatContext &ctx) -> decltype(ctx.out())
Definition: bin_to_hex.h:112
+
std::enable_if< is_contiguous< Container >::value &&internal::is_string< S >::value, std::back_insert_iterator< Container > >::type format_to(std::back_insert_iterator< Container > out, const S &format_str, const Args &...args)
Definition: core.h:1430
+
Definition: bin_to_hex.h:69
+
#define SPDLOG_CONSTEXPR
Definition: common.h:36
+
auto end(const C &c) -> decltype(c.end())
Definition: format.h:257
-
std::enable_if< is_contiguous< Container >::value &&internal::is_string< S >::value, std::back_insert_iterator< Container > >::type format_to(std::back_insert_iterator< Container > out, const S &format_str, const Args &... args)
Definition: core.h:1430
-
auto parse(ParseContext &ctx) -> decltype(ctx.begin())
Definition: bin_to_hex.h:84
-
bytes_range(It range_begin, It range_end)
Definition: bin_to_hex.h:31
- -
auto format(const spdlog::details::bytes_range< Container > &the_range, FormatContext &ctx) -> decltype(ctx.out())
Definition: bin_to_hex.h:112
- -
auto end(const C &c) -> decltype(c.end())
Definition: format.h:257
-
details::bytes_range< typename Container::const_iterator > to_hex(const Container &container)
Definition: bin_to_hex.h:53
-
std::size_t put_newline(It inserter, std::size_t pos)
Definition: bin_to_hex.h:154
-
Definition: async.h:27
- - -
Definition: bin_to_hex.h:69
-
auto begin(const C &c) -> decltype(c.begin())
Definition: format.h:251
-
#define SPDLOG_CONSTEXPR
Definition: common.h:36
diff --git a/docs/chrono_8h.html b/docs/chrono_8h.html index fdafbc5..25dfb93 100644 --- a/docs/chrono_8h.html +++ b/docs/chrono_8h.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: sdk_core/include/third_party/spdlog/spdlog/fmt/bundled/chrono.h File Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,40 @@ - + - - - - + +
@@ -207,7 +225,7 @@ Functions + doxygen 1.8.11
diff --git a/docs/chrono_8h_source.html b/docs/chrono_8h_source.html index a233e32..31e026f 100644 --- a/docs/chrono_8h_source.html +++ b/docs/chrono_8h_source.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: sdk_core/include/third_party/spdlog/spdlog/fmt/bundled/chrono.h Source File @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,40 @@ - + - - - - + +
@@ -91,576 +109,124 @@ $(document).ready(function(){initNavTree('chrono_8h_source.html','');});
chrono.h
-Go to the documentation of this file.
1 // Formatting library for C++ - chrono support
-
2 //
-
3 // Copyright (c) 2012 - present, Victor Zverovich
-
4 // All rights reserved.
-
5 //
-
6 // For the license information refer to format.h.
-
7 
-
8 #ifndef FMT_CHRONO_H_
-
9 #define FMT_CHRONO_H_
-
10 
-
11 #include "format.h"
-
12 #include "locale.h"
-
13 
-
14 #include <chrono>
-
15 #include <ctime>
-
16 #include <locale>
-
17 #include <sstream>
-
18 
- -
20 
-
21 namespace internal{
-
22 
-
23 enum class numeric_system {
-
24  standard,
-
25  // Alternative numeric system, e.g. 十二 instead of 12 in ja_JP locale.
- -
27 };
-
28 
-
29 // Parses a put_time-like format string and invokes handler actions.
-
30 template <typename Char, typename Handler>
- -
32  const Char *begin, const Char *end, Handler &&handler) {
-
33  auto ptr = begin;
-
34  while (ptr != end) {
-
35  auto c = *ptr;
-
36  if (c == '}') break;
-
37  if (c != '%') {
-
38  ++ptr;
-
39  continue;
-
40  }
-
41  if (begin != ptr)
-
42  handler.on_text(begin, ptr);
-
43  ++ptr; // consume '%'
-
44  if (ptr == end)
-
45  throw format_error("invalid format");
-
46  c = *ptr++;
-
47  switch (c) {
-
48  case '%':
-
49  handler.on_text(ptr - 1, ptr);
-
50  break;
-
51  case 'n': {
-
52  const char newline[] = "\n";
-
53  handler.on_text(newline, newline + 1);
-
54  break;
-
55  }
-
56  case 't': {
-
57  const char tab[] = "\t";
-
58  handler.on_text(tab, tab + 1);
-
59  break;
-
60  }
-
61  // Day of the week:
-
62  case 'a':
-
63  handler.on_abbr_weekday();
-
64  break;
-
65  case 'A':
-
66  handler.on_full_weekday();
-
67  break;
-
68  case 'w':
-
69  handler.on_dec0_weekday(numeric_system::standard);
-
70  break;
-
71  case 'u':
-
72  handler.on_dec1_weekday(numeric_system::standard);
-
73  break;
-
74  // Month:
-
75  case 'b':
-
76  handler.on_abbr_month();
-
77  break;
-
78  case 'B':
-
79  handler.on_full_month();
-
80  break;
-
81  // Hour, minute, second:
-
82  case 'H':
-
83  handler.on_24_hour(numeric_system::standard);
-
84  break;
-
85  case 'I':
-
86  handler.on_12_hour(numeric_system::standard);
-
87  break;
-
88  case 'M':
-
89  handler.on_minute(numeric_system::standard);
-
90  break;
-
91  case 'S':
-
92  handler.on_second(numeric_system::standard);
-
93  break;
-
94  // Other:
-
95  case 'c':
-
96  handler.on_datetime(numeric_system::standard);
-
97  break;
-
98  case 'x':
-
99  handler.on_loc_date(numeric_system::standard);
-
100  break;
-
101  case 'X':
-
102  handler.on_loc_time(numeric_system::standard);
-
103  break;
-
104  case 'D':
-
105  handler.on_us_date();
-
106  break;
-
107  case 'F':
-
108  handler.on_iso_date();
-
109  break;
-
110  case 'r':
-
111  handler.on_12_hour_time();
-
112  break;
-
113  case 'R':
-
114  handler.on_24_hour_time();
-
115  break;
-
116  case 'T':
-
117  handler.on_iso_time();
-
118  break;
-
119  case 'p':
-
120  handler.on_am_pm();
-
121  break;
-
122  case 'z':
-
123  handler.on_utc_offset();
-
124  break;
-
125  case 'Z':
-
126  handler.on_tz_name();
-
127  break;
-
128  // Alternative representation:
-
129  case 'E': {
-
130  if (ptr == end)
-
131  throw format_error("invalid format");
-
132  c = *ptr++;
-
133  switch (c) {
-
134  case 'c':
-
135  handler.on_datetime(numeric_system::alternative);
-
136  break;
-
137  case 'x':
-
138  handler.on_loc_date(numeric_system::alternative);
-
139  break;
-
140  case 'X':
-
141  handler.on_loc_time(numeric_system::alternative);
-
142  break;
-
143  default:
-
144  throw format_error("invalid format");
-
145  }
-
146  break;
-
147  }
-
148  case 'O':
-
149  if (ptr == end)
-
150  throw format_error("invalid format");
-
151  c = *ptr++;
-
152  switch (c) {
-
153  case 'w':
-
154  handler.on_dec0_weekday(numeric_system::alternative);
-
155  break;
-
156  case 'u':
-
157  handler.on_dec1_weekday(numeric_system::alternative);
-
158  break;
-
159  case 'H':
-
160  handler.on_24_hour(numeric_system::alternative);
-
161  break;
-
162  case 'I':
-
163  handler.on_12_hour(numeric_system::alternative);
-
164  break;
-
165  case 'M':
-
166  handler.on_minute(numeric_system::alternative);
-
167  break;
-
168  case 'S':
-
169  handler.on_second(numeric_system::alternative);
-
170  break;
-
171  default:
-
172  throw format_error("invalid format");
-
173  }
-
174  break;
-
175  default:
-
176  throw format_error("invalid format");
-
177  }
-
178  begin = ptr;
-
179  }
-
180  if (begin != ptr)
-
181  handler.on_text(begin, ptr);
-
182  return ptr;
-
183 }
-
184 
- -
186  void report_no_date() { throw format_error("no date"); }
-
187 
-
188  template <typename Char>
-
189  void on_text(const Char *, const Char *) {}
-
190  void on_abbr_weekday() { report_no_date(); }
-
191  void on_full_weekday() { report_no_date(); }
-
192  void on_dec0_weekday(numeric_system) { report_no_date(); }
-
193  void on_dec1_weekday(numeric_system) { report_no_date(); }
-
194  void on_abbr_month() { report_no_date(); }
-
195  void on_full_month() { report_no_date(); }
- - - - -
200  void on_datetime(numeric_system) { report_no_date(); }
-
201  void on_loc_date(numeric_system) { report_no_date(); }
-
202  void on_loc_time(numeric_system) { report_no_date(); }
-
203  void on_us_date() { report_no_date(); }
-
204  void on_iso_date() { report_no_date(); }
-
205  void on_12_hour_time() {}
-
206  void on_24_hour_time() {}
-
207  void on_iso_time() {}
-
208  void on_am_pm() {}
-
209  void on_utc_offset() { report_no_date(); }
-
210  void on_tz_name() { report_no_date(); }
-
211 };
-
212 
-
213 template <typename Int>
-
214 inline int to_int(Int value) {
-
215  FMT_ASSERT(value >= (std::numeric_limits<int>::min)() &&
-
216  value <= (std::numeric_limits<int>::max)(), "invalid value");
-
217  return static_cast<int>(value);
-
218 }
-
219 
-
220 template <typename FormatContext, typename OutputIt>
- -
222  FormatContext &context;
-
223  OutputIt out;
-
224  std::chrono::seconds s;
-
225  std::chrono::milliseconds ms;
-
226 
- -
228 
-
229  explicit chrono_formatter(FormatContext &ctx, OutputIt o)
-
230  : context(ctx), out(o) {}
-
231 
-
232  int hour() const { return to_int((s.count() / 3600) % 24); }
-
233 
-
234  int hour12() const {
-
235  auto hour = to_int((s.count() / 3600) % 12);
-
236  return hour > 0 ? hour : 12;
-
237  }
-
238 
-
239  int minute() const { return to_int((s.count() / 60) % 60); }
-
240  int second() const { return to_int(s.count() % 60); }
-
241 
-
242  std::tm time() const {
-
243  auto time = std::tm();
-
244  time.tm_hour = hour();
-
245  time.tm_min = minute();
-
246  time.tm_sec = second();
-
247  return time;
-
248  }
-
249 
-
250  void write(int value, int width) {
-
251  typedef typename int_traits<int>::main_type main_type;
-
252  main_type n = to_unsigned(value);
-
253  int num_digits = internal::count_digits(n);
-
254  if (width > num_digits)
-
255  out = std::fill_n(out, width - num_digits, '0');
-
256  out = format_decimal<char_type>(out, n, num_digits);
-
257  }
-
258 
-
259  void format_localized(const tm &time, const char *format) {
-
260  auto locale = context.locale().template get<std::locale>();
-
261  auto &facet = std::use_facet<std::time_put<char_type>>(locale);
-
262  std::basic_ostringstream<char_type> os;
-
263  os.imbue(locale);
-
264  facet.put(os, os, ' ', &time, format, format + std::strlen(format));
-
265  auto str = os.str();
-
266  std::copy(str.begin(), str.end(), out);
-
267  }
-
268 
-
269  void on_text(const char_type *begin, const char_type *end) {
-
270  std::copy(begin, end, out);
-
271  }
-
272 
-
273  // These are not implemented because durations don't have date information.
-
274  void on_abbr_weekday() {}
-
275  void on_full_weekday() {}
- - -
278  void on_abbr_month() {}
-
279  void on_full_month() {}
- - - -
283  void on_us_date() {}
-
284  void on_iso_date() {}
-
285  void on_utc_offset() {}
-
286  void on_tz_name() {}
-
287 
- -
289  if (ns == numeric_system::standard)
-
290  return write(hour(), 2);
-
291  auto time = tm();
-
292  time.tm_hour = hour();
-
293  format_localized(time, "%OH");
-
294  }
-
295 
- -
297  if (ns == numeric_system::standard)
-
298  return write(hour12(), 2);
-
299  auto time = tm();
-
300  time.tm_hour = hour();
-
301  format_localized(time, "%OI");
-
302  }
-
303 
- -
305  if (ns == numeric_system::standard)
-
306  return write(minute(), 2);
-
307  auto time = tm();
-
308  time.tm_min = minute();
-
309  format_localized(time, "%OM");
-
310  }
-
311 
- -
313  if (ns == numeric_system::standard) {
-
314  write(second(), 2);
-
315  if (ms != std::chrono::milliseconds(0)) {
-
316  *out++ = '.';
-
317  write(to_int(ms.count()), 3);
-
318  }
-
319  return;
-
320  }
-
321  auto time = tm();
-
322  time.tm_sec = second();
-
323  format_localized(time, "%OS");
-
324  }
-
325 
-
326  void on_12_hour_time() { format_localized(time(), "%r"); }
-
327 
- -
329  write(hour(), 2);
-
330  *out++ = ':';
-
331  write(minute(), 2);
-
332  }
-
333 
-
334  void on_iso_time() {
-
335  on_24_hour_time();
-
336  *out++ = ':';
-
337  write(second(), 2);
-
338  }
-
339 
-
340  void on_am_pm() { format_localized(time(), "%p"); }
-
341 };
-
342 } // namespace internal
-
343 
-
344 template <typename Period> FMT_CONSTEXPR const char *get_units() {
-
345  return FMT_NULL;
-
346 }
-
347 template <> FMT_CONSTEXPR const char *get_units<std::atto>() { return "as"; }
-
348 template <> FMT_CONSTEXPR const char *get_units<std::femto>() { return "fs"; }
-
349 template <> FMT_CONSTEXPR const char *get_units<std::pico>() { return "ps"; }
-
350 template <> FMT_CONSTEXPR const char *get_units<std::nano>() { return "ns"; }
-
351 template <> FMT_CONSTEXPR const char *get_units<std::micro>() { return "µs"; }
-
352 template <> FMT_CONSTEXPR const char *get_units<std::milli>() { return "ms"; }
-
353 template <> FMT_CONSTEXPR const char *get_units<std::centi>() { return "cs"; }
-
354 template <> FMT_CONSTEXPR const char *get_units<std::deci>() { return "ds"; }
-
355 template <> FMT_CONSTEXPR const char *get_units<std::ratio<1>>() { return "s"; }
-
356 template <> FMT_CONSTEXPR const char *get_units<std::deca>() { return "das"; }
-
357 template <> FMT_CONSTEXPR const char *get_units<std::hecto>() { return "hs"; }
-
358 template <> FMT_CONSTEXPR const char *get_units<std::kilo>() { return "ks"; }
-
359 template <> FMT_CONSTEXPR const char *get_units<std::mega>() { return "Ms"; }
-
360 template <> FMT_CONSTEXPR const char *get_units<std::giga>() { return "Gs"; }
-
361 template <> FMT_CONSTEXPR const char *get_units<std::tera>() { return "Ts"; }
-
362 template <> FMT_CONSTEXPR const char *get_units<std::peta>() { return "Ps"; }
-
363 template <> FMT_CONSTEXPR const char *get_units<std::exa>() { return "Es"; }
-
364 template <> FMT_CONSTEXPR const char *get_units<std::ratio<60>>() {
-
365  return "m";
-
366 }
-
367 template <> FMT_CONSTEXPR const char *get_units<std::ratio<3600>>() {
-
368  return "h";
-
369 }
-
370 
-
371 template <typename Rep, typename Period, typename Char>
-
372 struct formatter<std::chrono::duration<Rep, Period>, Char> {
-
373  private:
-
374  align_spec spec;
-
375  internal::arg_ref<Char> width_ref;
-
376  mutable basic_string_view<Char> format_str;
-
377  typedef std::chrono::duration<Rep, Period> duration;
-
378 
-
379  struct spec_handler {
-
380  formatter &f;
-
381  basic_parse_context<Char> &context;
-
382 
-
383  typedef internal::arg_ref<Char> arg_ref_type;
-
384 
-
385  template <typename Id>
-
386  FMT_CONSTEXPR arg_ref_type make_arg_ref(Id arg_id) {
-
387  context.check_arg_id(arg_id);
-
388  return arg_ref_type(arg_id);
-
389  }
-
390 
-
391  FMT_CONSTEXPR arg_ref_type make_arg_ref(internal::auto_id) {
-
392  return arg_ref_type(context.next_arg_id());
-
393  }
-
394 
-
395  void on_error(const char *msg) { throw format_error(msg); }
-
396  void on_fill(Char fill) { f.spec.fill_ = fill; }
-
397  void on_align(alignment align) { f.spec.align_ = align; }
-
398  void on_width(unsigned width) { f.spec.width_ = width; }
-
399 
-
400  template <typename Id>
-
401  void on_dynamic_width(Id arg_id) {
-
402  f.width_ref = make_arg_ref(arg_id);
-
403  }
-
404  };
-
405 
-
406  public:
-
407  formatter() : spec() {}
-
408 
- -
410  -> decltype(ctx.begin()) {
-
411  auto begin = ctx.begin(), end = ctx.end();
-
412  if (begin == end) return begin;
-
413  spec_handler handler{*this, ctx};
-
414  begin = internal::parse_align(begin, end, handler);
-
415  if (begin == end) return begin;
-
416  begin = internal::parse_width(begin, end, handler);
- - -
419  return end;
-
420  }
-
421 
-
422  template <typename FormatContext>
-
423  auto format(const duration &d, FormatContext &ctx)
-
424  -> decltype(ctx.out()) {
-
425  auto begin = format_str.begin(), end = format_str.end();
-
426  memory_buffer buf;
-
427  typedef output_range<decltype(ctx.out()), Char> range;
-
428  basic_writer<range> w(range(ctx.out()));
-
429  if (begin == end || *begin == '}') {
-
430  if (const char *unit = get_units<Period>())
-
431  format_to(buf, "{}{}", d.count(), unit);
-
432  else if (Period::den == 1)
-
433  format_to(buf, "{}[{}]s", d.count(), Period::num);
-
434  else
-
435  format_to(buf, "{}[{}/{}]s", d.count(), Period::num, Period::den);
-
436  internal::handle_dynamic_spec<internal::width_checker>(
-
437  spec.width_, width_ref, ctx);
-
438  } else {
-
439  auto out = std::back_inserter(buf);
-
440  internal::chrono_formatter<FormatContext, decltype(out)> f(ctx, out);
-
441  f.s = std::chrono::duration_cast<std::chrono::seconds>(d);
-
442  f.ms = std::chrono::duration_cast<std::chrono::milliseconds>(d - f.s);
- -
444  }
-
445  w.write(buf.data(), buf.size(), spec);
-
446  return w.out();
-
447  }
-
448 };
-
449 
- -
451 
-
452 #endif // FMT_CHRONO_H_
+Go to the documentation of this file.
1 // Formatting library for C++ - chrono support
2 //
3 // Copyright (c) 2012 - present, Victor Zverovich
4 // All rights reserved.
5 //
6 // For the license information refer to format.h.
7 
8 #ifndef FMT_CHRONO_H_
9 #define FMT_CHRONO_H_
10 
11 #include "format.h"
12 #include "locale.h"
13 
14 #include <chrono>
15 #include <ctime>
16 #include <locale>
17 #include <sstream>
18 
20 
21 namespace internal{
22 
23 enum class numeric_system {
24  standard,
25  // Alternative numeric system, e.g. 十二 instead of 12 in ja_JP locale.
27 };
28 
29 // Parses a put_time-like format string and invokes handler actions.
30 template <typename Char, typename Handler>
32  const Char *begin, const Char *end, Handler &&handler) {
33  auto ptr = begin;
34  while (ptr != end) {
35  auto c = *ptr;
36  if (c == '}') break;
37  if (c != '%') {
38  ++ptr;
39  continue;
40  }
41  if (begin != ptr)
42  handler.on_text(begin, ptr);
43  ++ptr; // consume '%'
44  if (ptr == end)
45  throw format_error("invalid format");
46  c = *ptr++;
47  switch (c) {
48  case '%':
49  handler.on_text(ptr - 1, ptr);
50  break;
51  case 'n': {
52  const char newline[] = "\n";
53  handler.on_text(newline, newline + 1);
54  break;
55  }
56  case 't': {
57  const char tab[] = "\t";
58  handler.on_text(tab, tab + 1);
59  break;
60  }
61  // Day of the week:
62  case 'a':
63  handler.on_abbr_weekday();
64  break;
65  case 'A':
66  handler.on_full_weekday();
67  break;
68  case 'w':
69  handler.on_dec0_weekday(numeric_system::standard);
70  break;
71  case 'u':
72  handler.on_dec1_weekday(numeric_system::standard);
73  break;
74  // Month:
75  case 'b':
76  handler.on_abbr_month();
77  break;
78  case 'B':
79  handler.on_full_month();
80  break;
81  // Hour, minute, second:
82  case 'H':
83  handler.on_24_hour(numeric_system::standard);
84  break;
85  case 'I':
86  handler.on_12_hour(numeric_system::standard);
87  break;
88  case 'M':
89  handler.on_minute(numeric_system::standard);
90  break;
91  case 'S':
92  handler.on_second(numeric_system::standard);
93  break;
94  // Other:
95  case 'c':
96  handler.on_datetime(numeric_system::standard);
97  break;
98  case 'x':
99  handler.on_loc_date(numeric_system::standard);
100  break;
101  case 'X':
102  handler.on_loc_time(numeric_system::standard);
103  break;
104  case 'D':
105  handler.on_us_date();
106  break;
107  case 'F':
108  handler.on_iso_date();
109  break;
110  case 'r':
111  handler.on_12_hour_time();
112  break;
113  case 'R':
114  handler.on_24_hour_time();
115  break;
116  case 'T':
117  handler.on_iso_time();
118  break;
119  case 'p':
120  handler.on_am_pm();
121  break;
122  case 'z':
123  handler.on_utc_offset();
124  break;
125  case 'Z':
126  handler.on_tz_name();
127  break;
128  // Alternative representation:
129  case 'E': {
130  if (ptr == end)
131  throw format_error("invalid format");
132  c = *ptr++;
133  switch (c) {
134  case 'c':
135  handler.on_datetime(numeric_system::alternative);
136  break;
137  case 'x':
138  handler.on_loc_date(numeric_system::alternative);
139  break;
140  case 'X':
141  handler.on_loc_time(numeric_system::alternative);
142  break;
143  default:
144  throw format_error("invalid format");
145  }
146  break;
147  }
148  case 'O':
149  if (ptr == end)
150  throw format_error("invalid format");
151  c = *ptr++;
152  switch (c) {
153  case 'w':
154  handler.on_dec0_weekday(numeric_system::alternative);
155  break;
156  case 'u':
157  handler.on_dec1_weekday(numeric_system::alternative);
158  break;
159  case 'H':
160  handler.on_24_hour(numeric_system::alternative);
161  break;
162  case 'I':
163  handler.on_12_hour(numeric_system::alternative);
164  break;
165  case 'M':
166  handler.on_minute(numeric_system::alternative);
167  break;
168  case 'S':
169  handler.on_second(numeric_system::alternative);
170  break;
171  default:
172  throw format_error("invalid format");
173  }
174  break;
175  default:
176  throw format_error("invalid format");
177  }
178  begin = ptr;
179  }
180  if (begin != ptr)
181  handler.on_text(begin, ptr);
182  return ptr;
183 }
184 
186  void report_no_date() { throw format_error("no date"); }
187 
188  template <typename Char>
189  void on_text(const Char *, const Char *) {}
190  void on_abbr_weekday() { report_no_date(); }
191  void on_full_weekday() { report_no_date(); }
192  void on_dec0_weekday(numeric_system) { report_no_date(); }
193  void on_dec1_weekday(numeric_system) { report_no_date(); }
194  void on_abbr_month() { report_no_date(); }
195  void on_full_month() { report_no_date(); }
200  void on_datetime(numeric_system) { report_no_date(); }
201  void on_loc_date(numeric_system) { report_no_date(); }
202  void on_loc_time(numeric_system) { report_no_date(); }
203  void on_us_date() { report_no_date(); }
204  void on_iso_date() { report_no_date(); }
205  void on_12_hour_time() {}
206  void on_24_hour_time() {}
207  void on_iso_time() {}
208  void on_am_pm() {}
209  void on_utc_offset() { report_no_date(); }
210  void on_tz_name() { report_no_date(); }
211 };
212 
213 template <typename Int>
214 inline int to_int(Int value) {
215  FMT_ASSERT(value >= (std::numeric_limits<int>::min)() &&
216  value <= (std::numeric_limits<int>::max)(), "invalid value");
217  return static_cast<int>(value);
218 }
219 
220 template <typename FormatContext, typename OutputIt>
222  FormatContext &context;
223  OutputIt out;
224  std::chrono::seconds s;
225  std::chrono::milliseconds ms;
226 
228 
229  explicit chrono_formatter(FormatContext &ctx, OutputIt o)
230  : context(ctx), out(o) {}
231 
232  int hour() const { return to_int((s.count() / 3600) % 24); }
233 
234  int hour12() const {
235  auto hour = to_int((s.count() / 3600) % 12);
236  return hour > 0 ? hour : 12;
237  }
238 
239  int minute() const { return to_int((s.count() / 60) % 60); }
240  int second() const { return to_int(s.count() % 60); }
241 
242  std::tm time() const {
243  auto time = std::tm();
244  time.tm_hour = hour();
245  time.tm_min = minute();
246  time.tm_sec = second();
247  return time;
248  }
249 
250  void write(int value, int width) {
251  typedef typename int_traits<int>::main_type main_type;
252  main_type n = to_unsigned(value);
253  int num_digits = internal::count_digits(n);
254  if (width > num_digits)
255  out = std::fill_n(out, width - num_digits, '0');
256  out = format_decimal<char_type>(out, n, num_digits);
257  }
258 
259  void format_localized(const tm &time, const char *format) {
260  auto locale = context.locale().template get<std::locale>();
261  auto &facet = std::use_facet<std::time_put<char_type>>(locale);
262  std::basic_ostringstream<char_type> os;
263  os.imbue(locale);
264  facet.put(os, os, ' ', &time, format, format + std::strlen(format));
265  auto str = os.str();
266  std::copy(str.begin(), str.end(), out);
267  }
268 
269  void on_text(const char_type *begin, const char_type *end) {
270  std::copy(begin, end, out);
271  }
272 
273  // These are not implemented because durations don't have date information.
274  void on_abbr_weekday() {}
275  void on_full_weekday() {}
278  void on_abbr_month() {}
279  void on_full_month() {}
283  void on_us_date() {}
284  void on_iso_date() {}
285  void on_utc_offset() {}
286  void on_tz_name() {}
287 
289  if (ns == numeric_system::standard)
290  return write(hour(), 2);
291  auto time = tm();
292  time.tm_hour = hour();
293  format_localized(time, "%OH");
294  }
295 
297  if (ns == numeric_system::standard)
298  return write(hour12(), 2);
299  auto time = tm();
300  time.tm_hour = hour();
301  format_localized(time, "%OI");
302  }
303 
305  if (ns == numeric_system::standard)
306  return write(minute(), 2);
307  auto time = tm();
308  time.tm_min = minute();
309  format_localized(time, "%OM");
310  }
311 
313  if (ns == numeric_system::standard) {
314  write(second(), 2);
315  if (ms != std::chrono::milliseconds(0)) {
316  *out++ = '.';
317  write(to_int(ms.count()), 3);
318  }
319  return;
320  }
321  auto time = tm();
322  time.tm_sec = second();
323  format_localized(time, "%OS");
324  }
325 
326  void on_12_hour_time() { format_localized(time(), "%r"); }
327 
329  write(hour(), 2);
330  *out++ = ':';
331  write(minute(), 2);
332  }
333 
334  void on_iso_time() {
335  on_24_hour_time();
336  *out++ = ':';
337  write(second(), 2);
338  }
339 
340  void on_am_pm() { format_localized(time(), "%p"); }
341 };
342 } // namespace internal
343 
344 template <typename Period> FMT_CONSTEXPR const char *get_units() {
345  return FMT_NULL;
346 }
347 template <> FMT_CONSTEXPR const char *get_units<std::atto>() { return "as"; }
348 template <> FMT_CONSTEXPR const char *get_units<std::femto>() { return "fs"; }
349 template <> FMT_CONSTEXPR const char *get_units<std::pico>() { return "ps"; }
350 template <> FMT_CONSTEXPR const char *get_units<std::nano>() { return "ns"; }
351 template <> FMT_CONSTEXPR const char *get_units<std::micro>() { return "µs"; }
352 template <> FMT_CONSTEXPR const char *get_units<std::milli>() { return "ms"; }
353 template <> FMT_CONSTEXPR const char *get_units<std::centi>() { return "cs"; }
354 template <> FMT_CONSTEXPR const char *get_units<std::deci>() { return "ds"; }
355 template <> FMT_CONSTEXPR const char *get_units<std::ratio<1>>() { return "s"; }
356 template <> FMT_CONSTEXPR const char *get_units<std::deca>() { return "das"; }
357 template <> FMT_CONSTEXPR const char *get_units<std::hecto>() { return "hs"; }
358 template <> FMT_CONSTEXPR const char *get_units<std::kilo>() { return "ks"; }
359 template <> FMT_CONSTEXPR const char *get_units<std::mega>() { return "Ms"; }
360 template <> FMT_CONSTEXPR const char *get_units<std::giga>() { return "Gs"; }
361 template <> FMT_CONSTEXPR const char *get_units<std::tera>() { return "Ts"; }
362 template <> FMT_CONSTEXPR const char *get_units<std::peta>() { return "Ps"; }
363 template <> FMT_CONSTEXPR const char *get_units<std::exa>() { return "Es"; }
364 template <> FMT_CONSTEXPR const char *get_units<std::ratio<60>>() {
365  return "m";
366 }
367 template <> FMT_CONSTEXPR const char *get_units<std::ratio<3600>>() {
368  return "h";
369 }
370 
371 template <typename Rep, typename Period, typename Char>
372 struct formatter<std::chrono::duration<Rep, Period>, Char> {
373  private:
374  align_spec spec;
375  internal::arg_ref<Char> width_ref;
376  mutable basic_string_view<Char> format_str;
377  typedef std::chrono::duration<Rep, Period> duration;
378 
379  struct spec_handler {
380  formatter &f;
381  basic_parse_context<Char> &context;
382 
383  typedef internal::arg_ref<Char> arg_ref_type;
384 
385  template <typename Id>
386  FMT_CONSTEXPR arg_ref_type make_arg_ref(Id arg_id) {
387  context.check_arg_id(arg_id);
388  return arg_ref_type(arg_id);
389  }
390 
391  FMT_CONSTEXPR arg_ref_type make_arg_ref(internal::auto_id) {
392  return arg_ref_type(context.next_arg_id());
393  }
394 
395  void on_error(const char *msg) { throw format_error(msg); }
396  void on_fill(Char fill) { f.spec.fill_ = fill; }
397  void on_align(alignment align) { f.spec.align_ = align; }
398  void on_width(unsigned width) { f.spec.width_ = width; }
399 
400  template <typename Id>
401  void on_dynamic_width(Id arg_id) {
402  f.width_ref = make_arg_ref(arg_id);
403  }
404  };
405 
406  public:
407  formatter() : spec() {}
408 
410  -> decltype(ctx.begin()) {
411  auto begin = ctx.begin(), end = ctx.end();
412  if (begin == end) return begin;
413  spec_handler handler{*this, ctx};
414  begin = internal::parse_align(begin, end, handler);
415  if (begin == end) return begin;
416  begin = internal::parse_width(begin, end, handler);
418  format_str = basic_string_view<Char>(&*begin, internal::to_unsigned(end - begin));
419  return end;
420  }
421 
422  template <typename FormatContext>
423  auto format(const duration &d, FormatContext &ctx)
424  -> decltype(ctx.out()) {
425  auto begin = format_str.begin(), end = format_str.end();
426  memory_buffer buf;
427  typedef output_range<decltype(ctx.out()), Char> range;
428  basic_writer<range> w(range(ctx.out()));
429  if (begin == end || *begin == '}') {
430  if (const char *unit = get_units<Period>())
431  format_to(buf, "{}{}", d.count(), unit);
432  else if (Period::den == 1)
433  format_to(buf, "{}[{}]s", d.count(), Period::num);
434  else
435  format_to(buf, "{}[{}/{}]s", d.count(), Period::num, Period::den);
436  internal::handle_dynamic_spec<internal::width_checker>(
437  spec.width_, width_ref, ctx);
438  } else {
439  auto out = std::back_inserter(buf);
441  f.s = std::chrono::duration_cast<std::chrono::seconds>(d);
442  f.ms = std::chrono::duration_cast<std::chrono::milliseconds>(d - f.s);
444  }
445  w.write(buf.data(), buf.size(), spec);
446  return w.out();
447  }
448 };
449 
451 
452 #endif // FMT_CHRONO_H_
void on_dec1_weekday(numeric_system)
Definition: chrono.h:193
+
auto begin(const C &c) -> decltype(c.begin())
Definition: format.h:251
+
void on_24_hour(numeric_system)
Definition: chrono.h:196
+ + + +
void on_second(numeric_system)
Definition: chrono.h:199
+
void write(std::basic_ostream< Char > &os, basic_buffer< Char > &buf)
Definition: ostream.h:76
+ +
FormatContext::char_type char_type
Definition: chrono.h:227
+
auto format(const duration &d, FormatContext &ctx) -> decltype(ctx.out())
Definition: chrono.h:423
+
void on_datetime(numeric_system)
Definition: chrono.h:280
+ + + + +
void on_loc_time(numeric_system)
Definition: chrono.h:202
+
void on_loc_date(numeric_system)
Definition: chrono.h:281
+ +
const char * get_units()
Definition: chrono.h:344
+
Definition: format.h:297
+ + + +
void on_loc_time(numeric_system)
Definition: chrono.h:282
+
std::chrono::seconds s
Definition: chrono.h:224
+ +
#define FMT_END_NAMESPACE
Definition: core.h:153
+
auto parse(basic_parse_context< Char > &ctx) -> decltype(ctx.begin())
Definition: chrono.h:409
+
const Char * parse_width(const Char *begin, const Char *end, Handler &&handler)
Definition: format.h:1884
+
void on_loc_date(numeric_system)
Definition: chrono.h:201
+ + +
std::size_t size() const
Definition: core.h:250
+ + + + + + + +
chrono_formatter(FormatContext &ctx, OutputIt o)
Definition: chrono.h:229
+ + +
void on_12_hour(numeric_system)
Definition: chrono.h:197
+ + + +
void on_dec0_weekday(numeric_system)
Definition: chrono.h:192
+ + + + + +
bool check_arg_id(unsigned)
Definition: core.h:908
+
void on_second(numeric_system ns)
Definition: chrono.h:312
+
void on_24_hour(numeric_system ns)
Definition: chrono.h:288
+ + +
std::make_unsigned< Int >::type to_unsigned(Int value)
Definition: core.h:208
+ +
std::basic_string< typename char_t< S >::type > format(const S &format_str, const Args &...args)
Definition: core.h:1454
+ +
void on_datetime(numeric_system)
Definition: chrono.h:200
+
void on_text(const char_type *begin, const char_type *end)
Definition: chrono.h:269
+ + +
#define FMT_NULL
Definition: core.h:107
+
void on_dec1_weekday(numeric_system)
Definition: chrono.h:277
+
void on_text(const Char *, const Char *)
Definition: chrono.h:189
+ + +
void on_12_hour(numeric_system ns)
Definition: chrono.h:296
+ +
#define FMT_CONSTEXPR
Definition: core.h:69
+
unsigned width_
Definition: format.h:1088
+
const void * ptr(const T *p)
Definition: format.h:3138
+ +
const Char * parse_chrono_format(const Char *begin, const Char *end, Handler &&handler)
Definition: chrono.h:31
+ +
void on_minute(numeric_system)
Definition: chrono.h:198
+
std::chrono::milliseconds ms
Definition: chrono.h:225
+
void copy(const RangeT &range, OutputIterator out)
Definition: ranges.h:58
+
std::enable_if< is_contiguous< Container >::value &&internal::is_string< S >::value, std::back_insert_iterator< Container > >::type format_to(std::back_insert_iterator< Container > out, const S &format_str, const Args &...args)
Definition: core.h:1430
+
void on_minute(numeric_system ns)
Definition: chrono.h:304
+ + +
#define FMT_ASSERT(condition, message)
Definition: core.h:170
+
const Char * parse_align(const Char *begin, const Char *end, Handler &&handler)
Definition: format.h:1847
+
alignment
Definition: format.h:1079
+ +
#define FMT_BEGIN_NAMESPACE
Definition: core.h:155
+ + + + +
unsigned count_digits(T n)
Definition: fmt_helper.h:47
+ +
iterator begin() const
Definition: core.h:391
+ + +
void write(int value, int width)
Definition: chrono.h:250
+
void on_dec0_weekday(numeric_system)
Definition: chrono.h:276
+
int to_int(Int value)
Definition: chrono.h:214
+
auto end(const C &c) -> decltype(c.end())
Definition: format.h:257
+
void format_localized(const tm &time, const char *format)
Definition: chrono.h:259
+ + +
iterator end() const
Definition: core.h:392
-
std::enable_if< is_contiguous< Container >::value &&internal::is_string< S >::value, std::back_insert_iterator< Container > >::type format_to(std::back_insert_iterator< Container > out, const S &format_str, const Args &... args)
Definition: core.h:1430
- - - -
void on_text(const char_type *begin, const char_type *end)
Definition: chrono.h:269
- -
void on_datetime(numeric_system)
Definition: chrono.h:280
- -
void on_second(numeric_system)
Definition: chrono.h:199
-
chrono_formatter(FormatContext &ctx, OutputIt o)
Definition: chrono.h:229
- - - -
void on_dec0_weekday(numeric_system)
Definition: chrono.h:192
-
void on_loc_date(numeric_system)
Definition: chrono.h:281
- - -
void on_12_hour(numeric_system ns)
Definition: chrono.h:296
-
void on_loc_time(numeric_system)
Definition: chrono.h:202
-
void on_datetime(numeric_system)
Definition: chrono.h:200
- - - - -
std::size_t size() const
Definition: core.h:250
-
iterator end() const
Definition: core.h:392
- - - - - -
auto end(const C &c) -> decltype(c.end())
Definition: format.h:257
-
const char * get_units()
Definition: chrono.h:344
-
FormatContext::char_type char_type
Definition: chrono.h:227
-
unsigned width_
Definition: format.h:1088
- - - -
void on_dec1_weekday(numeric_system)
Definition: chrono.h:277
- - - - - -
void on_second(numeric_system ns)
Definition: chrono.h:312
- -
std::make_unsigned< Int >::type to_unsigned(Int value)
Definition: core.h:208
-
#define FMT_NULL
Definition: core.h:107
- - -
void on_24_hour(numeric_system ns)
Definition: chrono.h:288
-
void copy(const RangeT &range, OutputIterator out)
Definition: ranges.h:58
- -
const Char * parse_align(const Char *begin, const Char *end, Handler &&handler)
Definition: format.h:1847
-
#define FMT_END_NAMESPACE
Definition: core.h:153
- -
void on_dec1_weekday(numeric_system)
Definition: chrono.h:193
-
void on_minute(numeric_system)
Definition: chrono.h:198
- -
void on_24_hour(numeric_system)
Definition: chrono.h:196
- -
const Char * parse_width(const Char *begin, const Char *end, Handler &&handler)
Definition: format.h:1884
- - -
void on_minute(numeric_system ns)
Definition: chrono.h:304
- - - - - -
#define FMT_ASSERT(condition, message)
Definition: core.h:170
- -
bool check_arg_id(unsigned)
Definition: core.h:908
-
auto parse(basic_parse_context< Char > &ctx) -> decltype(ctx.begin())
Definition: chrono.h:409
-
Definition: format.h:297
- -
iterator begin() const
Definition: core.h:391
- -
auto format(const duration &d, FormatContext &ctx) -> decltype(ctx.out())
Definition: chrono.h:423
- -
void format_localized(const tm &time, const char *format)
Definition: chrono.h:259
-
std::chrono::seconds s
Definition: chrono.h:224
-
void on_loc_date(numeric_system)
Definition: chrono.h:201
-
alignment
Definition: format.h:1079
-
void on_12_hour(numeric_system)
Definition: chrono.h:197
-
#define FMT_BEGIN_NAMESPACE
Definition: core.h:155
- - -
void on_text(const Char *, const Char *)
Definition: chrono.h:189
-
unsigned count_digits(T n)
Definition: fmt_helper.h:47
- - - - -
auto begin(const C &c) -> decltype(c.begin())
Definition: format.h:251
-
void on_loc_time(numeric_system)
Definition: chrono.h:282
- - -
void write(int value, int width)
Definition: chrono.h:250
-
void on_dec0_weekday(numeric_system)
Definition: chrono.h:276
-
std::chrono::milliseconds ms
Definition: chrono.h:225
-
std::basic_string< typename char_t< S >::type > format(const S &format_str, const Args &... args)
Definition: core.h:1454
-
const Char * parse_chrono_format(const Char *begin, const Char *end, Handler &&handler)
Definition: chrono.h:31
-
const void * ptr(const T *p)
Definition: format.h:3138
- - -
#define FMT_CONSTEXPR
Definition: core.h:69
-
void write(std::basic_ostream< Char > &os, basic_buffer< Char > &buf)
Definition: ostream.h:76
-
int to_int(Int value)
Definition: chrono.h:214
diff --git a/docs/circular__q_8h.html b/docs/circular__q_8h.html index 8f3f9ef..9edd246 100644 --- a/docs/circular__q_8h.html +++ b/docs/circular__q_8h.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: sdk_core/include/third_party/spdlog/spdlog/details/circular_q.h File Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,40 @@ - + - - - - + +
@@ -118,7 +136,7 @@ Namespaces + doxygen 1.8.11
diff --git a/docs/circular__q_8h_source.html b/docs/circular__q_8h_source.html index 4b8af99..dd07e24 100644 --- a/docs/circular__q_8h_source.html +++ b/docs/circular__q_8h_source.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: sdk_core/include/third_party/spdlog/spdlog/details/circular_q.h Source File @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,40 @@ - + - - - - + +
@@ -91,96 +109,24 @@ $(document).ready(function(){initNavTree('circular__q_8h_source.html','');});
circular_q.h
-Go to the documentation of this file.
1 //
-
2 // Copyright(c) 2018 Gabi Melman.
-
3 // Distributed under the MIT License (http://opensource.org/licenses/MIT)
-
4 //
-
5 
-
6 // cirucal q view of std::vector.
-
7 #pragma once
-
8 
-
9 #include <vector>
-
10 
-
11 namespace spdlog {
-
12 namespace details {
-
13 template<typename T>
- -
15 {
-
16 public:
-
17  using item_type = T;
-
18 
-
19  explicit circular_q(size_t max_items)
-
20  : max_items_(max_items + 1) // one item is reserved as marker for full q
-
21  , v_(max_items_)
-
22  {
-
23  }
-
24 
-
25  // push back, overrun (oldest) item if no room left
-
26  void push_back(T &&item)
-
27  {
-
28  v_[tail_] = std::move(item);
-
29  tail_ = (tail_ + 1) % max_items_;
-
30 
-
31  if (tail_ == head_) // overrun last item if full
-
32  {
-
33  head_ = (head_ + 1) % max_items_;
-
34  ++overrun_counter_;
-
35  }
-
36  }
-
37 
-
38  // Pop item from front.
-
39  // If there are no elements in the container, the behavior is undefined.
-
40  void pop_front(T &popped_item)
-
41  {
-
42  popped_item = std::move(v_[head_]);
-
43  head_ = (head_ + 1) % max_items_;
-
44  }
-
45 
-
46  bool empty()
-
47  {
-
48  return tail_ == head_;
-
49  }
-
50 
-
51  bool full()
-
52  {
-
53  // head is ahead of the tail by 1
-
54  return ((tail_ + 1) % max_items_) == head_;
-
55  }
-
56 
-
57  size_t overrun_counter() const
-
58  {
-
59  return overrun_counter_;
-
60  }
-
61 
-
62 private:
-
63  size_t max_items_;
-
64  typename std::vector<T>::size_type head_ = 0;
-
65  typename std::vector<T>::size_type tail_ = 0;
-
66 
-
67  std::vector<T> v_;
-
68 
-
69  size_t overrun_counter_ = 0;
-
70 };
-
71 } // namespace details
-
72 } // namespace spdlog
+Go to the documentation of this file.
1 //
2 // Copyright(c) 2018 Gabi Melman.
3 // Distributed under the MIT License (http://opensource.org/licenses/MIT)
4 //
5 
6 // cirucal q view of std::vector.
7 #pragma once
8 
9 #include <vector>
10 
11 namespace spdlog {
12 namespace details {
13 template<typename T>
15 {
16 public:
17  using item_type = T;
18 
19  explicit circular_q(size_t max_items)
20  : max_items_(max_items + 1) // one item is reserved as marker for full q
21  , v_(max_items_)
22  {
23  }
24 
25  // push back, overrun (oldest) item if no room left
26  void push_back(T &&item)
27  {
28  v_[tail_] = std::move(item);
29  tail_ = (tail_ + 1) % max_items_;
30 
31  if (tail_ == head_) // overrun last item if full
32  {
33  head_ = (head_ + 1) % max_items_;
34  ++overrun_counter_;
35  }
36  }
37 
38  // Pop item from front.
39  // If there are no elements in the container, the behavior is undefined.
40  void pop_front(T &popped_item)
41  {
42  popped_item = std::move(v_[head_]);
43  head_ = (head_ + 1) % max_items_;
44  }
45 
46  bool empty()
47  {
48  return tail_ == head_;
49  }
50 
51  bool full()
52  {
53  // head is ahead of the tail by 1
54  return ((tail_ + 1) % max_items_) == head_;
55  }
56 
57  size_t overrun_counter() const
58  {
59  return overrun_counter_;
60  }
61 
62 private:
63  size_t max_items_;
64  typename std::vector<T>::size_type head_ = 0;
65  typename std::vector<T>::size_type tail_ = 0;
66 
67  std::vector<T> v_;
68 
69  size_t overrun_counter_ = 0;
70 };
71 } // namespace details
72 } // namespace spdlog
void pop_front(T &popped_item)
Definition: circular_q.h:40
+
size_t overrun_counter() const
Definition: circular_q.h:57
+
circular_q(size_t max_items)
Definition: circular_q.h:19
+ + +
Definition: async.h:27
+
void push_back(T &&item)
Definition: circular_q.h:26
+ +
- -
void pop_front(T &popped_item)
Definition: circular_q.h:40
-
circular_q(size_t max_items)
Definition: circular_q.h:19
- -
Definition: async.h:27
-
size_t overrun_counter() const
Definition: circular_q.h:57
- - -
void push_back(T &&item)
Definition: circular_q.h:26
diff --git a/docs/class_fast_c_r_c16-members.html b/docs/class_fast_c_r_c16-members.html index c2617a4..54e3990 100644 --- a/docs/class_fast_c_r_c16-members.html +++ b/docs/class_fast_c_r_c16-members.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Member List @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -103,7 +123,7 @@ $(document).ready(function(){initNavTree('class_fast_c_r_c16.html','');});
    + doxygen 1.8.11
diff --git a/docs/class_fast_c_r_c16.html b/docs/class_fast_c_r_c16.html index d04c199..abf3c43 100644 --- a/docs/class_fast_c_r_c16.html +++ b/docs/class_fast_c_r_c16.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: FastCRC16 Class Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -106,11 +126,9 @@ Public Member Functions

Detailed Description

-

Definition at line 53 of file FastCRC.h.

+

Definition at line 53 of file FastCRC.h.

Constructor & Destructor Documentation

- -

◆ FastCRC16()

- +
@@ -127,9 +145,7 @@ Public Member Functions

Member Function Documentation

- -

◆ mcrf4xx_calc()

- +
@@ -166,7 +182,7 @@ Public Member Functions + doxygen 1.8.11 diff --git a/docs/class_fast_c_r_c32-members.html b/docs/class_fast_c_r_c32-members.html index f0c868e..63dfbf2 100644 --- a/docs/class_fast_c_r_c32-members.html +++ b/docs/class_fast_c_r_c32-members.html @@ -1,10 +1,9 @@ - + - - +Livox SDK API: Member List @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ @@ -39,22 +41,42 @@
Livox SDK API -  V2.0.0 +  V2.1.0
- + - - - - + +
@@ -103,7 +123,7 @@ $(document).ready(function(){initNavTree('class_fast_c_r_c32.html','');});
    + doxygen 1.8.11
diff --git a/docs/class_fast_c_r_c32.html b/docs/class_fast_c_r_c32.html index 543d7af..16f5169 100644 --- a/docs/class_fast_c_r_c32.html +++ b/docs/class_fast_c_r_c32.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: FastCRC32 Class Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@
- + - - - - + +
@@ -106,11 +126,9 @@ Public Member Functions

Detailed Description

-

Definition at line 67 of file FastCRC.h.

+

Definition at line 67 of file FastCRC.h.

Constructor & Destructor Documentation

- -

◆ FastCRC32()

- +
@@ -127,9 +145,7 @@ Public Member Functions

Member Function Documentation

- -

◆ crc32_calc()

- +
@@ -166,7 +182,7 @@ Public Member Functions + doxygen 1.8.11 diff --git a/docs/classes.html b/docs/classes.html index 1c3474e..5c39751 100644 --- a/docs/classes.html +++ b/docs/classes.html @@ -1,10 +1,9 @@ - + - - +Livox SDK API: Class Index @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ @@ -39,22 +41,42 @@
Livox SDK API -  V2.0.0 +  V2.1.0
- + - - - - + +
@@ -91,458 +111,120 @@ $(document).ready(function(){initNavTree('classes.html','');});
Class Index
-
a | b | c | d | e | f | g | h | i | l | m | n | o | p | r | s | t | u | v | w | y | z
+
A | B | C | D | E | F | G | H | I | L | M | N | O | P | R | S | T | U | V | W | Y | Z
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
  a  
-
console_stderr (spdlog::details)   basic_printf_context::formatter_type (fmt::v5)   is_string (fmt::v5::internal)   printf_formatter (fmt::v5)   
console_stdout (spdlog::details)   basic_format_context::formatter_type (fmt::v5)   is_string< const std::FILE * > (fmt::v5::internal)   printf_precision_handler (fmt::v5::internal)   
a_formatter (spdlog::details)   container_buffer (fmt::v5::internal)   formatting_base (fmt::v5)   is_string< std::FILE * > (fmt::v5::internal)   printf_width_handler (fmt::v5::internal)   
A_formatter (spdlog::details)   context_base (fmt::v5::internal)   formatting_range (fmt::v5)   is_tuple_like (fmt::v5)   Protocol (livox)   
add_thousands_sep (fmt::v5::internal)   convert_to_int (fmt::v5)   formatting_tuple (fmt::v5)   is_tuple_like_ (fmt::v5::internal)   
  r  
-
aggregate_formatter (spdlog::details)   convert_to_int< T, Char, void > (fmt::v5)   fp (fmt::v5::internal)   is_zero_int (fmt::v5::internal)   
align_spec (fmt::v5)   core_format_specs (fmt::v5)   full_formatter (spdlog::details)   it_category (fmt::v5::internal)   R_formatter (spdlog::details)   
android_sink (spdlog::sinks)   counting_iterator (fmt::v5::internal)   function (fmt::v5::internal)   it_category< T * > (fmt::v5::internal)   r_formatter (spdlog::details)   
ansi_color_escape (fmt::v5::internal)   arg_formatter_base::cstring_spec_handler (fmt::v5::internal)   
  g  
-
it_category< T, typename void_< typename T::iterator_category >::type > (fmt::v5::internal)   RainFogSuppressRequestItem   
ansicolor_sink (spdlog::sinks)   cstring_type_checker (fmt::v5::internal)   
  l  
-
registry (spdlog::details)   
arg_converter (fmt::v5::internal)   custom_formatter (fmt::v5::internal)   gen_digits_params (fmt::v5::internal)   function::result (fmt::v5::internal)   
arg_formatter (fmt::v5)   custom_value (fmt::v5::internal)   get_type (fmt::v5::internal)   level_formatter (spdlog::details)   result_of (fmt::v5::internal)   
arg_formatter_base (fmt::v5::internal)   
  d  
-
GetDeviceIpModeResponse   LidarErrorCode   result_of< F(Args...)> (fmt::v5::internal)   
arg_join (fmt::v5)   GetFanStateRequestItem   LidarGetExtrinsicParameterResponse   ReturnCode   
arg_map (fmt::v5::internal)   D_formatter (spdlog::details)   GetFanStateResponseItem   LidarGetFanStateResponse   rgb (fmt::v5)   
arg_ref (fmt::v5::internal)   d_formatter (spdlog::details)   GetImuPushFrequencyRequestItem   LidarGetImuPushFrequencyResponse   rotating_file_sink (spdlog::sinks)   
async_factory_impl (spdlog)   daily_file_sink (spdlog::sinks)   GetImuPushFrequencyResponseItem   LidarGetPointCloudReturnModeResponse   
  s  
-
async_logger (spdlog)   daily_filename_calculator (spdlog::sinks)   GetPointCloudReturnModeRequestItem   LidarModeRequestItem   
async_msg (spdlog::details)   basic_writer::int_writer::dec_writer (fmt::v5)   GetPointCloudReturnModeResponseItem   LidarSetExtrinsicParameterRequest   S_formatter (spdlog::details)   
auto_id (fmt::v5::internal)   decimal_formatter (fmt::v5::internal)   
  h  
-
LidarSetUtcSyncTimeRequest   scoped_pad (spdlog::details)   
  b  
-
decimal_formatter_null (fmt::v5::internal)   LidarStateItem   SetDeviceIPModeRequest   
DeviceBroadcastCode   H_formatter (spdlog::details)   LivoxDualExtendRawPoint   SetImuPushFrequencyRequestItem   
B_formatter (spdlog::details)   DeviceInfo   basic_format_arg::handle (fmt::v5)   LivoxDualExtendSpherPoint   SetPointCloudReturnModeRequestItem   
b_formatter (spdlog::details)   DeviceInformationResponse   HandshakeRequest   LivoxEthPacket   SetStaticDeviceIpModeRequest   
back_insert_range (fmt::v5)   dist_sink (spdlog::sinks)   HeartbeatResponse   LivoxExtendRawPoint   short_level_formatter (spdlog::details)   
base_sink (spdlog::sinks)   dummy_int (fmt::v5::internal)   basic_writer::int_writer::hex_writer (fmt::v5)   LivoxExtendSpherPoint   sink (spdlog::sinks)   
basic_buffer (fmt::v5::internal)   dummy_string_view (fmt::v5::internal)   HubControlSlotPowerRequest   LivoxImuPoint   source_filename_formatter (spdlog::details)   
basic_cstring_view (fmt::v5)   dynamic_format_specs (fmt::v5::internal)   HubErrorCode   LivoxPoint   source_funcname_formatter (spdlog::details)   
basic_data (fmt::v5::internal)   dynamic_formatter (fmt::v5)   HubFanControlRequest   LivoxRawPoint   source_linenum_formatter (spdlog::details)   
basic_file_sink (spdlog::sinks)   dynamic_specs_handler (fmt::v5::internal)   HubFanControlResponse   LivoxSdkVersion   source_loc (spdlog)   
basic_format_arg (fmt::v5)   
  e  
-
HubGetExtrinsicParameterRequest   LivoxSpherPoint   source_location_formatter (spdlog::details)   
basic_format_args (fmt::v5)   HubGetExtrinsicParameterResponse   locale_ref (fmt::v5::internal)   spdlog_ex (spdlog)   
basic_format_context (fmt::v5)   e_formatter (spdlog::details)   HubGetFanStateRequest   log_msg (spdlog::details)   specs_checker (fmt::v5::internal)   
basic_format_specs (fmt::v5)   E_formatter (spdlog::details)   HubGetFanStateResponse   logger (spdlog)   specs_handler (fmt::v5::internal)   
basic_memory_buffer (fmt::v5)   error_code (fmt::v5)   HubGetImuPushFrequencyRequest   
  m  
-
specs_setter (fmt::v5::internal)   
basic_parse_context (fmt::v5)   error_handler (fmt::v5::internal)   HubGetImuPushFrequencyResponse   StatusUnion   
basic_printf_context (fmt::v5)   ErrorMessage   HubGetPointCloudReturnModeRequest   m_formatter (spdlog::details)   stdout_sink (spdlog::sinks)   
basic_printf_context_t (fmt::v5)   ExtrinsicParameterRequestItem   HubGetPointCloudReturnModeResponse   M_formatter (spdlog::details)   string_value (fmt::v5::internal)   
basic_string_view (fmt::v5)   ExtrinsicParameterResponseItem   HubQueryLidarInformationResponse   make_integer_sequence (fmt::v5::internal)   synchronous_factory (spdlog)   
basic_writer (fmt::v5)   
  f  
-
HubQueryLidarStatusResponse   make_integer_sequence< T, 0, Ns... > (fmt::v5::internal)   syslog_sink (spdlog::sinks)   
basic_writer::int_writer::bin_writer (fmt::v5)   HubQuerySlotPowerStatusResponse   make_unsigned_or_bool (fmt::v5::internal)   system_error (fmt::v5)   
BroadcastDeviceInfo   f_formatter (spdlog::details)   HubRainFogSuppressRequest   make_unsigned_or_bool< bool > (fmt::v5::internal)   
  t  
-
buffer_context (fmt::v5)   F_formatter (spdlog::details)   HubRainFogSuppressResponse   monostate (fmt::v5)   
buffered_file (fmt::v5)   FanControlRequestItem   HubSetExtrinsicParameterRequest   mpmc_blocking_queue (spdlog::details)   T_formatter (spdlog::details)   
bytes_range (spdlog::details)   FastCRC16   HubSetExtrinsicParameterResponse   
  n  
-
t_formatter (spdlog::details)   
  c  
-
FastCRC32   HubSetImuPushFrequencyRequest   test_stream (fmt::v5::internal)   
file (fmt::v5)   HubSetImuPushFrequencyResponse   name_formatter (spdlog::details)   text_style (fmt::v5)   
c_formatter (spdlog::details)   file_helper (spdlog::details)   HubSetModeRequest   named_arg (fmt::v5::internal)   thread_pool (spdlog::details)   
C_formatter (spdlog::details)   fill (fmt::v5::internal)   HubSetModeResponse   named_arg_base (fmt::v5::internal)   truncating_iterator (fmt::v5::internal)   
ch_formatter (spdlog::details)   flag_formatter (spdlog::details)   HubSetPointCloudReturnModeRequest   needs_conversion (fmt::v5::internal)   truncating_iterator< OutputIt, std::false_type > (fmt::v5::internal)   
char_converter (fmt::v5::internal)   float_spec_handler (fmt::v5)   HubSetPointCloudReturnModeResponse   no_formatter_error (fmt::v5::internal)   truncating_iterator< OutputIt, std::true_type > (fmt::v5::internal)   
char_counter (fmt::v5::internal)   float_type_checker (fmt::v5::internal)   
  i  
-
no_thousands_sep (fmt::v5::internal)   truncating_iterator_base (fmt::v5::internal)   
arg_formatter_base::char_spec_handler (fmt::v5::internal)   format_arg_store (fmt::v5)   null (fmt::v5::internal)   
  u  
-
char_specs_checker (fmt::v5::internal)   format_args (fmt::v5)   I_formatter (spdlog::details)   null_atomic_int (spdlog::details)   
char_t (fmt::v5::internal)   format_args_t (fmt::v5)   i_formatter (spdlog::details)   null_mutex (spdlog::details)   u8string_view (fmt::v5)   
char_t (fmt::v5)   format_context_t (fmt::v5)   id_adapter (fmt::v5::internal)   null_sink (spdlog::sinks)   
  v  
-
char_traits (fmt::v5::internal)   format_error (fmt::v5)   init (fmt::v5::internal)   null_terminating_iterator (fmt::v5::internal)   
char_traits< char > (fmt::v5::internal)   format_handler (fmt::v5)   int_checker (fmt::v5::internal)   basic_writer::int_writer::num_writer (fmt::v5)   v_formatter (spdlog::details)   
char_traits< wchar_t > (fmt::v5::internal)   format_int (fmt::v5)   int_checker< true > (fmt::v5::internal)   numeric_limits< fmt::internal::dummy_int > (std)   value (fmt::v5::internal)   
checked (fmt::v5::internal)   format_string_checker (fmt::v5::internal)   int_traits (fmt::v5::internal)   
  o  
-
void_ (fmt::v5::internal)   
checked_args (fmt::v5::internal)   format_to_n_args (fmt::v5)   int_type_checker (fmt::v5::internal)   
  w  
-
chrono_format_checker (fmt::v5::internal)   format_to_n_context (fmt::v5)   integer_sequence (fmt::v5::internal)   ostream_sink (spdlog::sinks)   
chrono_formatter (fmt::v5::internal)   format_to_n_result (fmt::v5)   is_compile_string (fmt::v5)   output_range (fmt::v5)   wformat_args (fmt::v5)   
circular_q (spdlog::details)   format_type (fmt::v5::internal)   is_constructible (fmt::v5)   
  p  
-
width_adapter (fmt::v5::internal)   
color_start_formatter (spdlog::details)   formatbuf (fmt::v5::internal)   is_contiguous (fmt::v5)   width_checker (fmt::v5::internal)   
color_stop_formatter (spdlog::details)   formatter (spdlog)   is_contiguous< internal::basic_buffer< Char > > (fmt::v5)   p_formatter (spdlog::details)   wincolor_sink (spdlog::sinks)   
color_type (fmt::v5::internal)   formatter (fmt::v5)   is_contiguous< std::basic_string< Char > > (fmt::v5)   padding_info (spdlog::details)   
  y  
-
color_type::color_union (fmt::v5::internal)   formatter< arg_join< It, Char >, Char > (fmt::v5)   is_integer (fmt::v5::internal)   pattern_formatter (spdlog)   
CommPacket (livox)   formatter< RangeT, Char, typename std::enable_if< fmt::is_range< RangeT >::value >::type > (fmt::v5)   is_like_std_string (fmt::v5::internal)   periodic_worker (spdlog::details)   Y_formatter (spdlog::details)   
CommPort (livox)   formatter< spdlog::details::bytes_range< T > > (fmt)   is_like_std_string< fmt::basic_string_view< Char > > (fmt::v5::internal)   pid_formatter (spdlog::details)   
  z  
-
compile_string (fmt::v5)   formatter< std::chrono::duration< Rep, Period >, Char > (fmt::v5)   is_output_iterator (fmt::v5::internal)   PortCache (livox)   
conditional_helper (fmt::v5::internal)   formatter< std::tm, Char > (fmt::v5)   is_range (fmt::v5)   precision_adapter (fmt::v5::internal)   z_formatter (spdlog::details)   
ConnectedLidarInfo   formatter< T, Char, typename std::enable_if< internal::format_type< typename buffer_context< Char >::type, T >::value >::type > (fmt::v5)   is_range_ (fmt::v5::internal)   precision_checker (fmt::v5::internal)   
console_mutex (spdlog::details)   formatter< T, Char, typename std::enable_if< internal::is_streamable< T, Char >::value &&!internal::format_type< typename buffer_context< Char >::type, T >::value >::type > (fmt::v5)   is_range_< T, typename std::conditional< false, conditional_helper< decltype(internal::declval< T >().begin()), decltype(internal::declval< T >().end())>, void >::type > (fmt::v5::internal)   prettify_handler (fmt::v5::internal)   
console_nullmutex (spdlog::details)   formatter< TupleT, Char, typename std::enable_if< fmt::is_tuple_like< TupleT >::value >::type > (fmt::v5)   is_streamable (fmt::v5::internal)   printf_arg_formatter (fmt::v5)   
  A  
+
LidarGetExtrinsicParameterResponse   basic_format_context (fmt::v5)   fill (fmt::v5::internal)   locale_ref (fmt::v5::internal)   
LidarGetFanStateResponse   basic_format_specs (fmt::v5)   flag_formatter (spdlog::details)   log_msg (spdlog::details)   
A_formatter (spdlog::details)   LidarGetImuPushFrequencyResponse   basic_memory_buffer (fmt::v5)   float_spec_handler (fmt::v5)   logger (spdlog)   
  B  
+
LidarGetPointCloudReturnModeResponse   basic_parse_context (fmt::v5)   float_type_checker (fmt::v5::internal)   
  m  
+
LidarModeRequestItem   basic_printf_context (fmt::v5)   format_arg_store (fmt::v5)   
B_formatter (spdlog::details)   LidarSetExtrinsicParameterRequest   basic_printf_context_t (fmt::v5)   format_args (fmt::v5)   m_formatter (spdlog::details)   
BroadcastDeviceInfo   LidarSetUtcSyncTimeRequest   basic_string_view (fmt::v5)   format_args_t (fmt::v5)   make_unsigned_or_bool (fmt::v5::internal)   
  C  
+
LidarStateItem   basic_writer (fmt::v5)   format_context_t (fmt::v5)   make_unsigned_or_bool< bool > (fmt::v5::internal)   
LivoxDualExtendRawPoint   basic_writer::int_writer::bin_writer (fmt::v5)   format_error (fmt::v5)   monostate (fmt::v5)   
C_formatter (spdlog::details)   LivoxDualExtendSpherPoint   buffer_context (fmt::v5)   format_handler (fmt::v5)   mpmc_blocking_queue (spdlog::details)   
CommPacket (livox)   LivoxEthPacket   buffered_file (fmt::v5)   format_int (fmt::v5)   
  n  
+
CommPort (livox)   LivoxExtendRawPoint   bytes_range (spdlog::details)   format_string_checker (fmt::v5::internal)   
ConnectedLidarInfo   LivoxExtendSpherPoint   
  c  
+
format_to_n_args (fmt::v5)   name_formatter (spdlog::details)   
  D  
+
LivoxImuPoint   format_to_n_context (fmt::v5)   named_arg (fmt::v5::internal)   
LivoxPoint   c_formatter (spdlog::details)   format_to_n_result (fmt::v5)   named_arg_base (fmt::v5::internal)   
D_formatter (spdlog::details)   LivoxRawPoint   ch_formatter (spdlog::details)   format_type (fmt::v5::internal)   needs_conversion (fmt::v5::internal)   
DeviceBroadcastCode   LivoxSdkVersion   char_converter (fmt::v5::internal)   formatbuf (fmt::v5::internal)   no_formatter_error (fmt::v5::internal)   
DeviceInfo   LivoxSpherPoint   char_counter (fmt::v5::internal)   formatter (spdlog)   no_thousands_sep (fmt::v5::internal)   
DeviceInformationResponse   
  M  
+
arg_formatter_base::char_spec_handler (fmt::v5::internal)   formatter (fmt::v5)   null (fmt::v5::internal)   
  E  
+
char_specs_checker (fmt::v5::internal)   formatter< arg_join< It, Char >, Char > (fmt::v5)   null_atomic_int (spdlog::details)   
M_formatter (spdlog::details)   char_t (fmt::v5::internal)   formatter< RangeT, Char, typename std::enable_if< fmt::is_range< RangeT >::value >::type > (fmt::v5)   null_mutex (spdlog::details)   
E_formatter (spdlog::details)   
  P  
+
char_t (fmt::v5)   formatter< spdlog::details::bytes_range< T > > (fmt)   null_sink (spdlog::sinks)   
ErrorMessage   char_traits (fmt::v5::internal)   formatter< std::chrono::duration< Rep, Period >, Char > (fmt::v5)   null_terminating_iterator (fmt::v5::internal)   
ExtrinsicParameterRequestItem   PortCache (livox)   char_traits< char > (fmt::v5::internal)   formatter< std::tm, Char > (fmt::v5)   basic_writer::int_writer::num_writer (fmt::v5)   
ExtrinsicParameterResponseItem   Protocol (livox)   char_traits< wchar_t > (fmt::v5::internal)   formatter< T, Char, typename std::enable_if< internal::format_type< typename buffer_context< Char >::type, T >::value >::type > (fmt::v5)   numeric_limits< fmt::internal::dummy_int > (std)   
  F  
+
  R  
+
checked (fmt::v5::internal)   formatter< T, Char, typename std::enable_if< internal::is_streamable< T, Char >::value &&!internal::format_type< typename buffer_context< Char >::type, T >::value >::type > (fmt::v5)   
  o  
+
checked_args (fmt::v5::internal)   formatter< TupleT, Char, typename std::enable_if< fmt::is_tuple_like< TupleT >::value >::type > (fmt::v5)   
F_formatter (spdlog::details)   R_formatter (spdlog::details)   chrono_format_checker (fmt::v5::internal)   basic_printf_context::formatter_type (fmt::v5)   ostream_sink (spdlog::sinks)   
FanControlRequestItem   RainFogSuppressRequestItem   chrono_formatter (fmt::v5::internal)   basic_format_context::formatter_type (fmt::v5)   output_range (fmt::v5)   
FastCRC16   ReturnCode   circular_q (spdlog::details)   formatting_base (fmt::v5)   
  p  
+
FastCRC32   
  S  
+
color_start_formatter (spdlog::details)   formatting_range (fmt::v5)   
  G  
+
color_stop_formatter (spdlog::details)   formatting_tuple (fmt::v5)   p_formatter (spdlog::details)   
S_formatter (spdlog::details)   color_type (fmt::v5::internal)   fp (fmt::v5::internal)   padding_info (spdlog::details)   
GetDeviceIpModeResponse   SetDeviceIPModeRequest   color_type::color_union (fmt::v5::internal)   full_formatter (spdlog::details)   pattern_formatter (spdlog)   
GetFanStateRequestItem   SetImuPushFrequencyRequestItem   compile_string (fmt::v5)   function (fmt::v5::internal)   periodic_worker (spdlog::details)   
GetFanStateResponseItem   SetPointCloudReturnModeRequestItem   conditional_helper (fmt::v5::internal)   
  g  
+
pid_formatter (spdlog::details)   
GetImuPushFrequencyRequestItem   SetStaticDeviceIpModeRequest   console_mutex (spdlog::details)   precision_adapter (fmt::v5::internal)   
GetImuPushFrequencyResponseItem   StatusUnion   console_nullmutex (spdlog::details)   gen_digits_params (fmt::v5::internal)   precision_checker (fmt::v5::internal)   
GetPointCloudReturnModeRequestItem   
  T  
+
console_stderr (spdlog::details)   get_type (fmt::v5::internal)   prettify_handler (fmt::v5::internal)   
GetPointCloudReturnModeResponseItem   console_stdout (spdlog::details)   
  h  
+
printf_arg_formatter (fmt::v5)   
  H  
+
T_formatter (spdlog::details)   container_buffer (fmt::v5::internal)   printf_formatter (fmt::v5)   
  Y  
+
context_base (fmt::v5::internal)   basic_format_arg::handle (fmt::v5)   printf_precision_handler (fmt::v5::internal)   
H_formatter (spdlog::details)   convert_to_int (fmt::v5)   basic_writer::int_writer::hex_writer (fmt::v5)   printf_width_handler (fmt::v5::internal)   
HandshakeRequest   Y_formatter (spdlog::details)   convert_to_int< T, Char, void > (fmt::v5)   
  i  
+
  r  
+
HeartbeatResponse   
  a  
+
core_format_specs (fmt::v5)   
HubControlSlotPowerRequest   counting_iterator (fmt::v5::internal)   i_formatter (spdlog::details)   r_formatter (spdlog::details)   
HubErrorCode   a_formatter (spdlog::details)   arg_formatter_base::cstring_spec_handler (fmt::v5::internal)   id_adapter (fmt::v5::internal)   registry (spdlog::details)   
HubFanControlRequest   add_thousands_sep (fmt::v5::internal)   cstring_type_checker (fmt::v5::internal)   init (fmt::v5::internal)   function::result (fmt::v5::internal)   
HubFanControlResponse   aggregate_formatter (spdlog::details)   custom_formatter (fmt::v5::internal)   int_checker (fmt::v5::internal)   result_of (fmt::v5::internal)   
HubGetExtrinsicParameterRequest   align_spec (fmt::v5)   custom_value (fmt::v5::internal)   int_checker< true > (fmt::v5::internal)   result_of< F(Args...)> (fmt::v5::internal)   
HubGetExtrinsicParameterResponse   android_sink (spdlog::sinks)   
  d  
+
int_traits (fmt::v5::internal)   rgb (fmt::v5)   
HubGetFanStateRequest   ansi_color_escape (fmt::v5::internal)   int_type_checker (fmt::v5::internal)   rotating_file_sink (spdlog::sinks)   
HubGetFanStateResponse   ansicolor_sink (spdlog::sinks)   d_formatter (spdlog::details)   is_compile_string (fmt::v5)   
  s  
+
HubGetImuPushFrequencyRequest   arg_converter (fmt::v5::internal)   daily_file_sink (spdlog::sinks)   is_constructible (fmt::v5)   
HubGetImuPushFrequencyResponse   arg_formatter (fmt::v5)   daily_filename_calculator (spdlog::sinks)   is_contiguous (fmt::v5)   scoped_pad (spdlog::details)   
HubGetPointCloudReturnModeRequest   arg_formatter_base (fmt::v5::internal)   basic_writer::int_writer::dec_writer (fmt::v5)   is_contiguous< internal::basic_buffer< Char > > (fmt::v5)   short_level_formatter (spdlog::details)   
HubGetPointCloudReturnModeResponse   arg_join (fmt::v5)   decimal_formatter (fmt::v5::internal)   is_contiguous< std::basic_string< Char > > (fmt::v5)   sink (spdlog::sinks)   
HubQueryLidarInformationResponse   arg_map (fmt::v5::internal)   decimal_formatter_null (fmt::v5::internal)   is_integer (fmt::v5::internal)   source_filename_formatter (spdlog::details)   
HubQueryLidarStatusResponse   arg_ref (fmt::v5::internal)   dist_sink (spdlog::sinks)   is_like_std_string (fmt::v5::internal)   source_funcname_formatter (spdlog::details)   
HubQuerySlotPowerStatusResponse   async_factory_impl (spdlog)   dummy_int (fmt::v5::internal)   is_like_std_string< fmt::basic_string_view< Char > > (fmt::v5::internal)   source_linenum_formatter (spdlog::details)   
HubRainFogSuppressRequest   async_logger (spdlog)   dummy_string_view (fmt::v5::internal)   is_output_iterator (fmt::v5::internal)   source_loc (spdlog)   
HubRainFogSuppressResponse   async_msg (spdlog::details)   dynamic_format_specs (fmt::v5::internal)   is_range (fmt::v5)   source_location_formatter (spdlog::details)   
HubSetExtrinsicParameterRequest   auto_id (fmt::v5::internal)   dynamic_formatter (fmt::v5)   is_range_ (fmt::v5::internal)   spdlog_ex (spdlog)   
HubSetExtrinsicParameterResponse   
  b  
+
dynamic_specs_handler (fmt::v5::internal)   is_streamable (fmt::v5::internal)   specs_checker (fmt::v5::internal)   
HubSetImuPushFrequencyRequest   
  e  
+
is_string (fmt::v5::internal)   specs_handler (fmt::v5::internal)   
HubSetImuPushFrequencyResponse   b_formatter (spdlog::details)   is_string< const std::FILE * > (fmt::v5::internal)   specs_setter (fmt::v5::internal)   
HubSetModeRequest   back_insert_range (fmt::v5)   e_formatter (spdlog::details)   is_string< std::FILE * > (fmt::v5::internal)   stdout_sink (spdlog::sinks)   
HubSetModeResponse   base_sink (spdlog::sinks)   error_code (fmt::v5)   is_tuple_like (fmt::v5)   string_value (fmt::v5::internal)   
HubSetPointCloudReturnModeRequest   basic_buffer (fmt::v5::internal)   error_handler (fmt::v5::internal)   is_zero_int (fmt::v5::internal)   synchronous_factory (spdlog)   
HubSetPointCloudReturnModeResponse   basic_cstring_view (fmt::v5)   
  f  
+
it_category (fmt::v5::internal)   syslog_sink (spdlog::sinks)   
  I  
+
basic_data (fmt::v5::internal)   it_category< T * > (fmt::v5::internal)   system_error (fmt::v5)   
basic_file_sink (spdlog::sinks)   f_formatter (spdlog::details)   it_category< T, typename void_< typename T::iterator_category >::type > (fmt::v5::internal)   
  t  
+
I_formatter (spdlog::details)   basic_format_arg (fmt::v5)   file (fmt::v5)   
  l  
+
  L  
+
basic_format_args (fmt::v5)   file_helper (spdlog::details)   t_formatter (spdlog::details)   
level_formatter (spdlog::details)   
LidarErrorCode   
-
a | b | c | d | e | f | g | h | i | l | m | n | o | p | r | s | t | u | v | w | y | z
+
A | B | C | D | E | F | G | H | I | L | M | N | O | P | R | S | T | U | V | W | Y | Z
@@ -550,7 +232,7 @@ $(document).ready(function(){initNavTree('classes.html','');});
    + doxygen 1.8.11
diff --git a/docs/classfmt_1_1v5_1_1arg__formatter-members.html b/docs/classfmt_1_1v5_1_1arg__formatter-members.html index 82b08f1..539eb4d 100644 --- a/docs/classfmt_1_1v5_1_1arg__formatter-members.html +++ b/docs/classfmt_1_1v5_1_1arg__formatter-members.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Member List @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -118,7 +138,7 @@ $(document).ready(function(){initNavTree('classfmt_1_1v5_1_1arg__formatter.html'
    + doxygen 1.8.11
diff --git a/docs/classfmt_1_1v5_1_1arg__formatter.html b/docs/classfmt_1_1v5_1_1arg__formatter.html index fd7024e..94e90ab 100644 --- a/docs/classfmt_1_1v5_1_1arg__formatter.html +++ b/docs/classfmt_1_1v5_1_1arg__formatter.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: fmt::v5::arg_formatter< Range > Class Template Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -102,11 +122,11 @@ Inheritance diagram for fmt::v5::arg_formatter< Range >:
- + fmt::v5::internal::function< internal::arg_formatter_base< Range >::iterator > fmt::v5::internal::arg_formatter_base< Range > - -
+ + @@ -171,11 +191,9 @@ class fmt::v5::arg_formatter< Range >

The default argument formatter.

-

Definition at line 2155 of file format.h.

+

Definition at line 2155 of file format.h.

Member Typedef Documentation

- -

◆ format_specs

- +
@@ -187,13 +205,11 @@ template<typename Range >

Public Types

-

Definition at line 2169 of file format.h.

+

Definition at line 2169 of file format.h.

- -

◆ iterator

- +
@@ -205,13 +221,11 @@ template<typename Range >
-

Definition at line 2168 of file format.h.

+

Definition at line 2168 of file format.h.

- -

◆ range

- +
@@ -223,14 +237,12 @@ template<typename Range >
-

Definition at line 2167 of file format.h.

+

Definition at line 2167 of file format.h.

Constructor & Destructor Documentation

- -

◆ arg_formatter() [1/2]

- +
@@ -263,15 +275,13 @@ template<typename Range >
-

\rst Constructs an argument formatter object. ctx* is a reference to the formatting context, spec* contains format specifier information for standard argument types. \endrst

+

Constructs an argument formatter object. ctx* is a reference to the formatting context, spec* contains format specifier information for standard argument types.

-

Definition at line 2178 of file format.h.

+

Definition at line 2178 of file format.h.

- -

◆ arg_formatter() [2/2]

- +
@@ -305,14 +315,12 @@ template<typename Range >
-

Definition at line 2182 of file format.h.

+

Definition at line 2182 of file format.h.

Member Function Documentation

- -

◆ operator()()

- +
@@ -337,7 +345,7 @@ template<typename Range >

Formats an argument of a user-defined type.

-

Definition at line 2188 of file format.h.

+

Definition at line 2188 of file format.h.

@@ -352,7 +360,7 @@ template<typename Range > + doxygen 1.8.11 diff --git a/docs/classfmt_1_1v5_1_1back__insert__range-members.html b/docs/classfmt_1_1v5_1_1back__insert__range-members.html index 32d26f4..10e3507 100644 --- a/docs/classfmt_1_1v5_1_1back__insert__range-members.html +++ b/docs/classfmt_1_1v5_1_1back__insert__range-members.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Member List @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -107,7 +127,7 @@ $(document).ready(function(){initNavTree('classfmt_1_1v5_1_1back__insert__range.
    + doxygen 1.8.11
diff --git a/docs/classfmt_1_1v5_1_1back__insert__range.html b/docs/classfmt_1_1v5_1_1back__insert__range.html index 598999a..bae3df6 100644 --- a/docs/classfmt_1_1v5_1_1back__insert__range.html +++ b/docs/classfmt_1_1v5_1_1back__insert__range.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: fmt::v5::back_insert_range< Container > Class Template Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -102,10 +122,10 @@ Inheritance diagram for fmt::v5::back_insert_range< Container >:
- + fmt::v5::output_range< std::back_insert_iterator< Container > > - -
+ + @@ -114,7 +134,7 @@ Public Types - +

Public Types

- Public Types inherited from fmt::v5::output_range< std::back_insert_iterator< Container > >
typedef std::back_insert_iterator< Container > iterator
 
typedef typename std::back_insert_iterator< Container > ::value_type value_type
typedef typename std::back_insert_iterator< Container >::value_type value_type
 
- + - - + +

@@ -124,21 +144,19 @@ Public Member Functions

 back_insert_range (typename base::iterator it)
 
- Public Member Functions inherited from fmt::v5::output_range< std::back_insert_iterator< Container > >
 output_range (std::back_insert_iterator< Container > it)
 output_range (std::back_insert_iterator< Container >it)
 
std::back_insert_iterator< Container > begin () const
 
std::back_insert_iterator< Container > begin () const
 

Detailed Description

template<typename Container>
class fmt::v5::back_insert_range< Container >

-

Definition at line 351 of file format.h.

+

Definition at line 351 of file format.h.

Member Typedef Documentation

- -

◆ value_type

- +
@@ -150,14 +168,12 @@ template<typename Container >
-

Definition at line 355 of file format.h.

+

Definition at line 355 of file format.h.

Constructor & Destructor Documentation

- -

◆ back_insert_range() [1/2]

- +
@@ -181,13 +197,11 @@ template<typename Container >
-

Definition at line 357 of file format.h.

+

Definition at line 357 of file format.h.

- -

◆ back_insert_range() [2/2]

- +
@@ -211,7 +225,7 @@ template<typename Container >
-

Definition at line 358 of file format.h.

+

Definition at line 358 of file format.h.

@@ -226,7 +240,7 @@ template<typename Container > + doxygen 1.8.11 diff --git a/docs/classfmt_1_1v5_1_1basic__cstring__view-members.html b/docs/classfmt_1_1v5_1_1basic__cstring__view-members.html index 8de7862..1377335 100644 --- a/docs/classfmt_1_1v5_1_1basic__cstring__view-members.html +++ b/docs/classfmt_1_1v5_1_1basic__cstring__view-members.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Member List @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -96,7 +116,7 @@ $(document).ready(function(){initNavTree('classfmt_1_1v5_1_1basic__cstring__view - +
basic_cstring_view(const Char *s)fmt::v5::basic_cstring_view< Char >inline
basic_cstring_view(const std::basic_string< Char > &s)fmt::v5::basic_cstring_view< Char >inline
c_str() constfmt::v5::basic_cstring_view< Char >inline
c_str() const fmt::v5::basic_cstring_view< Char >inline
@@ -104,7 +124,7 @@ $(document).ready(function(){initNavTree('classfmt_1_1v5_1_1basic__cstring__view
    + doxygen 1.8.11
diff --git a/docs/classfmt_1_1v5_1_1basic__cstring__view.html b/docs/classfmt_1_1v5_1_1basic__cstring__view.html index 040e8f3..1947221 100644 --- a/docs/classfmt_1_1v5_1_1basic__cstring__view.html +++ b/docs/classfmt_1_1v5_1_1basic__cstring__view.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: fmt::v5::basic_cstring_view< Char > Class Template Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -103,25 +123,23 @@ Public Member Functions    basic_cstring_view (const std::basic_string< Char > &s)   -const Char * c_str () const -  +const Char * c_str () const + 

Detailed Description

template<typename Char>
class fmt::v5::basic_cstring_view< Char >

-

\rst A reference to a null-terminated string. It can be constructed from a C string or std::string.

+

A reference to a null-terminated string. It can be constructed from a C string or std::string.

You can use one of the following typedefs for common character types:

+------------—+--------------------------—+ | Type | Definition | +===============+=============================+ | cstring_view | basic_cstring_view<char> | +------------—+--------------------------—+ | wcstring_view | basic_cstring_view<wchar_t> | +------------—+--------------------------—+

This class is most useful as a parameter type to allow passing different types of strings to a function, for example::

template <typename... Args> std::string format(cstring_view format_str, const Args & ... args);

-

format("{}", 42); format(std::string("{}"), 42); \endrst

+

format("{}", 42); format(std::string("{}"), 42);

-

Definition at line 93 of file posix.h.

+

Definition at line 93 of file posix.h.

Constructor & Destructor Documentation

- -

◆ basic_cstring_view() [1/2]

- +
@@ -146,13 +164,11 @@ template<typename Char >

Constructs a string reference object from a C string.

-

Definition at line 99 of file posix.h.

+

Definition at line 99 of file posix.h.

- -

◆ basic_cstring_view() [2/2]

- +
@@ -175,16 +191,14 @@ template<typename Char >
-

\rst Constructs a string reference from an std::string object. \endrst

+

Constructs a string reference from an std::string object.

-

Definition at line 106 of file posix.h.

+

Definition at line 106 of file posix.h.

Member Function Documentation

- -

◆ c_str()

- +
@@ -208,7 +222,7 @@ template<typename Char >

Returns the pointer to a C string.

-

Definition at line 109 of file posix.h.

+

Definition at line 109 of file posix.h.

@@ -223,7 +237,7 @@ template<typename Char >
+ doxygen 1.8.11 diff --git a/docs/classfmt_1_1v5_1_1basic__cstring__view.js b/docs/classfmt_1_1v5_1_1basic__cstring__view.js index 2ef240b..7d75e65 100644 --- a/docs/classfmt_1_1v5_1_1basic__cstring__view.js +++ b/docs/classfmt_1_1v5_1_1basic__cstring__view.js @@ -2,5 +2,5 @@ var classfmt_1_1v5_1_1basic__cstring__view = [ [ "basic_cstring_view", "classfmt_1_1v5_1_1basic__cstring__view.html#ad21a04a526524ac3477761399a792fda", null ], [ "basic_cstring_view", "classfmt_1_1v5_1_1basic__cstring__view.html#a56c61688f005a3f7495d45b443d78d1c", null ], - [ "c_str", "classfmt_1_1v5_1_1basic__cstring__view.html#a3fd9fc51eb41ceeae397a70712a68af5", null ] + [ "c_str", "classfmt_1_1v5_1_1basic__cstring__view.html#a1178a47b93e6148a74b7f4624430959e", null ] ]; \ No newline at end of file diff --git a/docs/classfmt_1_1v5_1_1basic__format__arg-members.html b/docs/classfmt_1_1v5_1_1basic__format__arg-members.html index b0cc126..0b1f57a 100644 --- a/docs/classfmt_1_1v5_1_1basic__format__arg-members.html +++ b/docs/classfmt_1_1v5_1_1basic__format__arg-members.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Member List @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -110,7 +130,7 @@ $(document).ready(function(){initNavTree('classfmt_1_1v5_1_1basic__format__arg.h
    + doxygen 1.8.11
diff --git a/docs/classfmt_1_1v5_1_1basic__format__arg.html b/docs/classfmt_1_1v5_1_1basic__format__arg.html index ab9d7e3..c10fdab 100644 --- a/docs/classfmt_1_1v5_1_1basic__format__arg.html +++ b/docs/classfmt_1_1v5_1_1basic__format__arg.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: fmt::v5::basic_format_arg< Context > Class Template Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -108,14 +128,14 @@ Classes Public Member Functions  basic_format_arg ()   - operator bool () const throw () -  -internal::type type () const -  -bool is_integral () const -  -bool is_arithmetic () const -  + operator bool () const throw () +  +internal::type type () const +  +bool is_integral () const +  +bool is_arithmetic () const +  @@ -127,7 +147,7 @@ Friends - +

Friends

basic_format_arg< ContextType > internal::make_arg (const T &value)
 
template<typename Visitor , typename Ctx >
internal::result_of< Visitor(int)>::type visit_format_arg (Visitor &&vis, const basic_format_arg< Ctx > &arg)
internal::result_of< Visitor(int)>::type visit_format_arg (Visitor &&vis, const basic_format_arg< Ctx > &arg)
 

Detailed Description

@@ -135,11 +155,9 @@ Friends class fmt::v5::basic_format_arg< Context > -

Definition at line 484 of file core.h.

+

Definition at line 484 of file core.h.

Constructor & Destructor Documentation

- -

◆ basic_format_arg()

- +
@@ -162,14 +180,12 @@ template<typename Context>
-

Definition at line 808 of file core.h.

+

Definition at line 808 of file core.h.

Member Function Documentation

- -

◆ is_arithmetic()

- +
@@ -192,13 +208,11 @@ template<typename Context>
-

Definition at line 817 of file core.h.

+

Definition at line 817 of file core.h.

- -

◆ is_integral()

- +
@@ -221,13 +235,11 @@ template<typename Context>
-

Definition at line 816 of file core.h.

+

Definition at line 816 of file core.h.

- -

◆ operator bool()

- +
@@ -256,13 +268,11 @@ template<typename Context>
-

Definition at line 810 of file core.h.

+

Definition at line 810 of file core.h.

- -

◆ type()

- +
@@ -285,14 +295,12 @@ template<typename Context>
-

Definition at line 814 of file core.h.

+

Definition at line 814 of file core.h.

Friends And Related Function Documentation

- -

◆ basic_format_args< Context >

- +
@@ -312,13 +320,11 @@ template<typename Context>
-

Definition at line 792 of file core.h.

+

Definition at line 792 of file core.h.

- -

◆ internal::arg_map< Context >

- +
@@ -338,13 +344,11 @@ template<typename Context>
-

Definition at line 793 of file core.h.

+

Definition at line 793 of file core.h.

- -

◆ internal::make_arg

- +
@@ -372,9 +376,7 @@ template<typename ContextType , typename T >
- -

◆ visit_format_arg

- +
@@ -386,7 +388,7 @@ template<typename Visitor , typename Ctx >
- + @@ -423,7 +425,7 @@ template<typename Visitor , typename Ctx > + doxygen 1.8.11 diff --git a/docs/classfmt_1_1v5_1_1basic__format__arg.js b/docs/classfmt_1_1v5_1_1basic__format__arg.js index 81ce024..4dd1bfc 100644 --- a/docs/classfmt_1_1v5_1_1basic__format__arg.js +++ b/docs/classfmt_1_1v5_1_1basic__format__arg.js @@ -2,10 +2,10 @@ var classfmt_1_1v5_1_1basic__format__arg = [ [ "handle", "classfmt_1_1v5_1_1basic__format__arg_1_1handle.html", "classfmt_1_1v5_1_1basic__format__arg_1_1handle" ], [ "basic_format_arg", "classfmt_1_1v5_1_1basic__format__arg.html#ab92c5293847324e1383d7bab6c7b9f35", null ], - [ "is_arithmetic", "classfmt_1_1v5_1_1basic__format__arg.html#a36ff9952212731669effc63354c5b179", null ], - [ "is_integral", "classfmt_1_1v5_1_1basic__format__arg.html#a805469bff2286c05dcc69e9e7f10b3b2", null ], - [ "operator bool", "classfmt_1_1v5_1_1basic__format__arg.html#ac4eb1aac92345fa137b08888a2839313", null ], - [ "type", "classfmt_1_1v5_1_1basic__format__arg.html#aa66a8b06ab57c780dea7b1759da404a3", null ], + [ "is_arithmetic", "classfmt_1_1v5_1_1basic__format__arg.html#a06518d3846a0dbd82383be6d82026c8b", null ], + [ "is_integral", "classfmt_1_1v5_1_1basic__format__arg.html#a97dfc6303a3d0b90ec548077737b03dd", null ], + [ "operator bool", "classfmt_1_1v5_1_1basic__format__arg.html#a46b68f55c140d3851e06decaf1395e07", null ], + [ "type", "classfmt_1_1v5_1_1basic__format__arg.html#afade51f5b95d78390fd09449a4a1ddf3", null ], [ "basic_format_args< Context >", "classfmt_1_1v5_1_1basic__format__arg.html#ab8e9e33cc7b78829001a86ef6110ebb6", null ], [ "internal::arg_map< Context >", "classfmt_1_1v5_1_1basic__format__arg.html#a7974100f026be256213827458684be38", null ], [ "internal::make_arg", "classfmt_1_1v5_1_1basic__format__arg.html#a7d2678b3c4612757b6f1dcea4d284570", null ], diff --git a/docs/classfmt_1_1v5_1_1basic__format__arg_1_1handle-members.html b/docs/classfmt_1_1v5_1_1basic__format__arg_1_1handle-members.html index 81cde74..5509309 100644 --- a/docs/classfmt_1_1v5_1_1basic__format__arg_1_1handle-members.html +++ b/docs/classfmt_1_1v5_1_1basic__format__arg_1_1handle-members.html @@ -1,10 +1,9 @@ - + - - +Livox SDK API: Member List @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ @@ -39,22 +41,42 @@
internal::result_of<Visitor(int)>::type visit_format_arg internal::result_of<Visitor(int)>::type visit_format_arg ( Visitor &&  vis,
Livox SDK API -  V2.0.0 +  V2.1.0
- + - - - - + +
@@ -94,7 +114,7 @@ $(document).ready(function(){initNavTree('classfmt_1_1v5_1_1basic__format__arg_1

This is the complete list of members for fmt::v5::basic_format_arg< Context >::handle, including all inherited members.

- +
format(Context &ctx) constfmt::v5::basic_format_arg< Context >::handleinline
format(Context &ctx) const fmt::v5::basic_format_arg< Context >::handleinline
handle(internal::custom_value< Context > custom)fmt::v5::basic_format_arg< Context >::handleinlineexplicit
@@ -103,7 +123,7 @@ $(document).ready(function(){initNavTree('classfmt_1_1v5_1_1basic__format__arg_1
    + doxygen 1.8.11
diff --git a/docs/classfmt_1_1v5_1_1basic__format__arg_1_1handle.html b/docs/classfmt_1_1v5_1_1basic__format__arg_1_1handle.html index 51c385c..5fb9d13 100644 --- a/docs/classfmt_1_1v5_1_1basic__format__arg_1_1handle.html +++ b/docs/classfmt_1_1v5_1_1basic__format__arg_1_1handle.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: fmt::v5::basic_format_arg< Context >::handle Class Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -101,19 +121,17 @@ $(document).ready(function(){initNavTree('classfmt_1_1v5_1_1basic__format__arg_1 Public Member Functions  handle (internal::custom_value< Context > custom)   -void format (Context &ctx) const -  +void format (Context &ctx) const + 

Detailed Description

template<typename Context>
class fmt::v5::basic_format_arg< Context >::handle

-

Definition at line 798 of file core.h.

+

Definition at line 798 of file core.h.

Constructor & Destructor Documentation

- -

◆ handle()

- +
@@ -137,14 +155,12 @@ template<typename Context>
-

Definition at line 800 of file core.h.

+

Definition at line 800 of file core.h.

Member Function Documentation

- -

◆ format()

- +
@@ -168,7 +184,7 @@ template<typename Context>
-

Definition at line 802 of file core.h.

+

Definition at line 802 of file core.h.

@@ -183,7 +199,7 @@ template<typename Context>
+ doxygen 1.8.11 diff --git a/docs/classfmt_1_1v5_1_1basic__format__arg_1_1handle.js b/docs/classfmt_1_1v5_1_1basic__format__arg_1_1handle.js index e468f62..d2eab26 100644 --- a/docs/classfmt_1_1v5_1_1basic__format__arg_1_1handle.js +++ b/docs/classfmt_1_1v5_1_1basic__format__arg_1_1handle.js @@ -1,5 +1,5 @@ var classfmt_1_1v5_1_1basic__format__arg_1_1handle = [ [ "handle", "classfmt_1_1v5_1_1basic__format__arg_1_1handle.html#a2c29f6c7a5cc8ebb64f48aa3d4369e83", null ], - [ "format", "classfmt_1_1v5_1_1basic__format__arg_1_1handle.html#ae4ed580bdb5b645e912e7f74a44e7043", null ] + [ "format", "classfmt_1_1v5_1_1basic__format__arg_1_1handle.html#a3ff798e2ef00d3c83f895200cd4712ea", null ] ]; \ No newline at end of file diff --git a/docs/classfmt_1_1v5_1_1basic__format__args-members.html b/docs/classfmt_1_1v5_1_1basic__format__args-members.html index 4c488e8..d9f5805 100644 --- a/docs/classfmt_1_1v5_1_1basic__format__args-members.html +++ b/docs/classfmt_1_1v5_1_1basic__format__args-members.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Member List @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -99,9 +119,9 @@ $(document).ready(function(){initNavTree('classfmt_1_1v5_1_1basic__format__args. basic_format_args(const format_arg_store< Context, Args... > &store)fmt::v5::basic_format_args< Context >inline basic_format_args(const format_arg *args, size_type count)fmt::v5::basic_format_args< Context >inline format_arg typedeffmt::v5::basic_format_args< Context > - get(size_type index) constfmt::v5::basic_format_args< Context >inline + get(size_type index) const fmt::v5::basic_format_args< Context >inline internal::arg_map< Context > classfmt::v5::basic_format_args< Context >friend - max_size() constfmt::v5::basic_format_args< Context >inline + max_size() const fmt::v5::basic_format_args< Context >inline size_type typedeffmt::v5::basic_format_args< Context > values_fmt::v5::basic_format_args< Context >
@@ -111,7 +131,7 @@ $(document).ready(function(){initNavTree('classfmt_1_1v5_1_1basic__format__args.
    + doxygen 1.8.11
diff --git a/docs/classfmt_1_1v5_1_1basic__format__args.html b/docs/classfmt_1_1v5_1_1basic__format__args.html index 901f8c0..0938c21 100644 --- a/docs/classfmt_1_1v5_1_1basic__format__args.html +++ b/docs/classfmt_1_1v5_1_1basic__format__args.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: fmt::v5::basic_format_args< Context > Class Template Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -115,10 +135,10 @@ Public Member Functions    basic_format_args (const format_arg *args, size_type count)   -format_arg get (size_type index) const -  -size_type max_size () const -  +format_arg get (size_type index) const +  +size_type max_size () const +  @@ -131,11 +151,9 @@ class fmt::v5::basic_format_args< Context >

Formatting arguments.

-

Definition at line 487 of file core.h.

+

Definition at line 487 of file core.h.

Member Typedef Documentation

- -

◆ format_arg

- +
@@ -147,13 +165,11 @@ template<typename Context>

Friends

-

Definition at line 1206 of file core.h.

+

Definition at line 1206 of file core.h.

- -

◆ size_type

- +
@@ -165,14 +181,12 @@ template<typename Context>
-

Definition at line 1205 of file core.h.

+

Definition at line 1205 of file core.h.

Constructor & Destructor Documentation

- -

◆ basic_format_args() [1/3]

- +
@@ -195,13 +209,11 @@ template<typename Context>
-

Definition at line 1254 of file core.h.

+

Definition at line 1254 of file core.h.

- -

◆ basic_format_args() [2/3]

- +
@@ -226,15 +238,13 @@ template<typename... Args>
-

\rst Constructs a basic_format_args object from ~fmt::format_arg_store. \endrst

+

Constructs a basic_format_args object from ~fmt::format_arg_store.

-

Definition at line 1262 of file core.h.

+

Definition at line 1262 of file core.h.

- -

◆ basic_format_args() [3/3]

- +
@@ -267,16 +277,14 @@ template<typename Context>
-

\rst Constructs a basic_format_args object from a dynamic set of arguments. \endrst

+

Constructs a basic_format_args object from a dynamic set of arguments.

-

Definition at line 1272 of file core.h.

+

Definition at line 1272 of file core.h.

Member Function Documentation

- -

◆ get()

- +
@@ -301,13 +309,11 @@ template<typename Context>

Returns the argument at specified index.

-

Definition at line 1278 of file core.h.

+

Definition at line 1278 of file core.h.

- -

◆ max_size()

- +
@@ -330,14 +336,12 @@ template<typename Context>
-

Definition at line 1285 of file core.h.

+

Definition at line 1285 of file core.h.

Friends And Related Function Documentation

- -

◆ internal::arg_map< Context >

- +
@@ -357,14 +361,12 @@ template<typename Context>
-

Definition at line 1230 of file core.h.

+

Definition at line 1230 of file core.h.

Member Data Documentation

- -

◆ args_

- +
@@ -376,13 +378,11 @@ template<typename Context>
-

Definition at line 1219 of file core.h.

+

Definition at line 1219 of file core.h.

- -

◆ values_

- +
@@ -394,7 +394,7 @@ template<typename Context>
-

Definition at line 1218 of file core.h.

+

Definition at line 1218 of file core.h.

@@ -409,7 +409,7 @@ template<typename Context> + doxygen 1.8.11 diff --git a/docs/classfmt_1_1v5_1_1basic__format__args.js b/docs/classfmt_1_1v5_1_1basic__format__args.js index 0edd74c..be78b1a 100644 --- a/docs/classfmt_1_1v5_1_1basic__format__args.js +++ b/docs/classfmt_1_1v5_1_1basic__format__args.js @@ -5,8 +5,8 @@ var classfmt_1_1v5_1_1basic__format__args = [ "basic_format_args", "classfmt_1_1v5_1_1basic__format__args.html#a324ac8280585ccbee69bcf0a75c3765a", null ], [ "basic_format_args", "classfmt_1_1v5_1_1basic__format__args.html#abbaf332be8c119f7ed6b05e71ebde3c9", null ], [ "basic_format_args", "classfmt_1_1v5_1_1basic__format__args.html#a46d01e323ae8a2436a4ec4ed47d379b1", null ], - [ "get", "classfmt_1_1v5_1_1basic__format__args.html#a9bc1ed80f61c5f8feaa1c3ead187f2e8", null ], - [ "max_size", "classfmt_1_1v5_1_1basic__format__args.html#a7793770b464ca724fc86fcb199cd6d8b", null ], + [ "get", "classfmt_1_1v5_1_1basic__format__args.html#ab8ec2f853b5609971be6cc6554ac56ec", null ], + [ "max_size", "classfmt_1_1v5_1_1basic__format__args.html#a961b62b8f8bd720f6fe8099bc1046d64", null ], [ "internal::arg_map< Context >", "classfmt_1_1v5_1_1basic__format__args.html#a7974100f026be256213827458684be38", null ], [ "args_", "classfmt_1_1v5_1_1basic__format__args.html#aae77a07c32a92e56243ff0a76f51eaff", null ], [ "values_", "classfmt_1_1v5_1_1basic__format__args.html#a7dd4ac1a1a0513a1b567d2c6251656a7", null ] diff --git a/docs/classfmt_1_1v5_1_1basic__format__context-members.html b/docs/classfmt_1_1v5_1_1basic__format__context-members.html index 20f74c9..a2e832e 100644 --- a/docs/classfmt_1_1v5_1_1basic__format__context-members.html +++ b/docs/classfmt_1_1v5_1_1basic__format__context-members.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Member List @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -95,8 +115,8 @@ $(document).ready(function(){initNavTree('classfmt_1_1v5_1_1basic__format__conte

This is the complete list of members for fmt::v5::basic_format_context< OutputIt, Char >, including all inherited members.

- - + + @@ -118,7 +138,7 @@ $(document).ready(function(){initNavTree('classfmt_1_1v5_1_1basic__format__conte
    + doxygen 1.8.11
diff --git a/docs/classfmt_1_1v5_1_1basic__format__context.html b/docs/classfmt_1_1v5_1_1basic__format__context.html index 3bc76f8..efe8a44 100644 --- a/docs/classfmt_1_1v5_1_1basic__format__context.html +++ b/docs/classfmt_1_1v5_1_1basic__format__context.html @@ -1,10 +1,9 @@ - + - - +Livox SDK API: fmt::v5::basic_format_context< OutputIt, Char > Class Template Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ @@ -39,22 +41,42 @@
advance_to(iterator it)fmt::v5::internal::context_base< OutputIt, basic_format_context< OutputIt, Char >, Char >inline
arg(unsigned id) constfmt::v5::internal::context_base< OutputIt, basic_format_context< OutputIt, Char >, Char >inline
args() constfmt::v5::internal::context_base< OutputIt, basic_format_context< OutputIt, Char >, Char >inline
arg(unsigned id) constfmt::v5::internal::context_base< OutputIt, basic_format_context< OutputIt, Char >, Char >inline
args() constfmt::v5::internal::context_base< OutputIt, basic_format_context< OutputIt, Char >, Char >inline
basic_format_context(OutputIt out, basic_string_view< char_type > format_str, basic_format_args< basic_format_context > ctx_args, internal::locale_ref loc=internal::locale_ref())fmt::v5::basic_format_context< OutputIt, Char >inline
begin()fmt::v5::internal::context_base< OutputIt, basic_format_context< OutputIt, Char >, Char >inline
char_type typedeffmt::v5::basic_format_context< OutputIt, Char >
Livox SDK API -  V2.0.0 +  V2.1.0
- + - - - - + +
@@ -103,10 +123,10 @@ Inheritance diagram for fmt::v5::basic_format_context< OutputIt, Char >:
- + fmt::v5::internal::context_base< OutputIt, basic_format_context< OutputIt, Char >, Char > - -
+ + @@ -136,10 +156,10 @@ Public Member Functions - - - - + + + + @@ -173,11 +193,9 @@ Additional Inherited Members class fmt::v5::basic_format_context< OutputIt, Char > -

Definition at line 1081 of file core.h.

+

Definition at line 1081 of file core.h.

Member Typedef Documentation

- -

◆ char_type

- +
@@ -190,13 +208,11 @@ template<typename OutputIt, typename Char >

The character type for the output.

-

Definition at line 1086 of file core.h.

+

Definition at line 1086 of file core.h.

- -

◆ iterator

- +
@@ -208,14 +224,12 @@ template<typename OutputIt, typename Char >

Classes

- Public Member Functions inherited from fmt::v5::internal::context_base< OutputIt, basic_format_context< OutputIt, Char >, Char >
basic_parse_context< char_type > & parse_context ()
 
basic_format_args< basic_format_context< OutputIt, Char > > args () const
 
basic_format_arg< basic_format_context< OutputIt, Char > > arg (unsigned id) const
 
basic_format_args< basic_format_context< OutputIt, Char > > args () const
 
basic_format_arg< basic_format_context< OutputIt, Char > > arg (unsigned id) const
 
internal::error_handler error_handler ()
 
void on_error (const char *message)
-

Definition at line 990 of file core.h.

+

Definition at line 990 of file core.h.

Constructor & Destructor Documentation

- -

◆ basic_format_context()

- +
@@ -262,36 +276,12 @@ template<typename OutputIt, typename Char >

Constructs a basic_format_context object. References to the arguments are stored in the object so make sure they have appropriate lifetimes.

-

Definition at line 1109 of file core.h.

+

Definition at line 1109 of file core.h.

Member Function Documentation

- -

◆ get_arg() [1/2]

- -
-
-
-template<typename Range , typename Char >
- - - - - - - - -
basic_format_context< Range, Char >::format_arg fmt::v5::basic_format_context< Range, Char >::get_arg (basic_string_view< char_typename)
-
- -

Definition at line 3058 of file format.h.

- -
-
- -

◆ get_arg() [2/2]

- +
@@ -315,13 +305,31 @@ template<typename OutputIt, typename Char >
-

Definition at line 1117 of file core.h.

+

Definition at line 1117 of file core.h.

- -

◆ next_arg()

+ +
+
+
+template<typename Range , typename Char >
+ + + + + + + + +
basic_format_context< Range, Char >::format_arg fmt::v5::basic_format_context< Range, Char >::get_arg (basic_string_view< char_typename)
+
+

Definition at line 3058 of file format.h.

+ +
+
+
@@ -344,7 +352,7 @@ template<typename OutputIt, typename Char >
-

Definition at line 1114 of file core.h.

+

Definition at line 1114 of file core.h.

@@ -360,7 +368,7 @@ template<typename OutputIt, typename Char > + doxygen 1.8.11 diff --git a/docs/classfmt_1_1v5_1_1basic__format__context.js b/docs/classfmt_1_1v5_1_1basic__format__context.js index 865e4b1..224ea93 100644 --- a/docs/classfmt_1_1v5_1_1basic__format__context.js +++ b/docs/classfmt_1_1v5_1_1basic__format__context.js @@ -4,7 +4,7 @@ var classfmt_1_1v5_1_1basic__format__context = [ "char_type", "classfmt_1_1v5_1_1basic__format__context.html#aac5c87132bab71007a567bd1820f1a16", null ], [ "iterator", "classfmt_1_1v5_1_1basic__format__context.html#aa88412259a118ed5ac97e9bd1cee92e3", null ], [ "basic_format_context", "classfmt_1_1v5_1_1basic__format__context.html#adf22dc09de008340bf108c68281724f9", null ], - [ "get_arg", "classfmt_1_1v5_1_1basic__format__context.html#a08841c7d750e03983bad8bd6361f0a4c", null ], [ "get_arg", "classfmt_1_1v5_1_1basic__format__context.html#af38c9257418ad1abafccf1ca34d4bbb7", null ], + [ "get_arg", "classfmt_1_1v5_1_1basic__format__context.html#a08841c7d750e03983bad8bd6361f0a4c", null ], [ "next_arg", "classfmt_1_1v5_1_1basic__format__context.html#ac5b96279f3ca0db9c1879e7c33551985", null ] ]; \ No newline at end of file diff --git a/docs/classfmt_1_1v5_1_1basic__memory__buffer-members.html b/docs/classfmt_1_1v5_1_1basic__memory__buffer-members.html index f0f4039..9d949d6 100644 --- a/docs/classfmt_1_1v5_1_1basic__memory__buffer-members.html +++ b/docs/classfmt_1_1v5_1_1basic__memory__buffer-members.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Member List @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -100,22 +120,22 @@ $(document).ready(function(){initNavTree('classfmt_1_1v5_1_1basic__memory__buffe basic_memory_buffer(const Allocator &alloc=Allocator())fmt::v5::basic_memory_buffer< T, SIZE, Allocator >inlineexplicit basic_memory_buffer(basic_memory_buffer &&other)fmt::v5::basic_memory_buffer< T, SIZE, Allocator >inline begin()fmt::v5::internal::basic_buffer< T >inline - capacity() constfmt::v5::internal::basic_buffer< T >inline + capacity() const fmt::v5::internal::basic_buffer< T >inline clear()fmt::v5::internal::basic_buffer< T >inline - const_referencefmt::v5::basic_memory_buffer< T, SIZE, Allocator > + const_reference typedeffmt::v5::basic_memory_buffer< T, SIZE, Allocator > data()fmt::v5::internal::basic_buffer< T >inline - data() constfmt::v5::internal::basic_buffer< T >inline + data() const fmt::v5::internal::basic_buffer< T >inline end()fmt::v5::internal::basic_buffer< T >inline - get_allocator() constfmt::v5::basic_memory_buffer< T, SIZE, Allocator >inline + get_allocator() const fmt::v5::basic_memory_buffer< T, SIZE, Allocator >inline grow(std::size_t size)fmt::v5::basic_memory_buffer< T, SIZE, Allocator >protectedvirtual operator=(basic_memory_buffer &&other)fmt::v5::basic_memory_buffer< T, SIZE, Allocator >inline operator[](std::size_t index)fmt::v5::internal::basic_buffer< T >inline - operator[](std::size_t index) constfmt::v5::internal::basic_buffer< T >inline + operator[](std::size_t index) const fmt::v5::internal::basic_buffer< T >inline push_back(const T &value)fmt::v5::internal::basic_buffer< T >inline reserve(std::size_t new_capacity)fmt::v5::internal::basic_buffer< T >inline resize(std::size_t new_size)fmt::v5::internal::basic_buffer< T >inline set(T *buf_data, std::size_t buf_capacity)fmt::v5::internal::basic_buffer< T >inlineprotected - size() constfmt::v5::internal::basic_buffer< T >inline + size() const fmt::v5::internal::basic_buffer< T >inline value_type typedeffmt::v5::basic_memory_buffer< T, SIZE, Allocator > ~basic_buffer()fmt::v5::internal::basic_buffer< T >inlinevirtual ~basic_memory_buffer()fmt::v5::basic_memory_buffer< T, SIZE, Allocator >inline @@ -126,7 +146,7 @@ $(document).ready(function(){initNavTree('classfmt_1_1v5_1_1basic__memory__buffe
    + doxygen 1.8.11
diff --git a/docs/classfmt_1_1v5_1_1basic__memory__buffer.html b/docs/classfmt_1_1v5_1_1basic__memory__buffer.html index 6d3b37f..ddb7e1e 100644 --- a/docs/classfmt_1_1v5_1_1basic__memory__buffer.html +++ b/docs/classfmt_1_1v5_1_1basic__memory__buffer.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: fmt::v5::basic_memory_buffer< T, SIZE, Allocator > Class Template Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -90,7 +110,6 @@ $(document).ready(function(){initNavTree('classfmt_1_1v5_1_1basic__memory__buffe
@@ -104,18 +123,22 @@ Inheritance diagram for fmt::v5::basic_memory_buffer< T, SIZE, Allocator >
- + fmt::v5::internal::basic_buffer< T > - -
+ +
+ + + +

Public Types

typedef T value_type
 
typedef const T & const_reference
 
- Public Types inherited from fmt::v5::internal::basic_buffer< T >
typedef T value_type
 
typedef const T & const_reference
 
@@ -127,8 +150,8 @@ Public Member Functions - - + + @@ -136,14 +159,14 @@ Public Member Functions - - - - + + + + - - + + @@ -157,20 +180,12 @@ Public Member Functions - - -

Public Member Functions

 
basic_memory_bufferoperator= (basic_memory_buffer &&other)
 
Allocator get_allocator () const
 
Allocator get_allocator () const
 
- Public Member Functions inherited from fmt::v5::internal::basic_buffer< T >
virtual ~basic_buffer ()
 
 
T * end () throw ()
 
std::size_t size () const throw ()
 
std::size_t capacity () const throw ()
 
std::size_t size () const throw ()
 
std::size_t capacity () const throw ()
 
T * data () throw ()
 
const T * data () const throw ()
 
const T * data () const throw ()
 
void resize (std::size_t new_size)
 
void clear ()
 
T & operator[] (std::size_t index)
 
const T & operator[] (std::size_t index) const
 
- - - - - - + +

-Public Attributes

const typedef T & const_reference
 
- Public Attributes inherited from fmt::v5::internal::basic_buffer< T >
const typedef T & const_reference
 
const T & operator[] (std::size_t index) const
 
- + @@ -184,7 +199,7 @@ Protected Member Functions

template<typename T, std::size_t SIZE = inline_buffer_size, typename Allocator = std::allocator<T>>
class fmt::v5::basic_memory_buffer< T, SIZE, Allocator >

-

\rst A dynamically growing memory buffer for trivially copyable/constructible types with the first SIZE elements stored in the object itself.

+

A dynamically growing memory buffer for trivially copyable/constructible types with the first SIZE elements stored in the object itself.

You can use one of the following typedefs for common character types:

+-------------—+---------------------------—+ | Type | Definition | +================+==============================+ | memory_buffer | basic_memory_buffer<char> | +-------------—+---------------------------—+ | wmemory_buffer | basic_memory_buffer<wchar_t> | +-------------—+---------------------------—+

Example**::

@@ -192,13 +207,27 @@ class fmt::v5::basic_memory_buffer< T, SIZE, Allocator >

This will append the following output to the out object:

.. code-block:: none

The answer is 42.

-

The output can be converted to an std::string with to_string(out). \endrst

+

The output can be converted to an std::string with to_string(out).

-

Definition at line 464 of file format.h.

+

Definition at line 464 of file format.h.

Member Typedef Documentation

- -

◆ value_type

+ +
+
+
+template<typename T, std::size_t SIZE = inline_buffer_size, typename Allocator = std::allocator<T>>
+

Protected Member Functions

void grow (std::size_t size)
void grow (std::size_t size)
 
- Protected Member Functions inherited from fmt::v5::internal::basic_buffer< T >
 basic_buffer (std::size_t sz) throw ()
+ + + +
typedef const T& fmt::v5::basic_memory_buffer< T, SIZE, Allocator >::const_reference
+
+

Definition at line 479 of file format.h.

+ +
+ +
@@ -210,14 +239,12 @@ template<typename T, std::size_t SIZE = inline_buffer_size, typename Allocato
-

Definition at line 478 of file format.h.

+

Definition at line 478 of file format.h.

Constructor & Destructor Documentation

- -

◆ basic_memory_buffer() [1/2]

- +
@@ -241,13 +268,11 @@ template<typename T, std::size_t SIZE = inline_buffer_size, typename Allocato
-

Definition at line 481 of file format.h.

+

Definition at line 481 of file format.h.

- -

◆ ~basic_memory_buffer()

- +
@@ -270,13 +295,11 @@ template<typename T, std::size_t SIZE = inline_buffer_size, typename Allocato
-

Definition at line 485 of file format.h.

+

Definition at line 485 of file format.h.

- -

◆ basic_memory_buffer() [2/2]

- +
@@ -299,16 +322,14 @@ template<typename T, std::size_t SIZE = inline_buffer_size, typename Allocato
-

\rst Constructs a :class:fmt::basic_memory_buffer object moving the content of the other object to it. \endrst

+

Constructs a :class:fmt::basic_memory_buffer object moving the content of the other object to it.

-

Definition at line 514 of file format.h.

+

Definition at line 514 of file format.h.

Member Function Documentation

- -

◆ get_allocator()

- +
@@ -331,13 +352,11 @@ template<typename T, std::size_t SIZE = inline_buffer_size, typename Allocato
-

Definition at line 531 of file format.h.

+

Definition at line 531 of file format.h.

- -

◆ grow()

- +
@@ -364,13 +383,11 @@ template<typename T , std::size_t SIZE, typename Allocator >

Implements fmt::v5::internal::basic_buffer< T >.

-

Definition at line 535 of file format.h.

+

Definition at line 535 of file format.h.

- -

◆ operator=()

- +
@@ -393,28 +410,9 @@ template<typename T, std::size_t SIZE = inline_buffer_size, typename Allocato
-

\rst Moves the content of the other basic_memory_buffer object to this one. \endrst

+

Moves the content of the other basic_memory_buffer object to this one.

-

Definition at line 523 of file format.h.

- -
-
-

Member Data Documentation

- -

◆ const_reference

- -
-
-
-template<typename T, std::size_t SIZE = inline_buffer_size, typename Allocator = std::allocator<T>>
- - - - -
const typedef T& fmt::v5::basic_memory_buffer< T, SIZE, Allocator >::const_reference
-
- -

Definition at line 479 of file format.h.

+

Definition at line 523 of file format.h.

@@ -429,7 +427,7 @@ template<typename T, std::size_t SIZE = inline_buffer_size, typename Allocato + doxygen 1.8.11
diff --git a/docs/classfmt_1_1v5_1_1basic__memory__buffer.js b/docs/classfmt_1_1v5_1_1basic__memory__buffer.js index 3f81832..efe02b8 100644 --- a/docs/classfmt_1_1v5_1_1basic__memory__buffer.js +++ b/docs/classfmt_1_1v5_1_1basic__memory__buffer.js @@ -1,11 +1,11 @@ var classfmt_1_1v5_1_1basic__memory__buffer = [ + [ "const_reference", "classfmt_1_1v5_1_1basic__memory__buffer.html#a137e3161cc2723cb0b0ec2561f879348", null ], [ "value_type", "classfmt_1_1v5_1_1basic__memory__buffer.html#aecaa097e427d00d791de417e5ea9034c", null ], [ "basic_memory_buffer", "classfmt_1_1v5_1_1basic__memory__buffer.html#ad1d2a73db09717e1222e62d8e0f64e27", null ], [ "~basic_memory_buffer", "classfmt_1_1v5_1_1basic__memory__buffer.html#a16dc183a56fba190395fdea7629f69ca", null ], [ "basic_memory_buffer", "classfmt_1_1v5_1_1basic__memory__buffer.html#a4a840dd1d757f57f9ceee5da7442a9d1", null ], - [ "get_allocator", "classfmt_1_1v5_1_1basic__memory__buffer.html#a094e634037328b140f061c7bec7f3887", null ], + [ "get_allocator", "classfmt_1_1v5_1_1basic__memory__buffer.html#a094c0255ada00199f99d6ec48f00d852", null ], [ "grow", "classfmt_1_1v5_1_1basic__memory__buffer.html#aeeb97ae704fbe2d83c32dd2adbfdff7d", null ], - [ "operator=", "classfmt_1_1v5_1_1basic__memory__buffer.html#a04e7e682d636a65fa60fb0a5b78fa98d", null ], - [ "const_reference", "classfmt_1_1v5_1_1basic__memory__buffer.html#a8de576f1089cdc9560f1194d6885634a", null ] + [ "operator=", "classfmt_1_1v5_1_1basic__memory__buffer.html#a04e7e682d636a65fa60fb0a5b78fa98d", null ] ]; \ No newline at end of file diff --git a/docs/classfmt_1_1v5_1_1basic__parse__context-members.html b/docs/classfmt_1_1v5_1_1basic__parse__context-members.html index 841a0d9..5628b91 100644 --- a/docs/classfmt_1_1v5_1_1basic__parse__context-members.html +++ b/docs/classfmt_1_1v5_1_1basic__parse__context-members.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Member List @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@
- + - - - - + +
@@ -96,12 +116,12 @@ $(document).ready(function(){initNavTree('classfmt_1_1v5_1_1basic__parse__contex - + - - + + @@ -112,7 +132,7 @@ $(document).ready(function(){initNavTree('classfmt_1_1v5_1_1basic__parse__contex
    + doxygen 1.8.11
diff --git a/docs/classfmt_1_1v5_1_1basic__parse__context.html b/docs/classfmt_1_1v5_1_1basic__parse__context.html index 6917f7e..da9df11 100644 --- a/docs/classfmt_1_1v5_1_1basic__parse__context.html +++ b/docs/classfmt_1_1v5_1_1basic__parse__context.html @@ -1,10 +1,9 @@ - + - - +Livox SDK API: fmt::v5::basic_parse_context< Char, ErrorHandler > Class Template Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ @@ -39,22 +41,42 @@
advance_to(iterator it)fmt::v5::basic_parse_context< Char, ErrorHandler >inline
basic_parse_context(basic_string_view< Char > format_str, ErrorHandler eh=ErrorHandler())fmt::v5::basic_parse_context< Char, ErrorHandler >inlineexplicit
begin() constfmt::v5::basic_parse_context< Char, ErrorHandler >inline
begin() const fmt::v5::basic_parse_context< Char, ErrorHandler >inline
char_type typedeffmt::v5::basic_parse_context< Char, ErrorHandler >
check_arg_id(unsigned)fmt::v5::basic_parse_context< Char, ErrorHandler >inline
check_arg_id(basic_string_view< Char >)fmt::v5::basic_parse_context< Char, ErrorHandler >inline
end() constfmt::v5::basic_parse_context< Char, ErrorHandler >inline
error_handler() constfmt::v5::basic_parse_context< Char, ErrorHandler >inline
end() const fmt::v5::basic_parse_context< Char, ErrorHandler >inline
error_handler() const fmt::v5::basic_parse_context< Char, ErrorHandler >inline
iterator typedeffmt::v5::basic_parse_context< Char, ErrorHandler >
next_arg_id()fmt::v5::basic_parse_context< Char, ErrorHandler >inline
on_error(const char *message)fmt::v5::basic_parse_context< Char, ErrorHandler >inline
Livox SDK API -  V2.0.0 +  V2.1.0
- + - - - - + +
@@ -101,7 +121,9 @@ $(document).ready(function(){initNavTree('classfmt_1_1v5_1_1basic__parse__contex Inheritance diagram for fmt::v5::basic_parse_context< Char, ErrorHandler >:
- + + +
Public Member Functions - - - - + + + + @@ -129,19 +151,17 @@ Public Member Functions - - + +

@@ -115,10 +137,10 @@ Public Types

 basic_parse_context (basic_string_view< Char > format_str, ErrorHandler eh=ErrorHandler())
 
iterator begin () const throw ()
 
iterator end () const throw ()
 
iterator begin () const throw ()
 
iterator end () const throw ()
 
void advance_to (iterator it)
 
unsigned next_arg_id ()
 
void on_error (const char *message)
 
ErrorHandler error_handler () const
 
ErrorHandler error_handler () const
 

Detailed Description

template<typename Char, typename ErrorHandler = internal::error_handler>
class fmt::v5::basic_parse_context< Char, ErrorHandler >

-

Definition at line 878 of file core.h.

+

Definition at line 878 of file core.h.

Member Typedef Documentation

- -

◆ char_type

- +
@@ -153,13 +173,11 @@ template<typename Char, typename ErrorHandler = internal::error_handler> <
-

Definition at line 884 of file core.h.

+

Definition at line 884 of file core.h.

- -

◆ iterator

- +
@@ -171,14 +189,12 @@ template<typename Char, typename ErrorHandler = internal::error_handler> <
-

Definition at line 885 of file core.h.

+

Definition at line 885 of file core.h.

Constructor & Destructor Documentation

- -

◆ basic_parse_context()

- +
@@ -212,14 +228,12 @@ template<typename Char, typename ErrorHandler = internal::error_handler> <
-

Definition at line 887 of file core.h.

+

Definition at line 887 of file core.h.

Member Function Documentation

- -

◆ advance_to()

- +
@@ -243,13 +257,11 @@ template<typename Char, typename ErrorHandler = internal::error_handler> <
-

Definition at line 901 of file core.h.

+

Definition at line 901 of file core.h.

- -

◆ begin()

- +
@@ -278,43 +290,11 @@ template<typename Char, typename ErrorHandler = internal::error_handler> <
-

Definition at line 893 of file core.h.

+

Definition at line 893 of file core.h.

- -

◆ check_arg_id() [1/2]

- -
-
-
-template<typename Char, typename ErrorHandler = internal::error_handler>
- - - - - -
- - - - - - - - -
void fmt::v5::basic_parse_context< Char, ErrorHandler >::check_arg_id (basic_string_view< Char > )
-
-inline
-
- -

Definition at line 916 of file core.h.

- -
-
- -

◆ check_arg_id() [2/2]

- +
@@ -338,13 +318,39 @@ template<typename Char, typename ErrorHandler = internal::error_handler> <
-

Definition at line 908 of file core.h.

+

Definition at line 908 of file core.h.

- -

◆ end()

+ +
+
+
+template<typename Char, typename ErrorHandler = internal::error_handler>
+ + + + + +
+ + + + + + + + +
void fmt::v5::basic_parse_context< Char, ErrorHandler >::check_arg_id (basic_string_view< Char > )
+
+inline
+
+

Definition at line 916 of file core.h.

+ +
+
+
@@ -373,13 +379,11 @@ template<typename Char, typename ErrorHandler = internal::error_handler> <
-

Definition at line 898 of file core.h.

+

Definition at line 898 of file core.h.

- -

◆ error_handler()

- +
@@ -402,13 +406,11 @@ template<typename Char, typename ErrorHandler = internal::error_handler> <
-

Definition at line 922 of file core.h.

+

Definition at line 922 of file core.h.

- -

◆ next_arg_id()

- +
@@ -431,13 +433,11 @@ template<typename Char , typename ErrorHandler >
-

Definition at line 1118 of file format.h.

+

Definition at line 1118 of file format.h.

- -

◆ on_error()

- +
@@ -461,7 +461,7 @@ template<typename Char, typename ErrorHandler = internal::error_handler> <
-

Definition at line 918 of file core.h.

+

Definition at line 918 of file core.h.

@@ -477,7 +477,7 @@ template<typename Char, typename ErrorHandler = internal::error_handler> < + doxygen 1.8.11
diff --git a/docs/classfmt_1_1v5_1_1basic__parse__context.js b/docs/classfmt_1_1v5_1_1basic__parse__context.js index a8873cf..02b42a6 100644 --- a/docs/classfmt_1_1v5_1_1basic__parse__context.js +++ b/docs/classfmt_1_1v5_1_1basic__parse__context.js @@ -4,11 +4,11 @@ var classfmt_1_1v5_1_1basic__parse__context = [ "iterator", "classfmt_1_1v5_1_1basic__parse__context.html#a2061e0733dc01aafbd2180742ce3e420", null ], [ "basic_parse_context", "classfmt_1_1v5_1_1basic__parse__context.html#a2f71955aa8532331a4d3528c086df716", null ], [ "advance_to", "classfmt_1_1v5_1_1basic__parse__context.html#a4ae214f4e777ec14ab4f7de4b312d2a6", null ], - [ "begin", "classfmt_1_1v5_1_1basic__parse__context.html#a026a5f2c3de8569b7527c7570009ecc6", null ], - [ "check_arg_id", "classfmt_1_1v5_1_1basic__parse__context.html#aeb20a1952bd3f6186c0157341326315a", null ], + [ "begin", "classfmt_1_1v5_1_1basic__parse__context.html#a201088492e70439c9a1772fac93652fa", null ], [ "check_arg_id", "classfmt_1_1v5_1_1basic__parse__context.html#a1b0beb2ee86041582086cffa5070d02b", null ], - [ "end", "classfmt_1_1v5_1_1basic__parse__context.html#a5577df5c96ceeefa7f8ea06cd73a4e51", null ], - [ "error_handler", "classfmt_1_1v5_1_1basic__parse__context.html#a393517a95a1aaf1b55ea787ecac5ea64", null ], + [ "check_arg_id", "classfmt_1_1v5_1_1basic__parse__context.html#aeb20a1952bd3f6186c0157341326315a", null ], + [ "end", "classfmt_1_1v5_1_1basic__parse__context.html#a44397ea5232f0d3cd68fb05e55dd1ca2", null ], + [ "error_handler", "classfmt_1_1v5_1_1basic__parse__context.html#abd2668bacb8ca1a841ca5121cafbe560", null ], [ "next_arg_id", "classfmt_1_1v5_1_1basic__parse__context.html#a904ad0013ff0d1e633218bcf1810592d", null ], [ "on_error", "classfmt_1_1v5_1_1basic__parse__context.html#aa5e6f5d821319449d7569d5670b15c8e", null ] ]; \ No newline at end of file diff --git a/docs/classfmt_1_1v5_1_1basic__printf__context-members.html b/docs/classfmt_1_1v5_1_1basic__printf__context-members.html index 9b44612..1f3b7ea 100644 --- a/docs/classfmt_1_1v5_1_1basic__printf__context-members.html +++ b/docs/classfmt_1_1v5_1_1basic__printf__context-members.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Member List @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@
- + - - - - + +
@@ -94,24 +114,21 @@ $(document).ready(function(){initNavTree('classfmt_1_1v5_1_1basic__printf__conte

This is the complete list of members for fmt::v5::basic_printf_context< OutputIt, Char, ArgFormatter >, including all inherited members.

- - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + +
advance_to(iterator it)fmt::v5::basic_printf_context< OutputIt, Char, ArgFormatter >inline
context_base< OutputIt, basic_printf_context< OutputIt, Char, ArgFormatter >, Char >::advance_to(iterator it)fmt::v5::internal::context_base< OutputIt, basic_printf_context< OutputIt, Char, ArgFormatter >, Char >inline
arg(unsigned id) constfmt::v5::internal::context_base< OutputIt, basic_printf_context< OutputIt, Char, ArgFormatter >, Char >inline
args() constfmt::v5::internal::context_base< OutputIt, basic_printf_context< OutputIt, Char, ArgFormatter >, Char >inline
basic_printf_context(OutputIt out, basic_string_view< char_type > format_str, basic_format_args< basic_printf_context > args)fmt::v5::basic_printf_context< OutputIt, Char, ArgFormatter >inline
begin()fmt::v5::internal::context_base< OutputIt, basic_printf_context< OutputIt, Char, ArgFormatter >, Char >inline
char_type typedeffmt::v5::basic_printf_context< OutputIt, Char, ArgFormatter >
context_base(OutputIt out, basic_string_view< char_type > format_str, basic_format_args< basic_printf_context< OutputIt, Char, ArgFormatter > > ctx_args, locale_ref loc=locale_ref())fmt::v5::internal::context_base< OutputIt, basic_printf_context< OutputIt, Char, ArgFormatter >, Char >inlineprotected
do_get_arg(unsigned arg_id)fmt::v5::internal::context_base< OutputIt, basic_printf_context< OutputIt, Char, ArgFormatter >, Char >inlineprotected
error_handler()fmt::v5::internal::context_base< OutputIt, basic_printf_context< OutputIt, Char, ArgFormatter >, Char >inline
format()fmt::v5::basic_printf_context< OutputIt, Char, ArgFormatter >
context_base< OutputIt, basic_printf_context< OutputIt, Char, ArgFormatter >, Char >::get_arg(unsigned arg_id)fmt::v5::internal::context_base< OutputIt, basic_printf_context< OutputIt, Char, ArgFormatter >, Char >inlineprotected
locale()fmt::v5::internal::context_base< OutputIt, basic_printf_context< OutputIt, Char, ArgFormatter >, Char >inline
on_error(const char *message)fmt::v5::internal::context_base< OutputIt, basic_printf_context< OutputIt, Char, ArgFormatter >, Char >inline
out()fmt::v5::basic_printf_context< OutputIt, Char, ArgFormatter >inline
context_base< OutputIt, basic_printf_context< OutputIt, Char, ArgFormatter >, Char >::out()fmt::v5::internal::context_base< OutputIt, basic_printf_context< OutputIt, Char, ArgFormatter >, Char >inline
parse_context()fmt::v5::basic_printf_context< OutputIt, Char, ArgFormatter >inline
context_base< OutputIt, basic_printf_context< OutputIt, Char, ArgFormatter >, Char >::parse_context()fmt::v5::internal::context_base< OutputIt, basic_printf_context< OutputIt, Char, ArgFormatter >, Char >inline
advance_to(iterator it)fmt::v5::internal::context_base< OutputIt, basic_printf_context< OutputIt, Char, ArgFormatter >, Char >inline
arg(unsigned id) constfmt::v5::internal::context_base< OutputIt, basic_printf_context< OutputIt, Char, ArgFormatter >, Char >inline
args() constfmt::v5::internal::context_base< OutputIt, basic_printf_context< OutputIt, Char, ArgFormatter >, Char >inline
basic_printf_context(OutputIt out, basic_string_view< char_type > format_str, basic_format_args< basic_printf_context > args)fmt::v5::basic_printf_context< OutputIt, Char, ArgFormatter >inline
begin()fmt::v5::internal::context_base< OutputIt, basic_printf_context< OutputIt, Char, ArgFormatter >, Char >inline
char_type typedeffmt::v5::basic_printf_context< OutputIt, Char, ArgFormatter >
context_base(OutputIt out, basic_string_view< char_type > format_str, basic_format_args< basic_printf_context< OutputIt, Char, ArgFormatter > > ctx_args, locale_ref loc=locale_ref())fmt::v5::internal::context_base< OutputIt, basic_printf_context< OutputIt, Char, ArgFormatter >, Char >inlineprotected
do_get_arg(unsigned arg_id)fmt::v5::internal::context_base< OutputIt, basic_printf_context< OutputIt, Char, ArgFormatter >, Char >inlineprotected
error_handler()fmt::v5::internal::context_base< OutputIt, basic_printf_context< OutputIt, Char, ArgFormatter >, Char >inline
format()fmt::v5::basic_printf_context< OutputIt, Char, ArgFormatter >
context_base< OutputIt, basic_printf_context< OutputIt, Char, ArgFormatter >, Char >::get_arg(unsigned arg_id)fmt::v5::internal::context_base< OutputIt, basic_printf_context< OutputIt, Char, ArgFormatter >, Char >inlineprotected
locale()fmt::v5::internal::context_base< OutputIt, basic_printf_context< OutputIt, Char, ArgFormatter >, Char >inline
on_error(const char *message)fmt::v5::internal::context_base< OutputIt, basic_printf_context< OutputIt, Char, ArgFormatter >, Char >inline
out()fmt::v5::internal::context_base< OutputIt, basic_printf_context< OutputIt, Char, ArgFormatter >, Char >inline
parse_context()fmt::v5::internal::context_base< OutputIt, basic_printf_context< OutputIt, Char, ArgFormatter >, Char >inline
@@ -119,7 +136,7 @@ $(document).ready(function(){initNavTree('classfmt_1_1v5_1_1basic__printf__conte
    + doxygen 1.8.11
diff --git a/docs/classfmt_1_1v5_1_1basic__printf__context.html b/docs/classfmt_1_1v5_1_1basic__printf__context.html index accbeaa..d6c22fb 100644 --- a/docs/classfmt_1_1v5_1_1basic__printf__context.html +++ b/docs/classfmt_1_1v5_1_1basic__printf__context.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: fmt::v5::basic_printf_context< OutputIt, Char, ArgFormatter > Class Template Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@
- + - - - - + +
@@ -103,10 +123,10 @@ Inheritance diagram for fmt::v5::basic_printf_context< OutputIt, Char, ArgFor
- + fmt::v5::internal::context_base< OutputIt, basic_printf_context< OutputIt, Char, ArgFormatter >, Char > - -
+ +
@@ -123,23 +143,17 @@ Public Types

Classes

- + - - - - - - - - - - + + + + @@ -174,15 +188,13 @@ class fmt::v5::basic_printf_context< OutputIt, Char, ArgFormatter >

This template formats data and writes the output to a writer.

-

Definition at line 336 of file printf.h.

+

Definition at line 336 of file printf.h.

Member Typedef Documentation

- -

◆ char_type

- +
-template<typename OutputIt , typename Char , typename ArgFormatter >
+template<typename OutputIt, typename Char, typename ArgFormatter>

Public Member Functions

 basic_printf_context (OutputIt out, basic_string_view< char_type > format_str, basic_format_args< basic_printf_context > args)
 basic_printf_context (OutputIt out, basic_string_view< char_type > format_str, basic_format_args< basic_printf_context > args)
 
void format ()
 
basic_parse_context< char_type > & parse_context ()
 
iterator out ()
 
void advance_to (iterator it)
 
- Public Member Functions inherited from fmt::v5::internal::context_base< OutputIt, basic_printf_context< OutputIt, Char, ArgFormatter >, Char >
basic_parse_context< char_type > & parse_context ()
 
basic_format_args< basic_printf_context< OutputIt, Char, ArgFormatter > > args () const
 
basic_format_arg< basic_printf_context< OutputIt, Char, ArgFormatter > > arg (unsigned id) const
 
basic_format_args< basic_printf_context< OutputIt, Char, ArgFormatter > > args () const
 
basic_format_arg< basic_printf_context< OutputIt, Char, ArgFormatter > > arg (unsigned id) const
 
internal::error_handler error_handler ()
 
void on_error (const char *message)
@@ -191,18 +203,16 @@ template<typename OutputIt , typename Char , typename ArgFormatter >

The character type for the output.

-

Definition at line 479 of file printf.h.

+

Definition at line 479 of file printf.h.

Constructor & Destructor Documentation

- -

◆ basic_printf_context()

- +
-template<typename OutputIt , typename Char , typename ArgFormatter >
+template<typename OutputIt, typename Char, typename ArgFormatter>
typedef Char fmt::v5::basic_printf_context< OutputIt, Char, ArgFormatter >::char_type
@@ -237,42 +247,14 @@ template<typename OutputIt , typename Char , typename ArgFormatter >
-

\rst Constructs a printf_context object. References to the arguments and the writer are stored in the context object so make sure they have appropriate lifetimes. \endrst

+

Constructs a printf_context object. References to the arguments and the writer are stored in the context object so make sure they have appropriate lifetimes.

-

Definition at line 509 of file printf.h.

+

Definition at line 509 of file printf.h.

Member Function Documentation

- -

◆ advance_to()

- -
-
-
-template<typename OutputIt , typename Char , typename ArgFormatter >
- - - - - -
- - - - -
void fmt::v5::internal::context_base< OutputIt, Context, Char >::advance_to
-
-inline
-
- -

Definition at line 1038 of file core.h.

- -
-
- -

◆ format()

- +
@@ -288,59 +270,7 @@ template<typename OutputIt , typename Char , typename AF >

Formats stored arguments and writes the output to the range.

-

Definition at line 596 of file printf.h.

- -
-
- -

◆ out()

- -
-
-
-template<typename OutputIt , typename Char , typename ArgFormatter >
- - - - - -
- - - - -
iterator fmt::v5::internal::context_base< OutputIt, Context, Char >::out
-
-inline
-
- -

Definition at line 1034 of file core.h.

- -
-
- -

◆ parse_context()

- -
-
-
-template<typename OutputIt , typename Char , typename ArgFormatter >
- - - - - -
- - - - -
basic_parse_context<char_type>& fmt::v5::internal::context_base< OutputIt, Context, Char >::parse_context
-
-inline
-
- -

Definition at line 1023 of file core.h.

+

Definition at line 596 of file printf.h.

@@ -355,7 +285,7 @@ template<typename OutputIt , typename Char , typename ArgFormatter >
fmt + doxygen 1.8.11 diff --git a/docs/classfmt_1_1v5_1_1basic__printf__context.js b/docs/classfmt_1_1v5_1_1basic__printf__context.js index 1e0d4e7..e304ebd 100644 --- a/docs/classfmt_1_1v5_1_1basic__printf__context.js +++ b/docs/classfmt_1_1v5_1_1basic__printf__context.js @@ -3,8 +3,5 @@ var classfmt_1_1v5_1_1basic__printf__context = [ "formatter_type", "structfmt_1_1v5_1_1basic__printf__context_1_1formatter__type.html", "structfmt_1_1v5_1_1basic__printf__context_1_1formatter__type" ], [ "char_type", "classfmt_1_1v5_1_1basic__printf__context.html#a410acf2a67e657f4262e299e8edb6573", null ], [ "basic_printf_context", "classfmt_1_1v5_1_1basic__printf__context.html#a800016bfb5e3a94a379fdd68a8d5d4ca", null ], - [ "advance_to", "classfmt_1_1v5_1_1basic__printf__context.html#ae6257fa7c87f16830f7bbb9263991ef8", null ], - [ "format", "classfmt_1_1v5_1_1basic__printf__context.html#af8fabb5ddc209d15e78ee3136b443f85", null ], - [ "out", "classfmt_1_1v5_1_1basic__printf__context.html#aa8255081d2498a11c4d0db766907709c", null ], - [ "parse_context", "classfmt_1_1v5_1_1basic__printf__context.html#a782e3cda3eec3c7792fddfbbedb0b7d7", null ] + [ "format", "classfmt_1_1v5_1_1basic__printf__context.html#af8fabb5ddc209d15e78ee3136b443f85", null ] ]; \ No newline at end of file diff --git a/docs/classfmt_1_1v5_1_1basic__string__view-members.html b/docs/classfmt_1_1v5_1_1basic__string__view-members.html index a00b8bc..e4d7638 100644 --- a/docs/classfmt_1_1v5_1_1basic__string__view-members.html +++ b/docs/classfmt_1_1v5_1_1basic__string__view-members.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Member List @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -98,12 +118,12 @@ $(document).ready(function(){initNavTree('classfmt_1_1v5_1_1basic__string__view. basic_string_view(const Char *s, size_t count)fmt::v5::basic_string_view< Char >inline basic_string_view(const Char *s)fmt::v5::basic_string_view< Char >inline basic_string_view(const std::basic_string< Char, Alloc > &s)fmt::v5::basic_string_view< Char >inline - begin() constfmt::v5::basic_string_view< Char >inline + begin() const fmt::v5::basic_string_view< Char >inline char_type typedeffmt::v5::basic_string_view< Char > - compare(basic_string_view other) constfmt::v5::basic_string_view< Char >inline - data() constfmt::v5::basic_string_view< Char >inline - end() constfmt::v5::basic_string_view< Char >inline - iteratorfmt::v5::basic_string_view< Char > + compare(basic_string_view other) const fmt::v5::basic_string_view< Char >inline + data() const fmt::v5::basic_string_view< Char >inline + end() const fmt::v5::basic_string_view< Char >inline + iterator typedeffmt::v5::basic_string_view< Char > operator!=(basic_string_view lhs, basic_string_view rhs)fmt::v5::basic_string_view< Char >friend operator<(basic_string_view lhs, basic_string_view rhs)fmt::v5::basic_string_view< Char >friend operator<=(basic_string_view lhs, basic_string_view rhs)fmt::v5::basic_string_view< Char >friend @@ -111,7 +131,7 @@ $(document).ready(function(){initNavTree('classfmt_1_1v5_1_1basic__string__view. operator>(basic_string_view lhs, basic_string_view rhs)fmt::v5::basic_string_view< Char >friend operator>=(basic_string_view lhs, basic_string_view rhs)fmt::v5::basic_string_view< Char >friend remove_prefix(size_t n)fmt::v5::basic_string_view< Char >inline - size() constfmt::v5::basic_string_view< Char >inline + size() const fmt::v5::basic_string_view< Char >inline
@@ -119,7 +139,7 @@ $(document).ready(function(){initNavTree('classfmt_1_1v5_1_1basic__string__view.
    + doxygen 1.8.11
diff --git a/docs/classfmt_1_1v5_1_1basic__string__view.html b/docs/classfmt_1_1v5_1_1basic__string__view.html index 790fd45..a23afdf 100644 --- a/docs/classfmt_1_1v5_1_1basic__string__view.html +++ b/docs/classfmt_1_1v5_1_1basic__string__view.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: fmt::v5::basic_string_view< Char > Class Template Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -90,7 +110,6 @@ $(document).ready(function(){initNavTree('classfmt_1_1v5_1_1basic__string__view.
@@ -104,6 +123,8 @@ $(document).ready(function(){initNavTree('classfmt_1_1v5_1_1basic__string__view. Public Types typedef Char char_type   +typedef const Char * iterator +  @@ -116,23 +137,18 @@ Public Member Functions - - - - - - - - + + + + + + + + - - -

Public Member Functions

template<typename Alloc >
 basic_string_view (const std::basic_string< Char, Alloc > &s) throw ()
 
const Char * data () const
 
size_t size () const
 
iterator begin () const
 
iterator end () const
 
const Char * data () const
 
size_t size () const
 
iterator begin () const
 
iterator end () const
 
void remove_prefix (size_t n)
 
int compare (basic_string_view other) const
 
- - - + +

-Public Attributes

const typedef Char * iterator
 
int compare (basic_string_view other) const
 
@@ -155,11 +171,9 @@ class fmt::v5::basic_string_view< Char >

An implementation of std::basic_string_view for pre-C++17. It provides a subset of the API. fmt::basic_string_view is used for format strings even if std::string_view is available to prevent issues when a library is compiled with a different -std option than the client code (which is not recommended).

-

Definition at line 350 of file core.h.

+

Definition at line 350 of file core.h.

Member Typedef Documentation

- -

◆ char_type

- +
@@ -171,14 +185,28 @@ template<typename Char>

Friends

-

Definition at line 356 of file core.h.

+

Definition at line 356 of file core.h.

+ +
+
+ +
+
+
+template<typename Char>
+ + + + +
typedef const Char* fmt::v5::basic_string_view< Char >::iterator
+
+ +

Definition at line 357 of file core.h.

Constructor & Destructor Documentation

- -

◆ basic_string_view() [1/4]

- +
@@ -207,13 +235,11 @@ template<typename Char>
-

Definition at line 359 of file core.h.

+

Definition at line 359 of file core.h.

- -

◆ basic_string_view() [2/4]

- +
@@ -254,13 +280,11 @@ template<typename Char>

Constructs a string reference object from a C string and a size.

-

Definition at line 362 of file core.h.

+

Definition at line 362 of file core.h.

- -

◆ basic_string_view() [3/4]

- +
@@ -283,15 +307,13 @@ template<typename Char>
-

\rst Constructs a string reference object from a C string computing the size with std::char_traits<Char>::length. \endrst

+

Constructs a string reference object from a C string computing the size with std::char_traits<Char>::length.

-

Definition at line 371 of file core.h.

+

Definition at line 371 of file core.h.

- -

◆ basic_string_view() [4/4]

- +
@@ -324,14 +346,12 @@ template<typename Alloc >

Constructs a string reference from a std::basic_string object.

-

Definition at line 376 of file core.h.

+

Definition at line 376 of file core.h.

Member Function Documentation

- -

◆ begin()

- +
@@ -341,7 +361,7 @@ template<typename Char>
- + @@ -354,13 +374,11 @@ template<typename Char>
iterator fmt::v5::basic_string_view< Char >::begin iterator fmt::v5::basic_string_view< Char >::begin ( ) const
-

Definition at line 391 of file core.h.

+

Definition at line 391 of file core.h.

- -

◆ compare()

- +
@@ -384,13 +402,11 @@ template<typename Char>
-

Definition at line 400 of file core.h.

+

Definition at line 400 of file core.h.

- -

◆ data()

- +
@@ -414,13 +430,11 @@ template<typename Char>

Returns a pointer to the string data.

-

Definition at line 386 of file core.h.

+

Definition at line 386 of file core.h.

- -

◆ end()

- +
@@ -430,7 +444,7 @@ template<typename Char>
- + @@ -443,13 +457,11 @@ template<typename Char>
iterator fmt::v5::basic_string_view< Char >::end iterator fmt::v5::basic_string_view< Char >::end ( ) const
-

Definition at line 392 of file core.h.

+

Definition at line 392 of file core.h.

- -

◆ remove_prefix()

- +
@@ -473,13 +485,11 @@ template<typename Char>
-

Definition at line 394 of file core.h.

+

Definition at line 394 of file core.h.

- -

◆ size()

- +
@@ -503,14 +513,12 @@ template<typename Char>

Returns the string size.

-

Definition at line 389 of file core.h.

+

Definition at line 389 of file core.h.

Friends And Related Function Documentation

- -

◆ operator!=

- +
@@ -544,13 +552,11 @@ template<typename Char>
-

Definition at line 411 of file core.h.

+

Definition at line 411 of file core.h.

- -

◆ operator<

- +
@@ -584,13 +590,11 @@ template<typename Char>
-

Definition at line 414 of file core.h.

+

Definition at line 414 of file core.h.

- -

◆ operator<=

- +
@@ -624,13 +628,11 @@ template<typename Char>
-

Definition at line 417 of file core.h.

+

Definition at line 417 of file core.h.

- -

◆ operator==

- +
@@ -664,13 +666,11 @@ template<typename Char>
-

Definition at line 408 of file core.h.

+

Definition at line 408 of file core.h.

- -

◆ operator>

- +
@@ -704,13 +704,11 @@ template<typename Char>
-

Definition at line 420 of file core.h.

+

Definition at line 420 of file core.h.

- -

◆ operator>=

- +
@@ -744,26 +742,7 @@ template<typename Char>
-

Definition at line 423 of file core.h.

- -
-
-

Member Data Documentation

- -

◆ iterator

- -
-
-
-template<typename Char>
- - - - -
const typedef Char* fmt::v5::basic_string_view< Char >::iterator
-
- -

Definition at line 357 of file core.h.

+

Definition at line 423 of file core.h.

@@ -778,7 +757,7 @@ template<typename Char> + doxygen 1.8.11 diff --git a/docs/classfmt_1_1v5_1_1basic__string__view.js b/docs/classfmt_1_1v5_1_1basic__string__view.js index fa31ddb..57b7e95 100644 --- a/docs/classfmt_1_1v5_1_1basic__string__view.js +++ b/docs/classfmt_1_1v5_1_1basic__string__view.js @@ -1,21 +1,21 @@ var classfmt_1_1v5_1_1basic__string__view = [ [ "char_type", "classfmt_1_1v5_1_1basic__string__view.html#a7dd9c65338332c1e3beb611a7ab883e5", null ], + [ "iterator", "classfmt_1_1v5_1_1basic__string__view.html#a905e99019eff225d448868d9470dac4c", null ], [ "basic_string_view", "classfmt_1_1v5_1_1basic__string__view.html#af700667b227e1aa54fa10e5536f0dd60", null ], [ "basic_string_view", "classfmt_1_1v5_1_1basic__string__view.html#a9a52d640307af79b979b7f29d18f8f34", null ], [ "basic_string_view", "classfmt_1_1v5_1_1basic__string__view.html#ab45c1b7cf97a9d4b7d6290ab374df761", null ], [ "basic_string_view", "classfmt_1_1v5_1_1basic__string__view.html#a796a7a1089f143f40585a5604983bb68", null ], - [ "begin", "classfmt_1_1v5_1_1basic__string__view.html#af73f0e919e28f3c38245937887268bc2", null ], - [ "compare", "classfmt_1_1v5_1_1basic__string__view.html#a4e8a2b1d8a6a749c17b43a8f4dbc09c1", null ], - [ "data", "classfmt_1_1v5_1_1basic__string__view.html#a517e9e8fc58c52c7816fa647d5e69f9f", null ], - [ "end", "classfmt_1_1v5_1_1basic__string__view.html#afa63ef5e96803f21d21cf1ac0dfee391", null ], + [ "begin", "classfmt_1_1v5_1_1basic__string__view.html#a9d2ad6e48514367b0488f13e29d83960", null ], + [ "compare", "classfmt_1_1v5_1_1basic__string__view.html#a05f3fefc64551430ad3b4c6a76888a8e", null ], + [ "data", "classfmt_1_1v5_1_1basic__string__view.html#a1c012c5a39edc6e7119593a256586021", null ], + [ "end", "classfmt_1_1v5_1_1basic__string__view.html#a1d441ad98566cd1366f4ca348efacf22", null ], [ "remove_prefix", "classfmt_1_1v5_1_1basic__string__view.html#a6fed916b8264a1f8c2d69359062b00aa", null ], - [ "size", "classfmt_1_1v5_1_1basic__string__view.html#abd82d74b110d5d4f52e0282e4d11fc99", null ], + [ "size", "classfmt_1_1v5_1_1basic__string__view.html#a41d96672c9f5ce8d0709ab321894765e", null ], [ "operator!=", "classfmt_1_1v5_1_1basic__string__view.html#a5ceb2a1bfa175c69d7bfda735e901d73", null ], [ "operator<", "classfmt_1_1v5_1_1basic__string__view.html#a0e53f2258bbcde6cc8426b0a0755029b", null ], [ "operator<=", "classfmt_1_1v5_1_1basic__string__view.html#a9b92d9c7a937c6945253fd8adfba7803", null ], [ "operator==", "classfmt_1_1v5_1_1basic__string__view.html#abbcc283ebd35db4ae2d5365a0861a2e2", null ], [ "operator>", "classfmt_1_1v5_1_1basic__string__view.html#a78b8913fe704e33269d9baa6f310b9b8", null ], - [ "operator>=", "classfmt_1_1v5_1_1basic__string__view.html#a13611d21d36e30193ebaf50463cbe75e", null ], - [ "iterator", "classfmt_1_1v5_1_1basic__string__view.html#a94a80af77c23dfa6236fbfec90d240ff", null ] + [ "operator>=", "classfmt_1_1v5_1_1basic__string__view.html#a13611d21d36e30193ebaf50463cbe75e", null ] ]; \ No newline at end of file diff --git a/docs/classfmt_1_1v5_1_1basic__writer-members.html b/docs/classfmt_1_1v5_1_1basic__writer-members.html index a54e7dd..ad7851d 100644 --- a/docs/classfmt_1_1v5_1_1basic__writer-members.html +++ b/docs/classfmt_1_1v5_1_1basic__writer-members.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Member List @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -99,14 +119,14 @@ $(document).ready(function(){initNavTree('classfmt_1_1v5_1_1basic__writer.html', format_specs typedeffmt::v5::basic_writer< Range > internal::arg_formatter_base classfmt::v5::basic_writer< Range >friend iteratorfmt::v5::basic_writer< Range > - out() constfmt::v5::basic_writer< Range >inline + out() const fmt::v5::basic_writer< Range >inline write(int value)fmt::v5::basic_writer< Range >inline write(long value)fmt::v5::basic_writer< Range >inline write(long long value)fmt::v5::basic_writer< Range >inline write(unsigned value)fmt::v5::basic_writer< Range >inline write(unsigned long value)fmt::v5::basic_writer< Range >inline write(unsigned long long value)fmt::v5::basic_writer< Range >inline - write(T value, FormatSpec spec, FormatSpecs... specs)fmt::v5::basic_writer< Range >inline + write(T value, FormatSpec spec, FormatSpecs...specs)fmt::v5::basic_writer< Range >inline write(double value)fmt::v5::basic_writer< Range >inline write(long double value)fmt::v5::basic_writer< Range >inline write(char value)fmt::v5::basic_writer< Range >inline @@ -123,7 +143,7 @@ $(document).ready(function(){initNavTree('classfmt_1_1v5_1_1basic__writer.html',
    + doxygen 1.8.11
diff --git a/docs/classfmt_1_1v5_1_1basic__writer.html b/docs/classfmt_1_1v5_1_1basic__writer.html index 432a484..bc42e0a 100644 --- a/docs/classfmt_1_1v5_1_1basic__writer.html +++ b/docs/classfmt_1_1v5_1_1basic__writer.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: fmt::v5::basic_writer< Range > Class Template Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -110,10 +130,10 @@ Public Types - + - - + + @@ -126,9 +146,9 @@ Public Member Functions - - - + + + @@ -168,15 +188,13 @@ class fmt::v5::basic_writer< Range >

This template provides operations for formatting and writing data into a character range.

-

Definition at line 330 of file format.h.

+

Definition at line 330 of file format.h.

Member Typedef Documentation

- -

◆ char_type

- +
-template<typename Range >
+template<typename Range>

Public Member Functions

 basic_writer (Range out, internal::locale_ref loc=internal::locale_ref())
 basic_writer (Range out, internal::locale_ref loc=internal::locale_ref())
 
iterator out () const
 
iterator out () const
 
void write (int value)
 
void write (long value)
 
void write (unsigned long long value)
 
template<typename T , typename FormatSpec , typename... FormatSpecs>
std::enable_if< std::is_integral< T >::value, void >::type write (T value, FormatSpec spec, FormatSpecs... specs)
 
template<typename T , typename FormatSpec , typename... FormatSpecs>
std::enable_if< std::is_integral< T >::value, void >::type write (T value, FormatSpec spec, FormatSpecs...specs)
 
void write (double value)
 
void write (long double value)
@@ -184,17 +202,15 @@ template<typename Range >
typedef Range::value_type fmt::v5::basic_writer< Range >::char_type
-

Definition at line 2261 of file format.h.

+

Definition at line 2261 of file format.h.

- -

◆ format_specs

- +
-template<typename Range >
+template<typename Range>
@@ -202,18 +218,16 @@ template<typename Range >
typedef basic_format_specs<char_type> fmt::v5::basic_writer< Range >::format_specs
-

Definition at line 2263 of file format.h.

+

Definition at line 2263 of file format.h.

Constructor & Destructor Documentation

- -

◆ basic_writer()

- +
-template<typename Range >
+template<typename Range>
+ + +
@@ -244,18 +258,16 @@ template<typename Range >

Constructs a basic_writer object.

-

Definition at line 2567 of file format.h.

+

Definition at line 2567 of file format.h.

Member Function Documentation

- -

◆ out()

- +
-template<typename Range >
+template<typename Range>
@@ -274,19 +286,15 @@ template<typename Range >
-

Definition at line 2571 of file format.h.

+

Definition at line 2571 of file format.h.

- -

◆ write() [1/16]

- +
-template<typename Range >
-
-template<typename Char >
+template<typename Range>
- - + + + + +
@@ -294,14 +302,190 @@ template<typename Char >
void fmt::v5::basic_writer< Range >::write (basic_string_view< Char > s, int value)
+
+inline
+
+ +

Definition at line 2573 of file format.h.

+ +
+ + +
+
+
+template<typename Range>
+ + + + + +
+ + + + + + + + +
void fmt::v5::basic_writer< Range >::write (long value)
+
+inline
+
+ +

Definition at line 2574 of file format.h.

+ +
+
+ +
+
+
+template<typename Range>
+ + + + + +
+ + + + + + + + +
void fmt::v5::basic_writer< Range >::write (long long value)
+
+inline
+
+ +

Definition at line 2575 of file format.h.

+ +
+
+ +
+
+
+template<typename Range>
+ + + + + +
+ + + + + + + + +
void fmt::v5::basic_writer< Range >::write (unsigned value)
+
+inline
+
+ +

Definition at line 2577 of file format.h.

+ +
+
+ +
+
+
+template<typename Range>
+ + + + + +
+ + + + + + + + +
void fmt::v5::basic_writer< Range >::write (unsigned long value)
+
+inline
+
+ +

Definition at line 2578 of file format.h.

+ +
+
+ +
+
+
+template<typename Range>
+ + + + + +
+ + + + + + + + +
void fmt::v5::basic_writer< Range >::write (unsigned long long value)
+
+inline
+
+ +

Definition at line 2579 of file format.h.

+ +
+
+ +
+
+
+template<typename Range>
+
+template<typename T , typename FormatSpec , typename... FormatSpecs>
+ + + - - + + - +
+ + + + + + - - + + + + + + + + @@ -315,18 +499,74 @@ template<typename Char >
std::enable_if<std::is_integral<T>::value, void>::type fmt::v5::basic_writer< Range >::write (value,
const format_specsspec = format_specs() FormatSpec spec,
FormatSpecs... specs 
+

Formats value and writes it to the buffer.

-

Definition at line 2639 of file format.h.

+

Definition at line 2588 of file format.h.

- -

◆ write() [2/16]

- +
-template<typename Range >
+template<typename Range>
+ + + + + +
+ + + + + + + + +
void fmt::v5::basic_writer< Range >::write (double value)
+
+inline
+
+ +

Definition at line 2594 of file format.h.

+ +
+ + +
+
+
+template<typename Range>
+ + + + + +
+ + + + + + + + +
void fmt::v5::basic_writer< Range >::write (long double value)
+
+inline
+
+

Formats value using the general format for floating-point numbers ('g') and writes it to the buffer.

+ +

Definition at line 2604 of file format.h.

+ +
+
+ +
+
+
+template<typename Range>
@@ -39,22 +41,42 @@
@@ -347,17 +587,100 @@ template<typename Range >

Writes a character to the buffer.

-

Definition at line 2609 of file format.h.

+

Definition at line 2609 of file format.h.

- -

◆ write() [3/16]

- +
-template<typename Range >
+template<typename Range>
+ + + + + +
+ + + + + + + + +
void fmt::v5::basic_writer< Range >::write (wchar_t value)
+
+inline
+
+ +

Definition at line 2612 of file format.h.

+ +
+ + +
+
+
+template<typename Range>
+ + + + + +
+ + + + + + + + +
void fmt::v5::basic_writer< Range >::write (string_view value)
+
+inline
+
+

Writes value to the buffer.

+ +

Definition at line 2622 of file format.h.

+ +
+
+ +
+
+
+template<typename Range>
+ + + + + +
+ + + + + + + + +
void fmt::v5::basic_writer< Range >::write (wstring_view value)
+
+inline
+
+ +

Definition at line 2626 of file format.h.

+ +
+
+ +
+
+
+template<typename Range>
template<typename Char >
@@ -395,17 +718,55 @@ template<typename Char >
-

Definition at line 2634 of file format.h.

+

Definition at line 2634 of file format.h.

- -

◆ write() [4/16]

- +
-template<typename Range >
+template<typename Range>
+
+template<typename Char >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void fmt::v5::basic_writer< Range >::write (basic_string_view< Char > s,
const format_specsspec = format_specs() 
)
+
+inline
+
+ +

Definition at line 2639 of file format.h.

+ +
+ + +
+
+
+template<typename Range>
template<typename T >
@@ -427,399 +788,16 @@ template<typename T >
-

Definition at line 2650 of file format.h.

- -
-
- -

◆ write() [5/16]

- -
-
-
-template<typename Range >
- - - - - -
- - - - - - - - -
void fmt::v5::basic_writer< Range >::write (double value)
-
-inline
-
- -

Definition at line 2594 of file format.h.

- -
-
- -

◆ write() [6/16]

- -
-
-
-template<typename Range >
- - - - - -
- - - - - - - - -
void fmt::v5::basic_writer< Range >::write (int value)
-
-inline
-
- -

Definition at line 2573 of file format.h.

- -
-
- -

◆ write() [7/16]

- -
-
-
-template<typename Range >
- - - - - -
- - - - - - - - -
void fmt::v5::basic_writer< Range >::write (long double value)
-
-inline
-
-

\rst Formats value using the general format for floating-point numbers ('g') and writes it to the buffer. \endrst

- -

Definition at line 2604 of file format.h.

- -
-
- -

◆ write() [8/16]

- -
-
-
-template<typename Range >
- - - - - -
- - - - - - - - -
void fmt::v5::basic_writer< Range >::write (long long value)
-
-inline
-
- -

Definition at line 2575 of file format.h.

- -
-
- -

◆ write() [9/16]

- -
-
-
-template<typename Range >
- - - - - -
- - - - - - - - -
void fmt::v5::basic_writer< Range >::write (long value)
-
-inline
-
- -

Definition at line 2574 of file format.h.

- -
-
- -

◆ write() [10/16]

- -
-
-
-template<typename Range >
- - - - - -
- - - - - - - - -
void fmt::v5::basic_writer< Range >::write (string_view value)
-
-inline
-
-

\rst Writes value to the buffer. \endrst

- -

Definition at line 2622 of file format.h.

- -
-
- -

◆ write() [11/16]

- -
-
-
-template<typename Range >
-
-template<typename T , typename FormatSpec , typename... FormatSpecs>
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
std::enable_if<std::is_integral<T>::value, void>::type fmt::v5::basic_writer< Range >::write (value,
FormatSpec spec,
FormatSpecs... specs 
)
-
-inline
-
-

\rst Formats value and writes it to the buffer. \endrst

- -

Definition at line 2588 of file format.h.

- -
-
- -

◆ write() [12/16]

- -
-
-
-template<typename Range >
- - - - - -
- - - - - - - - -
void fmt::v5::basic_writer< Range >::write (unsigned long long value)
-
-inline
-
- -

Definition at line 2579 of file format.h.

- -
-
- -

◆ write() [13/16]

- -
-
-
-template<typename Range >
- - - - - -
- - - - - - - - -
void fmt::v5::basic_writer< Range >::write (unsigned long value)
-
-inline
-
- -

Definition at line 2578 of file format.h.

- -
-
- -

◆ write() [14/16]

- -
-
-
-template<typename Range >
- - - - - -
- - - - - - - - -
void fmt::v5::basic_writer< Range >::write (unsigned value)
-
-inline
-
- -

Definition at line 2577 of file format.h.

- -
-
- -

◆ write() [15/16]

- -
-
-
-template<typename Range >
- - - - - -
- - - - - - - - -
void fmt::v5::basic_writer< Range >::write (wchar_t value)
-
-inline
-
- -

Definition at line 2612 of file format.h.

- -
-
- -

◆ write() [16/16]

- -
-
-
-template<typename Range >
- - - - - -
- - - - - - - - -
void fmt::v5::basic_writer< Range >::write (wstring_view value)
-
-inline
-
- -

Definition at line 2626 of file format.h.

+

Definition at line 2650 of file format.h.

Friends And Related Function Documentation

- -

◆ internal::arg_formatter_base

- +
-template<typename Range >
+template<typename Range>
template<typename Char >
@@ -837,18 +815,16 @@ template<typename Char >
-

Definition at line 2563 of file format.h.

+

Definition at line 2563 of file format.h.

Member Data Documentation

- -

◆ iterator

- +
-template<typename Range >
+template<typename Range>
@@ -856,7 +832,7 @@ template<typename Range >
decltype(internal::declval<Range>().begin()) typedef fmt::v5::basic_writer< Range >::iterator
-

Definition at line 2262 of file format.h.

+

Definition at line 2262 of file format.h.

@@ -871,7 +847,7 @@ template<typename Range > + doxygen 1.8.11 diff --git a/docs/classfmt_1_1v5_1_1basic__writer.js b/docs/classfmt_1_1v5_1_1basic__writer.js index 6b4da37..e0ba9c2 100644 --- a/docs/classfmt_1_1v5_1_1basic__writer.js +++ b/docs/classfmt_1_1v5_1_1basic__writer.js @@ -3,23 +3,23 @@ var classfmt_1_1v5_1_1basic__writer = [ "char_type", "classfmt_1_1v5_1_1basic__writer.html#ad0ee54da443751f74466a16b033ab9f6", null ], [ "format_specs", "classfmt_1_1v5_1_1basic__writer.html#a3f7028a8ecb2404fe0ab2e53f1ac482b", null ], [ "basic_writer", "classfmt_1_1v5_1_1basic__writer.html#aeb6a206671e6d416a4696343e940ea33", null ], - [ "out", "classfmt_1_1v5_1_1basic__writer.html#a0bad6b95b096ed85f9db16c66c72bec9", null ], - [ "write", "classfmt_1_1v5_1_1basic__writer.html#ac77932fff8ec776f47d747a5393239b1", null ], - [ "write", "classfmt_1_1v5_1_1basic__writer.html#af29d4c9940dfcbd4181291395855b665", null ], - [ "write", "classfmt_1_1v5_1_1basic__writer.html#a4e295df91ec1c12fd786d17e905442de", null ], - [ "write", "classfmt_1_1v5_1_1basic__writer.html#af308c665441c50a867bec1c17cd8b423", null ], - [ "write", "classfmt_1_1v5_1_1basic__writer.html#a2e73d42a69cbb1a1e3135f5b38c33771", null ], + [ "out", "classfmt_1_1v5_1_1basic__writer.html#a7518865de3941e306dac2a805675b475", null ], [ "write", "classfmt_1_1v5_1_1basic__writer.html#a531918e4cf5995d2c14785b3eb1f9699", null ], - [ "write", "classfmt_1_1v5_1_1basic__writer.html#a01693cb5eb4849919d29bd0889c9adf3", null ], - [ "write", "classfmt_1_1v5_1_1basic__writer.html#a2b226f9d7fca502facb0b9c0f6eb7919", null ], [ "write", "classfmt_1_1v5_1_1basic__writer.html#a6207aead371c0ab533bc6c012caa7fec", null ], - [ "write", "classfmt_1_1v5_1_1basic__writer.html#aad7bbd01a1c5e145908071abf1227283", null ], - [ "write", "classfmt_1_1v5_1_1basic__writer.html#a2bd6f8f5af3c564886cfde5b15fc8f69", null ], - [ "write", "classfmt_1_1v5_1_1basic__writer.html#a968d531596194200346fda2e3211e3c8", null ], - [ "write", "classfmt_1_1v5_1_1basic__writer.html#affe641b73605f9fe7f05c63f375fa8ae", null ], + [ "write", "classfmt_1_1v5_1_1basic__writer.html#a2b226f9d7fca502facb0b9c0f6eb7919", null ], [ "write", "classfmt_1_1v5_1_1basic__writer.html#aa9a5f9e678e19930ede5a1dfad1ebe93", null ], + [ "write", "classfmt_1_1v5_1_1basic__writer.html#affe641b73605f9fe7f05c63f375fa8ae", null ], + [ "write", "classfmt_1_1v5_1_1basic__writer.html#a968d531596194200346fda2e3211e3c8", null ], + [ "write", "classfmt_1_1v5_1_1basic__writer.html#a87b5f008bb29a796ac4476c697ee0e25", null ], + [ "write", "classfmt_1_1v5_1_1basic__writer.html#a2e73d42a69cbb1a1e3135f5b38c33771", null ], + [ "write", "classfmt_1_1v5_1_1basic__writer.html#a01693cb5eb4849919d29bd0889c9adf3", null ], + [ "write", "classfmt_1_1v5_1_1basic__writer.html#af29d4c9940dfcbd4181291395855b665", null ], [ "write", "classfmt_1_1v5_1_1basic__writer.html#a46caff7956407a227b4b553312f695ed", null ], + [ "write", "classfmt_1_1v5_1_1basic__writer.html#aad7bbd01a1c5e145908071abf1227283", null ], [ "write", "classfmt_1_1v5_1_1basic__writer.html#ad9b699ac00358e34697007c98a9fd063", null ], + [ "write", "classfmt_1_1v5_1_1basic__writer.html#a4e295df91ec1c12fd786d17e905442de", null ], + [ "write", "classfmt_1_1v5_1_1basic__writer.html#ac77932fff8ec776f47d747a5393239b1", null ], + [ "write", "classfmt_1_1v5_1_1basic__writer.html#af308c665441c50a867bec1c17cd8b423", null ], [ "internal::arg_formatter_base", "classfmt_1_1v5_1_1basic__writer.html#a12c04f5659906e93c2418a4eb6358bd2", null ], [ "iterator", "classfmt_1_1v5_1_1basic__writer.html#a22d41003c543a4de0c8052ee8f50bd92", null ] ]; \ No newline at end of file diff --git a/docs/classfmt_1_1v5_1_1buffered__file-members.html b/docs/classfmt_1_1v5_1_1buffered__file-members.html index dbd2976..f8b5707 100644 --- a/docs/classfmt_1_1v5_1_1buffered__file-members.html +++ b/docs/classfmt_1_1v5_1_1buffered__file-members.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Member List @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@
Livox SDK API -  V2.0.0 +  V2.1.0
- + - - - - + +
@@ -99,10 +119,10 @@ $(document).ready(function(){initNavTree('classfmt_1_1v5_1_1buffered__file.html'
buffered_file(cstring_view filename, cstring_view mode)fmt::v5::buffered_file
close()fmt::v5::buffered_file
file classfmt::v5::buffered_filefriend
fileno() constfmt::v5::buffered_file
get() constfmt::v5::buffered_fileinline
fileno() const fmt::v5::buffered_file
get() const fmt::v5::buffered_fileinline
operator=(buffered_file &&other)fmt::v5::buffered_fileinline
print(string_view format_str, const Args &... args)fmt::v5::buffered_fileinline
print(string_view format_str, const Args &...args)fmt::v5::buffered_fileinline
vprint(string_view format_str, format_args args)fmt::v5::buffered_fileinline
~buffered_file()fmt::v5::buffered_file
@@ -112,7 +132,7 @@ $(document).ready(function(){initNavTree('classfmt_1_1v5_1_1buffered__file.html'
    + doxygen 1.8.11
diff --git a/docs/classfmt_1_1v5_1_1buffered__file.html b/docs/classfmt_1_1v5_1_1buffered__file.html index 42bf0bd..3b09474 100644 --- a/docs/classfmt_1_1v5_1_1buffered__file.html +++ b/docs/classfmt_1_1v5_1_1buffered__file.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: fmt::v5::buffered_file Class Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -112,15 +132,15 @@ Public Member Functions   void close ()   -FILE * get () const throw () -  -int() fileno () const -  +FILE * get () const throw () +  +int() fileno () const +  void vprint (string_view format_str, format_args args)   -template<typename... Args> -void print (string_view format_str, const Args &... args) -  +template<typename... Args> +void print (string_view format_str, const Args &...args) +  @@ -129,11 +149,9 @@ Friends

Friends

Detailed Description

-

Definition at line 127 of file posix.h.

+

Definition at line 127 of file posix.h.

Constructor & Destructor Documentation

- -

◆ buffered_file() [1/3]

- +
@@ -160,13 +178,11 @@ Friends
-

Definition at line 137 of file posix.h.

+

Definition at line 137 of file posix.h.

- -

◆ ~buffered_file()

- +
@@ -187,9 +203,7 @@ Friends - -

◆ buffered_file() [2/3]

- +
@@ -217,13 +231,11 @@ Friends
-

Definition at line 148 of file posix.h.

+

Definition at line 148 of file posix.h.

- -

◆ buffered_file() [3/3]

- +
@@ -250,9 +262,7 @@ Friends

Member Function Documentation

- -

◆ close()

- +
@@ -267,9 +277,7 @@ Friends - -

◆ fileno()

- +
@@ -284,9 +292,7 @@ Friends - -

◆ get()

- +
@@ -313,13 +319,11 @@ Friends
-

Definition at line 166 of file posix.h.

+

Definition at line 166 of file posix.h.

- -

◆ operator=()

- +
@@ -341,13 +345,11 @@ Friends
-

Definition at line 152 of file posix.h.

+

Definition at line 152 of file posix.h.

- -

◆ print()

- +
@@ -381,13 +383,11 @@ template<typename... Args>
-

Definition at line 177 of file posix.h.

+

Definition at line 177 of file posix.h.

- -

◆ vprint()

- +
@@ -419,14 +419,12 @@ template<typename... Args>
-

Definition at line 172 of file posix.h.

+

Definition at line 172 of file posix.h.

Friends And Related Function Documentation

- -

◆ file

- +
@@ -444,7 +442,7 @@ template<typename... Args>
-

Definition at line 131 of file posix.h.

+

Definition at line 131 of file posix.h.

@@ -459,7 +457,7 @@ template<typename... Args>
+ doxygen 1.8.11 diff --git a/docs/classfmt_1_1v5_1_1buffered__file.js b/docs/classfmt_1_1v5_1_1buffered__file.js index 6b99384..4702646 100644 --- a/docs/classfmt_1_1v5_1_1buffered__file.js +++ b/docs/classfmt_1_1v5_1_1buffered__file.js @@ -5,10 +5,10 @@ var classfmt_1_1v5_1_1buffered__file = [ "buffered_file", "classfmt_1_1v5_1_1buffered__file.html#a89aed138335acd38e0dc1a1618b6b52c", null ], [ "buffered_file", "classfmt_1_1v5_1_1buffered__file.html#a9acebcee0bfc79cd3b49b12c2db0b2ee", null ], [ "close", "classfmt_1_1v5_1_1buffered__file.html#a884ec99b9150cee0ead3c62613befe04", null ], - [ "fileno", "classfmt_1_1v5_1_1buffered__file.html#a14ef73faa397ecb015418d1c3635e6f5", null ], - [ "get", "classfmt_1_1v5_1_1buffered__file.html#abbd16863df6a504cceb14db716ac0573", null ], + [ "fileno", "classfmt_1_1v5_1_1buffered__file.html#a1339bcbbbe440bc77b540ec23b1c81cb", null ], + [ "get", "classfmt_1_1v5_1_1buffered__file.html#ada1725c377b281a4cc810a4271d7fade", null ], [ "operator=", "classfmt_1_1v5_1_1buffered__file.html#a74bd895df8fc7612ed57b267272d0d6e", null ], - [ "print", "classfmt_1_1v5_1_1buffered__file.html#a52e4076f24c9a64080ef4828329c1cad", null ], + [ "print", "classfmt_1_1v5_1_1buffered__file.html#a3752d877e7c2efd04a2290ae8d852ca5", null ], [ "vprint", "classfmt_1_1v5_1_1buffered__file.html#ae90c624636ac4919eb5c8a38e6393315", null ], [ "file", "classfmt_1_1v5_1_1buffered__file.html#a686a90482e62dd1618201a3c79f9aae6", null ] ]; \ No newline at end of file diff --git a/docs/classfmt_1_1v5_1_1dynamic__formatter-members.html b/docs/classfmt_1_1v5_1_1dynamic__formatter-members.html index 2f7f83b..17779ef 100644 --- a/docs/classfmt_1_1v5_1_1dynamic__formatter-members.html +++ b/docs/classfmt_1_1v5_1_1dynamic__formatter-members.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Member List @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -103,7 +123,7 @@ $(document).ready(function(){initNavTree('classfmt_1_1v5_1_1dynamic__formatter.h
    + doxygen 1.8.11
diff --git a/docs/classfmt_1_1v5_1_1dynamic__formatter.html b/docs/classfmt_1_1v5_1_1dynamic__formatter.html index 0747e8e..a50df85 100644 --- a/docs/classfmt_1_1v5_1_1dynamic__formatter.html +++ b/docs/classfmt_1_1v5_1_1dynamic__formatter.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: fmt::v5::dynamic_formatter< Char > Class Template Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -112,11 +132,9 @@ Public Member Functions class fmt::v5::dynamic_formatter< Char > -

Definition at line 3004 of file format.h.

+

Definition at line 3004 of file format.h.

Member Function Documentation

- -

◆ format()

- +
@@ -152,13 +170,11 @@ template<typename T , typename FormatContext >
-

Definition at line 3023 of file format.h.

+

Definition at line 3023 of file format.h.

- -

◆ parse()

- +
@@ -184,7 +200,7 @@ template<typename ParseContext >
-

Definition at line 3016 of file format.h.

+

Definition at line 3016 of file format.h.

@@ -199,7 +215,7 @@ template<typename ParseContext > + doxygen 1.8.11 diff --git a/docs/classfmt_1_1v5_1_1error__code-members.html b/docs/classfmt_1_1v5_1_1error__code-members.html index 609e1a4..24f374a 100644 --- a/docs/classfmt_1_1v5_1_1error__code-members.html +++ b/docs/classfmt_1_1v5_1_1error__code-members.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Member List @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -95,7 +115,7 @@ $(document).ready(function(){initNavTree('classfmt_1_1v5_1_1error__code.html',''

This is the complete list of members for fmt::v5::error_code, including all inherited members.

- +
error_code(int value=0)fmt::v5::error_codeinlineexplicit
get() constfmt::v5::error_codeinline
get() const fmt::v5::error_codeinline
@@ -103,7 +123,7 @@ $(document).ready(function(){initNavTree('classfmt_1_1v5_1_1error__code.html',''
    + doxygen 1.8.11
diff --git a/docs/classfmt_1_1v5_1_1error__code.html b/docs/classfmt_1_1v5_1_1error__code.html index a2bbec1..7277474 100644 --- a/docs/classfmt_1_1v5_1_1error__code.html +++ b/docs/classfmt_1_1v5_1_1error__code.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: fmt::v5::error_code Class Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -101,16 +121,14 @@ $(document).ready(function(){initNavTree('classfmt_1_1v5_1_1error__code.html','' Public Member Functions  error_code (int value=0) throw ()   -int get () const throw () -  +int get () const throw () + 

Detailed Description

-

Definition at line 116 of file posix.h.

+

Definition at line 116 of file posix.h.

Constructor & Destructor Documentation

- -

◆ error_code()

- +
@@ -138,14 +156,12 @@ Public Member Functions
-

Definition at line 121 of file posix.h.

+

Definition at line 121 of file posix.h.

Member Function Documentation

- -

◆ get()

- +
@@ -172,7 +188,7 @@ Public Member Functions
-

Definition at line 123 of file posix.h.

+

Definition at line 123 of file posix.h.

@@ -187,7 +203,7 @@ Public Member Functions + doxygen 1.8.11
diff --git a/docs/classfmt_1_1v5_1_1error__code.js b/docs/classfmt_1_1v5_1_1error__code.js index 468dd53..a77ca73 100644 --- a/docs/classfmt_1_1v5_1_1error__code.js +++ b/docs/classfmt_1_1v5_1_1error__code.js @@ -1,5 +1,5 @@ var classfmt_1_1v5_1_1error__code = [ [ "error_code", "classfmt_1_1v5_1_1error__code.html#a71a509534cb2d3a5705c6812293dd7f8", null ], - [ "get", "classfmt_1_1v5_1_1error__code.html#acc9ac3c2c0c39549a085fa32d8ca2408", null ] + [ "get", "classfmt_1_1v5_1_1error__code.html#ad5e9afd0fb67174fe05df031f8e108a3", null ] ]; \ No newline at end of file diff --git a/docs/classfmt_1_1v5_1_1file-members.html b/docs/classfmt_1_1v5_1_1file-members.html index 45c234d..803f682 100644 --- a/docs/classfmt_1_1v5_1_1file-members.html +++ b/docs/classfmt_1_1v5_1_1file-members.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Member List @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -95,7 +115,7 @@ $(document).ready(function(){initNavTree('classfmt_1_1v5_1_1file.html','');});

This is the complete list of members for fmt::v5::file, including all inherited members.

- + @@ -108,7 +128,7 @@ $(document).ready(function(){initNavTree('classfmt_1_1v5_1_1file.html','');}); - + @@ -119,7 +139,7 @@ $(document).ready(function(){initNavTree('classfmt_1_1v5_1_1file.html','');});
    + doxygen 1.8.11
diff --git a/docs/classfmt_1_1v5_1_1file.html b/docs/classfmt_1_1v5_1_1file.html index 0a01b2e..29c5e45 100644 --- a/docs/classfmt_1_1v5_1_1file.html +++ b/docs/classfmt_1_1v5_1_1file.html @@ -1,10 +1,9 @@ - + - - +Livox SDK API: fmt::v5::file Class Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ @@ -39,22 +41,42 @@
close()fmt::v5::file
descriptor() constfmt::v5::fileinline
descriptor() const fmt::v5::fileinline
dup(int fd)fmt::v5::filestatic
dup2(int fd)fmt::v5::file
dup2(int fd, error_code &ec)fmt::v5::file
RDONLY enum valuefmt::v5::file
RDWR enum valuefmt::v5::file
read(void *buffer, std::size_t count)fmt::v5::file
size() constfmt::v5::file
size() const fmt::v5::file
write(const void *buffer, std::size_t count)fmt::v5::file
WRONLY enum valuefmt::v5::file
~file()fmt::v5::file
Livox SDK API -  V2.0.0 +  V2.1.0
- + - - - - + +
@@ -119,12 +139,12 @@ Public Member Functions    ~file () throw ()   -int descriptor () const throw () -  +int descriptor () const throw () +  void close ()   -long long size () const -  +long long size () const +  std::size_t read (void *buffer, std::size_t count)   std::size_t write (const void *buffer, std::size_t count) @@ -145,11 +165,9 @@ Static Public Member Functions

Detailed Description

-

Definition at line 188 of file posix.h.

+

Definition at line 188 of file posix.h.

Member Enumeration Documentation

- -

◆ anonymous enum

- +
@@ -159,19 +177,20 @@ Static Public Member Functions
- - - + + +
Enumerator
RDONLY 
WRONLY 
RDWR 
Enumerator
RDONLY  +
WRONLY  +
RDWR  +
-

Definition at line 197 of file posix.h.

+

Definition at line 197 of file posix.h.

Constructor & Destructor Documentation

- -

◆ file() [1/3]

- +
@@ -198,13 +217,11 @@ Static Public Member Functions
-

Definition at line 204 of file posix.h.

+

Definition at line 204 of file posix.h.

- -

◆ file() [2/3]

- +
@@ -230,9 +247,7 @@ Static Public Member Functions - -

◆ file() [3/3]

- +
@@ -260,13 +275,11 @@ Static Public Member Functions
-

Definition at line 214 of file posix.h.

+

Definition at line 214 of file posix.h.

- -

◆ ~file()

- +
@@ -288,9 +301,7 @@ Static Public Member Functions

Member Function Documentation

- -

◆ close()

- +
@@ -305,9 +316,7 @@ Static Public Member Functions - -

◆ descriptor()

- +
@@ -334,13 +343,11 @@ Static Public Member Functions
-

Definition at line 229 of file posix.h.

+

Definition at line 229 of file posix.h.

- -

◆ dup()

- +
@@ -364,9 +371,7 @@ Static Public Member Functions - -

◆ dup2() [1/2]

- +
@@ -382,9 +387,7 @@ Static Public Member Functions - -

◆ dup2() [2/2]

- +
@@ -416,9 +419,7 @@ Static Public Member Functions - -

◆ fdopen()

- +
@@ -434,9 +435,7 @@ Static Public Member Functions - -

◆ operator=()

- +
@@ -458,13 +457,11 @@ Static Public Member Functions
-

Definition at line 218 of file posix.h.

+

Definition at line 218 of file posix.h.

- -

◆ pipe()

- +
@@ -498,9 +495,7 @@ Static Public Member Functions - -

◆ read()

- +
@@ -526,9 +521,7 @@ Static Public Member Functions - -

◆ size()

- +
@@ -543,9 +536,7 @@ Static Public Member Functions - -

◆ write()

- +
@@ -582,7 +573,7 @@ Static Public Member Functions + doxygen 1.8.11 diff --git a/docs/classfmt_1_1v5_1_1file.js b/docs/classfmt_1_1v5_1_1file.js index fec57cd..c7372c0 100644 --- a/docs/classfmt_1_1v5_1_1file.js +++ b/docs/classfmt_1_1v5_1_1file.js @@ -8,7 +8,7 @@ var classfmt_1_1v5_1_1file = [ "file", "classfmt_1_1v5_1_1file.html#a7e1ec236bdb4eebe9c1dc948e811fbfd", null ], [ "~file", "classfmt_1_1v5_1_1file.html#a7b0a3efd73b28117b8ef62ad5981cf73", null ], [ "close", "classfmt_1_1v5_1_1file.html#ab3959bb606e2fd0349dcc3d61c12620d", null ], - [ "descriptor", "classfmt_1_1v5_1_1file.html#a75a2feb65318ccbbb04e36fc1eecf74a", null ], + [ "descriptor", "classfmt_1_1v5_1_1file.html#aad7046b9138f4789565d974b73cfef73", null ], [ "dup", "classfmt_1_1v5_1_1file.html#ab5d469c88f8a9e460ca0aaa9fa1d05f4", null ], [ "dup2", "classfmt_1_1v5_1_1file.html#a9585f4793f5036e19dafabd782858f9d", null ], [ "dup2", "classfmt_1_1v5_1_1file.html#a639739325a65165ec4fbb1a74b5f24df", null ], @@ -16,6 +16,6 @@ var classfmt_1_1v5_1_1file = [ "operator=", "classfmt_1_1v5_1_1file.html#ad3bb617d365c213a074264b39a2e1f46", null ], [ "pipe", "classfmt_1_1v5_1_1file.html#adec2f1ea78f1707216c7de02232d273e", null ], [ "read", "classfmt_1_1v5_1_1file.html#a37037657920e57b50756d59259cff494", null ], - [ "size", "classfmt_1_1v5_1_1file.html#a643bffe083c4a257b8752590c70a0539", null ], + [ "size", "classfmt_1_1v5_1_1file.html#a3d014eb7cb2e99206b7c421d36afbf19", null ], [ "write", "classfmt_1_1v5_1_1file.html#ac2eeefd58cc3b43a0b0bff4670af2f6f", null ] ]; \ No newline at end of file diff --git a/docs/classfmt_1_1v5_1_1format__arg__store-members.html b/docs/classfmt_1_1v5_1_1format__arg__store-members.html index 4ec7178..6fba900 100644 --- a/docs/classfmt_1_1v5_1_1format__arg__store-members.html +++ b/docs/classfmt_1_1v5_1_1format__arg__store-members.html @@ -1,10 +1,9 @@ - + - - +Livox SDK API: Member List @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ @@ -39,22 +41,42 @@
Livox SDK API -  V2.0.0 +  V2.1.0
- + - - - - + +
@@ -95,7 +115,7 @@ $(document).ready(function(){initNavTree('classfmt_1_1v5_1_1format__arg__store.h

This is the complete list of members for fmt::v5::format_arg_store< Context, Args >, including all inherited members.

- +
basic_format_args< Context > classfmt::v5::format_arg_store< Context, Args >friend
format_arg_store(const Args &... args)fmt::v5::format_arg_store< Context, Args >inline
format_arg_store(const Args &...args)fmt::v5::format_arg_store< Context, Args >inline
TYPESfmt::v5::format_arg_store< Context, Args >static
@@ -104,7 +124,7 @@ $(document).ready(function(){initNavTree('classfmt_1_1v5_1_1format__arg__store.h
    + doxygen 1.8.11
diff --git a/docs/classfmt_1_1v5_1_1format__arg__store.html b/docs/classfmt_1_1v5_1_1format__arg__store.html index 3bda3cb..391c26b 100644 --- a/docs/classfmt_1_1v5_1_1format__arg__store.html +++ b/docs/classfmt_1_1v5_1_1format__arg__store.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: fmt::v5::format_arg_store< Context, Args > Class Template Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -101,8 +121,8 @@ $(document).ready(function(){initNavTree('classfmt_1_1v5_1_1format__arg__store.h - - + +

Public Member Functions

 format_arg_store (const Args &... args)
 
 format_arg_store (const Args &...args)
 
@@ -115,20 +135,18 @@ Friends

Static Public Attributes

 

Detailed Description

-

template<typename Context, typename ... Args>
+

template<typename Context, typename... Args>
class fmt::v5::format_arg_store< Context, Args >

-

\rst An array of references to arguments. It can be implicitly converted into ~fmt::basic_format_args for passing into type-erased formatting functions such as ~fmtvformat. \endrst

+

An array of references to arguments. It can be implicitly converted into ~fmt::basic_format_args for passing into type-erased formatting functions such as ~fmtvformat.

-

Definition at line 1140 of file core.h.

+

Definition at line 1140 of file core.h.

Constructor & Destructor Documentation

- -

◆ format_arg_store()

- +
-template<typename Context, typename ... Args>
+template<typename Context, typename... Args>
@@ -148,18 +166,16 @@ template<typename Context, typename ... Args>
-

Definition at line 1179 of file core.h.

+

Definition at line 1179 of file core.h.

Friends And Related Function Documentation

- -

◆ basic_format_args< Context >

- +
-template<typename Context, typename ... Args>
+template<typename Context, typename... Args>
@@ -175,18 +191,16 @@ template<typename Context, typename ... Args>
-

Definition at line 1155 of file core.h.

+

Definition at line 1155 of file core.h.

Member Data Documentation

- -

◆ TYPES

- +
-template<typename Context, typename ... Args>
+template<typename Context, typename... Args>
@@ -201,10 +215,8 @@ template<typename Context, typename ... Args>
-Initial value:
=
-
get_types()
-
-

Definition at line 1167 of file core.h.

+Initial value:
=
get_types()
+

Definition at line 1167 of file core.h.

@@ -219,7 +231,7 @@ template<typename Context, typename ... Args> + doxygen 1.8.11 diff --git a/docs/classfmt_1_1v5_1_1format__arg__store.js b/docs/classfmt_1_1v5_1_1format__arg__store.js index c5925e7..1912c34 100644 --- a/docs/classfmt_1_1v5_1_1format__arg__store.js +++ b/docs/classfmt_1_1v5_1_1format__arg__store.js @@ -1,6 +1,6 @@ var classfmt_1_1v5_1_1format__arg__store = [ - [ "format_arg_store", "classfmt_1_1v5_1_1format__arg__store.html#a714a5df2ffda09f2133e4a0ca2b2f267", null ], + [ "format_arg_store", "classfmt_1_1v5_1_1format__arg__store.html#a0813da733aa70108180f1fd702b8f7ca", null ], [ "basic_format_args< Context >", "classfmt_1_1v5_1_1format__arg__store.html#ab8e9e33cc7b78829001a86ef6110ebb6", null ], [ "TYPES", "classfmt_1_1v5_1_1format__arg__store.html#aa3c5724940de9479c8a707ed802c792b", null ] ]; \ No newline at end of file diff --git a/docs/classfmt_1_1v5_1_1format__error-members.html b/docs/classfmt_1_1v5_1_1format__error-members.html index 3632a53..a07593f 100644 --- a/docs/classfmt_1_1v5_1_1format__error-members.html +++ b/docs/classfmt_1_1v5_1_1format__error-members.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Member List @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -103,7 +123,7 @@ $(document).ready(function(){initNavTree('classfmt_1_1v5_1_1format__error.html',
    + doxygen 1.8.11
diff --git a/docs/classfmt_1_1v5_1_1format__error.html b/docs/classfmt_1_1v5_1_1format__error.html index 2b3bce8..03f0d77 100644 --- a/docs/classfmt_1_1v5_1_1format__error.html +++ b/docs/classfmt_1_1v5_1_1format__error.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: fmt::v5::format_error Class Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -100,7 +120,9 @@ $(document).ready(function(){initNavTree('classfmt_1_1v5_1_1format__error.html', Inheritance diagram for fmt::v5::format_error:
- + + +

Detailed Description

A formatting error such as invalid format string.

-

Definition at line 365 of file format.h.

+

Definition at line 365 of file format.h.

Constructor & Destructor Documentation

- -

◆ format_error() [1/2]

- +

@@ -113,11 +135,9 @@ Public Member Functions

@@ -139,13 +159,11 @@ Public Member Functions
-

Definition at line 367 of file format.h.

+

Definition at line 367 of file format.h.

- -

◆ format_error() [2/2]

- +
@@ -167,7 +185,7 @@ Public Member Functions
-

Definition at line 370 of file format.h.

+

Definition at line 370 of file format.h.

@@ -182,7 +200,7 @@ Public Member Functions + doxygen 1.8.11 diff --git a/docs/classfmt_1_1v5_1_1format__int-members.html b/docs/classfmt_1_1v5_1_1format__int-members.html index 438bed5..c2bcfae 100644 --- a/docs/classfmt_1_1v5_1_1format__int-members.html +++ b/docs/classfmt_1_1v5_1_1format__int-members.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Member List @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -94,16 +114,16 @@ $(document).ready(function(){initNavTree('classfmt_1_1v5_1_1format__int.html',''

This is the complete list of members for fmt::v5::format_int, including all inherited members.

- - + + - - + +
c_str() constfmt::v5::format_intinline
data() constfmt::v5::format_intinline
c_str() const fmt::v5::format_intinline
data() const fmt::v5::format_intinline
format_int(int value)fmt::v5::format_intinlineexplicit
format_int(long value)fmt::v5::format_intinlineexplicit
format_int(long long value)fmt::v5::format_intinlineexplicit
format_int(unsigned value)fmt::v5::format_intinlineexplicit
format_int(unsigned long value)fmt::v5::format_intinlineexplicit
format_int(unsigned long long value)fmt::v5::format_intinlineexplicit
size() constfmt::v5::format_intinline
str() constfmt::v5::format_intinline
size() const fmt::v5::format_intinline
str() const fmt::v5::format_intinline
@@ -111,7 +131,7 @@ $(document).ready(function(){initNavTree('classfmt_1_1v5_1_1format__int.html',''
    + doxygen 1.8.11
diff --git a/docs/classfmt_1_1v5_1_1format__int.html b/docs/classfmt_1_1v5_1_1format__int.html index 61799f2..7de379d 100644 --- a/docs/classfmt_1_1v5_1_1format__int.html +++ b/docs/classfmt_1_1v5_1_1format__int.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: fmt::v5::format_int Class Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -111,23 +131,21 @@ Public Member Functions    format_int (unsigned long long value)   -std::size_t size () const -  -const char * data () const -  -const char * c_str () const -  -std::string str () const -  +std::size_t size () const +  +const char * data () const +  +const char * c_str () const +  +std::string str () const + 

Detailed Description

Fast integer formatter.

-

Definition at line 2813 of file format.h.

+

Definition at line 2813 of file format.h.

Constructor & Destructor Documentation

- -

◆ format_int() [1/6]

- +
@@ -149,13 +167,11 @@ Public Member Functions
-

Definition at line 2854 of file format.h.

+

Definition at line 2854 of file format.h.

- -

◆ format_int() [2/6]

- +
@@ -177,13 +193,11 @@ Public Member Functions
-

Definition at line 2855 of file format.h.

+

Definition at line 2855 of file format.h.

- -

◆ format_int() [3/6]

- +
@@ -205,13 +219,11 @@ Public Member Functions
-

Definition at line 2856 of file format.h.

+

Definition at line 2856 of file format.h.

- -

◆ format_int() [4/6]

- +
@@ -233,13 +245,11 @@ Public Member Functions
-

Definition at line 2857 of file format.h.

+

Definition at line 2857 of file format.h.

- -

◆ format_int() [5/6]

- +
@@ -261,13 +271,11 @@ Public Member Functions
-

Definition at line 2858 of file format.h.

+

Definition at line 2858 of file format.h.

- -

◆ format_int() [6/6]

- +
@@ -289,14 +297,12 @@ Public Member Functions
-

Definition at line 2859 of file format.h.

+

Definition at line 2859 of file format.h.

Member Function Documentation

- -

◆ c_str()

- +
@@ -318,13 +324,11 @@ Public Member Functions

Returns a pointer to the output buffer content with terminating null character appended.

-

Definition at line 2876 of file format.h.

+

Definition at line 2876 of file format.h.

- -

◆ data()

- +
@@ -346,13 +350,11 @@ Public Member Functions

Returns a pointer to the output buffer content. No terminating null character is appended.

-

Definition at line 2870 of file format.h.

+

Definition at line 2870 of file format.h.

- -

◆ size()

- +
@@ -374,13 +376,11 @@ Public Member Functions

Returns the number of characters written to the output buffer.

-

Definition at line 2862 of file format.h.

+

Definition at line 2862 of file format.h.

- -

◆ str()

- +
@@ -400,9 +400,9 @@ Public Member Functions
-

\rst Returns the content of the output buffer as an std::string. \endrst

+

Returns the content of the output buffer as an std::string.

-

Definition at line 2886 of file format.h.

+

Definition at line 2886 of file format.h.

@@ -417,7 +417,7 @@ Public Member Functions + doxygen 1.8.11
diff --git a/docs/classfmt_1_1v5_1_1format__int.js b/docs/classfmt_1_1v5_1_1format__int.js index 0a1218d..47d78f1 100644 --- a/docs/classfmt_1_1v5_1_1format__int.js +++ b/docs/classfmt_1_1v5_1_1format__int.js @@ -6,8 +6,8 @@ var classfmt_1_1v5_1_1format__int = [ "format_int", "classfmt_1_1v5_1_1format__int.html#a8b3e12db766aecc5de0a75285bbb2311", null ], [ "format_int", "classfmt_1_1v5_1_1format__int.html#a818044e240e597e65a6c33cb547e4397", null ], [ "format_int", "classfmt_1_1v5_1_1format__int.html#aec2635e33daf103e747a4f86bc050485", null ], - [ "c_str", "classfmt_1_1v5_1_1format__int.html#a4081316c3a2859d74be8aec0c614cfa4", null ], - [ "data", "classfmt_1_1v5_1_1format__int.html#afde6e35fd703a48b346c0dd969bd6b1c", null ], - [ "size", "classfmt_1_1v5_1_1format__int.html#abe5d90acec7245e6cd0c5d49b4e57f3e", null ], - [ "str", "classfmt_1_1v5_1_1format__int.html#a0266f0b79afac987c1cbdf41bc1a5413", null ] + [ "c_str", "classfmt_1_1v5_1_1format__int.html#a9f01a25ee05b646d7e328037d5d626a8", null ], + [ "data", "classfmt_1_1v5_1_1format__int.html#a077b2a99428ae2dc673a4e172004d640", null ], + [ "size", "classfmt_1_1v5_1_1format__int.html#aacef4cb4349a6bbdcaf5d2892899a05e", null ], + [ "str", "classfmt_1_1v5_1_1format__int.html#ab998b2c508dd2476a2c8d086689afceb", null ] ]; \ No newline at end of file diff --git a/docs/classfmt_1_1v5_1_1internal_1_1add__thousands__sep-members.html b/docs/classfmt_1_1v5_1_1internal_1_1add__thousands__sep-members.html index 0c904af..488ad8e 100644 --- a/docs/classfmt_1_1v5_1_1internal_1_1add__thousands__sep-members.html +++ b/docs/classfmt_1_1v5_1_1internal_1_1add__thousands__sep-members.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Member List @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -105,7 +125,7 @@ $(document).ready(function(){initNavTree('classfmt_1_1v5_1_1internal_1_1add__tho
    + doxygen 1.8.11
diff --git a/docs/classfmt_1_1v5_1_1internal_1_1add__thousands__sep.html b/docs/classfmt_1_1v5_1_1internal_1_1add__thousands__sep.html index 2292646..ae10ce9 100644 --- a/docs/classfmt_1_1v5_1_1internal_1_1add__thousands__sep.html +++ b/docs/classfmt_1_1v5_1_1internal_1_1add__thousands__sep.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: fmt::v5::internal::add_thousands_sep< Char > Class Template Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -118,11 +138,9 @@ Public Member Functions class fmt::v5::internal::add_thousands_sep< Char > -

Definition at line 917 of file format.h.

+

Definition at line 917 of file format.h.

Member Typedef Documentation

- -

◆ char_type

- +
@@ -134,14 +152,12 @@ template<typename Char >
-

Definition at line 925 of file format.h.

+

Definition at line 925 of file format.h.

Member Enumeration Documentation

- -

◆ anonymous enum

- +
@@ -153,17 +169,16 @@ template<typename Char >
- +
Enumerator
size 
Enumerator
size  +
-

Definition at line 938 of file format.h.

+

Definition at line 938 of file format.h.

Constructor & Destructor Documentation

- -

◆ add_thousands_sep()

- +
@@ -187,14 +202,12 @@ template<typename Char >
-

Definition at line 927 of file format.h.

+

Definition at line 927 of file format.h.

Member Function Documentation

- -

◆ operator()()

- +
@@ -218,7 +231,7 @@ template<typename Char >
-

Definition at line 930 of file format.h.

+

Definition at line 930 of file format.h.

@@ -233,7 +246,7 @@ template<typename Char > + doxygen 1.8.11 diff --git a/docs/classfmt_1_1v5_1_1internal_1_1arg__converter-members.html b/docs/classfmt_1_1v5_1_1internal_1_1arg__converter-members.html index 04ce954..33a1a86 100644 --- a/docs/classfmt_1_1v5_1_1internal_1_1arg__converter-members.html +++ b/docs/classfmt_1_1v5_1_1internal_1_1arg__converter-members.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Member List @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -105,7 +125,7 @@ $(document).ready(function(){initNavTree('classfmt_1_1v5_1_1internal_1_1arg__con
    + doxygen 1.8.11
diff --git a/docs/classfmt_1_1v5_1_1internal_1_1arg__converter.html b/docs/classfmt_1_1v5_1_1internal_1_1arg__converter.html index d0debc8..f6ff407 100644 --- a/docs/classfmt_1_1v5_1_1internal_1_1arg__converter.html +++ b/docs/classfmt_1_1v5_1_1internal_1_1arg__converter.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: fmt::v5::internal::arg_converter< T, Context > Class Template Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -101,10 +121,10 @@ Inheritance diagram for fmt::v5::internal::arg_converter< T, Context >:
- + fmt::v5::internal::function< void > - -
+ + @@ -124,11 +144,9 @@ Public Member Functions class fmt::v5::internal::arg_converter< T, Context > -

Definition at line 203 of file printf.h.

+

Definition at line 203 of file printf.h.

Constructor & Destructor Documentation

- -

◆ arg_converter()

- +
@@ -162,14 +180,12 @@ template<typename T , typename Context >

Public Member Functions

-

Definition at line 211 of file printf.h.

+

Definition at line 211 of file printf.h.

Member Function Documentation

- -

◆ operator()() [1/3]

- +
@@ -193,13 +209,11 @@ template<typename T , typename Context >
-

Definition at line 214 of file printf.h.

+

Definition at line 214 of file printf.h.

- -

◆ operator()() [2/3]

- +
@@ -225,13 +239,11 @@ template<typename U >
-

Definition at line 221 of file printf.h.

+

Definition at line 221 of file printf.h.

- -

◆ operator()() [3/3]

- +
@@ -257,7 +269,7 @@ template<typename U >
-

Definition at line 249 of file printf.h.

+

Definition at line 249 of file printf.h.

@@ -272,7 +284,7 @@ template<typename U > + doxygen 1.8.11 diff --git a/docs/classfmt_1_1v5_1_1internal_1_1arg__formatter__base-members.html b/docs/classfmt_1_1v5_1_1internal_1_1arg__formatter__base-members.html index 8ea63cc..022e12b 100644 --- a/docs/classfmt_1_1v5_1_1internal_1_1arg__formatter__base-members.html +++ b/docs/classfmt_1_1v5_1_1internal_1_1arg__formatter__base-members.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Member List @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -116,7 +136,7 @@ $(document).ready(function(){initNavTree('classfmt_1_1v5_1_1internal_1_1arg__for
    + doxygen 1.8.11
diff --git a/docs/classfmt_1_1v5_1_1internal_1_1arg__formatter__base.html b/docs/classfmt_1_1v5_1_1internal_1_1arg__formatter__base.html index 094931c..d443cdd 100644 --- a/docs/classfmt_1_1v5_1_1internal_1_1arg__formatter__base.html +++ b/docs/classfmt_1_1v5_1_1internal_1_1arg__formatter__base.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: fmt::v5::internal::arg_formatter_base< Range > Class Template Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -105,11 +125,11 @@ Inheritance diagram for fmt::v5::internal::arg_formatter_base< Range >:
- + fmt::v5::arg_formatter< Range > fmt::v5::printf_arg_formatter< Range > - -
+ + @@ -167,11 +187,9 @@ Protected Member Functions class fmt::v5::internal::arg_formatter_base< Range > -

Definition at line 1305 of file format.h.

+

Definition at line 1305 of file format.h.

Member Typedef Documentation

- -

◆ char_type

- +
@@ -183,13 +201,11 @@ template<typename Range >

Classes

-

Definition at line 1307 of file format.h.

+

Definition at line 1307 of file format.h.

- -

◆ format_specs

- +
@@ -201,14 +217,12 @@ template<typename Range >
-

Definition at line 1309 of file format.h.

+

Definition at line 1309 of file format.h.

Constructor & Destructor Documentation

- -

◆ arg_formatter_base()

- +
@@ -248,104 +262,12 @@ template<typename Range >
-

Definition at line 1359 of file format.h.

+

Definition at line 1359 of file format.h.

Member Function Documentation

- -

◆ operator()() [1/6]

- -
-
-
-template<typename Range >
- - - - - -
- - - - - - - - -
iterator fmt::v5::internal::arg_formatter_base< Range >::operator() (basic_string_view< char_typevalue)
-
-inline
-
- -

Definition at line 1427 of file format.h.

- -
-
- -

◆ operator()() [2/6]

- -
-
-
-template<typename Range >
- - - - - -
- - - - - - - - -
iterator fmt::v5::internal::arg_formatter_base< Range >::operator() (const char_typevalue)
-
-inline
-
- -

Definition at line 1420 of file format.h.

- -
-
- -

◆ operator()() [3/6]

- -
-
-
-template<typename Range >
- - - - - -
- - - - - - - - -
iterator fmt::v5::internal::arg_formatter_base< Range >::operator() (const void * value)
-
-inline
-
- -

Definition at line 1438 of file format.h.

- -
-
- -

◆ operator()() [4/6]

- +
@@ -369,13 +291,11 @@ template<typename Range >
-

Definition at line 1362 of file format.h.

+

Definition at line 1362 of file format.h.

- -

◆ operator()() [5/6]

- +
@@ -401,13 +321,11 @@ template<typename T >
-

Definition at line 1370 of file format.h.

+

Definition at line 1370 of file format.h.

- -

◆ operator()() [6/6]

- +
@@ -433,13 +351,95 @@ template<typename T >
-

Definition at line 1388 of file format.h.

+

Definition at line 1388 of file format.h.

- -

◆ out()

+ +
+
+
+template<typename Range >
+ + + + + +
+ + + + + + + + +
iterator fmt::v5::internal::arg_formatter_base< Range >::operator() (const char_typevalue)
+
+inline
+
+

Definition at line 1420 of file format.h.

+ +
+
+ +
+
+
+template<typename Range >
+ + + + + +
+ + + + + + + + +
iterator fmt::v5::internal::arg_formatter_base< Range >::operator() (basic_string_view< char_typevalue)
+
+inline
+
+ +

Definition at line 1427 of file format.h.

+ +
+
+ +
+
+
+template<typename Range >
+ + + + + +
+ + + + + + + + +
iterator fmt::v5::internal::arg_formatter_base< Range >::operator() (const void * value)
+
+inline
+
+ +

Definition at line 1438 of file format.h.

+ +
+
+
@@ -462,13 +462,11 @@ template<typename Range >
-

Definition at line 1343 of file format.h.

+

Definition at line 1343 of file format.h.

- -

◆ spec()

- +
@@ -491,13 +489,11 @@ template<typename Range >
-

Definition at line 1342 of file format.h.

+

Definition at line 1342 of file format.h.

- -

◆ write() [1/2]

- +
@@ -521,13 +517,11 @@ template<typename Range >
-

Definition at line 1345 of file format.h.

+

Definition at line 1345 of file format.h.

- -

◆ write() [2/2]

- +
@@ -551,13 +545,11 @@ template<typename Range >
-

Definition at line 1350 of file format.h.

+

Definition at line 1350 of file format.h.

- -

◆ writer()

- +
@@ -580,14 +572,12 @@ template<typename Range >
-

Definition at line 1341 of file format.h.

+

Definition at line 1341 of file format.h.

Member Data Documentation

- -

◆ iterator

- +
@@ -599,7 +589,7 @@ template<typename Range >
-

Definition at line 1308 of file format.h.

+

Definition at line 1308 of file format.h.

@@ -614,7 +604,7 @@ template<typename Range > + doxygen 1.8.11 diff --git a/docs/classfmt_1_1v5_1_1internal_1_1arg__formatter__base.js b/docs/classfmt_1_1v5_1_1internal_1_1arg__formatter__base.js index 6eddf58..e27d030 100644 --- a/docs/classfmt_1_1v5_1_1internal_1_1arg__formatter__base.js +++ b/docs/classfmt_1_1v5_1_1internal_1_1arg__formatter__base.js @@ -5,12 +5,12 @@ var classfmt_1_1v5_1_1internal_1_1arg__formatter__base = [ "char_type", "classfmt_1_1v5_1_1internal_1_1arg__formatter__base.html#a065412840bd7bab950a7f4df38fbc94b", null ], [ "format_specs", "classfmt_1_1v5_1_1internal_1_1arg__formatter__base.html#a96fbb5e2e9b9f98517f162b87b6bc738", null ], [ "arg_formatter_base", "classfmt_1_1v5_1_1internal_1_1arg__formatter__base.html#a1f09a08ddcb054ae0d7dec1e8183ec9a", null ], - [ "operator()", "classfmt_1_1v5_1_1internal_1_1arg__formatter__base.html#a59b215cea8bf6e89883b58c47d4f0d94", null ], - [ "operator()", "classfmt_1_1v5_1_1internal_1_1arg__formatter__base.html#ae20e743a85c240feefa62a82cb81d836", null ], - [ "operator()", "classfmt_1_1v5_1_1internal_1_1arg__formatter__base.html#a793d82c248d310c8b1bdf06b00a9bdf8", null ], [ "operator()", "classfmt_1_1v5_1_1internal_1_1arg__formatter__base.html#a8ae25aadcb11be0f632537d24bc3ba37", null ], [ "operator()", "classfmt_1_1v5_1_1internal_1_1arg__formatter__base.html#a05e90e22d2222c1c458d625f8559599a", null ], [ "operator()", "classfmt_1_1v5_1_1internal_1_1arg__formatter__base.html#a4c6d77344d1e2c8327965b544adb03fb", null ], + [ "operator()", "classfmt_1_1v5_1_1internal_1_1arg__formatter__base.html#ae20e743a85c240feefa62a82cb81d836", null ], + [ "operator()", "classfmt_1_1v5_1_1internal_1_1arg__formatter__base.html#a59b215cea8bf6e89883b58c47d4f0d94", null ], + [ "operator()", "classfmt_1_1v5_1_1internal_1_1arg__formatter__base.html#a793d82c248d310c8b1bdf06b00a9bdf8", null ], [ "out", "classfmt_1_1v5_1_1internal_1_1arg__formatter__base.html#a8890ae003e8b00eed900cd18d216cf48", null ], [ "spec", "classfmt_1_1v5_1_1internal_1_1arg__formatter__base.html#ab2e59146a8b73543a67737f28d7eb176", null ], [ "write", "classfmt_1_1v5_1_1internal_1_1arg__formatter__base.html#abdcd50b6b81f5f0071482f01b4f19945", null ], diff --git a/docs/classfmt_1_1v5_1_1internal_1_1arg__map-members.html b/docs/classfmt_1_1v5_1_1internal_1_1arg__map-members.html index 41a47dc..ff68752 100644 --- a/docs/classfmt_1_1v5_1_1internal_1_1arg__map-members.html +++ b/docs/classfmt_1_1v5_1_1internal_1_1arg__map-members.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Member List @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -95,7 +115,7 @@ $(document).ready(function(){initNavTree('classfmt_1_1v5_1_1internal_1_1arg__map

This is the complete list of members for fmt::v5::internal::arg_map< Context >, including all inherited members.

- +
arg_map()fmt::v5::internal::arg_map< Context >inline
find(basic_string_view< char_type > name) constfmt::v5::internal::arg_map< Context >inline
find(basic_string_view< char_type > name) const fmt::v5::internal::arg_map< Context >inline
init(const basic_format_args< Context > &args)fmt::v5::internal::arg_map< Context >
~arg_map()fmt::v5::internal::arg_map< Context >inline
@@ -105,7 +125,7 @@ $(document).ready(function(){initNavTree('classfmt_1_1v5_1_1internal_1_1arg__map
    + doxygen 1.8.11
diff --git a/docs/classfmt_1_1v5_1_1internal_1_1arg__map.html b/docs/classfmt_1_1v5_1_1internal_1_1arg__map.html index 45eeda2..6a0dd83 100644 --- a/docs/classfmt_1_1v5_1_1internal_1_1arg__map.html +++ b/docs/classfmt_1_1v5_1_1internal_1_1arg__map.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: fmt::v5::internal::arg_map< Context > Class Template Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -106,19 +126,17 @@ Public Member Functions    ~arg_map ()   -basic_format_arg< Context > find (basic_string_view< char_type > name) const -  +basic_format_arg< Context > find (basic_string_view< char_type > name) const + 

Detailed Description

template<typename Context>
class fmt::v5::internal::arg_map< Context >

-

Definition at line 773 of file core.h.

+

Definition at line 773 of file core.h.

Constructor & Destructor Documentation

- -

◆ arg_map()

- +
@@ -141,13 +159,11 @@ template<typename Context>
-

Definition at line 957 of file core.h.

+

Definition at line 957 of file core.h.

- -

◆ ~arg_map()

- +
@@ -170,14 +186,12 @@ template<typename Context>
-

Definition at line 959 of file core.h.

+

Definition at line 959 of file core.h.

Member Function Documentation

- -

◆ find()

- +
@@ -201,13 +215,11 @@ template<typename Context>
-

Definition at line 961 of file core.h.

+

Definition at line 961 of file core.h.

- -

◆ init()

- +
@@ -223,7 +235,7 @@ template<typename Context>
-

Definition at line 1273 of file format.h.

+

Definition at line 1273 of file format.h.

@@ -239,7 +251,7 @@ template<typename Context>
+ doxygen 1.8.11 diff --git a/docs/classfmt_1_1v5_1_1internal_1_1arg__map.js b/docs/classfmt_1_1v5_1_1internal_1_1arg__map.js index fcb2ca4..17444e7 100644 --- a/docs/classfmt_1_1v5_1_1internal_1_1arg__map.js +++ b/docs/classfmt_1_1v5_1_1internal_1_1arg__map.js @@ -2,6 +2,6 @@ var classfmt_1_1v5_1_1internal_1_1arg__map = [ [ "arg_map", "classfmt_1_1v5_1_1internal_1_1arg__map.html#a88a37695bca579d00ebc51586639b592", null ], [ "~arg_map", "classfmt_1_1v5_1_1internal_1_1arg__map.html#a31d7e9121428e608bbb580cf53ae85de", null ], - [ "find", "classfmt_1_1v5_1_1internal_1_1arg__map.html#af6c96f7f7daeece4fa5fa43c373dc8c7", null ], + [ "find", "classfmt_1_1v5_1_1internal_1_1arg__map.html#a63f7a71272fdb80fc4f0a952a010544f", null ], [ "init", "classfmt_1_1v5_1_1internal_1_1arg__map.html#a04351a6b015c6ed8822951f332162a7f", null ] ]; \ No newline at end of file diff --git a/docs/classfmt_1_1v5_1_1internal_1_1basic__buffer-members.html b/docs/classfmt_1_1v5_1_1internal_1_1basic__buffer-members.html index c72e240..6e91435 100644 --- a/docs/classfmt_1_1v5_1_1internal_1_1basic__buffer-members.html +++ b/docs/classfmt_1_1v5_1_1internal_1_1basic__buffer-members.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Member List @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -98,20 +118,20 @@ $(document).ready(function(){initNavTree('classfmt_1_1v5_1_1internal_1_1basic__b basic_buffer(std::size_t sz)fmt::v5::internal::basic_buffer< T >inlineprotected basic_buffer(T *p=NULL, std::size_t sz=0, std::size_t cap=0)fmt::v5::internal::basic_buffer< T >inlineprotected begin()fmt::v5::internal::basic_buffer< T >inline - capacity() constfmt::v5::internal::basic_buffer< T >inline + capacity() const fmt::v5::internal::basic_buffer< T >inline clear()fmt::v5::internal::basic_buffer< T >inline - const_referencefmt::v5::internal::basic_buffer< T > + const_reference typedeffmt::v5::internal::basic_buffer< T > data()fmt::v5::internal::basic_buffer< T >inline - data() constfmt::v5::internal::basic_buffer< T >inline + data() const fmt::v5::internal::basic_buffer< T >inline end()fmt::v5::internal::basic_buffer< T >inline grow(std::size_t capacity)=0fmt::v5::internal::basic_buffer< T >protectedpure virtual operator[](std::size_t index)fmt::v5::internal::basic_buffer< T >inline - operator[](std::size_t index) constfmt::v5::internal::basic_buffer< T >inline + operator[](std::size_t index) const fmt::v5::internal::basic_buffer< T >inline push_back(const T &value)fmt::v5::internal::basic_buffer< T >inline reserve(std::size_t new_capacity)fmt::v5::internal::basic_buffer< T >inline resize(std::size_t new_size)fmt::v5::internal::basic_buffer< T >inline set(T *buf_data, std::size_t buf_capacity)fmt::v5::internal::basic_buffer< T >inlineprotected - size() constfmt::v5::internal::basic_buffer< T >inline + size() const fmt::v5::internal::basic_buffer< T >inline value_type typedeffmt::v5::internal::basic_buffer< T > ~basic_buffer()fmt::v5::internal::basic_buffer< T >inlinevirtual
@@ -121,7 +141,7 @@ $(document).ready(function(){initNavTree('classfmt_1_1v5_1_1internal_1_1basic__b
    + doxygen 1.8.11
diff --git a/docs/classfmt_1_1v5_1_1internal_1_1basic__buffer.html b/docs/classfmt_1_1v5_1_1internal_1_1basic__buffer.html index 00c726e..8a284ca 100644 --- a/docs/classfmt_1_1v5_1_1internal_1_1basic__buffer.html +++ b/docs/classfmt_1_1v5_1_1internal_1_1basic__buffer.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: fmt::v5::internal::basic_buffer< T > Class Template Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -90,7 +110,6 @@ $(document).ready(function(){initNavTree('classfmt_1_1v5_1_1internal_1_1basic__b
@@ -104,15 +123,17 @@ Inheritance diagram for fmt::v5::internal::basic_buffer< T >:
- + fmt::v5::basic_memory_buffer< T, SIZE, Allocator > - -
+ +
+ +

Public Types

typedef T value_type
 
typedef const T & const_reference
 
@@ -122,14 +143,14 @@ Public Member Functions - - - - + + + + - - + + @@ -143,13 +164,8 @@ Public Member Functions - - -

Public Member Functions

 
T * end () throw ()
 
std::size_t size () const throw ()
 
std::size_t capacity () const throw ()
 
std::size_t size () const throw ()
 
std::size_t capacity () const throw ()
 
T * data () throw ()
 
const T * data () const throw ()
 
const T * data () const throw ()
 
void resize (std::size_t new_size)
 
void clear ()
 
T & operator[] (std::size_t index)
 
const T & operator[] (std::size_t index) const
 
- - - + +

-Public Attributes

const typedef T & const_reference
 
const T & operator[] (std::size_t index) const
 
@@ -159,7 +175,7 @@ Protected Member Functions - +

Protected Member Functions

 
void set (T *buf_data, std::size_t buf_capacity) throw ()
 
virtual void grow (std::size_t capacity)=0
virtual void grow (std::size_t capacity)=0
 

Detailed Description

@@ -168,11 +184,25 @@ class fmt::v5::internal::basic_buffer< T >

A contiguous memory buffer with an optional growing ability.

-

Definition at line 215 of file core.h.

+

Definition at line 215 of file core.h.

Member Typedef Documentation

- -

◆ value_type

+ +
+
+
+template<typename T>
+ + + + +
typedef const T& fmt::v5::internal::basic_buffer< T >::const_reference
+
+

Definition at line 242 of file core.h.

+ +
+
+
@@ -184,14 +214,12 @@ template<typename T>
-

Definition at line 241 of file core.h.

+

Definition at line 241 of file core.h.

Constructor & Destructor Documentation

- -

◆ basic_buffer() [1/2]

- +
@@ -221,13 +249,11 @@ template<typename T>
-

Definition at line 226 of file core.h.

+

Definition at line 226 of file core.h.

- -

◆ basic_buffer() [2/2]

- +
@@ -273,13 +299,11 @@ template<typename T>
-

Definition at line 228 of file core.h.

+

Definition at line 228 of file core.h.

- -

◆ ~basic_buffer()

- +
@@ -302,14 +326,12 @@ template<typename T>
-

Definition at line 244 of file core.h.

+

Definition at line 244 of file core.h.

Member Function Documentation

- -

◆ append()

- +
@@ -338,13 +360,11 @@ template<typename U >

Appends data to the end of the buffer.

-

Definition at line 394 of file format.h.

+

Definition at line 394 of file format.h.

- -

◆ begin()

- +
@@ -373,13 +393,11 @@ template<typename T>
-

Definition at line 246 of file core.h.

+

Definition at line 246 of file core.h.

- -

◆ capacity()

- +
@@ -409,13 +427,11 @@ template<typename T>

Returns the capacity of this buffer.

-

Definition at line 253 of file core.h.

+

Definition at line 253 of file core.h.

- -

◆ clear()

- +
@@ -439,13 +455,11 @@ template<typename T>

Clears this buffer.

-

Definition at line 270 of file core.h.

+

Definition at line 270 of file core.h.

- -

◆ data() [1/2]

- +
@@ -475,13 +489,11 @@ template<typename T>

Returns a pointer to the buffer data.

-

Definition at line 256 of file core.h.

+

Definition at line 256 of file core.h.

- -

◆ data() [2/2]

- +
@@ -511,13 +523,11 @@ template<typename T>

Returns a pointer to the buffer data.

-

Definition at line 259 of file core.h.

+

Definition at line 259 of file core.h.

- -

◆ end()

- +
@@ -546,13 +556,11 @@ template<typename T>
-

Definition at line 247 of file core.h.

+

Definition at line 247 of file core.h.

- -

◆ grow()

- +
@@ -581,9 +589,7 @@ template<typename T>
- -

◆ operator[]() [1/2]

- +
@@ -607,13 +613,11 @@ template<typename T>
-

Definition at line 287 of file core.h.

+

Definition at line 287 of file core.h.

- -

◆ operator[]() [2/2]

- +
@@ -637,13 +641,11 @@ template<typename T>
-

Definition at line 288 of file core.h.

+

Definition at line 288 of file core.h.

- -

◆ push_back()

- +
@@ -667,13 +669,11 @@ template<typename T>
-

Definition at line 278 of file core.h.

+

Definition at line 278 of file core.h.

- -

◆ reserve()

- +
@@ -698,13 +698,11 @@ template<typename T>

Reserves space to store at least capacity elements.

-

Definition at line 273 of file core.h.

+

Definition at line 273 of file core.h.

- -

◆ resize()

- +
@@ -729,13 +727,11 @@ template<typename T>

Resizes the buffer. If T is a POD type new elements may not be initialized.

-

Definition at line 264 of file core.h.

+

Definition at line 264 of file core.h.

- -

◆ set()

- +
@@ -776,13 +772,11 @@ template<typename T>

Sets the buffer data and capacity.

-

Definition at line 232 of file core.h.

+

Definition at line 232 of file core.h.

- -

◆ size()

- +
@@ -812,26 +806,7 @@ template<typename T>

Returns the size of this buffer.

-

Definition at line 250 of file core.h.

- -
-
-

Member Data Documentation

- -

◆ const_reference

- -
-
-
-template<typename T>
- - - - -
const typedef T& fmt::v5::internal::basic_buffer< T >::const_reference
-
- -

Definition at line 242 of file core.h.

+

Definition at line 250 of file core.h.

@@ -847,7 +822,7 @@ template<typename T> + doxygen 1.8.11 diff --git a/docs/classfmt_1_1v5_1_1internal_1_1basic__buffer.js b/docs/classfmt_1_1v5_1_1internal_1_1basic__buffer.js index 909b610..4c33fe1 100644 --- a/docs/classfmt_1_1v5_1_1internal_1_1basic__buffer.js +++ b/docs/classfmt_1_1v5_1_1internal_1_1basic__buffer.js @@ -1,23 +1,23 @@ var classfmt_1_1v5_1_1internal_1_1basic__buffer = [ + [ "const_reference", "classfmt_1_1v5_1_1internal_1_1basic__buffer.html#abfe6d821425b515382f5001823d40836", null ], [ "value_type", "classfmt_1_1v5_1_1internal_1_1basic__buffer.html#a7c82c2c4e3782e9770d45d564f9425a5", null ], [ "basic_buffer", "classfmt_1_1v5_1_1internal_1_1basic__buffer.html#a590c6a8e6f850c98dbc82ffea1b50650", null ], [ "basic_buffer", "classfmt_1_1v5_1_1internal_1_1basic__buffer.html#a8a3f3c0ba824744bfc879e042c691dca", null ], [ "~basic_buffer", "classfmt_1_1v5_1_1internal_1_1basic__buffer.html#a07f015e4a57443a29753c186e0e5d0ee", null ], [ "append", "classfmt_1_1v5_1_1internal_1_1basic__buffer.html#a5c6d1a6230a4c8e713244bbdd63a1a24", null ], [ "begin", "classfmt_1_1v5_1_1internal_1_1basic__buffer.html#a8d9a7509b995a14fda3e033789be636e", null ], - [ "capacity", "classfmt_1_1v5_1_1internal_1_1basic__buffer.html#a7bf5da24d9aec9ed9b5e42b912a38a7b", null ], + [ "capacity", "classfmt_1_1v5_1_1internal_1_1basic__buffer.html#ab290639836614e4190a3ae226883ce41", null ], [ "clear", "classfmt_1_1v5_1_1internal_1_1basic__buffer.html#ae92aa3486601bb4ba757be96b3c6bee3", null ], [ "data", "classfmt_1_1v5_1_1internal_1_1basic__buffer.html#a384f1304da6ce18c4713368327354479", null ], - [ "data", "classfmt_1_1v5_1_1internal_1_1basic__buffer.html#a9ab5672bca28a46bb98f25d424e242cd", null ], + [ "data", "classfmt_1_1v5_1_1internal_1_1basic__buffer.html#ab9bbc8842321b2f33088ccb99966ce13", null ], [ "end", "classfmt_1_1v5_1_1internal_1_1basic__buffer.html#a0b26ffcf1270c07384a57ddaf3a38a35", null ], [ "grow", "classfmt_1_1v5_1_1internal_1_1basic__buffer.html#a634bc5a3b605f4e96e9860a626c55b64", null ], [ "operator[]", "classfmt_1_1v5_1_1internal_1_1basic__buffer.html#a2f3ec418e47e041ffd5628d10ef80f56", null ], - [ "operator[]", "classfmt_1_1v5_1_1internal_1_1basic__buffer.html#a97721e13c38c6fd4a305067b61004b42", null ], + [ "operator[]", "classfmt_1_1v5_1_1internal_1_1basic__buffer.html#aeedb900d361129040373b5ae3f332c2e", null ], [ "push_back", "classfmt_1_1v5_1_1internal_1_1basic__buffer.html#a8e3b65c01dadb977b9c2327864db9e15", null ], [ "reserve", "classfmt_1_1v5_1_1internal_1_1basic__buffer.html#ab306d6d55956332b1083e967393a59f1", null ], [ "resize", "classfmt_1_1v5_1_1internal_1_1basic__buffer.html#af20fa1cd5e5bd230ab1d4e89c6aead38", null ], [ "set", "classfmt_1_1v5_1_1internal_1_1basic__buffer.html#aeadf1e58eae72ef94f9e2c01ad7921c6", null ], - [ "size", "classfmt_1_1v5_1_1internal_1_1basic__buffer.html#ac4761deba75a7238ae29243b159b9943", null ], - [ "const_reference", "classfmt_1_1v5_1_1internal_1_1basic__buffer.html#a6681032cf69668f9930f8e1310d4e3b4", null ] + [ "size", "classfmt_1_1v5_1_1internal_1_1basic__buffer.html#a65f234c9d1b66d591d838e56cfd53f5b", null ] ]; \ No newline at end of file diff --git a/docs/classfmt_1_1v5_1_1internal_1_1char__converter-members.html b/docs/classfmt_1_1v5_1_1internal_1_1char__converter-members.html index 6766e08..0e15eaa 100644 --- a/docs/classfmt_1_1v5_1_1internal_1_1char__converter-members.html +++ b/docs/classfmt_1_1v5_1_1internal_1_1char__converter-members.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Member List @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -104,7 +124,7 @@ $(document).ready(function(){initNavTree('classfmt_1_1v5_1_1internal_1_1char__co
    + doxygen 1.8.11
diff --git a/docs/classfmt_1_1v5_1_1internal_1_1char__converter.html b/docs/classfmt_1_1v5_1_1internal_1_1char__converter.html index 88e9eea..0768b24 100644 --- a/docs/classfmt_1_1v5_1_1internal_1_1char__converter.html +++ b/docs/classfmt_1_1v5_1_1internal_1_1char__converter.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: fmt::v5::internal::char_converter< Context > Class Template Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -101,10 +121,10 @@ Inheritance diagram for fmt::v5::internal::char_converter< Context >:
- + fmt::v5::internal::function< void > - -
+ + @@ -122,11 +142,9 @@ Public Member Functions class fmt::v5::internal::char_converter< Context > -

Definition at line 265 of file printf.h.

+

Definition at line 265 of file printf.h.

Constructor & Destructor Documentation

- -

◆ char_converter()

- +
@@ -150,14 +168,12 @@ template<typename Context >

Public Member Functions

-

Definition at line 270 of file printf.h.

+

Definition at line 270 of file printf.h.

Member Function Documentation

- -

◆ operator()() [1/2]

- +
@@ -183,13 +199,11 @@ template<typename T >
-

Definition at line 274 of file printf.h.

+

Definition at line 274 of file printf.h.

- -

◆ operator()() [2/2]

- +
@@ -215,7 +229,7 @@ template<typename T >
-

Definition at line 280 of file printf.h.

+

Definition at line 280 of file printf.h.

@@ -230,7 +244,7 @@ template<typename T > + doxygen 1.8.11 diff --git a/docs/classfmt_1_1v5_1_1internal_1_1char__specs__checker-members.html b/docs/classfmt_1_1v5_1_1internal_1_1char__specs__checker-members.html index 16461ff..35cc817 100644 --- a/docs/classfmt_1_1v5_1_1internal_1_1char__specs__checker-members.html +++ b/docs/classfmt_1_1v5_1_1internal_1_1char__specs__checker-members.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Member List @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -104,7 +124,7 @@ $(document).ready(function(){initNavTree('classfmt_1_1v5_1_1internal_1_1char__sp
    + doxygen 1.8.11
diff --git a/docs/classfmt_1_1v5_1_1internal_1_1char__specs__checker.html b/docs/classfmt_1_1v5_1_1internal_1_1char__specs__checker.html index bf6d63a..70e5dcd 100644 --- a/docs/classfmt_1_1v5_1_1internal_1_1char__specs__checker.html +++ b/docs/classfmt_1_1v5_1_1internal_1_1char__specs__checker.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: fmt::v5::internal::char_specs_checker< ErrorHandler > Class Template Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -100,7 +120,9 @@ $(document).ready(function(){initNavTree('classfmt_1_1v5_1_1internal_1_1char__sp Inheritance diagram for fmt::v5::internal::char_specs_checker< ErrorHandler >:
- + + +
class fmt::v5::internal::char_specs_checker< ErrorHandler > -

Definition at line 1248 of file format.h.

+

Definition at line 1248 of file format.h.

Constructor & Destructor Documentation

- -

◆ char_specs_checker()

- +
@@ -155,14 +175,12 @@ template<typename ErrorHandler >

@@ -117,11 +139,9 @@ Public Member Functions

-

Definition at line 1253 of file format.h.

+

Definition at line 1253 of file format.h.

Member Function Documentation

- -

◆ on_char()

- +
@@ -185,13 +203,11 @@ template<typename ErrorHandler >
-

Definition at line 1259 of file format.h.

+

Definition at line 1259 of file format.h.

- -

◆ on_int()

- +
@@ -214,7 +230,7 @@ template<typename ErrorHandler >
-

Definition at line 1256 of file format.h.

+

Definition at line 1256 of file format.h.

@@ -229,7 +245,7 @@ template<typename ErrorHandler > + doxygen 1.8.11 diff --git a/docs/classfmt_1_1v5_1_1internal_1_1container__buffer-members.html b/docs/classfmt_1_1v5_1_1internal_1_1container__buffer-members.html index a3c9a1b..4836410 100644 --- a/docs/classfmt_1_1v5_1_1internal_1_1container__buffer-members.html +++ b/docs/classfmt_1_1v5_1_1internal_1_1container__buffer-members.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Member List @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -98,21 +118,21 @@ $(document).ready(function(){initNavTree('classfmt_1_1v5_1_1internal_1_1containe basic_buffer(std::size_t sz)fmt::v5::internal::basic_buffer< Container::value_type >inlineprotected basic_buffer(Container::value_type *p=NULL, std::size_t sz=0, std::size_t cap=0)fmt::v5::internal::basic_buffer< Container::value_type >inlineprotected begin()fmt::v5::internal::basic_buffer< Container::value_type >inline - capacity() constfmt::v5::internal::basic_buffer< Container::value_type >inline + capacity() constfmt::v5::internal::basic_buffer< Container::value_type >inline clear()fmt::v5::internal::basic_buffer< Container::value_type >inline - const_referencefmt::v5::internal::basic_buffer< Container::value_type > + const_reference typedeffmt::v5::internal::basic_buffer< Container::value_type > container_buffer(Container &c)fmt::v5::internal::container_buffer< Container >inlineexplicit data()fmt::v5::internal::basic_buffer< Container::value_type >inline - data() constfmt::v5::internal::basic_buffer< Container::value_type >inline + data() constfmt::v5::internal::basic_buffer< Container::value_type >inline end()fmt::v5::internal::basic_buffer< Container::value_type >inline grow(std::size_t capacity)fmt::v5::internal::container_buffer< Container >inlineprotectedvirtual operator[](std::size_t index)fmt::v5::internal::basic_buffer< Container::value_type >inline - operator[](std::size_t index) constfmt::v5::internal::basic_buffer< Container::value_type >inline + operator[](std::size_t index) constfmt::v5::internal::basic_buffer< Container::value_type >inline push_back(const Container::value_type &value)fmt::v5::internal::basic_buffer< Container::value_type >inline reserve(std::size_t new_capacity)fmt::v5::internal::basic_buffer< Container::value_type >inline resize(std::size_t new_size)fmt::v5::internal::basic_buffer< Container::value_type >inline set(Container::value_type *buf_data, std::size_t buf_capacity)fmt::v5::internal::basic_buffer< Container::value_type >inlineprotected - size() constfmt::v5::internal::basic_buffer< Container::value_type >inline + size() constfmt::v5::internal::basic_buffer< Container::value_type >inline value_type typedeffmt::v5::internal::basic_buffer< Container::value_type > ~basic_buffer()fmt::v5::internal::basic_buffer< Container::value_type >inlinevirtual
@@ -122,7 +142,7 @@ $(document).ready(function(){initNavTree('classfmt_1_1v5_1_1internal_1_1containe
    + doxygen 1.8.11
diff --git a/docs/classfmt_1_1v5_1_1internal_1_1container__buffer.html b/docs/classfmt_1_1v5_1_1internal_1_1container__buffer.html index 0f18ca4..2d48466 100644 --- a/docs/classfmt_1_1v5_1_1internal_1_1container__buffer.html +++ b/docs/classfmt_1_1v5_1_1internal_1_1container__buffer.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: fmt::v5::internal::container_buffer< Container > Class Template Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -102,10 +122,10 @@ Inheritance diagram for fmt::v5::internal::container_buffer< Container >:<
- + fmt::v5::internal::basic_buffer< Container::value_type > - -
+ +
@@ -118,14 +138,14 @@ Public Member Functions - - - - + + + + - - + + @@ -138,12 +158,12 @@ Public Member Functions - - + +

Public Member Functions

 
Container::value_type * end () throw ()
 
std::size_t size () const throw ()
 
std::size_t capacity () const throw ()
 
std::size_t size () const throw ()
 
std::size_t capacity () const throw ()
 
Container::value_type * data () throw ()
 
const Container::value_type * data () const throw ()
 
const Container::value_type * data () const throw ()
 
void resize (std::size_t new_size)
 
void clear ()
 
Container::value_type & operator[] (std::size_t index)
 
const Container::value_type & operator[] (std::size_t index) const
 
const Container::value_type & operator[] (std::size_t index) const
 
- + @@ -158,20 +178,17 @@ Additional Inherited Members - - - + +

Protected Member Functions

void grow (std::size_t capacity)
void grow (std::size_t capacity)
 
- Protected Member Functions inherited from fmt::v5::internal::basic_buffer< Container::value_type >
 basic_buffer (std::size_t sz) throw ()
- Public Types inherited from fmt::v5::internal::basic_buffer< Container::value_type >
typedef Container::value_type value_type
 
- Public Attributes inherited from fmt::v5::internal::basic_buffer< Container::value_type >
const typedef Container::value_type & const_reference
 
typedef const Container::value_type & const_reference
 

Detailed Description

template<typename Container>
class fmt::v5::internal::container_buffer< Container >

-

Definition at line 296 of file core.h.

+

Definition at line 296 of file core.h.

Constructor & Destructor Documentation

- -

◆ container_buffer()

- +
@@ -195,14 +212,12 @@ template<typename Container>
-

Definition at line 307 of file core.h.

+

Definition at line 307 of file core.h.

Member Function Documentation

- -

◆ grow()

- +
@@ -229,7 +244,7 @@ template<typename Container>

Implements fmt::v5::internal::basic_buffer< Container::value_type >.

-

Definition at line 301 of file core.h.

+

Definition at line 301 of file core.h.

@@ -244,7 +259,7 @@ template<typename Container> + doxygen 1.8.11 diff --git a/docs/classfmt_1_1v5_1_1internal_1_1context__base-members.html b/docs/classfmt_1_1v5_1_1internal_1_1context__base-members.html index 7b94650..a2d3c29 100644 --- a/docs/classfmt_1_1v5_1_1internal_1_1context__base-members.html +++ b/docs/classfmt_1_1v5_1_1internal_1_1context__base-members.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Member List @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -95,8 +115,8 @@ $(document).ready(function(){initNavTree('classfmt_1_1v5_1_1internal_1_1context_

This is the complete list of members for fmt::v5::internal::context_base< OutputIt, Context, Char >, including all inherited members.

- - + + @@ -116,7 +136,7 @@ $(document).ready(function(){initNavTree('classfmt_1_1v5_1_1internal_1_1context_
    + doxygen 1.8.11
diff --git a/docs/classfmt_1_1v5_1_1internal_1_1context__base.html b/docs/classfmt_1_1v5_1_1internal_1_1context__base.html index 8d58a56..996c2ff 100644 --- a/docs/classfmt_1_1v5_1_1internal_1_1context__base.html +++ b/docs/classfmt_1_1v5_1_1internal_1_1context__base.html @@ -1,10 +1,9 @@ - + - - +Livox SDK API: fmt::v5::internal::context_base< OutputIt, Context, Char > Class Template Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ @@ -39,22 +41,42 @@
advance_to(iterator it)fmt::v5::internal::context_base< OutputIt, Context, Char >inline
arg(unsigned id) constfmt::v5::internal::context_base< OutputIt, Context, Char >inline
args() constfmt::v5::internal::context_base< OutputIt, Context, Char >inline
arg(unsigned id) const fmt::v5::internal::context_base< OutputIt, Context, Char >inline
args() const fmt::v5::internal::context_base< OutputIt, Context, Char >inline
begin()fmt::v5::internal::context_base< OutputIt, Context, Char >inline
char_type typedeffmt::v5::internal::context_base< OutputIt, Context, Char >protected
context_base(OutputIt out, basic_string_view< char_type > format_str, basic_format_args< Context > ctx_args, locale_ref loc=locale_ref())fmt::v5::internal::context_base< OutputIt, Context, Char >inlineprotected
Livox SDK API -  V2.0.0 +  V2.1.0
- + - - - - + +
@@ -109,10 +129,10 @@ Public Types Public Member Functions basic_parse_context< char_type > & parse_context ()   -basic_format_args< Context > args () const -  -basic_format_arg< Context > arg (unsigned id) const -  +basic_format_args< Context > args () const +  +basic_format_arg< Context > arg (unsigned id) const +  internal::error_handler error_handler ()   void on_error (const char *message) @@ -147,11 +167,9 @@ Protected Member Functions class fmt::v5::internal::context_base< OutputIt, Context, Char > -

Definition at line 988 of file core.h.

+

Definition at line 988 of file core.h.

Member Typedef Documentation

- -

◆ char_type

- +
@@ -171,13 +189,11 @@ template<typename OutputIt, typename Context, typename Char>
-

Definition at line 999 of file core.h.

+

Definition at line 999 of file core.h.

- -

◆ format_arg

- +
@@ -197,13 +213,11 @@ template<typename OutputIt, typename Context, typename Char>
-

Definition at line 1000 of file core.h.

+

Definition at line 1000 of file core.h.

- -

◆ iterator

- +
@@ -215,14 +229,12 @@ template<typename OutputIt, typename Context, typename Char>
-

Definition at line 990 of file core.h.

+

Definition at line 990 of file core.h.

Constructor & Destructor Documentation

- -

◆ context_base()

- +
@@ -268,14 +280,12 @@ template<typename OutputIt, typename Context, typename Char>
-

Definition at line 1002 of file core.h.

+

Definition at line 1002 of file core.h.

Member Function Documentation

- -

◆ advance_to()

- +
@@ -299,13 +309,11 @@ template<typename OutputIt, typename Context, typename Char>
-

Definition at line 1038 of file core.h.

+

Definition at line 1038 of file core.h.

- -

◆ arg()

- +
@@ -329,13 +337,11 @@ template<typename OutputIt, typename Context, typename Char>
-

Definition at line 1025 of file core.h.

+

Definition at line 1025 of file core.h.

- -

◆ args()

- +
@@ -358,13 +364,11 @@ template<typename OutputIt, typename Context, typename Char>
-

Definition at line 1024 of file core.h.

+

Definition at line 1024 of file core.h.

- -

◆ begin()

- +
@@ -387,13 +391,11 @@ template<typename OutputIt, typename Context, typename Char>
-

Definition at line 1035 of file core.h.

+

Definition at line 1035 of file core.h.

- -

◆ do_get_arg()

- +
@@ -417,13 +419,11 @@ template<typename OutputIt, typename Context, typename Char>
-

Definition at line 1008 of file core.h.

+

Definition at line 1008 of file core.h.

- -

◆ error_handler()

- +
@@ -446,13 +446,11 @@ template<typename OutputIt, typename Context, typename Char>
-

Definition at line 1027 of file core.h.

+

Definition at line 1027 of file core.h.

- -

◆ get_arg()

- +
@@ -476,13 +474,11 @@ template<typename OutputIt, typename Context, typename Char>
-

Definition at line 1017 of file core.h.

+

Definition at line 1017 of file core.h.

- -

◆ locale()

- +
@@ -505,13 +501,11 @@ template<typename OutputIt, typename Context, typename Char>
-

Definition at line 1040 of file core.h.

+

Definition at line 1040 of file core.h.

- -

◆ on_error()

- +
@@ -535,13 +529,11 @@ template<typename OutputIt, typename Context, typename Char>
-

Definition at line 1031 of file core.h.

+

Definition at line 1031 of file core.h.

- -

◆ out()

- +
@@ -564,13 +556,11 @@ template<typename OutputIt, typename Context, typename Char>
-

Definition at line 1034 of file core.h.

+

Definition at line 1034 of file core.h.

- -

◆ parse_context()

- +
@@ -593,7 +583,7 @@ template<typename OutputIt, typename Context, typename Char>
-

Definition at line 1023 of file core.h.

+

Definition at line 1023 of file core.h.

@@ -608,7 +598,7 @@ template<typename OutputIt, typename Context, typename Char> + doxygen 1.8.11 diff --git a/docs/classfmt_1_1v5_1_1internal_1_1context__base.js b/docs/classfmt_1_1v5_1_1internal_1_1context__base.js index 9bfb182..bd043bd 100644 --- a/docs/classfmt_1_1v5_1_1internal_1_1context__base.js +++ b/docs/classfmt_1_1v5_1_1internal_1_1context__base.js @@ -5,8 +5,8 @@ var classfmt_1_1v5_1_1internal_1_1context__base = [ "iterator", "classfmt_1_1v5_1_1internal_1_1context__base.html#aa88412259a118ed5ac97e9bd1cee92e3", null ], [ "context_base", "classfmt_1_1v5_1_1internal_1_1context__base.html#a1619fee676f24de9cb69faab79584278", null ], [ "advance_to", "classfmt_1_1v5_1_1internal_1_1context__base.html#ae6257fa7c87f16830f7bbb9263991ef8", null ], - [ "arg", "classfmt_1_1v5_1_1internal_1_1context__base.html#a6d08d519c4919fba06e32e08f7395cba", null ], - [ "args", "classfmt_1_1v5_1_1internal_1_1context__base.html#a47af48a658d7c01909e2a7f5f522702a", null ], + [ "arg", "classfmt_1_1v5_1_1internal_1_1context__base.html#a2dd0813c68bbe9bf53363d42ae7089b9", null ], + [ "args", "classfmt_1_1v5_1_1internal_1_1context__base.html#a9f6b72c1f9d142c09cd350b4c8a3dc08", null ], [ "begin", "classfmt_1_1v5_1_1internal_1_1context__base.html#a002ecd520551aef8a4af81c9cc94eb91", null ], [ "do_get_arg", "classfmt_1_1v5_1_1internal_1_1context__base.html#abcc9c36e7effb35bcd76c698b478fbe6", null ], [ "error_handler", "classfmt_1_1v5_1_1internal_1_1context__base.html#a5ef3c3b62f0dab625c750986f348c8f8", null ], diff --git a/docs/classfmt_1_1v5_1_1internal_1_1counting__iterator-members.html b/docs/classfmt_1_1v5_1_1internal_1_1counting__iterator-members.html index fc6aa10..c25e3b2 100644 --- a/docs/classfmt_1_1v5_1_1internal_1_1counting__iterator-members.html +++ b/docs/classfmt_1_1v5_1_1internal_1_1counting__iterator-members.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Member List @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -95,11 +115,11 @@ $(document).ready(function(){initNavTree('classfmt_1_1v5_1_1internal_1_1counting

This is the complete list of members for fmt::v5::internal::counting_iterator< T >, including all inherited members.

- + - + @@ -112,7 +132,7 @@ $(document).ready(function(){initNavTree('classfmt_1_1v5_1_1internal_1_1counting
    + doxygen 1.8.11
diff --git a/docs/classfmt_1_1v5_1_1internal_1_1counting__iterator.html b/docs/classfmt_1_1v5_1_1internal_1_1counting__iterator.html index 6f2857a..1a9cbd1 100644 --- a/docs/classfmt_1_1v5_1_1internal_1_1counting__iterator.html +++ b/docs/classfmt_1_1v5_1_1internal_1_1counting__iterator.html @@ -1,10 +1,9 @@ - + - - +Livox SDK API: fmt::v5::internal::counting_iterator< T > Class Template Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ @@ -39,22 +41,42 @@
_Unchecked_type typedeffmt::v5::internal::counting_iterator< T >
count() constfmt::v5::internal::counting_iterator< T >inline
count() const fmt::v5::internal::counting_iterator< T >inline
counting_iterator()fmt::v5::internal::counting_iterator< T >inline
difference_type typedeffmt::v5::internal::counting_iterator< T >
iterator_category typedeffmt::v5::internal::counting_iterator< T >
operator*() constfmt::v5::internal::counting_iterator< T >inline
operator*() const fmt::v5::internal::counting_iterator< T >inline
operator++()fmt::v5::internal::counting_iterator< T >inline
operator++(int)fmt::v5::internal::counting_iterator< T >inline
pointer typedeffmt::v5::internal::counting_iterator< T >
Livox SDK API -  V2.0.0 +  V2.1.0
- + - - - - + +
@@ -117,25 +137,23 @@ Public Types Public Member Functions  counting_iterator ()   -std::size_t count () const -  +std::size_t count () const +  counting_iteratoroperator++ ()   counting_iterator operator++ (int)   -T & operator* () const -  +T & operator* () const + 

Detailed Description

template<typename T>
class fmt::v5::internal::counting_iterator< T >

-

Definition at line 615 of file format.h.

+

Definition at line 615 of file format.h.

Member Typedef Documentation

- -

◆ _Unchecked_type

- +
@@ -147,13 +165,11 @@ template<typename T >
-

Definition at line 626 of file format.h.

+

Definition at line 626 of file format.h.

- -

◆ difference_type

- +
@@ -165,13 +181,11 @@ template<typename T >
-

Definition at line 623 of file format.h.

+

Definition at line 623 of file format.h.

- -

◆ iterator_category

- +
@@ -183,13 +197,11 @@ template<typename T >
-

Definition at line 621 of file format.h.

+

Definition at line 621 of file format.h.

- -

◆ pointer

- +
@@ -201,13 +213,11 @@ template<typename T >
-

Definition at line 624 of file format.h.

+

Definition at line 624 of file format.h.

- -

◆ reference

- +
@@ -219,13 +229,11 @@ template<typename T >
-

Definition at line 625 of file format.h.

+

Definition at line 625 of file format.h.

- -

◆ value_type

- +
@@ -237,14 +245,12 @@ template<typename T >
-

Definition at line 622 of file format.h.

+

Definition at line 622 of file format.h.

Constructor & Destructor Documentation

- -

◆ counting_iterator()

- +
@@ -267,14 +273,12 @@ template<typename T >
-

Definition at line 628 of file format.h.

+

Definition at line 628 of file format.h.

Member Function Documentation

- -

◆ count()

- +
@@ -297,13 +301,11 @@ template<typename T >
-

Definition at line 630 of file format.h.

+

Definition at line 630 of file format.h.

- -

◆ operator*()

- +
@@ -326,13 +328,11 @@ template<typename T >
-

Definition at line 643 of file format.h.

+

Definition at line 643 of file format.h.

- -

◆ operator++() [1/2]

- +
@@ -355,13 +355,11 @@ template<typename T >
-

Definition at line 632 of file format.h.

+

Definition at line 632 of file format.h.

- -

◆ operator++() [2/2]

- +
@@ -385,7 +383,7 @@ template<typename T >
-

Definition at line 637 of file format.h.

+

Definition at line 637 of file format.h.

@@ -400,7 +398,7 @@ template<typename T >
+ doxygen 1.8.11 diff --git a/docs/classfmt_1_1v5_1_1internal_1_1counting__iterator.js b/docs/classfmt_1_1v5_1_1internal_1_1counting__iterator.js index 944ac85..cce1652 100644 --- a/docs/classfmt_1_1v5_1_1internal_1_1counting__iterator.js +++ b/docs/classfmt_1_1v5_1_1internal_1_1counting__iterator.js @@ -7,8 +7,8 @@ var classfmt_1_1v5_1_1internal_1_1counting__iterator = [ "reference", "classfmt_1_1v5_1_1internal_1_1counting__iterator.html#a81db3ee5c66069e844af366c6ffb1dce", null ], [ "value_type", "classfmt_1_1v5_1_1internal_1_1counting__iterator.html#a13f8c5691061c696945f38159080fe2e", null ], [ "counting_iterator", "classfmt_1_1v5_1_1internal_1_1counting__iterator.html#a9d2f0224d9f4a23484dc28c67ac81f13", null ], - [ "count", "classfmt_1_1v5_1_1internal_1_1counting__iterator.html#af0879937c615e146111e361db9a393d9", null ], - [ "operator*", "classfmt_1_1v5_1_1internal_1_1counting__iterator.html#aeb8e427b454f5b1669726a550df4f50e", null ], + [ "count", "classfmt_1_1v5_1_1internal_1_1counting__iterator.html#a51100408c41b02a57706c9056f49f68a", null ], + [ "operator*", "classfmt_1_1v5_1_1internal_1_1counting__iterator.html#ad5e116609d012ecd0316ec8fb70b06f9", null ], [ "operator++", "classfmt_1_1v5_1_1internal_1_1counting__iterator.html#a5f49bbf0aec176d242443c81811b439c", null ], [ "operator++", "classfmt_1_1v5_1_1internal_1_1counting__iterator.html#ab92c73e74847673855c24767e21430dd", null ] ]; \ No newline at end of file diff --git a/docs/classfmt_1_1v5_1_1internal_1_1cstring__type__checker-members.html b/docs/classfmt_1_1v5_1_1internal_1_1cstring__type__checker-members.html index a06b6a6..eea4ef3 100644 --- a/docs/classfmt_1_1v5_1_1internal_1_1cstring__type__checker-members.html +++ b/docs/classfmt_1_1v5_1_1internal_1_1cstring__type__checker-members.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Member List @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -104,7 +124,7 @@ $(document).ready(function(){initNavTree('classfmt_1_1v5_1_1internal_1_1cstring_
    + doxygen 1.8.11
diff --git a/docs/classfmt_1_1v5_1_1internal_1_1cstring__type__checker.html b/docs/classfmt_1_1v5_1_1internal_1_1cstring__type__checker.html index 3be9434..1a26c87 100644 --- a/docs/classfmt_1_1v5_1_1internal_1_1cstring__type__checker.html +++ b/docs/classfmt_1_1v5_1_1internal_1_1cstring__type__checker.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: fmt::v5::internal::cstring_type_checker< ErrorHandler > Class Template Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -100,7 +120,9 @@ $(document).ready(function(){initNavTree('classfmt_1_1v5_1_1internal_1_1cstring_ Inheritance diagram for fmt::v5::internal::cstring_type_checker< ErrorHandler >:
- + + +
class fmt::v5::internal::cstring_type_checker< ErrorHandler > -

Definition at line 1263 of file format.h.

+

Definition at line 1263 of file format.h.

Constructor & Destructor Documentation

- -

◆ cstring_type_checker()

- +
@@ -145,14 +165,12 @@ template<typename ErrorHandler >

@@ -117,11 +139,9 @@ Public Member Functions

-

Definition at line 1265 of file format.h.

+

Definition at line 1265 of file format.h.

Member Function Documentation

- -

◆ on_pointer()

- +
@@ -175,13 +193,11 @@ template<typename ErrorHandler >
-

Definition at line 1269 of file format.h.

+

Definition at line 1269 of file format.h.

- -

◆ on_string()

- +
@@ -204,7 +220,7 @@ template<typename ErrorHandler >
-

Definition at line 1268 of file format.h.

+

Definition at line 1268 of file format.h.

@@ -219,7 +235,7 @@ template<typename ErrorHandler > + doxygen 1.8.11 diff --git a/docs/classfmt_1_1v5_1_1internal_1_1custom__formatter-members.html b/docs/classfmt_1_1v5_1_1internal_1_1custom__formatter-members.html index 92facd8..1a9d477 100644 --- a/docs/classfmt_1_1v5_1_1internal_1_1custom__formatter-members.html +++ b/docs/classfmt_1_1v5_1_1internal_1_1custom__formatter-members.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Member List @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -95,8 +115,8 @@ $(document).ready(function(){initNavTree('classfmt_1_1v5_1_1internal_1_1custom__

This is the complete list of members for fmt::v5::internal::custom_formatter< Char, Context >, including all inherited members.

- - + +
custom_formatter(Context &ctx)fmt::v5::internal::custom_formatter< Char, Context >inlineexplicit
operator()(typename basic_format_arg< Context >::handle h) constfmt::v5::internal::custom_formatter< Char, Context >inline
operator()(T) constfmt::v5::internal::custom_formatter< Char, Context >inline
operator()(typename basic_format_arg< Context >::handle h) const fmt::v5::internal::custom_formatter< Char, Context >inline
operator()(T) const fmt::v5::internal::custom_formatter< Char, Context >inline
@@ -104,7 +124,7 @@ $(document).ready(function(){initNavTree('classfmt_1_1v5_1_1internal_1_1custom__
    + doxygen 1.8.11
diff --git a/docs/classfmt_1_1v5_1_1internal_1_1custom__formatter.html b/docs/classfmt_1_1v5_1_1internal_1_1custom__formatter.html index 0e0590d..7b83982 100644 --- a/docs/classfmt_1_1v5_1_1internal_1_1custom__formatter.html +++ b/docs/classfmt_1_1v5_1_1internal_1_1custom__formatter.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: fmt::v5::internal::custom_formatter< Char, Context > Class Template Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -101,31 +121,29 @@ Inheritance diagram for fmt::v5::internal::custom_formatter< Char, Context &g
- + fmt::v5::internal::function< bool > - -
+ +
- - - - - + + + + +

Public Member Functions

 custom_formatter (Context &ctx)
 
bool operator() (typename basic_format_arg< Context >::handle h) const
 
template<typename T >
bool operator() (T) const
 
bool operator() (typename basic_format_arg< Context >::handle h) const
 
template<typename T >
bool operator() (T) const
 

Detailed Description

template<typename Char, typename Context>
class fmt::v5::internal::custom_formatter< Char, Context >

-

Definition at line 1480 of file format.h.

+

Definition at line 1480 of file format.h.

Constructor & Destructor Documentation

- -

◆ custom_formatter()

- +
@@ -149,14 +167,40 @@ template<typename Char, typename Context>
-

Definition at line 1485 of file format.h.

+

Definition at line 1485 of file format.h.

Member Function Documentation

- -

◆ operator()() [1/2]

+ +
+
+
+template<typename Char, typename Context>
+ + + + + +
+ + + + + + + + +
bool fmt::v5::internal::custom_formatter< Char, Context >::operator() (typename basic_format_arg< Context >::handle h) const
+
+inline
+
+

Definition at line 1487 of file format.h.

+ +
+
+
@@ -182,37 +226,7 @@ template<typename T >
-

Definition at line 1493 of file format.h.

- -
-
- -

◆ operator()() [2/2]

- -
-
-
-template<typename Char, typename Context>
- - - - - -
- - - - - - - - -
bool fmt::v5::internal::custom_formatter< Char, Context >::operator() (typename basic_format_arg< Context >::handle h) const
-
-inline
-
- -

Definition at line 1487 of file format.h.

+

Definition at line 1493 of file format.h.

@@ -227,7 +241,7 @@ template<typename Char, typename Context> + doxygen 1.8.11 diff --git a/docs/classfmt_1_1v5_1_1internal_1_1custom__formatter.js b/docs/classfmt_1_1v5_1_1internal_1_1custom__formatter.js index 27789ed..08a8183 100644 --- a/docs/classfmt_1_1v5_1_1internal_1_1custom__formatter.js +++ b/docs/classfmt_1_1v5_1_1internal_1_1custom__formatter.js @@ -1,6 +1,6 @@ var classfmt_1_1v5_1_1internal_1_1custom__formatter = [ [ "custom_formatter", "classfmt_1_1v5_1_1internal_1_1custom__formatter.html#ac2612121f51ea49d01b48a368899cbe9", null ], - [ "operator()", "classfmt_1_1v5_1_1internal_1_1custom__formatter.html#a6561dbaebd329e3fcf614224764b860f", null ], - [ "operator()", "classfmt_1_1v5_1_1internal_1_1custom__formatter.html#a42116f5a926129d0caee0c8996923458", null ] + [ "operator()", "classfmt_1_1v5_1_1internal_1_1custom__formatter.html#a0cc11bc1184cb874fc3ca5567a3f41af", null ], + [ "operator()", "classfmt_1_1v5_1_1internal_1_1custom__formatter.html#ae8293ea06db4fe475366e6f70811e486", null ] ]; \ No newline at end of file diff --git a/docs/classfmt_1_1v5_1_1internal_1_1decimal__formatter-members.html b/docs/classfmt_1_1v5_1_1internal_1_1decimal__formatter-members.html index c525704..2142760 100644 --- a/docs/classfmt_1_1v5_1_1internal_1_1decimal__formatter-members.html +++ b/docs/classfmt_1_1v5_1_1internal_1_1decimal__formatter-members.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Member List @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -103,7 +123,7 @@ $(document).ready(function(){initNavTree('classfmt_1_1v5_1_1internal_1_1decimal_
    + doxygen 1.8.11
diff --git a/docs/classfmt_1_1v5_1_1internal_1_1decimal__formatter.html b/docs/classfmt_1_1v5_1_1internal_1_1decimal__formatter.html index 4e7d01d..429117c 100644 --- a/docs/classfmt_1_1v5_1_1internal_1_1decimal__formatter.html +++ b/docs/classfmt_1_1v5_1_1internal_1_1decimal__formatter.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: fmt::v5::internal::decimal_formatter Class Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -101,10 +121,10 @@ Inheritance diagram for fmt::v5::internal::decimal_formatter:
- + fmt::v5::internal::decimal_formatter_null - -
+ + @@ -116,11 +136,9 @@ Public Member Functions

Public Member Functions

Detailed Description

-

Definition at line 847 of file format.h.

+

Definition at line 847 of file format.h.

Constructor & Destructor Documentation

- -

◆ decimal_formatter()

- +
@@ -142,14 +160,12 @@ Public Member Functions
-

Definition at line 856 of file format.h.

+

Definition at line 856 of file format.h.

Member Function Documentation

- -

◆ on()

- +
@@ -173,7 +189,7 @@ template<unsigned N>
-

Definition at line 858 of file format.h.

+

Definition at line 858 of file format.h.

@@ -188,7 +204,7 @@ template<unsigned N> + doxygen 1.8.11 diff --git a/docs/classfmt_1_1v5_1_1internal_1_1decimal__formatter__null-members.html b/docs/classfmt_1_1v5_1_1internal_1_1decimal__formatter__null-members.html index 346fd12..211a62b 100644 --- a/docs/classfmt_1_1v5_1_1internal_1_1decimal__formatter__null-members.html +++ b/docs/classfmt_1_1v5_1_1internal_1_1decimal__formatter__null-members.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Member List @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -104,7 +124,7 @@ $(document).ready(function(){initNavTree('classfmt_1_1v5_1_1internal_1_1decimal_
    + doxygen 1.8.11
diff --git a/docs/classfmt_1_1v5_1_1internal_1_1decimal__formatter__null.html b/docs/classfmt_1_1v5_1_1internal_1_1decimal__formatter__null.html index 7887c39..6daba13 100644 --- a/docs/classfmt_1_1v5_1_1internal_1_1decimal__formatter__null.html +++ b/docs/classfmt_1_1v5_1_1internal_1_1decimal__formatter__null.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: fmt::v5::internal::decimal_formatter_null Class Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -101,10 +121,10 @@ Inheritance diagram for fmt::v5::internal::decimal_formatter_null:
- + fmt::v5::internal::decimal_formatter - -
+ + @@ -122,11 +142,9 @@ Public Member Functions

Public Member Functions

Detailed Description

-

Definition at line 886 of file format.h.

+

Definition at line 886 of file format.h.

Constructor & Destructor Documentation

- -

◆ decimal_formatter_null()

- +
@@ -148,14 +166,12 @@ Public Member Functions
-

Definition at line 888 of file format.h.

+

Definition at line 888 of file format.h.

Member Function Documentation

- -

◆ on()

- +
@@ -179,7 +195,7 @@ template<unsigned N>
-

Definition at line 890 of file format.h.

+

Definition at line 890 of file format.h.

@@ -194,7 +210,7 @@ template<unsigned N> + doxygen 1.8.11 diff --git a/docs/classfmt_1_1v5_1_1internal_1_1dynamic__specs__handler-members.html b/docs/classfmt_1_1v5_1_1internal_1_1dynamic__specs__handler-members.html index b5d1972..73a6c90 100644 --- a/docs/classfmt_1_1v5_1_1internal_1_1dynamic__specs__handler-members.html +++ b/docs/classfmt_1_1v5_1_1internal_1_1dynamic__specs__handler-members.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Member List @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -102,13 +122,13 @@ $(document).ready(function(){initNavTree('classfmt_1_1v5_1_1internal_1_1dynamic_ on_dynamic_precision(Id arg_id)fmt::v5::internal::dynamic_specs_handler< ParseContext >inline on_dynamic_width(Id arg_id)fmt::v5::internal::dynamic_specs_handler< ParseContext >inline on_error(const char *message)fmt::v5::internal::dynamic_specs_handler< ParseContext >inline - on_fill(ParseContext::char_type fill)fmt::v5::internal::specs_setter< ParseContext::char_type >inline + on_fill(ParseContext::char_typefill)fmt::v5::internal::specs_setter< ParseContext::char_type >inline on_hash()fmt::v5::internal::specs_setter< ParseContext::char_type >inline on_minus()fmt::v5::internal::specs_setter< ParseContext::char_type >inline on_plus()fmt::v5::internal::specs_setter< ParseContext::char_type >inline on_precision(unsigned precision)fmt::v5::internal::specs_setter< ParseContext::char_type >inline on_space()fmt::v5::internal::specs_setter< ParseContext::char_type >inline - on_type(ParseContext::char_type type)fmt::v5::internal::specs_setter< ParseContext::char_type >inline + on_type(ParseContext::char_typetype)fmt::v5::internal::specs_setter< ParseContext::char_type >inline on_width(unsigned width)fmt::v5::internal::specs_setter< ParseContext::char_type >inline on_zero()fmt::v5::internal::specs_setter< ParseContext::char_type >inline specs_setter(basic_format_specs< ParseContext::char_type > &specs)fmt::v5::internal::specs_setter< ParseContext::char_type >inlineexplicit @@ -120,7 +140,7 @@ $(document).ready(function(){initNavTree('classfmt_1_1v5_1_1internal_1_1dynamic_
    + doxygen 1.8.11
diff --git a/docs/classfmt_1_1v5_1_1internal_1_1dynamic__specs__handler.html b/docs/classfmt_1_1v5_1_1internal_1_1dynamic__specs__handler.html index e5031f6..19eee10 100644 --- a/docs/classfmt_1_1v5_1_1internal_1_1dynamic__specs__handler.html +++ b/docs/classfmt_1_1v5_1_1internal_1_1dynamic__specs__handler.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: fmt::v5::internal::dynamic_specs_handler< ParseContext > Class Template Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -102,10 +122,10 @@ Inheritance diagram for fmt::v5::internal::dynamic_specs_handler< ParseContex
- + fmt::v5::internal::specs_setter< ParseContext::char_type > - -
+ +
@@ -133,7 +153,7 @@ Public Member Functions - + @@ -151,7 +171,7 @@ Public Member Functions - +

Public Types

 
void on_align (alignment align)
 
void on_fill (ParseContext::char_type fill)
void on_fill (ParseContext::char_typefill)
 
void on_plus ()
 
 
void end_precision ()
 
void on_type (ParseContext::char_type type)
void on_type (ParseContext::char_typetype)
 
class fmt::v5::internal::dynamic_specs_handler< ParseContext > -

Definition at line 1741 of file format.h.

+

Definition at line 1741 of file format.h.

Member Typedef Documentation

- -

◆ char_type

- +
@@ -181,14 +199,12 @@ template<typename ParseContext>

@@ -165,11 +185,9 @@ Additional Inherited Members

-

Definition at line 1744 of file format.h.

+

Definition at line 1744 of file format.h.

Constructor & Destructor Documentation

- -

◆ dynamic_specs_handler() [1/2]

- +
@@ -222,13 +238,11 @@ template<typename ParseContext>
-

Definition at line 1746 of file format.h.

+

Definition at line 1746 of file format.h.

- -

◆ dynamic_specs_handler() [2/2]

- +
@@ -252,14 +266,12 @@ template<typename ParseContext>
-

Definition at line 1750 of file format.h.

+

Definition at line 1750 of file format.h.

Member Function Documentation

- -

◆ on_dynamic_precision()

- +
@@ -285,13 +297,11 @@ template<typename Id >
-

Definition at line 1760 of file format.h.

+

Definition at line 1760 of file format.h.

- -

◆ on_dynamic_width()

- +
@@ -317,13 +327,11 @@ template<typename Id >
-

Definition at line 1755 of file format.h.

+

Definition at line 1755 of file format.h.

- -

◆ on_error()

- +
@@ -347,7 +355,7 @@ template<typename ParseContext>
-

Definition at line 1764 of file format.h.

+

Definition at line 1764 of file format.h.

@@ -362,7 +370,7 @@ template<typename ParseContext> + doxygen 1.8.11 diff --git a/docs/classfmt_1_1v5_1_1internal_1_1float__type__checker-members.html b/docs/classfmt_1_1v5_1_1internal_1_1float__type__checker-members.html index 911e660..3f70c48 100644 --- a/docs/classfmt_1_1v5_1_1internal_1_1float__type__checker-members.html +++ b/docs/classfmt_1_1v5_1_1internal_1_1float__type__checker-members.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Member List @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -107,7 +127,7 @@ $(document).ready(function(){initNavTree('classfmt_1_1v5_1_1internal_1_1float__t
    + doxygen 1.8.11
diff --git a/docs/classfmt_1_1v5_1_1internal_1_1float__type__checker.html b/docs/classfmt_1_1v5_1_1internal_1_1float__type__checker.html index 10739df..5b4223f 100644 --- a/docs/classfmt_1_1v5_1_1internal_1_1float__type__checker.html +++ b/docs/classfmt_1_1v5_1_1internal_1_1float__type__checker.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: fmt::v5::internal::float_type_checker< ErrorHandler > Class Template Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -100,7 +120,9 @@ $(document).ready(function(){initNavTree('classfmt_1_1v5_1_1internal_1_1float__t Inheritance diagram for fmt::v5::internal::float_type_checker< ErrorHandler >:
- + + +
class fmt::v5::internal::float_type_checker< ErrorHandler > -

Definition at line 1232 of file format.h.

+

Definition at line 1232 of file format.h.

Constructor & Destructor Documentation

- -

◆ float_type_checker()

- +
@@ -151,14 +171,12 @@ template<typename ErrorHandler >

@@ -123,11 +145,9 @@ Public Member Functions

-

Definition at line 1234 of file format.h.

+

Definition at line 1234 of file format.h.

Member Function Documentation

- -

◆ on_error()

- +
@@ -181,13 +199,11 @@ template<typename ErrorHandler >
-

Definition at line 1242 of file format.h.

+

Definition at line 1242 of file format.h.

- -

◆ on_exp()

- +
@@ -210,13 +226,11 @@ template<typename ErrorHandler >
-

Definition at line 1238 of file format.h.

+

Definition at line 1238 of file format.h.

- -

◆ on_fixed()

- +
@@ -239,13 +253,11 @@ template<typename ErrorHandler >
-

Definition at line 1239 of file format.h.

+

Definition at line 1239 of file format.h.

- -

◆ on_general()

- +
@@ -268,13 +280,11 @@ template<typename ErrorHandler >
-

Definition at line 1237 of file format.h.

+

Definition at line 1237 of file format.h.

- -

◆ on_hex()

- +
@@ -297,7 +307,7 @@ template<typename ErrorHandler >
-

Definition at line 1240 of file format.h.

+

Definition at line 1240 of file format.h.

@@ -312,7 +322,7 @@ template<typename ErrorHandler > + doxygen 1.8.11 diff --git a/docs/classfmt_1_1v5_1_1internal_1_1format__string__checker-members.html b/docs/classfmt_1_1v5_1_1internal_1_1format__string__checker-members.html index 88fbc2f..5264cfa 100644 --- a/docs/classfmt_1_1v5_1_1internal_1_1format__string__checker-members.html +++ b/docs/classfmt_1_1v5_1_1internal_1_1format__string__checker-members.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Member List @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -109,7 +129,7 @@ $(document).ready(function(){initNavTree('classfmt_1_1v5_1_1internal_1_1format__
    + doxygen 1.8.11
diff --git a/docs/classfmt_1_1v5_1_1internal_1_1format__string__checker.html b/docs/classfmt_1_1v5_1_1internal_1_1format__string__checker.html index e33c148..ba5bc27 100644 --- a/docs/classfmt_1_1v5_1_1internal_1_1format__string__checker.html +++ b/docs/classfmt_1_1v5_1_1internal_1_1format__string__checker.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: fmt::v5::internal::format_string_checker< Char, ErrorHandler, Args > Class Template Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -121,11 +141,9 @@ Public Member Functions class fmt::v5::internal::format_string_checker< Char, ErrorHandler, Args > -

Definition at line 2060 of file format.h.

+

Definition at line 2060 of file format.h.

Constructor & Destructor Documentation

- -

◆ format_string_checker()

- +
@@ -159,14 +177,12 @@ template<typename Char , typename ErrorHandler , typename... Args>
-

Definition at line 2062 of file format.h.

+

Definition at line 2062 of file format.h.

Member Function Documentation

- -

◆ on_arg_id() [1/3]

- +
@@ -189,43 +205,11 @@ template<typename Char , typename ErrorHandler , typename... Args>
-

Definition at line 2069 of file format.h.

+

Definition at line 2069 of file format.h.

- -

◆ on_arg_id() [2/3]

- -
-
-
-template<typename Char , typename ErrorHandler , typename... Args>
- - - - - -
- - - - - - - - -
void fmt::v5::internal::format_string_checker< Char, ErrorHandler, Args >::on_arg_id (basic_string_view< Char > )
-
-inline
-
- -

Definition at line 2078 of file format.h.

- -
-
- -

◆ on_arg_id() [3/3]

- +
@@ -249,13 +233,39 @@ template<typename Char , typename ErrorHandler , typename... Args>
-

Definition at line 2073 of file format.h.

+

Definition at line 2073 of file format.h.

- -

◆ on_error()

+ +
+
+
+template<typename Char , typename ErrorHandler , typename... Args>
+ + + + + +
+ + + + + + + + +
void fmt::v5::internal::format_string_checker< Char, ErrorHandler, Args >::on_arg_id (basic_string_view< Char > )
+
+inline
+
+

Definition at line 2078 of file format.h.

+ +
+
+
@@ -279,13 +289,11 @@ template<typename Char , typename ErrorHandler , typename... Args>
-

Definition at line 2088 of file format.h.

+

Definition at line 2088 of file format.h.

- -

◆ on_format_specs()

- +
@@ -319,13 +327,11 @@ template<typename Char , typename ErrorHandler , typename... Args>
-

Definition at line 2082 of file format.h.

+

Definition at line 2082 of file format.h.

- -

◆ on_replacement_field()

- +
@@ -349,13 +355,11 @@ template<typename Char , typename ErrorHandler , typename... Args>
-

Definition at line 2080 of file format.h.

+

Definition at line 2080 of file format.h.

- -

◆ on_text()

- +
@@ -389,7 +393,7 @@ template<typename Char , typename ErrorHandler , typename... Args>
-

Definition at line 2067 of file format.h.

+

Definition at line 2067 of file format.h.

@@ -404,7 +408,7 @@ template<typename Char , typename ErrorHandler , typename... Args> + doxygen 1.8.11 diff --git a/docs/classfmt_1_1v5_1_1internal_1_1format__string__checker.js b/docs/classfmt_1_1v5_1_1internal_1_1format__string__checker.js index 25d1219..e7891d2 100644 --- a/docs/classfmt_1_1v5_1_1internal_1_1format__string__checker.js +++ b/docs/classfmt_1_1v5_1_1internal_1_1format__string__checker.js @@ -2,8 +2,8 @@ var classfmt_1_1v5_1_1internal_1_1format__string__checker = [ [ "format_string_checker", "classfmt_1_1v5_1_1internal_1_1format__string__checker.html#affdef5d73dd28bcbe91c68f617f7b419", null ], [ "on_arg_id", "classfmt_1_1v5_1_1internal_1_1format__string__checker.html#a8f5842b3b1c1f74fdbfe1a7139166272", null ], - [ "on_arg_id", "classfmt_1_1v5_1_1internal_1_1format__string__checker.html#a3acec6cf8e16fcae6dd75da1930684f6", null ], [ "on_arg_id", "classfmt_1_1v5_1_1internal_1_1format__string__checker.html#a149ce0957470639d28afc84c3205db79", null ], + [ "on_arg_id", "classfmt_1_1v5_1_1internal_1_1format__string__checker.html#a3acec6cf8e16fcae6dd75da1930684f6", null ], [ "on_error", "classfmt_1_1v5_1_1internal_1_1format__string__checker.html#aa08622a95cb0dd13bc3295f347f2e5ac", null ], [ "on_format_specs", "classfmt_1_1v5_1_1internal_1_1format__string__checker.html#af211eec79b6f10bba9828dd5bc486fb8", null ], [ "on_replacement_field", "classfmt_1_1v5_1_1internal_1_1format__string__checker.html#a76c07cc9b08a444f3587b3382250107e", null ], diff --git a/docs/classfmt_1_1v5_1_1internal_1_1formatbuf-members.html b/docs/classfmt_1_1v5_1_1internal_1_1formatbuf-members.html index 26bdbf9..307064b 100644 --- a/docs/classfmt_1_1v5_1_1internal_1_1formatbuf-members.html +++ b/docs/classfmt_1_1v5_1_1internal_1_1formatbuf-members.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Member List @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -104,7 +124,7 @@ $(document).ready(function(){initNavTree('classfmt_1_1v5_1_1internal_1_1formatbu
    + doxygen 1.8.11
diff --git a/docs/classfmt_1_1v5_1_1internal_1_1formatbuf.html b/docs/classfmt_1_1v5_1_1internal_1_1formatbuf.html index d19847b..1cc56c9 100644 --- a/docs/classfmt_1_1v5_1_1internal_1_1formatbuf.html +++ b/docs/classfmt_1_1v5_1_1internal_1_1formatbuf.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: fmt::v5::internal::formatbuf< Char > Class Template Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -101,7 +121,9 @@ $(document).ready(function(){initNavTree('classfmt_1_1v5_1_1internal_1_1formatbu Inheritance diagram for fmt::v5::internal::formatbuf< Char >:
- + + +
class fmt::v5::internal::formatbuf< Char > -

Definition at line 18 of file ostream.h.

+

Definition at line 18 of file ostream.h.

Constructor & Destructor Documentation

- -

◆ formatbuf()

- +
@@ -149,14 +169,12 @@ template<class Char>

@@ -121,11 +143,9 @@ Protected Member Functions

-

Definition at line 26 of file ostream.h.

+

Definition at line 26 of file ostream.h.

Member Function Documentation

- -

◆ overflow()

- +
@@ -180,13 +198,11 @@ template<class Char>
-

Definition at line 36 of file ostream.h.

+

Definition at line 36 of file ostream.h.

- -

◆ xsputn()

- +
@@ -220,7 +236,7 @@ template<class Char>
-

Definition at line 42 of file ostream.h.

+

Definition at line 42 of file ostream.h.

@@ -235,7 +251,7 @@ template<class Char> + doxygen 1.8.11 diff --git a/docs/classfmt_1_1v5_1_1internal_1_1fp-members.html b/docs/classfmt_1_1v5_1_1internal_1_1fp-members.html index dacddc2..7acdd55 100644 --- a/docs/classfmt_1_1v5_1_1internal_1_1fp-members.html +++ b/docs/classfmt_1_1v5_1_1internal_1_1fp-members.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Member List @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -94,7 +114,7 @@ $(document).ready(function(){initNavTree('classfmt_1_1v5_1_1internal_1_1fp.html'

This is the complete list of members for fmt::v5::internal::fp, including all inherited members.

- + @@ -109,7 +129,7 @@ $(document).ready(function(){initNavTree('classfmt_1_1v5_1_1internal_1_1fp.html'
    + doxygen 1.8.11
diff --git a/docs/classfmt_1_1v5_1_1internal_1_1fp.html b/docs/classfmt_1_1v5_1_1internal_1_1fp.html index 66bcb3b..1dc6fa6 100644 --- a/docs/classfmt_1_1v5_1_1internal_1_1fp.html +++ b/docs/classfmt_1_1v5_1_1internal_1_1fp.html @@ -1,10 +1,9 @@ - + - - +Livox SDK API: fmt::v5::internal::fp Class Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ @@ -39,22 +41,42 @@
compute_boundaries(fp &lower, fp &upper) constfmt::v5::internal::fpinline
compute_boundaries(fp &lower, fp &upper) const fmt::v5::internal::fpinline
efmt::v5::internal::fp
ffmt::v5::internal::fp
fp()fmt::v5::internal::fpinline
Livox SDK API -  V2.0.0 +  V2.1.0
- + - - - - + +
@@ -111,8 +131,8 @@ Public Member Functions template<int SHIFT = 0> void normalize ()   -void compute_boundaries (fp &lower, fp &upper) const -  +void compute_boundaries (fp &lower, fp &upper) const +  @@ -128,11 +148,9 @@ Static Public Attributes

Public Attributes

Detailed Description

-

Definition at line 353 of file format-inl.h.

+

Definition at line 353 of file format-inl.h.

Constructor & Destructor Documentation

- -

◆ fp() [1/3]

- +
@@ -153,13 +171,11 @@ Static Public Attributes
-

Definition at line 374 of file format-inl.h.

+

Definition at line 374 of file format-inl.h.

- -

◆ fp() [2/3]

- +
@@ -191,13 +207,11 @@ Static Public Attributes
-

Definition at line 375 of file format-inl.h.

+

Definition at line 375 of file format-inl.h.

- -

◆ fp() [3/3]

- +
@@ -221,14 +235,12 @@ template<typename Double >
-

Definition at line 380 of file format-inl.h.

+

Definition at line 380 of file format-inl.h.

Member Function Documentation

- -

◆ compute_boundaries()

- +
@@ -260,13 +272,11 @@ template<typename Double >
-

Definition at line 418 of file format-inl.h.

+

Definition at line 418 of file format-inl.h.

- -

◆ normalize()

- +
@@ -289,14 +299,12 @@ template<int SHIFT = 0>
-

Definition at line 401 of file format-inl.h.

+

Definition at line 401 of file format-inl.h.

Member Data Documentation

- -

◆ e

- +
@@ -306,13 +314,11 @@ template<int SHIFT = 0>
-

Definition at line 369 of file format-inl.h.

+

Definition at line 369 of file format-inl.h.

- -

◆ f

- +
@@ -322,13 +328,11 @@ template<int SHIFT = 0>
-

Definition at line 368 of file format-inl.h.

+

Definition at line 368 of file format-inl.h.

- -

◆ significand_size

- +
@@ -345,10 +349,8 @@ template<int SHIFT = 0>
-Initial value:
=
-
sizeof(significand_type) * char_size
-
-

Definition at line 371 of file format-inl.h.

+Initial value:
=
sizeof(significand_type) * char_size
+

Definition at line 371 of file format-inl.h.

@@ -363,7 +365,7 @@ template<int SHIFT = 0>
+ doxygen 1.8.11 diff --git a/docs/classfmt_1_1v5_1_1internal_1_1fp.js b/docs/classfmt_1_1v5_1_1internal_1_1fp.js index a2ea0e7..72e7132 100644 --- a/docs/classfmt_1_1v5_1_1internal_1_1fp.js +++ b/docs/classfmt_1_1v5_1_1internal_1_1fp.js @@ -3,7 +3,7 @@ var classfmt_1_1v5_1_1internal_1_1fp = [ "fp", "classfmt_1_1v5_1_1internal_1_1fp.html#a4461b3a2cdedfe644911f3984180a0b9", null ], [ "fp", "classfmt_1_1v5_1_1internal_1_1fp.html#a268d69d61ba1e06520408dfdca76bba1", null ], [ "fp", "classfmt_1_1v5_1_1internal_1_1fp.html#adfdc87ad85220297755fbe7c6a8e1590", null ], - [ "compute_boundaries", "classfmt_1_1v5_1_1internal_1_1fp.html#ab9070b4fc350e45c0d3c9685e8240fc2", null ], + [ "compute_boundaries", "classfmt_1_1v5_1_1internal_1_1fp.html#a294c8e7cf734cf2471c0e123d0706ce7", null ], [ "normalize", "classfmt_1_1v5_1_1internal_1_1fp.html#ab59ad7dfcd4ed603592d93cf4b7aaa42", null ], [ "e", "classfmt_1_1v5_1_1internal_1_1fp.html#a1637cce65f488ce657cb23db4c7c0219", null ], [ "f", "classfmt_1_1v5_1_1internal_1_1fp.html#ad52e794a6624dfc7d992bd2eea3ab23f", null ], diff --git a/docs/classfmt_1_1v5_1_1internal_1_1int__type__checker-members.html b/docs/classfmt_1_1v5_1_1internal_1_1int__type__checker-members.html index 9e0690d..88d1200 100644 --- a/docs/classfmt_1_1v5_1_1internal_1_1int__type__checker-members.html +++ b/docs/classfmt_1_1v5_1_1internal_1_1int__type__checker-members.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Member List @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -108,7 +128,7 @@ $(document).ready(function(){initNavTree('classfmt_1_1v5_1_1internal_1_1int__typ
    + doxygen 1.8.11
diff --git a/docs/classfmt_1_1v5_1_1internal_1_1int__type__checker.html b/docs/classfmt_1_1v5_1_1internal_1_1int__type__checker.html index f9ec8b3..2cc85d3 100644 --- a/docs/classfmt_1_1v5_1_1internal_1_1int__type__checker.html +++ b/docs/classfmt_1_1v5_1_1internal_1_1int__type__checker.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: fmt::v5::internal::int_type_checker< ErrorHandler > Class Template Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -100,7 +120,9 @@ $(document).ready(function(){initNavTree('classfmt_1_1v5_1_1internal_1_1int__typ Inheritance diagram for fmt::v5::internal::int_type_checker< ErrorHandler >:
- + + +
class fmt::v5::internal::int_type_checker< ErrorHandler > -

Definition at line 1216 of file format.h.

+

Definition at line 1216 of file format.h.

Constructor & Destructor Documentation

- -

◆ int_type_checker()

- +
@@ -153,14 +173,12 @@ template<typename ErrorHandler >

@@ -125,11 +147,9 @@ Public Member Functions

-

Definition at line 1218 of file format.h.

+

Definition at line 1218 of file format.h.

Member Function Documentation

- -

◆ on_bin()

- +
@@ -183,13 +201,11 @@ template<typename ErrorHandler >
-

Definition at line 1222 of file format.h.

+

Definition at line 1222 of file format.h.

- -

◆ on_dec()

- +
@@ -212,13 +228,11 @@ template<typename ErrorHandler >
-

Definition at line 1220 of file format.h.

+

Definition at line 1220 of file format.h.

- -

◆ on_error()

- +
@@ -241,13 +255,11 @@ template<typename ErrorHandler >
-

Definition at line 1226 of file format.h.

+

Definition at line 1226 of file format.h.

- -

◆ on_hex()

- +
@@ -270,13 +282,11 @@ template<typename ErrorHandler >
-

Definition at line 1221 of file format.h.

+

Definition at line 1221 of file format.h.

- -

◆ on_num()

- +
@@ -299,13 +309,11 @@ template<typename ErrorHandler >
-

Definition at line 1224 of file format.h.

+

Definition at line 1224 of file format.h.

- -

◆ on_oct()

- +
@@ -328,7 +336,7 @@ template<typename ErrorHandler >
-

Definition at line 1223 of file format.h.

+

Definition at line 1223 of file format.h.

@@ -343,7 +351,7 @@ template<typename ErrorHandler > + doxygen 1.8.11 diff --git a/docs/classfmt_1_1v5_1_1internal_1_1is__like__std__string-members.html b/docs/classfmt_1_1v5_1_1internal_1_1is__like__std__string-members.html index 8796bbf..5c949aa 100644 --- a/docs/classfmt_1_1v5_1_1internal_1_1is__like__std__string-members.html +++ b/docs/classfmt_1_1v5_1_1internal_1_1is__like__std__string-members.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Member List @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -102,7 +122,7 @@ $(document).ready(function(){initNavTree('classfmt_1_1v5_1_1internal_1_1is__like
    + doxygen 1.8.11
diff --git a/docs/classfmt_1_1v5_1_1internal_1_1is__like__std__string.html b/docs/classfmt_1_1v5_1_1internal_1_1is__like__std__string.html index e54b0ab..d77da1c 100644 --- a/docs/classfmt_1_1v5_1_1internal_1_1is__like__std__string.html +++ b/docs/classfmt_1_1v5_1_1internal_1_1is__like__std__string.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: fmt::v5::internal::is_like_std_string< T > Class Template Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -111,11 +131,9 @@ class fmt::v5::internal::is_like_std_string< T >

Return true value if T has std::string interface, like std::string_view.

-

Definition at line 78 of file ranges.h.

+

Definition at line 78 of file ranges.h.

Member Data Documentation

- -

◆ value

- +
@@ -134,10 +152,8 @@ template<typename T >
-Initial value:
=
-
!std::is_void<decltype(check<T>( NULL ))>::value
-
-

Definition at line 86 of file ranges.h.

+Initial value:
=
!std::is_void<decltype(check<T>( NULL ))>::value
+

Definition at line 86 of file ranges.h.

@@ -146,14 +162,13 @@ template<typename T > - diff --git a/docs/classfmt_1_1v5_1_1internal_1_1is__output__iterator-members.html b/docs/classfmt_1_1v5_1_1internal_1_1is__output__iterator-members.html index e1ab96d..e9277f4 100644 --- a/docs/classfmt_1_1v5_1_1internal_1_1is__output__iterator-members.html +++ b/docs/classfmt_1_1v5_1_1internal_1_1is__output__iterator-members.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Member List @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -102,7 +122,7 @@ $(document).ready(function(){initNavTree('classfmt_1_1v5_1_1internal_1_1is__outp
    + doxygen 1.8.11
diff --git a/docs/classfmt_1_1v5_1_1internal_1_1is__output__iterator.html b/docs/classfmt_1_1v5_1_1internal_1_1is__output__iterator.html index e230971..b4110c5 100644 --- a/docs/classfmt_1_1v5_1_1internal_1_1is__output__iterator.html +++ b/docs/classfmt_1_1v5_1_1internal_1_1is__output__iterator.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: fmt::v5::internal::is_output_iterator< It > Class Template Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -107,11 +127,9 @@ Static Public Attributes class fmt::v5::internal::is_output_iterator< It > -

Definition at line 3285 of file format.h.

+

Definition at line 3285 of file format.h.

Member Data Documentation

- -

◆ value

- +
@@ -131,7 +149,7 @@ template<typename It >
-

Definition at line 3302 of file format.h.

+

Definition at line 3302 of file format.h.

@@ -146,7 +164,7 @@ template<typename It > + doxygen 1.8.11 diff --git a/docs/classfmt_1_1v5_1_1internal_1_1is__streamable-members.html b/docs/classfmt_1_1v5_1_1internal_1_1is__streamable-members.html index fca36bd..88053ea 100644 --- a/docs/classfmt_1_1v5_1_1internal_1_1is__streamable-members.html +++ b/docs/classfmt_1_1v5_1_1internal_1_1is__streamable-members.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Member List @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -102,7 +122,7 @@ $(document).ready(function(){initNavTree('classfmt_1_1v5_1_1internal_1_1is__stre
    + doxygen 1.8.11
diff --git a/docs/classfmt_1_1v5_1_1internal_1_1is__streamable.html b/docs/classfmt_1_1v5_1_1internal_1_1is__streamable.html index 3e06758..71243b3 100644 --- a/docs/classfmt_1_1v5_1_1internal_1_1is__streamable.html +++ b/docs/classfmt_1_1v5_1_1internal_1_1is__streamable.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: fmt::v5::internal::is_streamable< T, Char > Class Template Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -107,11 +127,9 @@ Static Public Attributes class fmt::v5::internal::is_streamable< T, Char > -

Definition at line 58 of file ostream.h.

+

Definition at line 58 of file ostream.h.

Member Data Documentation

- -

◆ value

- +
@@ -131,7 +149,7 @@ template<typename T , typename Char >
-

Definition at line 71 of file ostream.h.

+

Definition at line 71 of file ostream.h.

@@ -146,7 +164,7 @@ template<typename T , typename Char > + doxygen 1.8.11 diff --git a/docs/classfmt_1_1v5_1_1internal_1_1is__zero__int-members.html b/docs/classfmt_1_1v5_1_1internal_1_1is__zero__int-members.html index dcb476c..72e3dec 100644 --- a/docs/classfmt_1_1v5_1_1internal_1_1is__zero__int-members.html +++ b/docs/classfmt_1_1v5_1_1internal_1_1is__zero__int-members.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Member List @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -103,7 +123,7 @@ $(document).ready(function(){initNavTree('classfmt_1_1v5_1_1internal_1_1is__zero
    + doxygen 1.8.11
diff --git a/docs/classfmt_1_1v5_1_1internal_1_1is__zero__int.html b/docs/classfmt_1_1v5_1_1internal_1_1is__zero__int.html index 5f6479f..1fc51e4 100644 --- a/docs/classfmt_1_1v5_1_1internal_1_1is__zero__int.html +++ b/docs/classfmt_1_1v5_1_1internal_1_1is__zero__int.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: fmt::v5::internal::is_zero_int Class Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -101,10 +121,10 @@ Inheritance diagram for fmt::v5::internal::is_zero_int:
- + fmt::v5::internal::function< bool > - -
+ + @@ -117,11 +137,9 @@ Public Member Functions

Public Member Functions

Detailed Description

-

Definition at line 183 of file printf.h.

+

Definition at line 183 of file printf.h.

Member Function Documentation

- -

◆ operator()() [1/2]

- +
@@ -145,13 +163,11 @@ template<typename T >
-

Definition at line 187 of file printf.h.

+

Definition at line 187 of file printf.h.

- -

◆ operator()() [2/2]

- +
@@ -175,7 +191,7 @@ template<typename T >
-

Definition at line 191 of file printf.h.

+

Definition at line 191 of file printf.h.

@@ -190,7 +206,7 @@ template<typename T > + doxygen 1.8.11 diff --git a/docs/classfmt_1_1v5_1_1internal_1_1locale__ref-members.html b/docs/classfmt_1_1v5_1_1internal_1_1locale__ref-members.html index d8cdab9..9a60f87 100644 --- a/docs/classfmt_1_1v5_1_1internal_1_1locale__ref-members.html +++ b/docs/classfmt_1_1v5_1_1internal_1_1locale__ref-members.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Member List @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -94,7 +114,7 @@ $(document).ready(function(){initNavTree('classfmt_1_1v5_1_1internal_1_1locale__

This is the complete list of members for fmt::v5::internal::locale_ref, including all inherited members.

- + @@ -105,7 +125,7 @@ $(document).ready(function(){initNavTree('classfmt_1_1v5_1_1internal_1_1locale__
    + doxygen 1.8.11
diff --git a/docs/classfmt_1_1v5_1_1internal_1_1locale__ref.html b/docs/classfmt_1_1v5_1_1internal_1_1locale__ref.html index 90054f3..73fb34e 100644 --- a/docs/classfmt_1_1v5_1_1internal_1_1locale__ref.html +++ b/docs/classfmt_1_1v5_1_1internal_1_1locale__ref.html @@ -1,10 +1,9 @@ - + - - +Livox SDK API: fmt::v5::internal::locale_ref Class Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ @@ -39,22 +41,42 @@
get() constfmt::v5::internal::locale_ref
get() const fmt::v5::internal::locale_ref
locale classfmt::v5::internal::locale_reffriend
locale_ref()fmt::v5::internal::locale_refinline
locale_ref(const Locale &loc)fmt::v5::internal::locale_refexplicit
Livox SDK API -  V2.0.0 +  V2.1.0
- + - - - - + +
@@ -105,9 +125,9 @@ Public Member Functions template<typename Locale >  locale_ref (const Locale &loc)   -template<typename Locale > -Locale get () const -  +template<typename Locale > +Locale get () const +  @@ -116,11 +136,9 @@ Friends

Friends

Detailed Description

-

Definition at line 972 of file core.h.

+

Definition at line 972 of file core.h.

Constructor & Destructor Documentation

- -

◆ locale_ref() [1/2]

- +
@@ -141,13 +159,11 @@ Friends
-

Definition at line 978 of file core.h.

+

Definition at line 978 of file core.h.

- -

◆ locale_ref() [2/2]

- +
@@ -171,14 +187,12 @@ template<typename Locale >
-

Definition at line 211 of file format-inl.h.

+

Definition at line 211 of file format-inl.h.

Member Function Documentation

- -

◆ get()

- +
@@ -193,14 +207,12 @@ template<typename Locale >
-

Definition at line 216 of file format-inl.h.

+

Definition at line 216 of file format-inl.h.

Friends And Related Function Documentation

- -

◆ locale

- +
@@ -218,7 +230,7 @@ template<typename Locale >
-

Definition at line 975 of file core.h.

+

Definition at line 975 of file core.h.

@@ -234,7 +246,7 @@ template<typename Locale >
+ doxygen 1.8.11 diff --git a/docs/classfmt_1_1v5_1_1internal_1_1locale__ref.js b/docs/classfmt_1_1v5_1_1internal_1_1locale__ref.js index d9a8210..e83a80f 100644 --- a/docs/classfmt_1_1v5_1_1internal_1_1locale__ref.js +++ b/docs/classfmt_1_1v5_1_1internal_1_1locale__ref.js @@ -2,6 +2,6 @@ var classfmt_1_1v5_1_1internal_1_1locale__ref = [ [ "locale_ref", "classfmt_1_1v5_1_1internal_1_1locale__ref.html#ae4ee3bc5f9b88dc96ece438fcbc10c22", null ], [ "locale_ref", "classfmt_1_1v5_1_1internal_1_1locale__ref.html#ae3997bdc7859ad4d18cbc86a702b61d7", null ], - [ "get", "classfmt_1_1v5_1_1internal_1_1locale__ref.html#a1c00987ce7b6a1a9160277505b2dc38d", null ], + [ "get", "classfmt_1_1v5_1_1internal_1_1locale__ref.html#a15607779d7a3af79b8f52a62a7f39828", null ], [ "locale", "classfmt_1_1v5_1_1internal_1_1locale__ref.html#a0a09223e17db306b813d8b07b4b344fc", null ] ]; \ No newline at end of file diff --git a/docs/classfmt_1_1v5_1_1internal_1_1null__terminating__iterator-members.html b/docs/classfmt_1_1v5_1_1internal_1_1null__terminating__iterator-members.html index 98442eb..c96ad0f 100644 --- a/docs/classfmt_1_1v5_1_1internal_1_1null__terminating__iterator-members.html +++ b/docs/classfmt_1_1v5_1_1internal_1_1null__terminating__iterator-members.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Member List @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -99,20 +119,20 @@ $(document).ready(function(){initNavTree('classfmt_1_1v5_1_1internal_1_1null__te null_terminating_iterator()fmt::v5::internal::null_terminating_iterator< Char >inline null_terminating_iterator(const Char *ptr, const Char *end)fmt::v5::internal::null_terminating_iterator< Char >inline null_terminating_iterator(const Range &r)fmt::v5::internal::null_terminating_iterator< Char >inlineexplicit - operator!=(null_terminating_iterator other) constfmt::v5::internal::null_terminating_iterator< Char >inline - operator*() constfmt::v5::internal::null_terminating_iterator< Char >inline + operator!=(null_terminating_iterator other) const fmt::v5::internal::null_terminating_iterator< Char >inline + operator*() const fmt::v5::internal::null_terminating_iterator< Char >inline operator+(difference_type n)fmt::v5::internal::null_terminating_iterator< Char >inline operator++()fmt::v5::internal::null_terminating_iterator< Char >inline operator++(int)fmt::v5::internal::null_terminating_iterator< Char >inline operator+=(difference_type n)fmt::v5::internal::null_terminating_iterator< Char >inline operator-(difference_type n)fmt::v5::internal::null_terminating_iterator< Char >inline - operator-(null_terminating_iterator other) constfmt::v5::internal::null_terminating_iterator< Char >inline + operator-(null_terminating_iterator other) const fmt::v5::internal::null_terminating_iterator< Char >inline operator--()fmt::v5::internal::null_terminating_iterator< Char >inline operator=(const Char *ptr)fmt::v5::internal::null_terminating_iterator< Char >inline - operator>=(null_terminating_iterator other) constfmt::v5::internal::null_terminating_iterator< Char >inline - pointerfmt::v5::internal::null_terminating_iterator< Char > - pointer_from(null_terminating_iterator< CharT > it)fmt::v5::internal::null_terminating_iterator< Char >friend - referencefmt::v5::internal::null_terminating_iterator< Char > + operator>=(null_terminating_iterator other) const fmt::v5::internal::null_terminating_iterator< Char >inline + pointer typedeffmt::v5::internal::null_terminating_iterator< Char > + pointer_from(null_terminating_iterator< CharT > it)fmt::v5::internal::null_terminating_iterator< Char >friend + reference typedeffmt::v5::internal::null_terminating_iterator< Char > value_type typedeffmt::v5::internal::null_terminating_iterator< Char >
@@ -121,7 +141,7 @@ $(document).ready(function(){initNavTree('classfmt_1_1v5_1_1internal_1_1null__te
    + doxygen 1.8.11
diff --git a/docs/classfmt_1_1v5_1_1internal_1_1null__terminating__iterator.html b/docs/classfmt_1_1v5_1_1internal_1_1null__terminating__iterator.html index 8b2390e..9b48ab7 100644 --- a/docs/classfmt_1_1v5_1_1internal_1_1null__terminating__iterator.html +++ b/docs/classfmt_1_1v5_1_1internal_1_1null__terminating__iterator.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: fmt::v5::internal::null_terminating_iterator< Char > Class Template Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -90,7 +110,6 @@ $(document).ready(function(){initNavTree('classfmt_1_1v5_1_1internal_1_1null__te
@@ -106,6 +125,10 @@ Public Types   typedef Char value_type   +typedef const Char * pointer +  +typedef const Char & reference +  typedef std::random_access_iterator_tag iterator_category   @@ -120,8 +143,8 @@ Public Member Functions - - + + @@ -134,36 +157,27 @@ Public Member Functions - - - - - - -
 
null_terminating_iteratoroperator= (const Char *ptr)
 
Char operator* () const
 
Char operator* () const
 
null_terminating_iterator operator++ ()
 
null_terminating_iterator operator++ (int)
 
null_terminating_iterator operator+= (difference_type n)
 
difference_type operator- (null_terminating_iterator other) const
 
bool operator!= (null_terminating_iterator other) const
 
bool operator>= (null_terminating_iterator other) const
 
- - - - - + + + + + +

-Public Attributes

const typedef Char * pointer
 
const typedef Char & reference
 
difference_type operator- (null_terminating_iterator other) const
 
bool operator!= (null_terminating_iterator other) const
 
bool operator>= (null_terminating_iterator other) const
 
- - - + + +

Friends

template<typename CharT >
const friend CharT * pointer_from (null_terminating_iterator< CharT > it)
 
template<typename CharT >
const CharT * pointer_from (null_terminating_iterator< CharT > it)
 

Detailed Description

template<typename Char>
class fmt::v5::internal::null_terminating_iterator< Char >

-

Definition at line 607 of file format.h.

+

Definition at line 607 of file format.h.

Member Typedef Documentation

- -

◆ difference_type

- +
@@ -175,13 +189,11 @@ template<typename Char>
-

Definition at line 25 of file printf.h.

+

Definition at line 25 of file printf.h.

- -

◆ iterator_category

- +
@@ -193,13 +205,43 @@ template<typename Char>
-

Definition at line 29 of file printf.h.

+

Definition at line 29 of file printf.h.

- -

◆ value_type

+ +
+
+
+template<typename Char>
+ + + + +
typedef const Char* fmt::v5::internal::null_terminating_iterator< Char >::pointer
+
+

Definition at line 27 of file printf.h.

+ +
+
+ +
+
+
+template<typename Char>
+ + + + +
typedef const Char& fmt::v5::internal::null_terminating_iterator< Char >::reference
+
+ +

Definition at line 28 of file printf.h.

+ +
+
+
@@ -211,14 +253,12 @@ template<typename Char>
-

Definition at line 26 of file printf.h.

+

Definition at line 26 of file printf.h.

Constructor & Destructor Documentation

- -

◆ null_terminating_iterator() [1/3]

- +
@@ -241,13 +281,11 @@ template<typename Char>
-

Definition at line 31 of file printf.h.

+

Definition at line 31 of file printf.h.

- -

◆ null_terminating_iterator() [2/3]

- +
@@ -281,13 +319,11 @@ template<typename Char>
-

Definition at line 33 of file printf.h.

+

Definition at line 33 of file printf.h.

- -

◆ null_terminating_iterator() [3/3]

- +
@@ -313,14 +349,12 @@ template<typename Range >
-

Definition at line 37 of file printf.h.

+

Definition at line 37 of file printf.h.

Member Function Documentation

- -

◆ operator!=()

- +
@@ -344,13 +378,11 @@ template<typename Char>
-

Definition at line 84 of file printf.h.

+

Definition at line 84 of file printf.h.

- -

◆ operator*()

- +
@@ -373,13 +405,11 @@ template<typename Char>
-

Definition at line 46 of file printf.h.

+

Definition at line 46 of file printf.h.

- -

◆ operator+()

- +
@@ -403,13 +433,11 @@ template<typename Char>
-

Definition at line 66 of file printf.h.

+

Definition at line 66 of file printf.h.

- -

◆ operator++() [1/2]

- +
@@ -432,13 +460,11 @@ template<typename Char>
-

Definition at line 50 of file printf.h.

+

Definition at line 50 of file printf.h.

- -

◆ operator++() [2/2]

- +
@@ -462,13 +488,11 @@ template<typename Char>
-

Definition at line 55 of file printf.h.

+

Definition at line 55 of file printf.h.

- -

◆ operator+=()

- +
@@ -492,13 +516,11 @@ template<typename Char>
-

Definition at line 74 of file printf.h.

+

Definition at line 74 of file printf.h.

- -

◆ operator-() [1/2]

- +
@@ -522,13 +544,11 @@ template<typename Char>
-

Definition at line 70 of file printf.h.

+

Definition at line 70 of file printf.h.

- -

◆ operator-() [2/2]

- +
@@ -552,13 +572,11 @@ template<typename Char>
-

Definition at line 79 of file printf.h.

+

Definition at line 79 of file printf.h.

- -

◆ operator--()

- +
@@ -581,13 +599,11 @@ template<typename Char>
-

Definition at line 61 of file printf.h.

+

Definition at line 61 of file printf.h.

- -

◆ operator=()

- +
@@ -611,13 +627,11 @@ template<typename Char>
-

Definition at line 40 of file printf.h.

+

Definition at line 40 of file printf.h.

- -

◆ operator>=()

- +
@@ -641,14 +655,12 @@ template<typename Char>
-

Definition at line 88 of file printf.h.

+

Definition at line 88 of file printf.h.

Friends And Related Function Documentation

- -

◆ pointer_from

- +
@@ -660,7 +672,7 @@ template<typename CharT >
- + @@ -674,43 +686,6 @@ template<typename CharT >
const friend CharT* pointer_from const CharT* pointer_from ( null_terminating_iterator< CharT >  it)
-
-
-

Member Data Documentation

- -

◆ pointer

- -
-
-
-template<typename Char>
- - - - -
const typedef Char* fmt::v5::internal::null_terminating_iterator< Char >::pointer
-
- -

Definition at line 27 of file printf.h.

- -
-
- -

◆ reference

- -
-
-
-template<typename Char>
- - - - -
const typedef Char& fmt::v5::internal::null_terminating_iterator< Char >::reference
-
- -

Definition at line 28 of file printf.h.

-

The documentation for this class was generated from the following files:
    @@ -725,7 +700,7 @@ template<typename Char>
+ doxygen 1.8.11
diff --git a/docs/classfmt_1_1v5_1_1internal_1_1null__terminating__iterator.js b/docs/classfmt_1_1v5_1_1internal_1_1null__terminating__iterator.js index b0e487e..de58f42 100644 --- a/docs/classfmt_1_1v5_1_1internal_1_1null__terminating__iterator.js +++ b/docs/classfmt_1_1v5_1_1internal_1_1null__terminating__iterator.js @@ -2,22 +2,22 @@ var classfmt_1_1v5_1_1internal_1_1null__terminating__iterator = [ [ "difference_type", "classfmt_1_1v5_1_1internal_1_1null__terminating__iterator.html#afd8140268676a9a3d036d0a7184739ea", null ], [ "iterator_category", "classfmt_1_1v5_1_1internal_1_1null__terminating__iterator.html#a87dcc701162ca01725c3702f46aca184", null ], + [ "pointer", "classfmt_1_1v5_1_1internal_1_1null__terminating__iterator.html#a42557d330303048247da9fc8f60a6a0c", null ], + [ "reference", "classfmt_1_1v5_1_1internal_1_1null__terminating__iterator.html#a1ac6b94c99323d58886943b1032be0b6", null ], [ "value_type", "classfmt_1_1v5_1_1internal_1_1null__terminating__iterator.html#ad9177a447cdfc48f030f67a43ba3950c", null ], [ "null_terminating_iterator", "classfmt_1_1v5_1_1internal_1_1null__terminating__iterator.html#ab1bc138b0ba1989222557dc92c53fe1f", null ], [ "null_terminating_iterator", "classfmt_1_1v5_1_1internal_1_1null__terminating__iterator.html#ac03548f66b12217a2ed1bce77729b1c1", null ], [ "null_terminating_iterator", "classfmt_1_1v5_1_1internal_1_1null__terminating__iterator.html#acd09cb49aec23c8912be032da932545c", null ], - [ "operator!=", "classfmt_1_1v5_1_1internal_1_1null__terminating__iterator.html#a768ecde717e21463fb0a470fdd2db034", null ], - [ "operator*", "classfmt_1_1v5_1_1internal_1_1null__terminating__iterator.html#a3dbdf923f3b801110c0340d151951970", null ], + [ "operator!=", "classfmt_1_1v5_1_1internal_1_1null__terminating__iterator.html#a81413143fd6a6ab9d5aa0eab96177411", null ], + [ "operator*", "classfmt_1_1v5_1_1internal_1_1null__terminating__iterator.html#ae883461ed71f841876c398f031100a01", null ], [ "operator+", "classfmt_1_1v5_1_1internal_1_1null__terminating__iterator.html#a65a6dc37670afbdb757175eca7e87ef6", null ], [ "operator++", "classfmt_1_1v5_1_1internal_1_1null__terminating__iterator.html#a78ee94466140c7d086d3ce3ef87ec79f", null ], [ "operator++", "classfmt_1_1v5_1_1internal_1_1null__terminating__iterator.html#a5ca7f8621af24ad5f3dde243d132fb6d", null ], [ "operator+=", "classfmt_1_1v5_1_1internal_1_1null__terminating__iterator.html#a5ed8769f6e99acd27c34d5cacfb6ab1d", null ], [ "operator-", "classfmt_1_1v5_1_1internal_1_1null__terminating__iterator.html#a862bae07a99e36fe5017e4ee3cccfefe", null ], - [ "operator-", "classfmt_1_1v5_1_1internal_1_1null__terminating__iterator.html#a3c15e34c777dfd9111db29bfa338ada2", null ], + [ "operator-", "classfmt_1_1v5_1_1internal_1_1null__terminating__iterator.html#a38196ec4cc5ec3abd25838e801dfa522", null ], [ "operator--", "classfmt_1_1v5_1_1internal_1_1null__terminating__iterator.html#af9870396209e1408dafa552aa8c5a867", null ], [ "operator=", "classfmt_1_1v5_1_1internal_1_1null__terminating__iterator.html#ae5c938544e66e266f119f25ec4ab27ca", null ], - [ "operator>=", "classfmt_1_1v5_1_1internal_1_1null__terminating__iterator.html#ad164270aa9d019ca4e07c56e8b44d2c3", null ], - [ "pointer_from", "classfmt_1_1v5_1_1internal_1_1null__terminating__iterator.html#a502ebd0315cb0ce8ce89a470b65b88e0", null ], - [ "pointer", "classfmt_1_1v5_1_1internal_1_1null__terminating__iterator.html#a64cb7c38ffb4a51da11748c1a4ffa1e6", null ], - [ "reference", "classfmt_1_1v5_1_1internal_1_1null__terminating__iterator.html#ae799d6f251789afb5bbc6ce6e4cc7ae0", null ] + [ "operator>=", "classfmt_1_1v5_1_1internal_1_1null__terminating__iterator.html#afeefa9854dc393e6f7c658b2e86327a9", null ], + [ "pointer_from", "classfmt_1_1v5_1_1internal_1_1null__terminating__iterator.html#ab9cf4717029a7ee8de81c7232c3fda4c", null ] ]; \ No newline at end of file diff --git a/docs/classfmt_1_1v5_1_1internal_1_1precision__checker-members.html b/docs/classfmt_1_1v5_1_1internal_1_1precision__checker-members.html index f1cd017..5441d53 100644 --- a/docs/classfmt_1_1v5_1_1internal_1_1precision__checker-members.html +++ b/docs/classfmt_1_1v5_1_1internal_1_1precision__checker-members.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Member List @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -104,7 +124,7 @@ $(document).ready(function(){initNavTree('classfmt_1_1v5_1_1internal_1_1precisio
    + doxygen 1.8.11
diff --git a/docs/classfmt_1_1v5_1_1internal_1_1precision__checker.html b/docs/classfmt_1_1v5_1_1internal_1_1precision__checker.html index eda931f..1f0ea9a 100644 --- a/docs/classfmt_1_1v5_1_1internal_1_1precision__checker.html +++ b/docs/classfmt_1_1v5_1_1internal_1_1precision__checker.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: fmt::v5::internal::precision_checker< ErrorHandler > Class Template Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -101,10 +121,10 @@ Inheritance diagram for fmt::v5::internal::precision_checker< ErrorHandler &g
- + fmt::v5::internal::function< unsigned long long > - -
+ +
@@ -122,11 +142,9 @@ Public Member Functions class fmt::v5::internal::precision_checker< ErrorHandler > -

Definition at line 1530 of file format.h.

+

Definition at line 1530 of file format.h.

Constructor & Destructor Documentation

- -

◆ precision_checker()

- +
@@ -150,14 +168,12 @@ template<typename ErrorHandler >

Public Member Functions

-

Definition at line 1532 of file format.h.

+

Definition at line 1532 of file format.h.

Member Function Documentation

- -

◆ operator()() [1/2]

- +
@@ -183,13 +199,11 @@ template<typename T >
-

Definition at line 1536 of file format.h.

+

Definition at line 1536 of file format.h.

- -

◆ operator()() [2/2]

- +
@@ -215,7 +229,7 @@ template<typename T >
-

Definition at line 1544 of file format.h.

+

Definition at line 1544 of file format.h.

@@ -230,7 +244,7 @@ template<typename T > + doxygen 1.8.11 diff --git a/docs/classfmt_1_1v5_1_1internal_1_1printf__precision__handler-members.html b/docs/classfmt_1_1v5_1_1internal_1_1printf__precision__handler-members.html index 2cb0b21..b202aca 100644 --- a/docs/classfmt_1_1v5_1_1internal_1_1printf__precision__handler-members.html +++ b/docs/classfmt_1_1v5_1_1internal_1_1printf__precision__handler-members.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Member List @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -103,7 +123,7 @@ $(document).ready(function(){initNavTree('classfmt_1_1v5_1_1internal_1_1printf__
    + doxygen 1.8.11
diff --git a/docs/classfmt_1_1v5_1_1internal_1_1printf__precision__handler.html b/docs/classfmt_1_1v5_1_1internal_1_1printf__precision__handler.html index 5154afb..9002022 100644 --- a/docs/classfmt_1_1v5_1_1internal_1_1printf__precision__handler.html +++ b/docs/classfmt_1_1v5_1_1internal_1_1printf__precision__handler.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: fmt::v5::internal::printf_precision_handler Class Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -101,10 +121,10 @@ Inheritance diagram for fmt::v5::internal::printf_precision_handler:
- + fmt::v5::internal::function< int > - -
+ + @@ -117,11 +137,9 @@ Public Member Functions

Public Member Functions

Detailed Description

-

Definition at line 165 of file printf.h.

+

Definition at line 165 of file printf.h.

Member Function Documentation

- -

◆ operator()() [1/2]

- +
@@ -145,13 +163,11 @@ template<typename T >
-

Definition at line 169 of file printf.h.

+

Definition at line 169 of file printf.h.

- -

◆ operator()() [2/2]

- +
@@ -175,7 +191,7 @@ template<typename T >
-

Definition at line 176 of file printf.h.

+

Definition at line 176 of file printf.h.

@@ -190,7 +206,7 @@ template<typename T > + doxygen 1.8.11 diff --git a/docs/classfmt_1_1v5_1_1internal_1_1printf__width__handler-members.html b/docs/classfmt_1_1v5_1_1internal_1_1printf__width__handler-members.html index b2c63bf..3245eac 100644 --- a/docs/classfmt_1_1v5_1_1internal_1_1printf__width__handler-members.html +++ b/docs/classfmt_1_1v5_1_1internal_1_1printf__width__handler-members.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Member List @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -104,7 +124,7 @@ $(document).ready(function(){initNavTree('classfmt_1_1v5_1_1internal_1_1printf__
    + doxygen 1.8.11
diff --git a/docs/classfmt_1_1v5_1_1internal_1_1printf__width__handler.html b/docs/classfmt_1_1v5_1_1internal_1_1printf__width__handler.html index bbc2c19..0ee04da 100644 --- a/docs/classfmt_1_1v5_1_1internal_1_1printf__width__handler.html +++ b/docs/classfmt_1_1v5_1_1internal_1_1printf__width__handler.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: fmt::v5::internal::printf_width_handler< Char > Class Template Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -101,10 +121,10 @@ Inheritance diagram for fmt::v5::internal::printf_width_handler< Char >:
- + fmt::v5::internal::function< unsigned > - -
+ + @@ -122,11 +142,9 @@ Public Member Functions class fmt::v5::internal::printf_width_handler< Char > -

Definition at line 288 of file printf.h.

+

Definition at line 288 of file printf.h.

Constructor & Destructor Documentation

- -

◆ printf_width_handler()

- +
@@ -150,14 +168,12 @@ template<typename Char >

Public Member Functions

-

Definition at line 295 of file printf.h.

+

Definition at line 295 of file printf.h.

Member Function Documentation

- -

◆ operator()() [1/2]

- +
@@ -183,13 +199,11 @@ template<typename T >
-

Definition at line 299 of file printf.h.

+

Definition at line 299 of file printf.h.

- -

◆ operator()() [2/2]

- +
@@ -215,7 +229,7 @@ template<typename T >
-

Definition at line 314 of file printf.h.

+

Definition at line 314 of file printf.h.

@@ -230,7 +244,7 @@ template<typename T > + doxygen 1.8.11 diff --git a/docs/classfmt_1_1v5_1_1internal_1_1specs__checker-members.html b/docs/classfmt_1_1v5_1_1internal_1_1specs__checker-members.html index 957e102..c26b310 100644 --- a/docs/classfmt_1_1v5_1_1internal_1_1specs__checker-members.html +++ b/docs/classfmt_1_1v5_1_1internal_1_1specs__checker-members.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Member List @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -110,7 +130,7 @@ $(document).ready(function(){initNavTree('classfmt_1_1v5_1_1internal_1_1specs__c
    + doxygen 1.8.11
diff --git a/docs/classfmt_1_1v5_1_1internal_1_1specs__checker.html b/docs/classfmt_1_1v5_1_1internal_1_1specs__checker.html index 913cced..0597af5 100644 --- a/docs/classfmt_1_1v5_1_1internal_1_1specs__checker.html +++ b/docs/classfmt_1_1v5_1_1internal_1_1specs__checker.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: fmt::v5::internal::specs_checker< Handler > Class Template Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -100,7 +120,9 @@ $(document).ready(function(){initNavTree('classfmt_1_1v5_1_1internal_1_1specs__c Inheritance diagram for fmt::v5::internal::specs_checker< Handler >:
- + + +
class fmt::v5::internal::specs_checker< Handler > -

Definition at line 1591 of file format.h.

+

Definition at line 1591 of file format.h.

Constructor & Destructor Documentation

- -

◆ specs_checker() [1/2]

- +
@@ -167,13 +187,11 @@ template<typename Handler>

@@ -129,11 +151,9 @@ Public Member Functions

-

Definition at line 1593 of file format.h.

+

Definition at line 1593 of file format.h.

- -

◆ specs_checker() [2/2]

- +
@@ -197,14 +215,12 @@ template<typename Handler>
-

Definition at line 1596 of file format.h.

+

Definition at line 1596 of file format.h.

Member Function Documentation

- -

◆ end_precision()

- +
@@ -227,13 +243,11 @@ template<typename Handler>
-

Definition at line 1630 of file format.h.

+

Definition at line 1630 of file format.h.

- -

◆ on_align()

- +
@@ -257,13 +271,11 @@ template<typename Handler>
-

Definition at line 1599 of file format.h.

+

Definition at line 1599 of file format.h.

- -

◆ on_hash()

- +
@@ -286,13 +298,11 @@ template<typename Handler>
-

Definition at line 1620 of file format.h.

+

Definition at line 1620 of file format.h.

- -

◆ on_minus()

- +
@@ -315,13 +325,11 @@ template<typename Handler>
-

Definition at line 1610 of file format.h.

+

Definition at line 1610 of file format.h.

- -

◆ on_plus()

- +
@@ -344,13 +352,11 @@ template<typename Handler>
-

Definition at line 1605 of file format.h.

+

Definition at line 1605 of file format.h.

- -

◆ on_space()

- +
@@ -373,13 +379,11 @@ template<typename Handler>
-

Definition at line 1615 of file format.h.

+

Definition at line 1615 of file format.h.

- -

◆ on_zero()

- +
@@ -402,7 +406,7 @@ template<typename Handler>
-

Definition at line 1625 of file format.h.

+

Definition at line 1625 of file format.h.

@@ -417,7 +421,7 @@ template<typename Handler> + doxygen 1.8.11 diff --git a/docs/classfmt_1_1v5_1_1internal_1_1specs__handler-members.html b/docs/classfmt_1_1v5_1_1internal_1_1specs__handler-members.html index 36ef1be..0f35f20 100644 --- a/docs/classfmt_1_1v5_1_1internal_1_1specs__handler-members.html +++ b/docs/classfmt_1_1v5_1_1internal_1_1specs__handler-members.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Member List @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
diff --git a/docs/classfmt_1_1v5_1_1internal_1_1specs__handler.html b/docs/classfmt_1_1v5_1_1internal_1_1specs__handler.html index cbcc339..e995757 100644 --- a/docs/classfmt_1_1v5_1_1internal_1_1specs__handler.html +++ b/docs/classfmt_1_1v5_1_1internal_1_1specs__handler.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: fmt::v5::internal::specs_handler< Context > Class Template Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -102,10 +122,10 @@ Inheritance diagram for fmt::v5::internal::specs_handler< Context >:
- + fmt::v5::internal::specs_setter< Context::char_type > - -
+ + @@ -131,7 +151,7 @@ Public Member Functions - + @@ -149,7 +169,7 @@ Public Member Functions - +

Public Types

 
void on_align (alignment align)
 
void on_fill (Context::char_type fill)
void on_fill (Context::char_typefill)
 
void on_plus ()
 
 
void end_precision ()
 
void on_type (Context::char_type type)
void on_type (Context::char_typetype)
 
class fmt::v5::internal::specs_handler< Context > -

Definition at line 1667 of file format.h.

+

Definition at line 1667 of file format.h.

Member Typedef Documentation

- -

◆ char_type

- +
@@ -179,14 +197,12 @@ template<typename Context >

@@ -163,11 +183,9 @@ Additional Inherited Members

-

Definition at line 1669 of file format.h.

+

Definition at line 1669 of file format.h.

Constructor & Destructor Documentation

- -

◆ specs_handler()

- +
@@ -220,14 +236,12 @@ template<typename Context >
-

Definition at line 1671 of file format.h.

+

Definition at line 1671 of file format.h.

Member Function Documentation

- -

◆ on_dynamic_precision()

- +
@@ -253,13 +267,11 @@ template<typename Id >
-

Definition at line 1682 of file format.h.

+

Definition at line 1682 of file format.h.

- -

◆ on_dynamic_width()

- +
@@ -285,13 +297,11 @@ template<typename Id >
-

Definition at line 1676 of file format.h.

+

Definition at line 1676 of file format.h.

- -

◆ on_error()

- +
@@ -315,7 +325,7 @@ template<typename Context >
-

Definition at line 1687 of file format.h.

+

Definition at line 1687 of file format.h.

@@ -330,7 +340,7 @@ template<typename Context > + doxygen 1.8.11 diff --git a/docs/classfmt_1_1v5_1_1internal_1_1specs__setter-members.html b/docs/classfmt_1_1v5_1_1internal_1_1specs__setter-members.html index 17e5f68..17a715a 100644 --- a/docs/classfmt_1_1v5_1_1internal_1_1specs__setter-members.html +++ b/docs/classfmt_1_1v5_1_1internal_1_1specs__setter-members.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Member List @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -115,7 +135,7 @@ $(document).ready(function(){initNavTree('classfmt_1_1v5_1_1internal_1_1specs__s
    + doxygen 1.8.11
diff --git a/docs/classfmt_1_1v5_1_1internal_1_1specs__setter.html b/docs/classfmt_1_1v5_1_1internal_1_1specs__setter.html index 3d7775c..b86c2fc 100644 --- a/docs/classfmt_1_1v5_1_1internal_1_1specs__setter.html +++ b/docs/classfmt_1_1v5_1_1internal_1_1specs__setter.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: fmt::v5::internal::specs_setter< Char > Class Template Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -137,11 +157,9 @@ Protected Attributes class fmt::v5::internal::specs_setter< Char > -

Definition at line 1555 of file format.h.

+

Definition at line 1555 of file format.h.

Constructor & Destructor Documentation

- -

◆ specs_setter() [1/2]

- +
@@ -165,13 +183,11 @@ template<typename Char>
-

Definition at line 1557 of file format.h.

+

Definition at line 1557 of file format.h.

- -

◆ specs_setter() [2/2]

- +
@@ -195,14 +211,12 @@ template<typename Char>
-

Definition at line 1560 of file format.h.

+

Definition at line 1560 of file format.h.

Member Function Documentation

- -

◆ end_precision()

- +
@@ -225,13 +239,11 @@ template<typename Char>
-

Definition at line 1578 of file format.h.

+

Definition at line 1578 of file format.h.

- -

◆ on_align()

- +
@@ -255,13 +267,11 @@ template<typename Char>
-

Definition at line 1562 of file format.h.

+

Definition at line 1562 of file format.h.

- -

◆ on_fill()

- +
@@ -285,13 +295,11 @@ template<typename Char>
-

Definition at line 1563 of file format.h.

+

Definition at line 1563 of file format.h.

- -

◆ on_hash()

- +
@@ -314,13 +322,11 @@ template<typename Char>
-

Definition at line 1567 of file format.h.

+

Definition at line 1567 of file format.h.

- -

◆ on_minus()

- +
@@ -343,13 +349,11 @@ template<typename Char>
-

Definition at line 1565 of file format.h.

+

Definition at line 1565 of file format.h.

- -

◆ on_plus()

- +
@@ -372,13 +376,11 @@ template<typename Char>
-

Definition at line 1564 of file format.h.

+

Definition at line 1564 of file format.h.

- -

◆ on_precision()

- +
@@ -402,13 +404,11 @@ template<typename Char>
-

Definition at line 1575 of file format.h.

+

Definition at line 1575 of file format.h.

- -

◆ on_space()

- +
@@ -431,13 +431,11 @@ template<typename Char>
-

Definition at line 1566 of file format.h.

+

Definition at line 1566 of file format.h.

- -

◆ on_type()

- +
@@ -461,13 +459,11 @@ template<typename Char>
-

Definition at line 1580 of file format.h.

+

Definition at line 1580 of file format.h.

- -

◆ on_width()

- +
@@ -491,13 +487,11 @@ template<typename Char>
-

Definition at line 1574 of file format.h.

+

Definition at line 1574 of file format.h.

- -

◆ on_zero()

- +
@@ -520,14 +514,12 @@ template<typename Char>
-

Definition at line 1569 of file format.h.

+

Definition at line 1569 of file format.h.

Member Data Documentation

- -

◆ specs_

- +
@@ -547,7 +539,7 @@ template<typename Char>
-

Definition at line 1585 of file format.h.

+

Definition at line 1585 of file format.h.

@@ -562,7 +554,7 @@ template<typename Char> + doxygen 1.8.11 diff --git a/docs/classfmt_1_1v5_1_1internal_1_1truncating__iterator.html b/docs/classfmt_1_1v5_1_1internal_1_1truncating__iterator.html index 4aef51a..b5e20d7 100644 --- a/docs/classfmt_1_1v5_1_1internal_1_1truncating__iterator.html +++ b/docs/classfmt_1_1v5_1_1internal_1_1truncating__iterator.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: fmt::v5::internal::truncating_iterator< OutputIt, Enable > Class Template Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -98,7 +118,7 @@ $(document).ready(function(){initNavTree('classfmt_1_1v5_1_1internal_1_1truncati class fmt::v5::internal::truncating_iterator< OutputIt, Enable > -

Definition at line 671 of file format.h.

+

Definition at line 671 of file format.h.


The documentation for this class was generated from the following file:
  • sdk_core/include/third_party/spdlog/spdlog/fmt/bundled/format.h
@@ -110,7 +130,7 @@ class fmt::v5::internal::truncating_iterator< OutputIt, Enable > + doxygen 1.8.11 diff --git a/docs/classfmt_1_1v5_1_1internal_1_1truncating__iterator_3_01_output_it_00_01std_1_1false__type_01_4-members.html b/docs/classfmt_1_1v5_1_1internal_1_1truncating__iterator_3_01_output_it_00_01std_1_1false__type_01_4-members.html index 07ff6a5..2d86b69 100644 --- a/docs/classfmt_1_1v5_1_1internal_1_1truncating__iterator_3_01_output_it_00_01std_1_1false__type_01_4-members.html +++ b/docs/classfmt_1_1v5_1_1internal_1_1truncating__iterator_3_01_output_it_00_01std_1_1false__type_01_4-members.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Member List @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -95,13 +115,13 @@ $(document).ready(function(){initNavTree('classfmt_1_1v5_1_1internal_1_1truncati

This is the complete list of members for fmt::v5::internal::truncating_iterator< OutputIt, std::false_type >, including all inherited members.

- - + + - + @@ -117,7 +137,7 @@ $(document).ready(function(){initNavTree('classfmt_1_1v5_1_1internal_1_1truncati
    + doxygen 1.8.11
diff --git a/docs/classfmt_1_1v5_1_1internal_1_1truncating__iterator_3_01_output_it_00_01std_1_1false__type_01_4.html b/docs/classfmt_1_1v5_1_1internal_1_1truncating__iterator_3_01_output_it_00_01std_1_1false__type_01_4.html index 16f9b21..b3929dc 100644 --- a/docs/classfmt_1_1v5_1_1internal_1_1truncating__iterator_3_01_output_it_00_01std_1_1false__type_01_4.html +++ b/docs/classfmt_1_1v5_1_1internal_1_1truncating__iterator_3_01_output_it_00_01std_1_1false__type_01_4.html @@ -1,10 +1,9 @@ - + - - +Livox SDK API: fmt::v5::internal::truncating_iterator< OutputIt, std::false_type > Class Template Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ @@ -39,22 +41,42 @@
_Unchecked_type typedeffmt::v5::internal::truncating_iterator_base< OutputIt >
base() constfmt::v5::internal::truncating_iterator_base< OutputIt >inline
count() constfmt::v5::internal::truncating_iterator_base< OutputIt >inline
base() const fmt::v5::internal::truncating_iterator_base< OutputIt >inline
count() const fmt::v5::internal::truncating_iterator_base< OutputIt >inline
count_fmt::v5::internal::truncating_iterator_base< OutputIt >protected
difference_type typedeffmt::v5::internal::truncating_iterator_base< OutputIt >
iterator_category typedeffmt::v5::internal::truncating_iterator_base< OutputIt >
limit_fmt::v5::internal::truncating_iterator_base< OutputIt >protected
operator*() constfmt::v5::internal::truncating_iterator< OutputIt, std::false_type >inline
operator*() const fmt::v5::internal::truncating_iterator< OutputIt, std::false_type >inline
operator++()fmt::v5::internal::truncating_iterator< OutputIt, std::false_type >inline
operator++(int)fmt::v5::internal::truncating_iterator< OutputIt, std::false_type >inline
out_fmt::v5::internal::truncating_iterator_base< OutputIt >protected
Livox SDK API -  V2.0.0 +  V2.1.0
- + - - - - + +
@@ -102,10 +122,10 @@ Inheritance diagram for fmt::v5::internal::truncating_iterator< OutputIt, std
- + fmt::v5::internal::truncating_iterator_base< OutputIt > - -
+ +
@@ -131,13 +151,13 @@ Public Member Functions - - + + - - - - + + + +

Public Types

 
truncating_iterator operator++ (int)
 
value_typeoperator* () const
 
value_typeoperator* () const
 
- Public Member Functions inherited from fmt::v5::internal::truncating_iterator_base< OutputIt >
OutputIt base () const
 
std::size_t count () const
 
OutputIt base () const
 
std::size_t count () const
 
@@ -157,11 +177,9 @@ Additional Inherited Members class fmt::v5::internal::truncating_iterator< OutputIt, std::false_type > -

Definition at line 674 of file format.h.

+

Definition at line 674 of file format.h.

Member Typedef Documentation

- -

◆ value_type

- +
@@ -173,14 +191,12 @@ template<typename OutputIt >

Additional Inherited Members

-

Definition at line 681 of file format.h.

+

Definition at line 681 of file format.h.

Constructor & Destructor Documentation

- -

◆ truncating_iterator()

- +
@@ -214,14 +230,12 @@ template<typename OutputIt >
-

Definition at line 683 of file format.h.

+

Definition at line 683 of file format.h.

Member Function Documentation

- -

◆ operator*()

- +
@@ -244,13 +258,11 @@ template<typename OutputIt >
-

Definition at line 698 of file format.h.

+

Definition at line 698 of file format.h.

- -

◆ operator++() [1/2]

- +
@@ -273,13 +285,11 @@ template<typename OutputIt >
-

Definition at line 686 of file format.h.

+

Definition at line 686 of file format.h.

- -

◆ operator++() [2/2]

- +
@@ -303,7 +313,7 @@ template<typename OutputIt >
-

Definition at line 692 of file format.h.

+

Definition at line 692 of file format.h.

@@ -318,7 +328,7 @@ template<typename OutputIt > + doxygen 1.8.11 diff --git a/docs/classfmt_1_1v5_1_1internal_1_1truncating__iterator_3_01_output_it_00_01std_1_1false__type_01_4.js b/docs/classfmt_1_1v5_1_1internal_1_1truncating__iterator_3_01_output_it_00_01std_1_1false__type_01_4.js index ee07289..8459a32 100644 --- a/docs/classfmt_1_1v5_1_1internal_1_1truncating__iterator_3_01_output_it_00_01std_1_1false__type_01_4.js +++ b/docs/classfmt_1_1v5_1_1internal_1_1truncating__iterator_3_01_output_it_00_01std_1_1false__type_01_4.js @@ -2,7 +2,7 @@ var classfmt_1_1v5_1_1internal_1_1truncating__iterator_3_01_output_it_00_01std_1 [ [ "value_type", "classfmt_1_1v5_1_1internal_1_1truncating__iterator_3_01_output_it_00_01std_1_1false__type_01_4.html#a5f21fb8af92548caefb494b1e49814b6", null ], [ "truncating_iterator", "classfmt_1_1v5_1_1internal_1_1truncating__iterator_3_01_output_it_00_01std_1_1false__type_01_4.html#a5a99af3c33a7e15fcaa77a387a70c4f7", null ], - [ "operator*", "classfmt_1_1v5_1_1internal_1_1truncating__iterator_3_01_output_it_00_01std_1_1false__type_01_4.html#a51b37c2ea55917d86a0809230ad24432", null ], + [ "operator*", "classfmt_1_1v5_1_1internal_1_1truncating__iterator_3_01_output_it_00_01std_1_1false__type_01_4.html#ae2f651fb97847c60205bf3f76b2efe1e", null ], [ "operator++", "classfmt_1_1v5_1_1internal_1_1truncating__iterator_3_01_output_it_00_01std_1_1false__type_01_4.html#a3e3eaa69e1f7a8302cc9be5f0ce76a98", null ], [ "operator++", "classfmt_1_1v5_1_1internal_1_1truncating__iterator_3_01_output_it_00_01std_1_1false__type_01_4.html#ab2c94df15db5ebd65b8f4164cc16431d", null ] ]; \ No newline at end of file diff --git a/docs/classfmt_1_1v5_1_1internal_1_1truncating__iterator_3_01_output_it_00_01std_1_1true__type_01_4-members.html b/docs/classfmt_1_1v5_1_1internal_1_1truncating__iterator_3_01_output_it_00_01std_1_1true__type_01_4-members.html index 3b63e84..2de9b37 100644 --- a/docs/classfmt_1_1v5_1_1internal_1_1truncating__iterator_3_01_output_it_00_01std_1_1true__type_01_4-members.html +++ b/docs/classfmt_1_1v5_1_1internal_1_1truncating__iterator_3_01_output_it_00_01std_1_1true__type_01_4-members.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Member List @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -95,8 +115,8 @@ $(document).ready(function(){initNavTree('classfmt_1_1v5_1_1internal_1_1truncati

This is the complete list of members for fmt::v5::internal::truncating_iterator< OutputIt, std::true_type >, including all inherited members.

- - + + @@ -118,7 +138,7 @@ $(document).ready(function(){initNavTree('classfmt_1_1v5_1_1internal_1_1truncati
    + doxygen 1.8.11
diff --git a/docs/classfmt_1_1v5_1_1internal_1_1truncating__iterator_3_01_output_it_00_01std_1_1true__type_01_4.html b/docs/classfmt_1_1v5_1_1internal_1_1truncating__iterator_3_01_output_it_00_01std_1_1true__type_01_4.html index 7ca215c..87aa150 100644 --- a/docs/classfmt_1_1v5_1_1internal_1_1truncating__iterator_3_01_output_it_00_01std_1_1true__type_01_4.html +++ b/docs/classfmt_1_1v5_1_1internal_1_1truncating__iterator_3_01_output_it_00_01std_1_1true__type_01_4.html @@ -1,10 +1,9 @@ - + - - +Livox SDK API: fmt::v5::internal::truncating_iterator< OutputIt, std::true_type > Class Template Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ @@ -39,22 +41,42 @@
_Unchecked_type typedeffmt::v5::internal::truncating_iterator_base< OutputIt >
base() constfmt::v5::internal::truncating_iterator_base< OutputIt >inline
count() constfmt::v5::internal::truncating_iterator_base< OutputIt >inline
base() const fmt::v5::internal::truncating_iterator_base< OutputIt >inline
count() const fmt::v5::internal::truncating_iterator_base< OutputIt >inline
count_fmt::v5::internal::truncating_iterator_base< OutputIt >protected
difference_type typedeffmt::v5::internal::truncating_iterator_base< OutputIt >
iterator_category typedeffmt::v5::internal::truncating_iterator_base< OutputIt >
Livox SDK API -  V2.0.0 +  V2.1.0
- + - - - - + +
@@ -102,10 +122,10 @@ Inheritance diagram for fmt::v5::internal::truncating_iterator< OutputIt, std
- + fmt::v5::internal::truncating_iterator_base< OutputIt > - -
+ +
@@ -136,10 +156,10 @@ Public Member Functions - - - - + + + +

Public Types

truncating_iteratoroperator* ()
 
- Public Member Functions inherited from fmt::v5::internal::truncating_iterator_base< OutputIt >
OutputIt base () const
 
std::size_t count () const
 
OutputIt base () const
 
std::size_t count () const
 
@@ -159,11 +179,9 @@ Additional Inherited Members class fmt::v5::internal::truncating_iterator< OutputIt, std::true_type > -

Definition at line 704 of file format.h.

+

Definition at line 704 of file format.h.

Member Typedef Documentation

- -

◆ value_type

- +
@@ -175,14 +193,12 @@ template<typename OutputIt >

Additional Inherited Members

-

Definition at line 707 of file format.h.

+

Definition at line 707 of file format.h.

Constructor & Destructor Documentation

- -

◆ truncating_iterator()

- +
@@ -216,14 +232,12 @@ template<typename OutputIt >
-

Definition at line 709 of file format.h.

+

Definition at line 709 of file format.h.

Member Function Documentation

- -

◆ operator*()

- +
@@ -246,13 +260,11 @@ template<typename OutputIt >
-

Definition at line 720 of file format.h.

+

Definition at line 720 of file format.h.

- -

◆ operator++() [1/2]

- +
@@ -275,13 +287,11 @@ template<typename OutputIt >
-

Definition at line 718 of file format.h.

+

Definition at line 718 of file format.h.

- -

◆ operator++() [2/2]

- +
@@ -305,13 +315,11 @@ template<typename OutputIt >
-

Definition at line 719 of file format.h.

+

Definition at line 719 of file format.h.

- -

◆ operator=()

- +
@@ -335,7 +343,7 @@ template<typename OutputIt >
-

Definition at line 712 of file format.h.

+

Definition at line 712 of file format.h.

@@ -350,7 +358,7 @@ template<typename OutputIt > + doxygen 1.8.11 diff --git a/docs/classfmt_1_1v5_1_1internal_1_1truncating__iterator__base-members.html b/docs/classfmt_1_1v5_1_1internal_1_1truncating__iterator__base-members.html index 5db5bce..ee6d5d8 100644 --- a/docs/classfmt_1_1v5_1_1internal_1_1truncating__iterator__base-members.html +++ b/docs/classfmt_1_1v5_1_1internal_1_1truncating__iterator__base-members.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Member List @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -95,8 +115,8 @@ $(document).ready(function(){initNavTree('classfmt_1_1v5_1_1internal_1_1truncati

This is the complete list of members for fmt::v5::internal::truncating_iterator_base< OutputIt >, including all inherited members.

- - + + @@ -112,7 +132,7 @@ $(document).ready(function(){initNavTree('classfmt_1_1v5_1_1internal_1_1truncati
    + doxygen 1.8.11
diff --git a/docs/classfmt_1_1v5_1_1internal_1_1truncating__iterator__base.html b/docs/classfmt_1_1v5_1_1internal_1_1truncating__iterator__base.html index e2d1f82..3348c1f 100644 --- a/docs/classfmt_1_1v5_1_1internal_1_1truncating__iterator__base.html +++ b/docs/classfmt_1_1v5_1_1internal_1_1truncating__iterator__base.html @@ -1,10 +1,9 @@ - + - - +Livox SDK API: fmt::v5::internal::truncating_iterator_base< OutputIt > Class Template Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ @@ -39,22 +41,42 @@
_Unchecked_type typedeffmt::v5::internal::truncating_iterator_base< OutputIt >
base() constfmt::v5::internal::truncating_iterator_base< OutputIt >inline
count() constfmt::v5::internal::truncating_iterator_base< OutputIt >inline
base() const fmt::v5::internal::truncating_iterator_base< OutputIt >inline
count() const fmt::v5::internal::truncating_iterator_base< OutputIt >inline
count_fmt::v5::internal::truncating_iterator_base< OutputIt >protected
difference_type typedeffmt::v5::internal::truncating_iterator_base< OutputIt >
iterator_category typedeffmt::v5::internal::truncating_iterator_base< OutputIt >
Livox SDK API -  V2.0.0 +  V2.1.0
- + - - - - + +
@@ -104,11 +124,11 @@ Inheritance diagram for fmt::v5::internal::truncating_iterator_base< OutputIt
- + fmt::v5::internal::truncating_iterator< OutputIt, std::false_type > fmt::v5::internal::truncating_iterator< OutputIt, std::true_type > - -
+ +
@@ -125,10 +145,10 @@ Public Types

Public Types

- - - - + + + +

Public Member Functions

OutputIt base () const
 
std::size_t count () const
 
OutputIt base () const
 
std::size_t count () const
 
@@ -149,11 +169,9 @@ Protected Attributes class fmt::v5::internal::truncating_iterator_base< OutputIt > -

Definition at line 647 of file format.h.

+

Definition at line 647 of file format.h.

Member Typedef Documentation

- -

◆ _Unchecked_type

- +
@@ -165,13 +183,11 @@ template<typename OutputIt >

Protected Member Functions

-

Definition at line 661 of file format.h.

+

Definition at line 661 of file format.h.

- -

◆ difference_type

- +
@@ -183,13 +199,11 @@ template<typename OutputIt >
-

Definition at line 658 of file format.h.

+

Definition at line 658 of file format.h.

- -

◆ iterator_category

- +
@@ -201,13 +215,11 @@ template<typename OutputIt >
-

Definition at line 657 of file format.h.

+

Definition at line 657 of file format.h.

- -

◆ pointer

- +
@@ -219,13 +231,11 @@ template<typename OutputIt >
-

Definition at line 659 of file format.h.

+

Definition at line 659 of file format.h.

- -

◆ reference

- +
@@ -237,14 +247,12 @@ template<typename OutputIt >
-

Definition at line 660 of file format.h.

+

Definition at line 660 of file format.h.

Constructor & Destructor Documentation

- -

◆ truncating_iterator_base()

- +
@@ -278,14 +286,12 @@ template<typename OutputIt >
-

Definition at line 653 of file format.h.

+

Definition at line 653 of file format.h.

Member Function Documentation

- -

◆ base()

- +
@@ -308,13 +314,11 @@ template<typename OutputIt >
-

Definition at line 663 of file format.h.

+

Definition at line 663 of file format.h.

- -

◆ count()

- +
@@ -337,14 +341,12 @@ template<typename OutputIt >
-

Definition at line 664 of file format.h.

+

Definition at line 664 of file format.h.

Member Data Documentation

- -

◆ count_

- +
@@ -364,13 +366,11 @@ template<typename OutputIt >
-

Definition at line 651 of file format.h.

+

Definition at line 651 of file format.h.

- -

◆ limit_

- +
@@ -390,13 +390,11 @@ template<typename OutputIt >
-

Definition at line 650 of file format.h.

+

Definition at line 650 of file format.h.

- -

◆ out_

- +
@@ -416,7 +414,7 @@ template<typename OutputIt >
-

Definition at line 649 of file format.h.

+

Definition at line 649 of file format.h.

@@ -431,7 +429,7 @@ template<typename OutputIt > + doxygen 1.8.11 diff --git a/docs/classfmt_1_1v5_1_1internal_1_1truncating__iterator__base.js b/docs/classfmt_1_1v5_1_1internal_1_1truncating__iterator__base.js index f014744..c18f536 100644 --- a/docs/classfmt_1_1v5_1_1internal_1_1truncating__iterator__base.js +++ b/docs/classfmt_1_1v5_1_1internal_1_1truncating__iterator__base.js @@ -6,8 +6,8 @@ var classfmt_1_1v5_1_1internal_1_1truncating__iterator__base = [ "pointer", "classfmt_1_1v5_1_1internal_1_1truncating__iterator__base.html#acfec8964ca97b0ea4a08d2efff4ba6ba", null ], [ "reference", "classfmt_1_1v5_1_1internal_1_1truncating__iterator__base.html#aa891dd373534efdbf8a03c9b1b5a77fa", null ], [ "truncating_iterator_base", "classfmt_1_1v5_1_1internal_1_1truncating__iterator__base.html#a9722e33a6fdfb563b8db59829f133711", null ], - [ "base", "classfmt_1_1v5_1_1internal_1_1truncating__iterator__base.html#aa704255e4ff2778a7149a7d2cf687e5f", null ], - [ "count", "classfmt_1_1v5_1_1internal_1_1truncating__iterator__base.html#a56850280db1992628ce9afaab31c8637", null ], + [ "base", "classfmt_1_1v5_1_1internal_1_1truncating__iterator__base.html#a7c53dfb46eb6438dbab9ac6b8359ddec", null ], + [ "count", "classfmt_1_1v5_1_1internal_1_1truncating__iterator__base.html#ab45d5f8ca7d6b6838ddc122f1bd60fe9", null ], [ "count_", "classfmt_1_1v5_1_1internal_1_1truncating__iterator__base.html#a16eabcb848e779b567918d0935904b7b", null ], [ "limit_", "classfmt_1_1v5_1_1internal_1_1truncating__iterator__base.html#a24832c279c6143d905912d3181872f44", null ], [ "out_", "classfmt_1_1v5_1_1internal_1_1truncating__iterator__base.html#a1549daf80c73bb341ed33dbe97d9c8a5", null ] diff --git a/docs/classfmt_1_1v5_1_1internal_1_1value-members.html b/docs/classfmt_1_1v5_1_1internal_1_1value-members.html index be294bf..87e2463 100644 --- a/docs/classfmt_1_1v5_1_1internal_1_1value-members.html +++ b/docs/classfmt_1_1v5_1_1internal_1_1value-members.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Member List @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -126,7 +146,7 @@ $(document).ready(function(){initNavTree('classfmt_1_1v5_1_1internal_1_1value.ht
    + doxygen 1.8.11
diff --git a/docs/classfmt_1_1v5_1_1internal_1_1value.html b/docs/classfmt_1_1v5_1_1internal_1_1value.html index 1b321b0..5b417db 100644 --- a/docs/classfmt_1_1v5_1_1internal_1_1value.html +++ b/docs/classfmt_1_1v5_1_1internal_1_1value.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: fmt::v5::internal::value< Context > Class Template Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -167,11 +187,9 @@ Public Attributes class fmt::v5::internal::value< Context > -

Definition at line 564 of file core.h.

+

Definition at line 564 of file core.h.

Member Typedef Documentation

- -

◆ char_type

- +
@@ -183,14 +201,12 @@ template<typename Context>
-

Definition at line 566 of file core.h.

+

Definition at line 566 of file core.h.

Constructor & Destructor Documentation

- -

◆ value() [1/12]

- +
@@ -214,13 +230,11 @@ template<typename Context>
-

Definition at line 582 of file core.h.

+

Definition at line 582 of file core.h.

- -

◆ value() [2/12]

- +
@@ -244,13 +258,11 @@ template<typename Context>
-

Definition at line 583 of file core.h.

+

Definition at line 583 of file core.h.

- -

◆ value() [3/12]

- +
@@ -274,13 +286,11 @@ template<typename Context>
-

Definition at line 584 of file core.h.

+

Definition at line 584 of file core.h.

- -

◆ value() [4/12]

- +
@@ -304,13 +314,11 @@ template<typename Context>
-

Definition at line 585 of file core.h.

+

Definition at line 585 of file core.h.

- -

◆ value() [5/12]

- +
@@ -334,13 +342,11 @@ template<typename Context>
-

Definition at line 586 of file core.h.

+

Definition at line 586 of file core.h.

- -

◆ value() [6/12]

- +
@@ -364,13 +370,11 @@ template<typename Context>
-

Definition at line 587 of file core.h.

+

Definition at line 587 of file core.h.

- -

◆ value() [7/12]

- +
@@ -394,13 +398,11 @@ template<typename Context>
-

Definition at line 588 of file core.h.

+

Definition at line 588 of file core.h.

- -

◆ value() [8/12]

- +
@@ -424,13 +426,11 @@ template<typename Context>
-

Definition at line 589 of file core.h.

+

Definition at line 589 of file core.h.

- -

◆ value() [9/12]

- +
@@ -454,13 +454,11 @@ template<typename Context>
-

Definition at line 594 of file core.h.

+

Definition at line 594 of file core.h.

- -

◆ value() [10/12]

- +
@@ -484,13 +482,11 @@ template<typename Context>
-

Definition at line 599 of file core.h.

+

Definition at line 599 of file core.h.

- -

◆ value() [11/12]

- +
@@ -514,13 +510,11 @@ template<typename Context>
-

Definition at line 603 of file core.h.

+

Definition at line 603 of file core.h.

- -

◆ value() [12/12]

- +
@@ -546,14 +540,12 @@ template<typename T >
-

Definition at line 606 of file core.h.

+

Definition at line 606 of file core.h.

Member Function Documentation

- -

◆ as_named_arg()

- +
@@ -576,14 +568,12 @@ template<typename Context>
-

Definition at line 611 of file core.h.

+

Definition at line 611 of file core.h.

Member Data Documentation

- -

◆ @3

- +
@@ -595,9 +585,7 @@ template<typename Context> - -

◆ custom

- +
@@ -609,13 +597,11 @@ template<typename Context>
-

Definition at line 579 of file core.h.

+

Definition at line 579 of file core.h.

- -

◆ double_value

- +
@@ -627,13 +613,11 @@ template<typename Context>
-

Definition at line 573 of file core.h.

+

Definition at line 573 of file core.h.

- -

◆ int_value

- +
@@ -645,13 +629,11 @@ template<typename Context>
-

Definition at line 569 of file core.h.

+

Definition at line 569 of file core.h.

- -

◆ long_double_value

- +
@@ -663,13 +645,11 @@ template<typename Context>
-

Definition at line 574 of file core.h.

+

Definition at line 574 of file core.h.

- -

◆ long_long_value

- +
@@ -681,13 +661,11 @@ template<typename Context>
-

Definition at line 571 of file core.h.

+

Definition at line 571 of file core.h.

- -

◆ pointer

- +
@@ -699,13 +677,11 @@ template<typename Context>
-

Definition at line 575 of file core.h.

+

Definition at line 575 of file core.h.

- -

◆ sstring

- +
@@ -717,13 +693,11 @@ template<typename Context>
-

Definition at line 577 of file core.h.

+

Definition at line 577 of file core.h.

- -

◆ string

- +
@@ -735,13 +709,11 @@ template<typename Context>
-

Definition at line 576 of file core.h.

+

Definition at line 576 of file core.h.

- -

◆ uint_value

- +
@@ -753,13 +725,11 @@ template<typename Context>
-

Definition at line 570 of file core.h.

+

Definition at line 570 of file core.h.

- -

◆ ulong_long_value

- +
@@ -771,13 +741,11 @@ template<typename Context>
-

Definition at line 572 of file core.h.

+

Definition at line 572 of file core.h.

- -

◆ ustring

- +
@@ -789,7 +757,7 @@ template<typename Context>
-

Definition at line 578 of file core.h.

+

Definition at line 578 of file core.h.

@@ -804,7 +772,7 @@ template<typename Context> + doxygen 1.8.11 diff --git a/docs/classfmt_1_1v5_1_1internal_1_1width__checker-members.html b/docs/classfmt_1_1v5_1_1internal_1_1width__checker-members.html index 7719e23..b320bfa 100644 --- a/docs/classfmt_1_1v5_1_1internal_1_1width__checker-members.html +++ b/docs/classfmt_1_1v5_1_1internal_1_1width__checker-members.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Member List @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -104,7 +124,7 @@ $(document).ready(function(){initNavTree('classfmt_1_1v5_1_1internal_1_1width__c
    + doxygen 1.8.11
diff --git a/docs/classfmt_1_1v5_1_1internal_1_1width__checker.html b/docs/classfmt_1_1v5_1_1internal_1_1width__checker.html index b14ba84..5782454 100644 --- a/docs/classfmt_1_1v5_1_1internal_1_1width__checker.html +++ b/docs/classfmt_1_1v5_1_1internal_1_1width__checker.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: fmt::v5::internal::width_checker< ErrorHandler > Class Template Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -101,10 +121,10 @@ Inheritance diagram for fmt::v5::internal::width_checker< ErrorHandler >:<
- + fmt::v5::internal::function< unsigned long long > - -
+ +
@@ -122,11 +142,9 @@ Public Member Functions class fmt::v5::internal::width_checker< ErrorHandler > -

Definition at line 1505 of file format.h.

+

Definition at line 1505 of file format.h.

Constructor & Destructor Documentation

- -

◆ width_checker()

- +
@@ -150,14 +168,12 @@ template<typename ErrorHandler >

Public Member Functions

-

Definition at line 1507 of file format.h.

+

Definition at line 1507 of file format.h.

Member Function Documentation

- -

◆ operator()() [1/2]

- +
@@ -183,13 +199,11 @@ template<typename T >
-

Definition at line 1512 of file format.h.

+

Definition at line 1512 of file format.h.

- -

◆ operator()() [2/2]

- +
@@ -215,7 +229,7 @@ template<typename T >
-

Definition at line 1520 of file format.h.

+

Definition at line 1520 of file format.h.

@@ -230,7 +244,7 @@ template<typename T > + doxygen 1.8.11 diff --git a/docs/classfmt_1_1v5_1_1output__range-members.html b/docs/classfmt_1_1v5_1_1output__range-members.html index 998faf6..715e983 100644 --- a/docs/classfmt_1_1v5_1_1output__range-members.html +++ b/docs/classfmt_1_1v5_1_1output__range-members.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Member List @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -94,7 +114,7 @@ $(document).ready(function(){initNavTree('classfmt_1_1v5_1_1output__range.html',

This is the complete list of members for fmt::v5::output_range< OutputIt, T >, including all inherited members.

- + @@ -105,7 +125,7 @@ $(document).ready(function(){initNavTree('classfmt_1_1v5_1_1output__range.html',
    + doxygen 1.8.11
diff --git a/docs/classfmt_1_1v5_1_1output__range.html b/docs/classfmt_1_1v5_1_1output__range.html index a74d4db..2b75f45 100644 --- a/docs/classfmt_1_1v5_1_1output__range.html +++ b/docs/classfmt_1_1v5_1_1output__range.html @@ -1,10 +1,9 @@ - + - - +Livox SDK API: fmt::v5::output_range< OutputIt, T > Class Template Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ @@ -39,22 +41,42 @@
begin() constfmt::v5::output_range< OutputIt, T >inline
begin() const fmt::v5::output_range< OutputIt, T >inline
iterator typedeffmt::v5::output_range< OutputIt, T >
output_range(OutputIt it)fmt::v5::output_range< OutputIt, T >inlineexplicit
value_type typedeffmt::v5::output_range< OutputIt, T >
Livox SDK API -  V2.0.0 +  V2.1.0
- + - - - - + +
@@ -109,19 +129,17 @@ Public Types Public Member Functions  output_range (OutputIt it)   -OutputIt begin () const -  +OutputIt begin () const + 

Detailed Description

template<typename OutputIt, typename T = typename OutputIt::value_type>
class fmt::v5::output_range< OutputIt, T >

-

Definition at line 333 of file format.h.

+

Definition at line 333 of file format.h.

Member Typedef Documentation

- -

◆ iterator

- +
@@ -133,13 +151,11 @@ template<typename OutputIt, typename T = typename OutputIt::value_type>
-

Definition at line 342 of file format.h.

+

Definition at line 342 of file format.h.

- -

◆ value_type

- +
@@ -151,14 +167,12 @@ template<typename OutputIt, typename T = typename OutputIt::value_type>
-

Definition at line 343 of file format.h.

+

Definition at line 343 of file format.h.

Constructor & Destructor Documentation

- -

◆ output_range()

- +
@@ -182,14 +196,12 @@ template<typename OutputIt, typename T = typename OutputIt::value_type>
-

Definition at line 345 of file format.h.

+

Definition at line 345 of file format.h.

Member Function Documentation

- -

◆ begin()

- +
@@ -212,7 +224,7 @@ template<typename OutputIt, typename T = typename OutputIt::value_type>
-

Definition at line 346 of file format.h.

+

Definition at line 346 of file format.h.

@@ -227,7 +239,7 @@ template<typename OutputIt, typename T = typename OutputIt::value_type> fmt + doxygen 1.8.11
diff --git a/docs/classfmt_1_1v5_1_1output__range.js b/docs/classfmt_1_1v5_1_1output__range.js index fbfba9f..d26cfc5 100644 --- a/docs/classfmt_1_1v5_1_1output__range.js +++ b/docs/classfmt_1_1v5_1_1output__range.js @@ -3,5 +3,5 @@ var classfmt_1_1v5_1_1output__range = [ "iterator", "classfmt_1_1v5_1_1output__range.html#a001ad2356c56ce8aa89a3e89487ce8d8", null ], [ "value_type", "classfmt_1_1v5_1_1output__range.html#acd03d46c6de53cdc7dccc5890a9df377", null ], [ "output_range", "classfmt_1_1v5_1_1output__range.html#a1c35641258830babeb553b03a6bc802b", null ], - [ "begin", "classfmt_1_1v5_1_1output__range.html#ad67186390eb4062ee39779478d554b98", null ] + [ "begin", "classfmt_1_1v5_1_1output__range.html#ac2080a7135621bbee487a25bfd0d34e7", null ] ]; \ No newline at end of file diff --git a/docs/classfmt_1_1v5_1_1printf__arg__formatter-members.html b/docs/classfmt_1_1v5_1_1printf__arg__formatter-members.html index b262092..077c7d6 100644 --- a/docs/classfmt_1_1v5_1_1printf__arg__formatter-members.html +++ b/docs/classfmt_1_1v5_1_1printf__arg__formatter-members.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Member List @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@
- + - - - - + +
@@ -118,7 +138,7 @@ $(document).ready(function(){initNavTree('classfmt_1_1v5_1_1printf__arg__formatt
    + doxygen 1.8.11
diff --git a/docs/classfmt_1_1v5_1_1printf__arg__formatter.html b/docs/classfmt_1_1v5_1_1printf__arg__formatter.html index 5bcf120..6263251 100644 --- a/docs/classfmt_1_1v5_1_1printf__arg__formatter.html +++ b/docs/classfmt_1_1v5_1_1printf__arg__formatter.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: fmt::v5::printf_arg_formatter< Range > Class Template Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@
- + - - - - + +
@@ -102,11 +122,11 @@ Inheritance diagram for fmt::v5::printf_arg_formatter< Range >:
- + fmt::v5::internal::function< internal::arg_formatter_base< Range >::iterator > fmt::v5::internal::arg_formatter_base< Range > - -
+ + @@ -179,13 +199,11 @@ Additional Inherited Members

template<typename Range>
class fmt::v5::printf_arg_formatter< Range >

-

\rst The printf argument formatter. \endrst

+

The printf argument formatter.

-

Definition at line 330 of file printf.h.

+

Definition at line 330 of file printf.h.

Member Typedef Documentation

- -

◆ format_specs

- +
@@ -197,14 +215,12 @@ template<typename Range >

Public Types

-

Definition at line 367 of file printf.h.

+

Definition at line 367 of file printf.h.

Constructor & Destructor Documentation

- -

◆ printf_arg_formatter()

- +
@@ -243,169 +259,14 @@ template<typename Range >
-

\rst Constructs an argument formatter object. buffer* is a reference to the output buffer and spec contains format specifier information for standard argument types. \endrst

+

Constructs an argument formatter object. buffer* is a reference to the output buffer and spec contains format specifier information for standard argument types.

-

Definition at line 376 of file printf.h.

+

Definition at line 376 of file printf.h.

Member Function Documentation

- -

◆ operator()() [1/8]

- -
-
-
-template<typename Range >
- - - - - -
- - - - - - - - -
iterator fmt::v5::printf_arg_formatter< Range >::operator() (basic_string_view< char_typevalue)
-
-inline
-
- -

Definition at line 434 of file printf.h.

- -
-
- -

◆ operator()() [2/8]

- -
-
-
-template<typename Range >
- - - - - -
- - - - - - - - -
iterator fmt::v5::printf_arg_formatter< Range >::operator() (const char * value)
-
-inline
-
-

Formats a null-terminated C string.

- -

Definition at line 413 of file printf.h.

- -
-
- -

◆ operator()() [3/8]

- -
-
-
-template<typename Range >
- - - - - -
- - - - - - - - -
iterator fmt::v5::printf_arg_formatter< Range >::operator() (const void * value)
-
-inline
-
-

Formats a pointer.

- -

Definition at line 443 of file printf.h.

- -
-
- -

◆ operator()() [4/8]

- -
-
-
-template<typename Range >
- - - - - -
- - - - - - - - -
iterator fmt::v5::printf_arg_formatter< Range >::operator() (const wchar_t * value)
-
-inline
-
-

Formats a null-terminated wide C string.

- -

Definition at line 424 of file printf.h.

- -
-
- -

◆ operator()() [5/8]

- -
-
-
-template<typename Range >
- - - - - -
- - - - - - - - -
iterator fmt::v5::printf_arg_formatter< Range >::operator() (monostate value)
-
-inline
-
- -

Definition at line 438 of file printf.h.

- -
-
- -

◆ operator()() [6/8]

- +
@@ -431,13 +292,11 @@ template<typename T >
-

Definition at line 384 of file printf.h.

+

Definition at line 384 of file printf.h.

- -

◆ operator()() [7/8]

- +
@@ -463,13 +322,154 @@ template<typename T >
-

Definition at line 408 of file printf.h.

+

Definition at line 408 of file printf.h.

- -

◆ operator()() [8/8]

+ +
+
+
+template<typename Range >
+ + + + + +
+ + + + + + + + +
iterator fmt::v5::printf_arg_formatter< Range >::operator() (const char * value)
+
+inline
+
+

Formats a null-terminated C string.

+

Definition at line 413 of file printf.h.

+ +
+
+ +
+
+
+template<typename Range >
+ + + + + +
+ + + + + + + + +
iterator fmt::v5::printf_arg_formatter< Range >::operator() (const wchar_t * value)
+
+inline
+
+

Formats a null-terminated wide C string.

+ +

Definition at line 424 of file printf.h.

+ +
+
+ +
+
+
+template<typename Range >
+ + + + + +
+ + + + + + + + +
iterator fmt::v5::printf_arg_formatter< Range >::operator() (basic_string_view< char_typevalue)
+
+inline
+
+ +

Definition at line 434 of file printf.h.

+ +
+
+ +
+
+
+template<typename Range >
+ + + + + +
+ + + + + + + + +
iterator fmt::v5::printf_arg_formatter< Range >::operator() (monostate value)
+
+inline
+
+ +

Definition at line 438 of file printf.h.

+ +
+
+ +
+
+
+template<typename Range >
+ + + + + +
+ + + + + + + + +
iterator fmt::v5::printf_arg_formatter< Range >::operator() (const void * value)
+
+inline
+
+

Formats a pointer.

+ +

Definition at line 443 of file printf.h.

+ +
+
+
@@ -494,7 +494,7 @@ template<typename Range >

Formats an argument of a custom (user-defined) type.

-

Definition at line 452 of file printf.h.

+

Definition at line 452 of file printf.h.

@@ -509,7 +509,7 @@ template<typename Range > + doxygen 1.8.11 diff --git a/docs/classfmt_1_1v5_1_1printf__arg__formatter.js b/docs/classfmt_1_1v5_1_1printf__arg__formatter.js index e68850a..84183d7 100644 --- a/docs/classfmt_1_1v5_1_1printf__arg__formatter.js +++ b/docs/classfmt_1_1v5_1_1printf__arg__formatter.js @@ -2,12 +2,12 @@ var classfmt_1_1v5_1_1printf__arg__formatter = [ [ "format_specs", "classfmt_1_1v5_1_1printf__arg__formatter.html#a74110f935913bf148cac1b9c982ee630", null ], [ "printf_arg_formatter", "classfmt_1_1v5_1_1printf__arg__formatter.html#a1699fc4ff1987dccc2a7958ff3beaf59", null ], - [ "operator()", "classfmt_1_1v5_1_1printf__arg__formatter.html#a9060b8f9cef005edf81af5d70d162668", null ], - [ "operator()", "classfmt_1_1v5_1_1printf__arg__formatter.html#a417fd64792fc9869670cc1abbbdb79d0", null ], - [ "operator()", "classfmt_1_1v5_1_1printf__arg__formatter.html#a8365e0442d0fece054b41d7e2ae7b13f", null ], - [ "operator()", "classfmt_1_1v5_1_1printf__arg__formatter.html#a3cbb7f33e396d8a644a118e4434c5b81", null ], - [ "operator()", "classfmt_1_1v5_1_1printf__arg__formatter.html#ae47a63e9e03c8a3470c0ada1dc351837", null ], [ "operator()", "classfmt_1_1v5_1_1printf__arg__formatter.html#a22240208526549d9d65250ee2d82c118", null ], [ "operator()", "classfmt_1_1v5_1_1printf__arg__formatter.html#af46ac008c63fe91ec5e60ba5ed9fb3ba", null ], + [ "operator()", "classfmt_1_1v5_1_1printf__arg__formatter.html#a417fd64792fc9869670cc1abbbdb79d0", null ], + [ "operator()", "classfmt_1_1v5_1_1printf__arg__formatter.html#a3cbb7f33e396d8a644a118e4434c5b81", null ], + [ "operator()", "classfmt_1_1v5_1_1printf__arg__formatter.html#a9060b8f9cef005edf81af5d70d162668", null ], + [ "operator()", "classfmt_1_1v5_1_1printf__arg__formatter.html#ae47a63e9e03c8a3470c0ada1dc351837", null ], + [ "operator()", "classfmt_1_1v5_1_1printf__arg__formatter.html#a8365e0442d0fece054b41d7e2ae7b13f", null ], [ "operator()", "classfmt_1_1v5_1_1printf__arg__formatter.html#a7a7f1491adb37d14a9083a6bba1cb3c8", null ] ]; \ No newline at end of file diff --git a/docs/classfmt_1_1v5_1_1system__error-members.html b/docs/classfmt_1_1v5_1_1system__error-members.html index 67cad50..b57c6d1 100644 --- a/docs/classfmt_1_1v5_1_1system__error-members.html +++ b/docs/classfmt_1_1v5_1_1system__error-members.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Member List @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -94,10 +114,10 @@ $(document).ready(function(){initNavTree('classfmt_1_1v5_1_1system__error.html',

This is the complete list of members for fmt::v5::system_error, including all inherited members.

- + - +
error_code() constfmt::v5::system_errorinline
error_code() const fmt::v5::system_errorinline
error_code_fmt::v5::system_errorprotected
system_error()fmt::v5::system_errorinlineprotected
system_error(int error_code, string_view message, const Args &... args)fmt::v5::system_errorinline
system_error(int error_code, string_view message, const Args &...args)fmt::v5::system_errorinline
@@ -105,7 +125,7 @@ $(document).ready(function(){initNavTree('classfmt_1_1v5_1_1system__error.html',
    + doxygen 1.8.11
diff --git a/docs/classfmt_1_1v5_1_1system__error.html b/docs/classfmt_1_1v5_1_1system__error.html index ecfc475..32fb2aa 100644 --- a/docs/classfmt_1_1v5_1_1system__error.html +++ b/docs/classfmt_1_1v5_1_1system__error.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: fmt::v5::system_error Class Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -102,16 +122,18 @@ $(document).ready(function(){initNavTree('classfmt_1_1v5_1_1system__error.html', Inheritance diagram for fmt::v5::system_error:
- + + +
- - - - - + + + + +

Public Member Functions

template<typename... Args>
 system_error (int error_code, string_view message, const Args &... args)
 
int error_code () const
 
template<typename... Args>
 system_error (int error_code, string_view message, const Args &...args)
 
int error_code () const
 
@@ -126,11 +148,9 @@ Protected Attributes

Detailed Description

An error returned by an operating system or a language runtime, for example a file opening error.

-

Definition at line 2198 of file format.h.

+

Definition at line 2198 of file format.h.

Constructor & Destructor Documentation

- -

◆ system_error() [1/2]

- +

Protected Member Functions

@@ -151,13 +171,11 @@ Protected Attributes
-

Definition at line 2205 of file format.h.

+

Definition at line 2205 of file format.h.

- -

◆ system_error() [2/2]

- +
@@ -196,18 +214,16 @@ template<typename... Args>
-

\rst Constructs a :class:fmt::system_error object with a description formatted with fmt::format_system_error. message and additional arguments passed into the constructor are formatted similarly to fmt::format.

+

Constructs a :class:fmt::system_error object with a description formatted with fmt::format_system_error. message and additional arguments passed into the constructor are formatted similarly to fmt::format.

Example**::

-

This throws a system_error with the description cannot open file 'madeup': No such file or directory or similar (system message may vary). const char *filename = "madeup"; std::FILE *file = std::fopen(filename, "r"); if (!file) throw fmt::system_error(errno, "cannot open file '{}'", filename); \endrst

+

This throws a system_error with the description cannot open file 'madeup': No such file or directory or similar (system message may vary). const char *filename = "madeup"; std::FILE *file = std::fopen(filename, "r"); if (!file) throw fmt::system_error(errno, "cannot open file '{}'", filename);

-

Definition at line 2227 of file format.h.

+

Definition at line 2227 of file format.h.

Member Function Documentation

- -

◆ error_code()

- +
@@ -228,14 +244,12 @@ template<typename... Args>
-

Definition at line 2232 of file format.h.

+

Definition at line 2232 of file format.h.

Member Data Documentation

- -

◆ error_code_

- +
@@ -253,7 +267,7 @@ template<typename... Args>
-

Definition at line 2203 of file format.h.

+

Definition at line 2203 of file format.h.

@@ -269,7 +283,7 @@ template<typename... Args> + doxygen 1.8.11 diff --git a/docs/classfmt_1_1v5_1_1system__error.js b/docs/classfmt_1_1v5_1_1system__error.js index 6bf1a6e..911d1d3 100644 --- a/docs/classfmt_1_1v5_1_1system__error.js +++ b/docs/classfmt_1_1v5_1_1system__error.js @@ -1,7 +1,7 @@ var classfmt_1_1v5_1_1system__error = [ [ "system_error", "classfmt_1_1v5_1_1system__error.html#afab23543db82d4cebb222ac5582c29f4", null ], - [ "system_error", "classfmt_1_1v5_1_1system__error.html#ae0c11bcd7a213bd3cd259393cd73fc45", null ], - [ "error_code", "classfmt_1_1v5_1_1system__error.html#a0d2342ce3d391ad12df4aa7509bd9ac7", null ], + [ "system_error", "classfmt_1_1v5_1_1system__error.html#adb8fd39cacc13537bdf0265602df3b76", null ], + [ "error_code", "classfmt_1_1v5_1_1system__error.html#a663469e2ea1f8c0993909cf90c669270", null ], [ "error_code_", "classfmt_1_1v5_1_1system__error.html#ac761354e3eb707044395fd140020e796", null ] ]; \ No newline at end of file diff --git a/docs/classfmt_1_1v5_1_1text__style-members.html b/docs/classfmt_1_1v5_1_1text__style-members.html index faace75..51916d6 100644 --- a/docs/classfmt_1_1v5_1_1text__style-members.html +++ b/docs/classfmt_1_1v5_1_1text__style-members.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Member List @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -96,12 +116,12 @@ $(document).ready(function(){initNavTree('classfmt_1_1v5_1_1text__style.html','' - - - - - - + + + + + + @@ -114,7 +134,7 @@ $(document).ready(function(){initNavTree('classfmt_1_1v5_1_1text__style.html',''
    + doxygen 1.8.11
diff --git a/docs/classfmt_1_1v5_1_1text__style.html b/docs/classfmt_1_1v5_1_1text__style.html index d4a63d0..f877240 100644 --- a/docs/classfmt_1_1v5_1_1text__style.html +++ b/docs/classfmt_1_1v5_1_1text__style.html @@ -1,10 +1,9 @@ - + - - +Livox SDK API: fmt::v5::text_style Class Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ @@ -39,22 +41,42 @@
bg(internal::color_type background)fmt::v5::text_stylefriend
fg(internal::color_type foreground)fmt::v5::text_stylefriend
get_background() constfmt::v5::text_styleinline
get_emphasis() constfmt::v5::text_styleinline
get_foreground() constfmt::v5::text_styleinline
has_background() constfmt::v5::text_styleinline
has_emphasis() constfmt::v5::text_styleinline
has_foreground() constfmt::v5::text_styleinline
get_background() const fmt::v5::text_styleinline
get_emphasis() const fmt::v5::text_styleinline
get_foreground() const fmt::v5::text_styleinline
has_background() const fmt::v5::text_styleinline
has_emphasis() const fmt::v5::text_styleinline
has_foreground() const fmt::v5::text_styleinline
operator&(text_style lhs, const text_style &rhs)fmt::v5::text_stylefriend
operator&=(const text_style &rhs)fmt::v5::text_styleinline
operator|(text_style lhs, const text_style &rhs)fmt::v5::text_stylefriend
Livox SDK API -  V2.0.0 +  V2.1.0
- + - - - - + +
@@ -106,18 +126,18 @@ Public Member Functions   text_styleoperator&= (const text_style &rhs)   -bool has_foreground () const throw () -  -bool has_background () const throw () -  -bool has_emphasis () const throw () -  -internal::color_type get_foreground () const throw () -  -internal::color_type get_background () const throw () -  -emphasis get_emphasis () const throw () -  +bool has_foreground () const throw () +  +bool has_background () const throw () +  +bool has_emphasis () const throw () +  +internal::color_type get_foreground () const throw () +  +internal::color_type get_background () const throw () +  +emphasis get_emphasis () const throw () +  @@ -132,11 +152,9 @@ Friends

Friends

Detailed Description

-

Definition at line 265 of file color.h.

+

Definition at line 265 of file color.h.

Constructor & Destructor Documentation

- -

◆ text_style()

- +
@@ -164,14 +182,12 @@ Friends
-

Definition at line 267 of file color.h.

+

Definition at line 267 of file color.h.

Member Function Documentation

- -

◆ get_background()

- +
@@ -198,13 +214,11 @@ Friends
-

Definition at line 341 of file color.h.

+

Definition at line 341 of file color.h.

- -

◆ get_emphasis()

- +
@@ -231,13 +245,11 @@ Friends
-

Definition at line 345 of file color.h.

+

Definition at line 345 of file color.h.

- -

◆ get_foreground()

- +
@@ -264,13 +276,11 @@ Friends
-

Definition at line 337 of file color.h.

+

Definition at line 337 of file color.h.

- -

◆ has_background()

- +
@@ -297,13 +307,11 @@ Friends
-

Definition at line 331 of file color.h.

+

Definition at line 331 of file color.h.

- -

◆ has_emphasis()

- +
@@ -330,13 +338,11 @@ Friends
-

Definition at line 334 of file color.h.

+

Definition at line 334 of file color.h.

- -

◆ has_foreground()

- +
@@ -363,13 +369,11 @@ Friends
-

Definition at line 328 of file color.h.

+

Definition at line 328 of file color.h.

- -

◆ operator&=()

- +
@@ -391,13 +395,11 @@ Friends
-

Definition at line 299 of file color.h.

+

Definition at line 299 of file color.h.

- -

◆ operator|=()

- +
@@ -419,14 +421,12 @@ Friends
-

Definition at line 270 of file color.h.

+

Definition at line 270 of file color.h.

Friends And Related Function Documentation

- -

◆ bg

- +
@@ -454,13 +454,11 @@ Friends
-

Definition at line 381 of file color.h.

+

Definition at line 381 of file color.h.

- -

◆ fg

- +
@@ -488,13 +486,11 @@ Friends
-

Definition at line 377 of file color.h.

+

Definition at line 377 of file color.h.

- -

◆ operator&

- +
@@ -526,13 +522,11 @@ Friends
-

Definition at line 324 of file color.h.

+

Definition at line 324 of file color.h.

- -

◆ operator|

- +
@@ -564,7 +558,7 @@ Friends
-

Definition at line 295 of file color.h.

+

Definition at line 295 of file color.h.

@@ -579,7 +573,7 @@ Friends + doxygen 1.8.11
diff --git a/docs/classfmt_1_1v5_1_1text__style.js b/docs/classfmt_1_1v5_1_1text__style.js index 3e7ab4e..14c5d0b 100644 --- a/docs/classfmt_1_1v5_1_1text__style.js +++ b/docs/classfmt_1_1v5_1_1text__style.js @@ -1,12 +1,12 @@ var classfmt_1_1v5_1_1text__style = [ [ "text_style", "classfmt_1_1v5_1_1text__style.html#a55feba93f4dbd6d9d8f6f357dc4b2860", null ], - [ "get_background", "classfmt_1_1v5_1_1text__style.html#a5324d97346072124428bfdad11462bea", null ], - [ "get_emphasis", "classfmt_1_1v5_1_1text__style.html#a75f3f3ccdf9ea0a441113237e00bae2f", null ], - [ "get_foreground", "classfmt_1_1v5_1_1text__style.html#a951ddffc7cc6b47c9bd8238b9bc45d75", null ], - [ "has_background", "classfmt_1_1v5_1_1text__style.html#ae8b438a20e753fcfc1c912d3a4bdb1c9", null ], - [ "has_emphasis", "classfmt_1_1v5_1_1text__style.html#ae42bc013e5bdb08527611dc444844f3e", null ], - [ "has_foreground", "classfmt_1_1v5_1_1text__style.html#af39caf143ad60465481521f0147c1dbf", null ], + [ "get_background", "classfmt_1_1v5_1_1text__style.html#a413fc5d3521d17ff5cf780d16866bff4", null ], + [ "get_emphasis", "classfmt_1_1v5_1_1text__style.html#a956b290bdf7e3694728731cbf0984526", null ], + [ "get_foreground", "classfmt_1_1v5_1_1text__style.html#a5978eb2349058d51ddf5d3bfb7ce6da2", null ], + [ "has_background", "classfmt_1_1v5_1_1text__style.html#a49121f793f810c894f239ae3796c6c74", null ], + [ "has_emphasis", "classfmt_1_1v5_1_1text__style.html#ae5fd945d5da8d4518c432ee02cf60fc3", null ], + [ "has_foreground", "classfmt_1_1v5_1_1text__style.html#a7a1a970db901b4e0fe41bcbc09e65b02", null ], [ "operator&=", "classfmt_1_1v5_1_1text__style.html#acb1535c94d8cc4d69b19c4170a78f7d0", null ], [ "operator|=", "classfmt_1_1v5_1_1text__style.html#aab30ce069feb1260eb2f51b92b3c61c4", null ], [ "bg", "classfmt_1_1v5_1_1text__style.html#a72bef1c6e5993308ca69290a262468b0", null ], diff --git a/docs/classfmt_1_1v5_1_1u8string__view-members.html b/docs/classfmt_1_1v5_1_1u8string__view-members.html index e9e8cff..6e93e17 100644 --- a/docs/classfmt_1_1v5_1_1u8string__view-members.html +++ b/docs/classfmt_1_1v5_1_1u8string__view-members.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Member List @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -115,7 +135,7 @@ $(document).ready(function(){initNavTree('classfmt_1_1v5_1_1u8string__view.html'
    + doxygen 1.8.11
diff --git a/docs/classfmt_1_1v5_1_1u8string__view.html b/docs/classfmt_1_1v5_1_1u8string__view.html index 989a230..936b691 100644 --- a/docs/classfmt_1_1v5_1_1u8string__view.html +++ b/docs/classfmt_1_1v5_1_1u8string__view.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: fmt::v5::u8string_view Class Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -102,10 +122,10 @@ Inheritance diagram for fmt::v5::u8string_view:
- + fmt::v5::basic_string_view< char8_t > - -
+ + @@ -114,6 +134,8 @@ Public Types + +

Public Types

- Public Types inherited from fmt::v5::basic_string_view< char8_t >
typedef char8_t char_type
 
typedef const char8_titerator
 
@@ -130,32 +152,24 @@ Public Member Functions - - - - - - - - + + + + + + + + - - -

Public Member Functions

 
 basic_string_view (const std::basic_string< char8_t, Alloc > &s) throw ()
 
const char8_tdata () const
 
size_t size () const
 
iterator begin () const
 
iterator end () const
 
const char8_tdata () const
 
size_t size () const
 
iterator begin () const
 
iterator end () const
 
void remove_prefix (size_t n)
 
int compare (basic_string_view other) const
 
- - - - + +

-Additional Inherited Members

- Public Attributes inherited from fmt::v5::basic_string_view< char8_t >
const typedef char8_titerator
 
int compare (basic_string_view other) const
 

Detailed Description

-

Definition at line 411 of file format.h.

+

Definition at line 411 of file format.h.

Member Typedef Documentation

- -

◆ char_type

- +
@@ -165,14 +179,12 @@ Additional Inherited Members
-

Definition at line 413 of file format.h.

+

Definition at line 413 of file format.h.

Constructor & Destructor Documentation

- -

◆ u8string_view() [1/2]

- +
@@ -194,13 +206,11 @@ Additional Inherited Members
-

Definition at line 415 of file format.h.

+

Definition at line 415 of file format.h.

- -

◆ u8string_view() [2/2]

- +
@@ -238,7 +248,7 @@ Additional Inherited Members
-

Definition at line 417 of file format.h.

+

Definition at line 417 of file format.h.

@@ -253,7 +263,7 @@ Additional Inherited Members + doxygen 1.8.11 diff --git a/docs/classlivox_1_1_comm_port-members.html b/docs/classlivox_1_1_comm_port-members.html index 4691d7f..da81b18 100644 --- a/docs/classlivox_1_1_comm_port-members.html +++ b/docs/classlivox_1_1_comm_port-members.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Member List @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -108,7 +128,7 @@ $(document).ready(function(){initNavTree('classlivox_1_1_comm_port.html','');});
    + doxygen 1.8.11
diff --git a/docs/classlivox_1_1_comm_port.html b/docs/classlivox_1_1_comm_port.html index 2ac5ed5..deb3870 100644 --- a/docs/classlivox_1_1_comm_port.html +++ b/docs/classlivox_1_1_comm_port.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: livox::CommPort Class Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -116,11 +136,9 @@ Public Member Functions

Detailed Description

-

Definition at line 42 of file comm_port.h.

+

Definition at line 42 of file comm_port.h.

Constructor & Destructor Documentation

- -

◆ CommPort()

- +
@@ -135,9 +153,7 @@ Public Member Functions - -

◆ ~CommPort()

- +
@@ -153,9 +169,7 @@ Public Member Functions

Member Function Documentation

- -

◆ FetchCacheFreeSpace()

- +
@@ -171,9 +185,7 @@ Public Member Functions - -

◆ GetAndUpdateSeqNum()

- +
@@ -188,9 +200,7 @@ Public Member Functions - -

◆ Pack()

- +
@@ -228,9 +238,7 @@ Public Member Functions - -

◆ ParseCommStream()

- +
@@ -246,9 +254,7 @@ Public Member Functions - -

◆ UpdateCacheWrIdx()

- +
@@ -275,7 +281,7 @@ Public Member Functions + doxygen 1.8.11 diff --git a/docs/classlivox_1_1_protocol-members.html b/docs/classlivox_1_1_protocol-members.html index 5cd8765..89c80de 100644 --- a/docs/classlivox_1_1_protocol-members.html +++ b/docs/classlivox_1_1_protocol-members.html @@ -1,10 +1,9 @@ - + - - +Livox SDK API: Member List @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ @@ -39,22 +41,42 @@
Livox SDK API -  V2.0.0 +  V2.1.0
- + - - - - + +
@@ -109,7 +129,7 @@ $(document).ready(function(){initNavTree('classlivox_1_1_protocol.html','');});
    + doxygen 1.8.11
diff --git a/docs/classlivox_1_1_protocol.html b/docs/classlivox_1_1_protocol.html index 1cc13f7..594356c 100644 --- a/docs/classlivox_1_1_protocol.html +++ b/docs/classlivox_1_1_protocol.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: livox::Protocol Class Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@
- + - - - - + +
@@ -118,11 +138,9 @@ Public Member Functions

Detailed Description

-

Definition at line 62 of file protocol.h.

+

Definition at line 62 of file protocol.h.

Constructor & Destructor Documentation

- -

◆ ~Protocol()

- +
@@ -143,14 +161,12 @@ Public Member Functions
-

Definition at line 64 of file protocol.h.

+

Definition at line 64 of file protocol.h.

Member Function Documentation

- -

◆ CheckPacket()

- +
@@ -174,9 +190,7 @@ Public Member Functions - -

◆ CheckPreamble()

- +
@@ -200,9 +214,7 @@ Public Member Functions - -

◆ GetPacketLen()

- +
@@ -226,9 +238,7 @@ Public Member Functions - -

◆ GetPacketWrapperLen()

- +
@@ -251,9 +261,7 @@ Public Member Functions - -

◆ GetPreambleLen()

- +
@@ -276,9 +284,7 @@ Public Member Functions - -

◆ Pack()

- +
@@ -324,9 +330,7 @@ Public Member Functions - -

◆ ParsePacket()

- +
@@ -377,7 +381,7 @@ Public Member Functions + doxygen 1.8.11 diff --git a/docs/classspdlog_1_1async__logger-members.html b/docs/classspdlog_1_1async__logger-members.html index 61e11c0..e28e24a 100644 --- a/docs/classspdlog_1_1async__logger-members.html +++ b/docs/classspdlog_1_1async__logger-members.html @@ -1,10 +1,9 @@ - + - - +Livox SDK API: Member List @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ @@ -39,22 +41,42 @@
Livox SDK API -  V2.0.0 +  V2.1.0
- + - - - - + +
@@ -100,30 +120,30 @@ $(document).ready(function(){initNavTree('classspdlog_1_1async__logger.html','') backend_flush_()spdlog::async_loggerinlineprotected backend_log_(const details::log_msg &incoming_log_msg)spdlog::async_loggerinlineprotected clone(std::string new_name) overridespdlog::async_loggerinlinevirtual - critical(const char *fmt, const Args &... args)spdlog::loggerinline + critical(const char *fmt, const Args &...args)spdlog::loggerinline critical(const T &msg)spdlog::loggerinline - debug(const char *fmt, const Args &... args)spdlog::loggerinline + debug(const char *fmt, const Args &...args)spdlog::loggerinline debug(const T &msg)spdlog::loggerinline default_err_handler_(const std::string &msg)spdlog::loggerinlineprotected default_level()spdlog::loggerinlinestatic details::thread_pool classspdlog::async_loggerfriend err_handler_spdlog::loggerprotected - error(const char *fmt, const Args &... args)spdlog::loggerinline + error(const char *fmt, const Args &...args)spdlog::loggerinline error(const T &msg)spdlog::loggerinline - error_handler() constspdlog::loggerinline + error_handler() const spdlog::loggerinline flush()spdlog::loggerinline flush_() overridespdlog::async_loggerinlineprotectedvirtual - flush_level() constspdlog::loggerinline + flush_level() const spdlog::loggerinline flush_level_spdlog::loggerprotected flush_on(level::level_enum log_level)spdlog::loggerinline incr_msg_counter_(details::log_msg &msg)spdlog::loggerinlineprotected - info(const char *fmt, const Args &... args)spdlog::loggerinline + info(const char *fmt, const Args &...args)spdlog::loggerinline info(const T &msg)spdlog::loggerinline last_err_time_spdlog::loggerprotected - level() constspdlog::loggerinline + level() const spdlog::loggerinline level_spdlog::loggerprotected - log(level::level_enum lvl, const char *fmt, const Args &... args)spdlog::loggerinline - log(source_loc loc, level::level_enum lvl, const char *fmt, const Args &... args)spdlog::loggerinline + log(level::level_enum lvl, const char *fmt, const Args &...args)spdlog::loggerinline + log(source_loc loc, level::level_enum lvl, const char *fmt, const Args &...args)spdlog::loggerinline log(level::level_enum lvl, const char *msg)spdlog::loggerinline log(source_loc loc, level::level_enum lvl, const char *msg)spdlog::loggerinline log(level::level_enum lvl, const T &)spdlog::loggerinline @@ -134,7 +154,7 @@ $(document).ready(function(){initNavTree('classspdlog_1_1async__logger.html','') logger(std::string name, It begin, It end)spdlog::loggerinline logger(const logger &)=deletespdlog::logger msg_counter_spdlog::loggerprotected - name() constspdlog::loggerinline + name() const spdlog::loggerinline name_spdlog::loggerprotected operator=(const logger &)=deletespdlog::logger set_error_handler(log_err_handler err_handler)spdlog::loggerinline @@ -142,14 +162,14 @@ $(document).ready(function(){initNavTree('classspdlog_1_1async__logger.html','') set_level(level::level_enum log_level)spdlog::loggerinline set_pattern(std::string pattern, pattern_time_type time_type=pattern_time_type::local)spdlog::loggerinline should_flush_(const details::log_msg &msg)spdlog::loggerinlineprotected - should_log(level::level_enum msg_level) constspdlog::loggerinline + should_log(level::level_enum msg_level) const spdlog::loggerinline sink_it_(details::log_msg &msg) overridespdlog::async_loggerinlineprotectedvirtual - sinks() constspdlog::loggerinline + sinks() const spdlog::loggerinline sinks()spdlog::loggerinline sinks_spdlog::loggerprotected - trace(const char *fmt, const Args &... args)spdlog::loggerinline + trace(const char *fmt, const Args &...args)spdlog::loggerinline trace(const T &msg)spdlog::loggerinline - warn(const char *fmt, const Args &... args)spdlog::loggerinline + warn(const char *fmt, const Args &...args)spdlog::loggerinline warn(const T &msg)spdlog::loggerinline ~logger()spdlog::loggerinlinevirtual
@@ -159,7 +179,7 @@ $(document).ready(function(){initNavTree('classspdlog_1_1async__logger.html','')
    + doxygen 1.8.11
diff --git a/docs/classspdlog_1_1async__logger.html b/docs/classspdlog_1_1async__logger.html index a8b2989..a16c912 100644 --- a/docs/classspdlog_1_1async__logger.html +++ b/docs/classspdlog_1_1async__logger.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: spdlog::async_logger Class Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -103,10 +123,10 @@ Inheritance diagram for spdlog::async_logger:
- + spdlog::logger - -
+ + @@ -120,12 +140,12 @@ Public Member Functions - + - + - + @@ -133,34 +153,34 @@ Public Member Functions - - - - - - + + + + + + - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + @@ -188,14 +208,14 @@ Public Member Functions - - + + - - - - + + + + @@ -204,16 +224,16 @@ Public Member Functions - - - - + + + + - - + +

Public Member Functions

std::shared_ptr< loggerclone (std::string new_name) override
 
- Public Member Functions inherited from spdlog::logger
 logger (std::string name, sink_ptr single_sink)
 logger (std::string name, sink_ptr single_sink)
 
 logger (std::string name, sinks_init_list sinks)
 logger (std::string name, sinks_init_list sinks)
 
template<typename It >
 logger (std::string name, It begin, It end)
 logger (std::string name, It begin, It end)
 
virtual ~logger ()
 
 
loggeroperator= (const logger &)=delete
 
template<typename... Args>
void log (level::level_enum lvl, const char *fmt, const Args &... args)
 
template<typename... Args>
void log (source_loc loc, level::level_enum lvl, const char *fmt, const Args &... args)
 
template<typename... Args>
void log (level::level_enum lvl, const char *fmt, const Args &...args)
 
template<typename... Args>
void log (source_loc loc, level::level_enum lvl, const char *fmt, const Args &...args)
 
void log (level::level_enum lvl, const char *msg)
 
void log (source_loc loc, level::level_enum lvl, const char *msg)
 
template<typename... Args>
void trace (const char *fmt, const Args &... args)
 
template<typename... Args>
void debug (const char *fmt, const Args &... args)
 
template<typename... Args>
void info (const char *fmt, const Args &... args)
 
template<typename... Args>
void warn (const char *fmt, const Args &... args)
 
template<typename... Args>
void error (const char *fmt, const Args &... args)
 
template<typename... Args>
void critical (const char *fmt, const Args &... args)
 
template<typename... Args>
void trace (const char *fmt, const Args &...args)
 
template<typename... Args>
void debug (const char *fmt, const Args &...args)
 
template<typename... Args>
void info (const char *fmt, const Args &...args)
 
template<typename... Args>
void warn (const char *fmt, const Args &...args)
 
template<typename... Args>
void error (const char *fmt, const Args &...args)
 
template<typename... Args>
void critical (const char *fmt, const Args &...args)
 
template<class T >
void log (level::level_enum lvl, const T &)
 
template<typename T >
void critical (const T &msg)
 
bool should_log (level::level_enum msg_level) const
 
bool should_log (level::level_enum msg_level) const
 
void set_level (level::level_enum log_level)
 
level::level_enum level () const
 
const std::string & name () const
 
level::level_enum level () const
 
const std::string & name () const
 
void set_formatter (std::unique_ptr< formatter > formatter)
 
void set_pattern (std::string pattern, pattern_time_type time_type=pattern_time_type::local)
 
void flush_on (level::level_enum log_level)
 
level::level_enum flush_level () const
 
const std::vector< sink_ptr > & sinks () const
 
level::level_enum flush_level () const
 
const std::vector< sink_ptr > & sinks () const
 
std::vector< sink_ptr > & sinks ()
 
void set_error_handler (log_err_handler err_handler)
 
log_err_handler error_handler () const
 
log_err_handler error_handler () const
 
@@ -261,11 +281,9 @@ Additional Inherited Members

Protected Member Functions

Detailed Description

-

Definition at line 43 of file async_logger.h.

+

Definition at line 43 of file async_logger.h.

Constructor & Destructor Documentation

- -

◆ async_logger() [1/3]

- +
@@ -317,13 +335,11 @@ template<typename It >
-

Definition at line 18 of file async_logger_impl.h.

+

Definition at line 18 of file async_logger_impl.h.

- -

◆ async_logger() [2/3]

- +
@@ -367,13 +383,11 @@ template<typename It >
-

Definition at line 26 of file async_logger_impl.h.

+

Definition at line 26 of file async_logger_impl.h.

- -

◆ async_logger() [3/3]

- +
@@ -417,14 +431,12 @@ template<typename It >
-

Definition at line 32 of file async_logger_impl.h.

+

Definition at line 32 of file async_logger_impl.h.

Member Function Documentation

- -

◆ backend_flush_()

- +
@@ -445,13 +457,11 @@ template<typename It >
-

Definition at line 90 of file async_logger_impl.h.

+

Definition at line 90 of file async_logger_impl.h.

- -

◆ backend_log_()

- +
@@ -473,13 +483,11 @@ template<typename It >
-

Definition at line 70 of file async_logger_impl.h.

+

Definition at line 70 of file async_logger_impl.h.

- -

◆ clone()

- +
@@ -503,13 +511,11 @@ template<typename It >

Reimplemented from spdlog::logger.

-

Definition at line 102 of file async_logger_impl.h.

+

Definition at line 102 of file async_logger_impl.h.

- -

◆ flush_()

- +
@@ -532,13 +538,11 @@ template<typename It >

Reimplemented from spdlog::logger.

-

Definition at line 55 of file async_logger_impl.h.

+

Definition at line 55 of file async_logger_impl.h.

- -

◆ sink_it_()

- +
@@ -562,14 +566,12 @@ template<typename It >

Reimplemented from spdlog::logger.

-

Definition at line 39 of file async_logger_impl.h.

+

Definition at line 39 of file async_logger_impl.h.

Friends And Related Function Documentation

- -

◆ details::thread_pool

- +
@@ -587,7 +589,7 @@ template<typename It >
-

Definition at line 45 of file async_logger.h.

+

Definition at line 45 of file async_logger.h.

@@ -603,7 +605,7 @@ template<typename It > + doxygen 1.8.11 diff --git a/docs/classspdlog_1_1details_1_1_a__formatter-members.html b/docs/classspdlog_1_1details_1_1_a__formatter-members.html index 6a15928..b2f022e 100644 --- a/docs/classspdlog_1_1details_1_1_a__formatter-members.html +++ b/docs/classspdlog_1_1details_1_1_a__formatter-members.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Member List @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -107,7 +127,7 @@ $(document).ready(function(){initNavTree('classspdlog_1_1details_1_1_a__formatte
    + doxygen 1.8.11
diff --git a/docs/classspdlog_1_1details_1_1_a__formatter.html b/docs/classspdlog_1_1details_1_1_a__formatter.html index 2cf88f6..2f8915c 100644 --- a/docs/classspdlog_1_1details_1_1_a__formatter.html +++ b/docs/classspdlog_1_1details_1_1_a__formatter.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: spdlog::details::A_formatter Class Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -101,10 +121,10 @@ Inheritance diagram for spdlog::details::A_formatter:
- + spdlog::details::flag_formatter - -
+ + @@ -128,11 +148,9 @@ Additional Inherited Members

Public Member Functions

Detailed Description

-

Definition at line 226 of file pattern_formatter.h.

+

Definition at line 226 of file pattern_formatter.h.

Constructor & Destructor Documentation

- -

◆ A_formatter()

- +
@@ -154,14 +172,12 @@ Additional Inherited Members
-

Definition at line 229 of file pattern_formatter.h.

+

Definition at line 229 of file pattern_formatter.h.

Member Function Documentation

- -

◆ format()

- +
@@ -201,7 +217,7 @@ Additional Inherited Members

Implements spdlog::details::flag_formatter.

-

Definition at line 234 of file pattern_formatter.h.

+

Definition at line 234 of file pattern_formatter.h.

@@ -216,7 +232,7 @@ Additional Inherited Members + doxygen 1.8.11 diff --git a/docs/classspdlog_1_1details_1_1_b__formatter-members.html b/docs/classspdlog_1_1details_1_1_b__formatter-members.html index 2a2189e..a268502 100644 --- a/docs/classspdlog_1_1details_1_1_b__formatter-members.html +++ b/docs/classspdlog_1_1details_1_1_b__formatter-members.html @@ -1,10 +1,9 @@ - + - - +Livox SDK API: Member List @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ @@ -39,22 +41,42 @@
Livox SDK API -  V2.0.0 +  V2.1.0
- + - - - - + +
@@ -107,7 +127,7 @@ $(document).ready(function(){initNavTree('classspdlog_1_1details_1_1_b__formatte
    + doxygen 1.8.11
diff --git a/docs/classspdlog_1_1details_1_1_b__formatter.html b/docs/classspdlog_1_1details_1_1_b__formatter.html index 8e93888..b2ae9e6 100644 --- a/docs/classspdlog_1_1details_1_1_b__formatter.html +++ b/docs/classspdlog_1_1details_1_1_b__formatter.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: spdlog::details::B_formatter Class Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -101,10 +121,10 @@ Inheritance diagram for spdlog::details::B_formatter:
- + spdlog::details::flag_formatter - -
+ + @@ -128,11 +148,9 @@ Additional Inherited Members

Public Member Functions

Detailed Description

-

Definition at line 263 of file pattern_formatter.h.

+

Definition at line 263 of file pattern_formatter.h.

Constructor & Destructor Documentation

- -

◆ B_formatter()

- +
@@ -154,14 +172,12 @@ Additional Inherited Members
-

Definition at line 266 of file pattern_formatter.h.

+

Definition at line 266 of file pattern_formatter.h.

Member Function Documentation

- -

◆ format()

- +
@@ -201,7 +217,7 @@ Additional Inherited Members

Implements spdlog::details::flag_formatter.

-

Definition at line 271 of file pattern_formatter.h.

+

Definition at line 271 of file pattern_formatter.h.

@@ -216,7 +232,7 @@ Additional Inherited Members + doxygen 1.8.11 diff --git a/docs/classspdlog_1_1details_1_1_c__formatter-members.html b/docs/classspdlog_1_1details_1_1_c__formatter-members.html index db88b4a..fe2685a 100644 --- a/docs/classspdlog_1_1details_1_1_c__formatter-members.html +++ b/docs/classspdlog_1_1details_1_1_c__formatter-members.html @@ -1,10 +1,9 @@ - + - - +Livox SDK API: Member List @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ @@ -39,22 +41,42 @@
Livox SDK API -  V2.0.0 +  V2.1.0
- + - - - - + +
@@ -107,7 +127,7 @@ $(document).ready(function(){initNavTree('classspdlog_1_1details_1_1_c__formatte
    + doxygen 1.8.11
diff --git a/docs/classspdlog_1_1details_1_1_c__formatter.html b/docs/classspdlog_1_1details_1_1_c__formatter.html index 55f52ad..538be0c 100644 --- a/docs/classspdlog_1_1details_1_1_c__formatter.html +++ b/docs/classspdlog_1_1details_1_1_c__formatter.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: spdlog::details::C_formatter Class Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -101,10 +121,10 @@ Inheritance diagram for spdlog::details::C_formatter:
- + spdlog::details::flag_formatter - -
+ + @@ -128,11 +148,9 @@ Additional Inherited Members

Public Member Functions

Detailed Description

-

Definition at line 312 of file pattern_formatter.h.

+

Definition at line 312 of file pattern_formatter.h.

Constructor & Destructor Documentation

- -

◆ C_formatter()

- +
@@ -154,14 +172,12 @@ Additional Inherited Members
-

Definition at line 315 of file pattern_formatter.h.

+

Definition at line 315 of file pattern_formatter.h.

Member Function Documentation

- -

◆ format()

- +
@@ -201,7 +217,7 @@ Additional Inherited Members

Implements spdlog::details::flag_formatter.

-

Definition at line 320 of file pattern_formatter.h.

+

Definition at line 320 of file pattern_formatter.h.

@@ -216,7 +232,7 @@ Additional Inherited Members + doxygen 1.8.11 diff --git a/docs/classspdlog_1_1details_1_1_d__formatter-members.html b/docs/classspdlog_1_1details_1_1_d__formatter-members.html index 1f7869e..875cac8 100644 --- a/docs/classspdlog_1_1details_1_1_d__formatter-members.html +++ b/docs/classspdlog_1_1details_1_1_d__formatter-members.html @@ -1,10 +1,9 @@ - + - - +Livox SDK API: Member List @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ @@ -39,22 +41,42 @@
Livox SDK API -  V2.0.0 +  V2.1.0
- + - - - - + +
@@ -107,7 +127,7 @@ $(document).ready(function(){initNavTree('classspdlog_1_1details_1_1_d__formatte
    + doxygen 1.8.11
diff --git a/docs/classspdlog_1_1details_1_1_d__formatter.html b/docs/classspdlog_1_1details_1_1_d__formatter.html index 2cb33c2..102f670 100644 --- a/docs/classspdlog_1_1details_1_1_d__formatter.html +++ b/docs/classspdlog_1_1details_1_1_d__formatter.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: spdlog::details::D_formatter Class Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -101,10 +121,10 @@ Inheritance diagram for spdlog::details::D_formatter:
- + spdlog::details::flag_formatter - -
+ + @@ -128,11 +148,9 @@ Additional Inherited Members

Public Member Functions

Detailed Description

-

Definition at line 329 of file pattern_formatter.h.

+

Definition at line 329 of file pattern_formatter.h.

Constructor & Destructor Documentation

- -

◆ D_formatter()

- +
@@ -154,14 +172,12 @@ Additional Inherited Members
-

Definition at line 332 of file pattern_formatter.h.

+

Definition at line 332 of file pattern_formatter.h.

Member Function Documentation

- -

◆ format()

- +
@@ -201,7 +217,7 @@ Additional Inherited Members

Implements spdlog::details::flag_formatter.

-

Definition at line 337 of file pattern_formatter.h.

+

Definition at line 337 of file pattern_formatter.h.

@@ -216,7 +232,7 @@ Additional Inherited Members + doxygen 1.8.11 diff --git a/docs/classspdlog_1_1details_1_1_e__formatter-members.html b/docs/classspdlog_1_1details_1_1_e__formatter-members.html index e10039e..5c831a3 100644 --- a/docs/classspdlog_1_1details_1_1_e__formatter-members.html +++ b/docs/classspdlog_1_1details_1_1_e__formatter-members.html @@ -1,10 +1,9 @@ - + - - +Livox SDK API: Member List @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ @@ -39,22 +41,42 @@
Livox SDK API -  V2.0.0 +  V2.1.0
- + - - - - + +
@@ -107,7 +127,7 @@ $(document).ready(function(){initNavTree('classspdlog_1_1details_1_1_e__formatte
    + doxygen 1.8.11
diff --git a/docs/classspdlog_1_1details_1_1_e__formatter.html b/docs/classspdlog_1_1details_1_1_e__formatter.html index da6ab67..68e4647 100644 --- a/docs/classspdlog_1_1details_1_1_e__formatter.html +++ b/docs/classspdlog_1_1details_1_1_e__formatter.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: spdlog::details::E_formatter Class Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -101,10 +121,10 @@ Inheritance diagram for spdlog::details::E_formatter:
- + spdlog::details::flag_formatter - -
+ + @@ -128,11 +148,9 @@ Additional Inherited Members

Public Member Functions

Detailed Description

-

Definition at line 531 of file pattern_formatter.h.

+

Definition at line 531 of file pattern_formatter.h.

Constructor & Destructor Documentation

- -

◆ E_formatter()

- +
@@ -154,14 +172,12 @@ Additional Inherited Members
-

Definition at line 534 of file pattern_formatter.h.

+

Definition at line 534 of file pattern_formatter.h.

Member Function Documentation

- -

◆ format()

- +
@@ -201,7 +217,7 @@ Additional Inherited Members

Implements spdlog::details::flag_formatter.

-

Definition at line 537 of file pattern_formatter.h.

+

Definition at line 537 of file pattern_formatter.h.

@@ -216,7 +232,7 @@ Additional Inherited Members + doxygen 1.8.11 diff --git a/docs/classspdlog_1_1details_1_1_f__formatter-members.html b/docs/classspdlog_1_1details_1_1_f__formatter-members.html index 21f5df6..33cf582 100644 --- a/docs/classspdlog_1_1details_1_1_f__formatter-members.html +++ b/docs/classspdlog_1_1details_1_1_f__formatter-members.html @@ -1,10 +1,9 @@ - + - - +Livox SDK API: Member List @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ @@ -39,22 +41,42 @@
Livox SDK API -  V2.0.0 +  V2.1.0
- + - - - - + +
@@ -107,7 +127,7 @@ $(document).ready(function(){initNavTree('classspdlog_1_1details_1_1_f__formatte
    + doxygen 1.8.11
diff --git a/docs/classspdlog_1_1details_1_1_f__formatter.html b/docs/classspdlog_1_1details_1_1_f__formatter.html index ce18158..a4485f5 100644 --- a/docs/classspdlog_1_1details_1_1_f__formatter.html +++ b/docs/classspdlog_1_1details_1_1_f__formatter.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: spdlog::details::F_formatter Class Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -101,10 +121,10 @@ Inheritance diagram for spdlog::details::F_formatter:
- + spdlog::details::flag_formatter - -
+ + @@ -128,11 +148,9 @@ Additional Inherited Members

Public Member Functions

Detailed Description

-

Definition at line 508 of file pattern_formatter.h.

+

Definition at line 508 of file pattern_formatter.h.

Constructor & Destructor Documentation

- -

◆ F_formatter()

- +
@@ -154,14 +172,12 @@ Additional Inherited Members
-

Definition at line 511 of file pattern_formatter.h.

+

Definition at line 511 of file pattern_formatter.h.

Member Function Documentation

- -

◆ format()

- +
@@ -201,7 +217,7 @@ Additional Inherited Members

Implements spdlog::details::flag_formatter.

-

Definition at line 514 of file pattern_formatter.h.

+

Definition at line 514 of file pattern_formatter.h.

@@ -216,7 +232,7 @@ Additional Inherited Members + doxygen 1.8.11 diff --git a/docs/classspdlog_1_1details_1_1_h__formatter-members.html b/docs/classspdlog_1_1details_1_1_h__formatter-members.html index 6edadb3..4ec4f23 100644 --- a/docs/classspdlog_1_1details_1_1_h__formatter-members.html +++ b/docs/classspdlog_1_1details_1_1_h__formatter-members.html @@ -1,10 +1,9 @@ - + - - +Livox SDK API: Member List @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ @@ -39,22 +41,42 @@
Livox SDK API -  V2.0.0 +  V2.1.0
- + - - - - + +
@@ -107,7 +127,7 @@ $(document).ready(function(){initNavTree('classspdlog_1_1details_1_1_h__formatte
    + doxygen 1.8.11
diff --git a/docs/classspdlog_1_1details_1_1_h__formatter.html b/docs/classspdlog_1_1details_1_1_h__formatter.html index a4be80e..2fb2d49 100644 --- a/docs/classspdlog_1_1details_1_1_h__formatter.html +++ b/docs/classspdlog_1_1details_1_1_h__formatter.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: spdlog::details::H_formatter Class Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -101,10 +121,10 @@ Inheritance diagram for spdlog::details::H_formatter:
- + spdlog::details::flag_formatter - -
+ + @@ -128,11 +148,9 @@ Additional Inherited Members

Public Member Functions

Detailed Description

-

Definition at line 400 of file pattern_formatter.h.

+

Definition at line 400 of file pattern_formatter.h.

Constructor & Destructor Documentation

- -

◆ H_formatter()

- +
@@ -154,14 +172,12 @@ Additional Inherited Members
-

Definition at line 403 of file pattern_formatter.h.

+

Definition at line 403 of file pattern_formatter.h.

Member Function Documentation

- -

◆ format()

- +
@@ -201,7 +217,7 @@ Additional Inherited Members

Implements spdlog::details::flag_formatter.

-

Definition at line 408 of file pattern_formatter.h.

+

Definition at line 408 of file pattern_formatter.h.

@@ -216,7 +232,7 @@ Additional Inherited Members + doxygen 1.8.11 diff --git a/docs/classspdlog_1_1details_1_1_i__formatter-members.html b/docs/classspdlog_1_1details_1_1_i__formatter-members.html index 97331c8..9592f0a 100644 --- a/docs/classspdlog_1_1details_1_1_i__formatter-members.html +++ b/docs/classspdlog_1_1details_1_1_i__formatter-members.html @@ -1,10 +1,9 @@ - + - - +Livox SDK API: Member List @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ @@ -39,22 +41,42 @@
Livox SDK API -  V2.0.0 +  V2.1.0
- + - - - - + +
@@ -107,7 +127,7 @@ $(document).ready(function(){initNavTree('classspdlog_1_1details_1_1_i__formatte
    + doxygen 1.8.11
diff --git a/docs/classspdlog_1_1details_1_1_i__formatter.html b/docs/classspdlog_1_1details_1_1_i__formatter.html index d0d6876..871e0ab 100644 --- a/docs/classspdlog_1_1details_1_1_i__formatter.html +++ b/docs/classspdlog_1_1details_1_1_i__formatter.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: spdlog::details::I_formatter Class Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -101,10 +121,10 @@ Inheritance diagram for spdlog::details::I_formatter:
- + spdlog::details::flag_formatter - -
+ + @@ -128,11 +148,9 @@ Additional Inherited Members

Public Member Functions

Detailed Description

-

Definition at line 417 of file pattern_formatter.h.

+

Definition at line 417 of file pattern_formatter.h.

Constructor & Destructor Documentation

- -

◆ I_formatter()

- +
@@ -154,14 +172,12 @@ Additional Inherited Members
-

Definition at line 420 of file pattern_formatter.h.

+

Definition at line 420 of file pattern_formatter.h.

Member Function Documentation

- -

◆ format()

- +
@@ -201,7 +217,7 @@ Additional Inherited Members

Implements spdlog::details::flag_formatter.

-

Definition at line 423 of file pattern_formatter.h.

+

Definition at line 423 of file pattern_formatter.h.

@@ -216,7 +232,7 @@ Additional Inherited Members + doxygen 1.8.11 diff --git a/docs/classspdlog_1_1details_1_1_m__formatter-members.html b/docs/classspdlog_1_1details_1_1_m__formatter-members.html index 72dfdf1..f7fceed 100644 --- a/docs/classspdlog_1_1details_1_1_m__formatter-members.html +++ b/docs/classspdlog_1_1details_1_1_m__formatter-members.html @@ -1,10 +1,9 @@ - + - - +Livox SDK API: Member List @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ @@ -39,22 +41,42 @@
Livox SDK API -  V2.0.0 +  V2.1.0
- + - - - - + +
@@ -107,7 +127,7 @@ $(document).ready(function(){initNavTree('classspdlog_1_1details_1_1_m__formatte
    + doxygen 1.8.11
diff --git a/docs/classspdlog_1_1details_1_1_m__formatter.html b/docs/classspdlog_1_1details_1_1_m__formatter.html index 5c09eef..058bd7b 100644 --- a/docs/classspdlog_1_1details_1_1_m__formatter.html +++ b/docs/classspdlog_1_1details_1_1_m__formatter.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: spdlog::details::M_formatter Class Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -101,10 +121,10 @@ Inheritance diagram for spdlog::details::M_formatter:
- + spdlog::details::flag_formatter - -
+ + @@ -128,11 +148,9 @@ Additional Inherited Members

Public Member Functions

Detailed Description

-

Definition at line 432 of file pattern_formatter.h.

+

Definition at line 432 of file pattern_formatter.h.

Constructor & Destructor Documentation

- -

◆ M_formatter()

- +
@@ -154,14 +172,12 @@ Additional Inherited Members
-

Definition at line 435 of file pattern_formatter.h.

+

Definition at line 435 of file pattern_formatter.h.

Member Function Documentation

- -

◆ format()

- +
@@ -201,7 +217,7 @@ Additional Inherited Members

Implements spdlog::details::flag_formatter.

-

Definition at line 438 of file pattern_formatter.h.

+

Definition at line 438 of file pattern_formatter.h.

@@ -216,7 +232,7 @@ Additional Inherited Members + doxygen 1.8.11 diff --git a/docs/classspdlog_1_1details_1_1_r__formatter-members.html b/docs/classspdlog_1_1details_1_1_r__formatter-members.html index 4f99f22..d8e7740 100644 --- a/docs/classspdlog_1_1details_1_1_r__formatter-members.html +++ b/docs/classspdlog_1_1details_1_1_r__formatter-members.html @@ -1,10 +1,9 @@ - + - - +Livox SDK API: Member List @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ @@ -39,22 +41,42 @@
Livox SDK API -  V2.0.0 +  V2.1.0
- + - - - - + +
@@ -107,7 +127,7 @@ $(document).ready(function(){initNavTree('classspdlog_1_1details_1_1_r__formatte
    + doxygen 1.8.11
diff --git a/docs/classspdlog_1_1details_1_1_r__formatter.html b/docs/classspdlog_1_1details_1_1_r__formatter.html index 97610b1..a58aaec 100644 --- a/docs/classspdlog_1_1details_1_1_r__formatter.html +++ b/docs/classspdlog_1_1details_1_1_r__formatter.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: spdlog::details::R_formatter Class Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -101,10 +121,10 @@ Inheritance diagram for spdlog::details::R_formatter:
- + spdlog::details::flag_formatter - -
+ + @@ -128,11 +148,9 @@ Additional Inherited Members

Public Member Functions

Detailed Description

-

Definition at line 585 of file pattern_formatter.h.

+

Definition at line 585 of file pattern_formatter.h.

Constructor & Destructor Documentation

- -

◆ R_formatter()

- +
@@ -154,14 +172,12 @@ Additional Inherited Members
-

Definition at line 588 of file pattern_formatter.h.

+

Definition at line 588 of file pattern_formatter.h.

Member Function Documentation

- -

◆ format()

- +
@@ -201,7 +217,7 @@ Additional Inherited Members

Implements spdlog::details::flag_formatter.

-

Definition at line 591 of file pattern_formatter.h.

+

Definition at line 591 of file pattern_formatter.h.

@@ -216,7 +232,7 @@ Additional Inherited Members + doxygen 1.8.11 diff --git a/docs/classspdlog_1_1details_1_1_s__formatter-members.html b/docs/classspdlog_1_1details_1_1_s__formatter-members.html index 497ad38..160533d 100644 --- a/docs/classspdlog_1_1details_1_1_s__formatter-members.html +++ b/docs/classspdlog_1_1details_1_1_s__formatter-members.html @@ -1,10 +1,9 @@ - + - - +Livox SDK API: Member List @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ @@ -39,22 +41,42 @@
Livox SDK API -  V2.0.0 +  V2.1.0
- + - - - - + +
@@ -107,7 +127,7 @@ $(document).ready(function(){initNavTree('classspdlog_1_1details_1_1_s__formatte
    + doxygen 1.8.11
diff --git a/docs/classspdlog_1_1details_1_1_s__formatter.html b/docs/classspdlog_1_1details_1_1_s__formatter.html index b8ebc8f..d1c8ccb 100644 --- a/docs/classspdlog_1_1details_1_1_s__formatter.html +++ b/docs/classspdlog_1_1details_1_1_s__formatter.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: spdlog::details::S_formatter Class Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -101,10 +121,10 @@ Inheritance diagram for spdlog::details::S_formatter:
- + spdlog::details::flag_formatter - -
+ + @@ -128,11 +148,9 @@ Additional Inherited Members

Public Member Functions

Detailed Description

-

Definition at line 447 of file pattern_formatter.h.

+

Definition at line 447 of file pattern_formatter.h.

Constructor & Destructor Documentation

- -

◆ S_formatter()

- +
@@ -154,14 +172,12 @@ Additional Inherited Members
-

Definition at line 450 of file pattern_formatter.h.

+

Definition at line 450 of file pattern_formatter.h.

Member Function Documentation

- -

◆ format()

- +
@@ -201,7 +217,7 @@ Additional Inherited Members

Implements spdlog::details::flag_formatter.

-

Definition at line 453 of file pattern_formatter.h.

+

Definition at line 453 of file pattern_formatter.h.

@@ -216,7 +232,7 @@ Additional Inherited Members + doxygen 1.8.11 diff --git a/docs/classspdlog_1_1details_1_1_t__formatter-members.html b/docs/classspdlog_1_1details_1_1_t__formatter-members.html index 0039ce2..6681b25 100644 --- a/docs/classspdlog_1_1details_1_1_t__formatter-members.html +++ b/docs/classspdlog_1_1details_1_1_t__formatter-members.html @@ -1,10 +1,9 @@ - + - - +Livox SDK API: Member List @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ @@ -39,22 +41,42 @@
Livox SDK API -  V2.0.0 +  V2.1.0
- + - - - - + +
@@ -107,7 +127,7 @@ $(document).ready(function(){initNavTree('classspdlog_1_1details_1_1_t__formatte
    + doxygen 1.8.11
diff --git a/docs/classspdlog_1_1details_1_1_t__formatter.html b/docs/classspdlog_1_1details_1_1_t__formatter.html index 4bab9d2..0f38d88 100644 --- a/docs/classspdlog_1_1details_1_1_t__formatter.html +++ b/docs/classspdlog_1_1details_1_1_t__formatter.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: spdlog::details::T_formatter Class Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -101,10 +121,10 @@ Inheritance diagram for spdlog::details::T_formatter:
- + spdlog::details::flag_formatter - -
+ + @@ -128,11 +148,9 @@ Additional Inherited Members

Public Member Functions

Detailed Description

-

Definition at line 603 of file pattern_formatter.h.

+

Definition at line 603 of file pattern_formatter.h.

Constructor & Destructor Documentation

- -

◆ T_formatter()

- +
@@ -154,14 +172,12 @@ Additional Inherited Members
-

Definition at line 606 of file pattern_formatter.h.

+

Definition at line 606 of file pattern_formatter.h.

Member Function Documentation

- -

◆ format()

- +
@@ -201,7 +217,7 @@ Additional Inherited Members

Implements spdlog::details::flag_formatter.

-

Definition at line 609 of file pattern_formatter.h.

+

Definition at line 609 of file pattern_formatter.h.

@@ -216,7 +232,7 @@ Additional Inherited Members + doxygen 1.8.11 diff --git a/docs/classspdlog_1_1details_1_1_y__formatter-members.html b/docs/classspdlog_1_1details_1_1_y__formatter-members.html index 6943ac8..f3718fc 100644 --- a/docs/classspdlog_1_1details_1_1_y__formatter-members.html +++ b/docs/classspdlog_1_1details_1_1_y__formatter-members.html @@ -1,10 +1,9 @@ - + - - +Livox SDK API: Member List @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ @@ -39,22 +41,42 @@
Livox SDK API -  V2.0.0 +  V2.1.0
- + - - - - + +
@@ -107,7 +127,7 @@ $(document).ready(function(){initNavTree('classspdlog_1_1details_1_1_y__formatte
    + doxygen 1.8.11
diff --git a/docs/classspdlog_1_1details_1_1_y__formatter.html b/docs/classspdlog_1_1details_1_1_y__formatter.html index ca2154b..1dd2381 100644 --- a/docs/classspdlog_1_1details_1_1_y__formatter.html +++ b/docs/classspdlog_1_1details_1_1_y__formatter.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: spdlog::details::Y_formatter Class Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -101,10 +121,10 @@ Inheritance diagram for spdlog::details::Y_formatter:
- + spdlog::details::flag_formatter - -
+ + @@ -128,11 +148,9 @@ Additional Inherited Members

Public Member Functions

Detailed Description

-

Definition at line 351 of file pattern_formatter.h.

+

Definition at line 351 of file pattern_formatter.h.

Constructor & Destructor Documentation

- -

◆ Y_formatter()

- +
@@ -154,14 +172,12 @@ Additional Inherited Members
-

Definition at line 354 of file pattern_formatter.h.

+

Definition at line 354 of file pattern_formatter.h.

Member Function Documentation

- -

◆ format()

- +
@@ -201,7 +217,7 @@ Additional Inherited Members

Implements spdlog::details::flag_formatter.

-

Definition at line 357 of file pattern_formatter.h.

+

Definition at line 357 of file pattern_formatter.h.

@@ -216,7 +232,7 @@ Additional Inherited Members + doxygen 1.8.11 diff --git a/docs/classspdlog_1_1details_1_1a__formatter-members.html b/docs/classspdlog_1_1details_1_1a__formatter-members.html index cd6ae2e..7284e64 100644 --- a/docs/classspdlog_1_1details_1_1a__formatter-members.html +++ b/docs/classspdlog_1_1details_1_1a__formatter-members.html @@ -1,10 +1,9 @@ - + - - +Livox SDK API: Member List @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ @@ -39,22 +41,42 @@
Livox SDK API -  V2.0.0 +  V2.1.0
- + - - - - + +
@@ -107,7 +127,7 @@ $(document).ready(function(){initNavTree('classspdlog_1_1details_1_1a__formatter
    + doxygen 1.8.11
diff --git a/docs/classspdlog_1_1details_1_1a__formatter.html b/docs/classspdlog_1_1details_1_1a__formatter.html index d222499..769d20d 100644 --- a/docs/classspdlog_1_1details_1_1a__formatter.html +++ b/docs/classspdlog_1_1details_1_1a__formatter.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: spdlog::details::a_formatter Class Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -101,10 +121,10 @@ Inheritance diagram for spdlog::details::a_formatter:
- + spdlog::details::flag_formatter - -
+ + @@ -128,11 +148,9 @@ Additional Inherited Members

Public Member Functions

Detailed Description

-

Definition at line 208 of file pattern_formatter.h.

+

Definition at line 208 of file pattern_formatter.h.

Constructor & Destructor Documentation

- -

◆ a_formatter()

- +
@@ -154,14 +172,12 @@ Additional Inherited Members
-

Definition at line 211 of file pattern_formatter.h.

+

Definition at line 211 of file pattern_formatter.h.

Member Function Documentation

- -

◆ format()

- +
@@ -201,7 +217,7 @@ Additional Inherited Members

Implements spdlog::details::flag_formatter.

-

Definition at line 216 of file pattern_formatter.h.

+

Definition at line 216 of file pattern_formatter.h.

@@ -216,7 +232,7 @@ Additional Inherited Members + doxygen 1.8.11 diff --git a/docs/classspdlog_1_1details_1_1aggregate__formatter-members.html b/docs/classspdlog_1_1details_1_1aggregate__formatter-members.html index a2c1b88..75a1631 100644 --- a/docs/classspdlog_1_1details_1_1aggregate__formatter-members.html +++ b/docs/classspdlog_1_1details_1_1aggregate__formatter-members.html @@ -1,10 +1,9 @@ - + - - +Livox SDK API: Member List @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ @@ -39,22 +41,42 @@
Livox SDK API -  V2.0.0 +  V2.1.0
- + - - - - + +
@@ -108,7 +128,7 @@ $(document).ready(function(){initNavTree('classspdlog_1_1details_1_1aggregate__f
    + doxygen 1.8.11
diff --git a/docs/classspdlog_1_1details_1_1aggregate__formatter.html b/docs/classspdlog_1_1details_1_1aggregate__formatter.html index 0712161..20c73dd 100644 --- a/docs/classspdlog_1_1details_1_1aggregate__formatter.html +++ b/docs/classspdlog_1_1details_1_1aggregate__formatter.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: spdlog::details::aggregate_formatter Class Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -101,10 +121,10 @@ Inheritance diagram for spdlog::details::aggregate_formatter:
- + spdlog::details::flag_formatter - -
+ + @@ -130,11 +150,9 @@ Additional Inherited Members

Public Member Functions

Detailed Description

-

Definition at line 781 of file pattern_formatter.h.

+

Definition at line 781 of file pattern_formatter.h.

Constructor & Destructor Documentation

- -

◆ aggregate_formatter()

- +
@@ -158,9 +176,7 @@ Additional Inherited Members

Member Function Documentation

- -

◆ add_ch()

- +
@@ -182,13 +198,11 @@ Additional Inherited Members
-

Definition at line 786 of file pattern_formatter.h.

+

Definition at line 786 of file pattern_formatter.h.

- -

◆ format()

- +
@@ -228,7 +242,7 @@ Additional Inherited Members

Implements spdlog::details::flag_formatter.

-

Definition at line 790 of file pattern_formatter.h.

+

Definition at line 790 of file pattern_formatter.h.

@@ -243,7 +257,7 @@ Additional Inherited Members + doxygen 1.8.11 diff --git a/docs/classspdlog_1_1details_1_1b__formatter-members.html b/docs/classspdlog_1_1details_1_1b__formatter-members.html index 991e4d4..e3e53e4 100644 --- a/docs/classspdlog_1_1details_1_1b__formatter-members.html +++ b/docs/classspdlog_1_1details_1_1b__formatter-members.html @@ -1,10 +1,9 @@ - + - - +Livox SDK API: Member List @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ @@ -39,22 +41,42 @@
Livox SDK API -  V2.0.0 +  V2.1.0
- + - - - - + +
@@ -107,7 +127,7 @@ $(document).ready(function(){initNavTree('classspdlog_1_1details_1_1b__formatter
    + doxygen 1.8.11
diff --git a/docs/classspdlog_1_1details_1_1b__formatter.html b/docs/classspdlog_1_1details_1_1b__formatter.html index 597ca0f..2029139 100644 --- a/docs/classspdlog_1_1details_1_1b__formatter.html +++ b/docs/classspdlog_1_1details_1_1b__formatter.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: spdlog::details::b_formatter Class Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -101,10 +121,10 @@ Inheritance diagram for spdlog::details::b_formatter:
- + spdlog::details::flag_formatter - -
+ + @@ -128,11 +148,9 @@ Additional Inherited Members

Public Member Functions

Detailed Description

-

Definition at line 244 of file pattern_formatter.h.

+

Definition at line 244 of file pattern_formatter.h.

Constructor & Destructor Documentation

- -

◆ b_formatter()

- +
@@ -154,14 +172,12 @@ Additional Inherited Members
-

Definition at line 247 of file pattern_formatter.h.

+

Definition at line 247 of file pattern_formatter.h.

Member Function Documentation

- -

◆ format()

- +
@@ -201,7 +217,7 @@ Additional Inherited Members

Implements spdlog::details::flag_formatter.

-

Definition at line 252 of file pattern_formatter.h.

+

Definition at line 252 of file pattern_formatter.h.

@@ -216,7 +232,7 @@ Additional Inherited Members + doxygen 1.8.11 diff --git a/docs/classspdlog_1_1details_1_1bytes__range-members.html b/docs/classspdlog_1_1details_1_1bytes__range-members.html index 91d571b..0b432b8 100644 --- a/docs/classspdlog_1_1details_1_1bytes__range-members.html +++ b/docs/classspdlog_1_1details_1_1bytes__range-members.html @@ -1,10 +1,9 @@ - + - - +Livox SDK API: Member List @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ @@ -39,22 +41,42 @@
Livox SDK API -  V2.0.0 +  V2.1.0
- + - - - - + +
@@ -94,9 +114,9 @@ $(document).ready(function(){initNavTree('classspdlog_1_1details_1_1bytes__range

This is the complete list of members for spdlog::details::bytes_range< It >, including all inherited members.

- + - +
begin() constspdlog::details::bytes_range< It >inline
begin() const spdlog::details::bytes_range< It >inline
bytes_range(It range_begin, It range_end)spdlog::details::bytes_range< It >inline
end() constspdlog::details::bytes_range< It >inline
end() const spdlog::details::bytes_range< It >inline
@@ -104,7 +124,7 @@ $(document).ready(function(){initNavTree('classspdlog_1_1details_1_1bytes__range
    + doxygen 1.8.11
diff --git a/docs/classspdlog_1_1details_1_1bytes__range.html b/docs/classspdlog_1_1details_1_1bytes__range.html index 7d067ba..1aee5c2 100644 --- a/docs/classspdlog_1_1details_1_1bytes__range.html +++ b/docs/classspdlog_1_1details_1_1bytes__range.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: spdlog::details::bytes_range< It > Class Template Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -101,21 +121,19 @@ $(document).ready(function(){initNavTree('classspdlog_1_1details_1_1bytes__range Public Member Functions  bytes_range (It range_begin, It range_end)   -It begin () const -  -It end () const -  +It begin () const +  +It end () const + 

Detailed Description

template<typename It>
class spdlog::details::bytes_range< It >

-

Definition at line 28 of file bin_to_hex.h.

+

Definition at line 28 of file bin_to_hex.h.

Constructor & Destructor Documentation

- -

◆ bytes_range()

- +
@@ -149,14 +167,12 @@ template<typename It>
-

Definition at line 31 of file bin_to_hex.h.

+

Definition at line 31 of file bin_to_hex.h.

Member Function Documentation

- -

◆ begin()

- +
@@ -179,13 +195,11 @@ template<typename It>
-

Definition at line 37 of file bin_to_hex.h.

+

Definition at line 37 of file bin_to_hex.h.

- -

◆ end()

- +
@@ -208,7 +222,7 @@ template<typename It>
-

Definition at line 41 of file bin_to_hex.h.

+

Definition at line 41 of file bin_to_hex.h.

@@ -223,7 +237,7 @@ template<typename It>
+ doxygen 1.8.11 diff --git a/docs/classspdlog_1_1details_1_1bytes__range.js b/docs/classspdlog_1_1details_1_1bytes__range.js index 4eaaa32..529c001 100644 --- a/docs/classspdlog_1_1details_1_1bytes__range.js +++ b/docs/classspdlog_1_1details_1_1bytes__range.js @@ -1,6 +1,6 @@ var classspdlog_1_1details_1_1bytes__range = [ [ "bytes_range", "classspdlog_1_1details_1_1bytes__range.html#aa623616735396b0422737b9b62bdd46e", null ], - [ "begin", "classspdlog_1_1details_1_1bytes__range.html#abe7813dcd59c848fd56b0c33e5bbc134", null ], - [ "end", "classspdlog_1_1details_1_1bytes__range.html#a513faba7dd574f7a32f00504739d6032", null ] + [ "begin", "classspdlog_1_1details_1_1bytes__range.html#a45b2db8943b9034c5f56838c482a740a", null ], + [ "end", "classspdlog_1_1details_1_1bytes__range.html#ae46a29852238e3cd2a22b85e2dc1f5d0", null ] ]; \ No newline at end of file diff --git a/docs/classspdlog_1_1details_1_1c__formatter-members.html b/docs/classspdlog_1_1details_1_1c__formatter-members.html index 9a8c756..e67e813 100644 --- a/docs/classspdlog_1_1details_1_1c__formatter-members.html +++ b/docs/classspdlog_1_1details_1_1c__formatter-members.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Member List @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -107,7 +127,7 @@ $(document).ready(function(){initNavTree('classspdlog_1_1details_1_1c__formatter
    + doxygen 1.8.11
diff --git a/docs/classspdlog_1_1details_1_1c__formatter.html b/docs/classspdlog_1_1details_1_1c__formatter.html index 67ee4f5..527935e 100644 --- a/docs/classspdlog_1_1details_1_1c__formatter.html +++ b/docs/classspdlog_1_1details_1_1c__formatter.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: spdlog::details::c_formatter Class Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -101,10 +121,10 @@ Inheritance diagram for spdlog::details::c_formatter:
- + spdlog::details::flag_formatter - -
+ + @@ -128,11 +148,9 @@ Additional Inherited Members

Public Member Functions

Detailed Description

-

Definition at line 280 of file pattern_formatter.h.

+

Definition at line 280 of file pattern_formatter.h.

Constructor & Destructor Documentation

- -

◆ c_formatter()

- +
@@ -154,14 +172,12 @@ Additional Inherited Members
-

Definition at line 283 of file pattern_formatter.h.

+

Definition at line 283 of file pattern_formatter.h.

Member Function Documentation

- -

◆ format()

- +
@@ -201,7 +217,7 @@ Additional Inherited Members

Implements spdlog::details::flag_formatter.

-

Definition at line 288 of file pattern_formatter.h.

+

Definition at line 288 of file pattern_formatter.h.

@@ -216,7 +232,7 @@ Additional Inherited Members + doxygen 1.8.11 diff --git a/docs/classspdlog_1_1details_1_1ch__formatter-members.html b/docs/classspdlog_1_1details_1_1ch__formatter-members.html index 58bcca5..ed670cb 100644 --- a/docs/classspdlog_1_1details_1_1ch__formatter-members.html +++ b/docs/classspdlog_1_1details_1_1ch__formatter-members.html @@ -1,10 +1,9 @@ - + - - +Livox SDK API: Member List @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ @@ -39,22 +41,42 @@
Livox SDK API -  V2.0.0 +  V2.1.0
- + - - - - + +
@@ -107,7 +127,7 @@ $(document).ready(function(){initNavTree('classspdlog_1_1details_1_1ch__formatte
    + doxygen 1.8.11
diff --git a/docs/classspdlog_1_1details_1_1ch__formatter.html b/docs/classspdlog_1_1details_1_1ch__formatter.html index f2c7248..bc45a92 100644 --- a/docs/classspdlog_1_1details_1_1ch__formatter.html +++ b/docs/classspdlog_1_1details_1_1ch__formatter.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: spdlog::details::ch_formatter Class Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -101,10 +121,10 @@ Inheritance diagram for spdlog::details::ch_formatter:
- + spdlog::details::flag_formatter - -
+ + @@ -128,11 +148,9 @@ Additional Inherited Members

Public Member Functions

Detailed Description

-

Definition at line 761 of file pattern_formatter.h.

+

Definition at line 761 of file pattern_formatter.h.

Constructor & Destructor Documentation

- -

◆ ch_formatter()

- +
@@ -154,14 +172,12 @@ Additional Inherited Members
-

Definition at line 764 of file pattern_formatter.h.

+

Definition at line 764 of file pattern_formatter.h.

Member Function Documentation

- -

◆ format()

- +
@@ -201,7 +217,7 @@ Additional Inherited Members

Implements spdlog::details::flag_formatter.

-

Definition at line 769 of file pattern_formatter.h.

+

Definition at line 769 of file pattern_formatter.h.

@@ -216,7 +232,7 @@ Additional Inherited Members + doxygen 1.8.11 diff --git a/docs/classspdlog_1_1details_1_1circular__q-members.html b/docs/classspdlog_1_1details_1_1circular__q-members.html index 50bda06..ce94882 100644 --- a/docs/classspdlog_1_1details_1_1circular__q-members.html +++ b/docs/classspdlog_1_1details_1_1circular__q-members.html @@ -1,10 +1,9 @@ - + - - +Livox SDK API: Member List @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ @@ -39,22 +41,42 @@
Livox SDK API -  V2.0.0 +  V2.1.0
- + - - - - + +
@@ -98,7 +118,7 @@ $(document).ready(function(){initNavTree('classspdlog_1_1details_1_1circular__q. empty()spdlog::details::circular_q< T >inline full()spdlog::details::circular_q< T >inline item_type typedefspdlog::details::circular_q< T > - overrun_counter() constspdlog::details::circular_q< T >inline + overrun_counter() const spdlog::details::circular_q< T >inline pop_front(T &popped_item)spdlog::details::circular_q< T >inline push_back(T &&item)spdlog::details::circular_q< T >inline
@@ -108,7 +128,7 @@ $(document).ready(function(){initNavTree('classspdlog_1_1details_1_1circular__q.
    + doxygen 1.8.11
diff --git a/docs/classspdlog_1_1details_1_1circular__q.html b/docs/classspdlog_1_1details_1_1circular__q.html index 5a98d6e..ee8fe20 100644 --- a/docs/classspdlog_1_1details_1_1circular__q.html +++ b/docs/classspdlog_1_1details_1_1circular__q.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: spdlog::details::circular_q< T > Class Template Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -115,19 +135,17 @@ Public Member Functions   bool full ()   -size_t overrun_counter () const -  +size_t overrun_counter () const + 

Detailed Description

template<typename T>
class spdlog::details::circular_q< T >

-

Definition at line 14 of file circular_q.h.

+

Definition at line 14 of file circular_q.h.

Member Typedef Documentation

- -

◆ item_type

- +
@@ -139,14 +157,12 @@ template<typename T>
-

Definition at line 17 of file circular_q.h.

+

Definition at line 17 of file circular_q.h.

Constructor & Destructor Documentation

- -

◆ circular_q()

- +
@@ -170,14 +186,12 @@ template<typename T>
-

Definition at line 19 of file circular_q.h.

+

Definition at line 19 of file circular_q.h.

Member Function Documentation

- -

◆ empty()

- +
@@ -200,13 +214,11 @@ template<typename T>
-

Definition at line 46 of file circular_q.h.

+

Definition at line 46 of file circular_q.h.

- -

◆ full()

- +
@@ -229,13 +241,11 @@ template<typename T>
-

Definition at line 51 of file circular_q.h.

+

Definition at line 51 of file circular_q.h.

- -

◆ overrun_counter()

- +
@@ -258,13 +268,11 @@ template<typename T>
-

Definition at line 57 of file circular_q.h.

+

Definition at line 57 of file circular_q.h.

- -

◆ pop_front()

- +
@@ -288,13 +296,11 @@ template<typename T>
-

Definition at line 40 of file circular_q.h.

+

Definition at line 40 of file circular_q.h.

- -

◆ push_back()

- +
@@ -318,7 +324,7 @@ template<typename T>
-

Definition at line 26 of file circular_q.h.

+

Definition at line 26 of file circular_q.h.

@@ -333,7 +339,7 @@ template<typename T>
+ doxygen 1.8.11 diff --git a/docs/classspdlog_1_1details_1_1circular__q.js b/docs/classspdlog_1_1details_1_1circular__q.js index 099cef4..aec7fd6 100644 --- a/docs/classspdlog_1_1details_1_1circular__q.js +++ b/docs/classspdlog_1_1details_1_1circular__q.js @@ -4,7 +4,7 @@ var classspdlog_1_1details_1_1circular__q = [ "circular_q", "classspdlog_1_1details_1_1circular__q.html#ab0aae072dd38824fee65ed9d48568c2f", null ], [ "empty", "classspdlog_1_1details_1_1circular__q.html#ae27eea7ecb58860f4471f473e02270f8", null ], [ "full", "classspdlog_1_1details_1_1circular__q.html#a6f9e90a9957c230376a463b20f909191", null ], - [ "overrun_counter", "classspdlog_1_1details_1_1circular__q.html#a2f683dc45eca25efad9e415cf73c7ea0", null ], + [ "overrun_counter", "classspdlog_1_1details_1_1circular__q.html#ae4e579c877065c0d2471ebe124c364ad", null ], [ "pop_front", "classspdlog_1_1details_1_1circular__q.html#a6e05a29447127eadabf01175a6b3ddc0", null ], [ "push_back", "classspdlog_1_1details_1_1circular__q.html#aaaab548bb6f5dd362458d6b044e0e950", null ] ]; \ No newline at end of file diff --git a/docs/classspdlog_1_1details_1_1color__start__formatter-members.html b/docs/classspdlog_1_1details_1_1color__start__formatter-members.html index d033060..ed6452e 100644 --- a/docs/classspdlog_1_1details_1_1color__start__formatter-members.html +++ b/docs/classspdlog_1_1details_1_1color__start__formatter-members.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Member List @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -107,7 +127,7 @@ $(document).ready(function(){initNavTree('classspdlog_1_1details_1_1color__start
    + doxygen 1.8.11
diff --git a/docs/classspdlog_1_1details_1_1color__start__formatter.html b/docs/classspdlog_1_1details_1_1color__start__formatter.html index 68388be..a40d0df 100644 --- a/docs/classspdlog_1_1details_1_1color__start__formatter.html +++ b/docs/classspdlog_1_1details_1_1color__start__formatter.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: spdlog::details::color_start_formatter Class Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -101,10 +121,10 @@ Inheritance diagram for spdlog::details::color_start_formatter:
- + spdlog::details::flag_formatter - -
+ + @@ -128,11 +148,9 @@ Additional Inherited Members

Public Member Functions

Detailed Description

-

Definition at line 800 of file pattern_formatter.h.

+

Definition at line 800 of file pattern_formatter.h.

Constructor & Destructor Documentation

- -

◆ color_start_formatter()

- +
@@ -154,14 +172,12 @@ Additional Inherited Members
-

Definition at line 803 of file pattern_formatter.h.

+

Definition at line 803 of file pattern_formatter.h.

Member Function Documentation

- -

◆ format()

- +
@@ -201,7 +217,7 @@ Additional Inherited Members

Implements spdlog::details::flag_formatter.

-

Definition at line 808 of file pattern_formatter.h.

+

Definition at line 808 of file pattern_formatter.h.

@@ -216,7 +232,7 @@ Additional Inherited Members + doxygen 1.8.11 diff --git a/docs/classspdlog_1_1details_1_1color__stop__formatter-members.html b/docs/classspdlog_1_1details_1_1color__stop__formatter-members.html index 5477705..9b75db1 100644 --- a/docs/classspdlog_1_1details_1_1color__stop__formatter-members.html +++ b/docs/classspdlog_1_1details_1_1color__stop__formatter-members.html @@ -1,10 +1,9 @@ - + - - +Livox SDK API: Member List @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ @@ -39,22 +41,42 @@
Livox SDK API -  V2.0.0 +  V2.1.0
- + - - - - + +
@@ -107,7 +127,7 @@ $(document).ready(function(){initNavTree('classspdlog_1_1details_1_1color__stop_
    + doxygen 1.8.11
diff --git a/docs/classspdlog_1_1details_1_1color__stop__formatter.html b/docs/classspdlog_1_1details_1_1color__stop__formatter.html index 9b7203f..f97b07a 100644 --- a/docs/classspdlog_1_1details_1_1color__stop__formatter.html +++ b/docs/classspdlog_1_1details_1_1color__stop__formatter.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: spdlog::details::color_stop_formatter Class Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -101,10 +121,10 @@ Inheritance diagram for spdlog::details::color_stop_formatter:
- + spdlog::details::flag_formatter - -
+ + @@ -128,11 +148,9 @@ Additional Inherited Members

Public Member Functions

Detailed Description

-

Definition at line 813 of file pattern_formatter.h.

+

Definition at line 813 of file pattern_formatter.h.

Constructor & Destructor Documentation

- -

◆ color_stop_formatter()

- +
@@ -154,14 +172,12 @@ Additional Inherited Members
-

Definition at line 816 of file pattern_formatter.h.

+

Definition at line 816 of file pattern_formatter.h.

Member Function Documentation

- -

◆ format()

- +
@@ -201,7 +217,7 @@ Additional Inherited Members

Implements spdlog::details::flag_formatter.

-

Definition at line 821 of file pattern_formatter.h.

+

Definition at line 821 of file pattern_formatter.h.

@@ -216,7 +232,7 @@ Additional Inherited Members + doxygen 1.8.11 diff --git a/docs/classspdlog_1_1details_1_1d__formatter-members.html b/docs/classspdlog_1_1details_1_1d__formatter-members.html index e7ebde7..020cf2f 100644 --- a/docs/classspdlog_1_1details_1_1d__formatter-members.html +++ b/docs/classspdlog_1_1details_1_1d__formatter-members.html @@ -1,10 +1,9 @@ - + - - +Livox SDK API: Member List @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ @@ -39,22 +41,42 @@
Livox SDK API -  V2.0.0 +  V2.1.0
- + - - - - + +
@@ -107,7 +127,7 @@ $(document).ready(function(){initNavTree('classspdlog_1_1details_1_1d__formatter
    + doxygen 1.8.11
diff --git a/docs/classspdlog_1_1details_1_1d__formatter.html b/docs/classspdlog_1_1details_1_1d__formatter.html index 8062120..817608d 100644 --- a/docs/classspdlog_1_1details_1_1d__formatter.html +++ b/docs/classspdlog_1_1details_1_1d__formatter.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: spdlog::details::d_formatter Class Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -101,10 +121,10 @@ Inheritance diagram for spdlog::details::d_formatter:
- + spdlog::details::flag_formatter - -
+ + @@ -128,11 +148,9 @@ Additional Inherited Members

Public Member Functions

Detailed Description

-

Definition at line 383 of file pattern_formatter.h.

+

Definition at line 383 of file pattern_formatter.h.

Constructor & Destructor Documentation

- -

◆ d_formatter()

- +
@@ -154,14 +172,12 @@ Additional Inherited Members
-

Definition at line 386 of file pattern_formatter.h.

+

Definition at line 386 of file pattern_formatter.h.

Member Function Documentation

- -

◆ format()

- +
@@ -201,7 +217,7 @@ Additional Inherited Members

Implements spdlog::details::flag_formatter.

-

Definition at line 391 of file pattern_formatter.h.

+

Definition at line 391 of file pattern_formatter.h.

@@ -216,7 +232,7 @@ Additional Inherited Members + doxygen 1.8.11 diff --git a/docs/classspdlog_1_1details_1_1e__formatter-members.html b/docs/classspdlog_1_1details_1_1e__formatter-members.html index 770820d..ddb8fbb 100644 --- a/docs/classspdlog_1_1details_1_1e__formatter-members.html +++ b/docs/classspdlog_1_1details_1_1e__formatter-members.html @@ -1,10 +1,9 @@ - + - - +Livox SDK API: Member List @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ @@ -39,22 +41,42 @@
Livox SDK API -  V2.0.0 +  V2.1.0
- + - - - - + +
@@ -107,7 +127,7 @@ $(document).ready(function(){initNavTree('classspdlog_1_1details_1_1e__formatter
    + doxygen 1.8.11
diff --git a/docs/classspdlog_1_1details_1_1e__formatter.html b/docs/classspdlog_1_1details_1_1e__formatter.html index b966fc6..2f716fc 100644 --- a/docs/classspdlog_1_1details_1_1e__formatter.html +++ b/docs/classspdlog_1_1details_1_1e__formatter.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: spdlog::details::e_formatter Class Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -101,10 +121,10 @@ Inheritance diagram for spdlog::details::e_formatter:
- + spdlog::details::flag_formatter - -
+ + @@ -128,11 +148,9 @@ Additional Inherited Members

Public Member Functions

Detailed Description

-

Definition at line 462 of file pattern_formatter.h.

+

Definition at line 462 of file pattern_formatter.h.

Constructor & Destructor Documentation

- -

◆ e_formatter()

- +
@@ -154,14 +172,12 @@ Additional Inherited Members
-

Definition at line 465 of file pattern_formatter.h.

+

Definition at line 465 of file pattern_formatter.h.

Member Function Documentation

- -

◆ format()

- +
@@ -201,7 +217,7 @@ Additional Inherited Members

Implements spdlog::details::flag_formatter.

-

Definition at line 468 of file pattern_formatter.h.

+

Definition at line 468 of file pattern_formatter.h.

@@ -216,7 +232,7 @@ Additional Inherited Members + doxygen 1.8.11 diff --git a/docs/classspdlog_1_1details_1_1f__formatter-members.html b/docs/classspdlog_1_1details_1_1f__formatter-members.html index c7676bb..3216776 100644 --- a/docs/classspdlog_1_1details_1_1f__formatter-members.html +++ b/docs/classspdlog_1_1details_1_1f__formatter-members.html @@ -1,10 +1,9 @@ - + - - +Livox SDK API: Member List @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ @@ -39,22 +41,42 @@
Livox SDK API -  V2.0.0 +  V2.1.0
- + - - - - + +
@@ -107,7 +127,7 @@ $(document).ready(function(){initNavTree('classspdlog_1_1details_1_1f__formatter
    + doxygen 1.8.11
diff --git a/docs/classspdlog_1_1details_1_1f__formatter.html b/docs/classspdlog_1_1details_1_1f__formatter.html index 03a1da8..8b5460f 100644 --- a/docs/classspdlog_1_1details_1_1f__formatter.html +++ b/docs/classspdlog_1_1details_1_1f__formatter.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: spdlog::details::f_formatter Class Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -101,10 +121,10 @@ Inheritance diagram for spdlog::details::f_formatter:
- + spdlog::details::flag_formatter - -
+ + @@ -128,11 +148,9 @@ Additional Inherited Members

Public Member Functions

Detailed Description

-

Definition at line 485 of file pattern_formatter.h.

+

Definition at line 485 of file pattern_formatter.h.

Constructor & Destructor Documentation

- -

◆ f_formatter()

- +
@@ -154,14 +172,12 @@ Additional Inherited Members
-

Definition at line 488 of file pattern_formatter.h.

+

Definition at line 488 of file pattern_formatter.h.

Member Function Documentation

- -

◆ format()

- +
@@ -201,7 +217,7 @@ Additional Inherited Members

Implements spdlog::details::flag_formatter.

-

Definition at line 491 of file pattern_formatter.h.

+

Definition at line 491 of file pattern_formatter.h.

@@ -216,7 +232,7 @@ Additional Inherited Members + doxygen 1.8.11 diff --git a/docs/classspdlog_1_1details_1_1file__helper-members.html b/docs/classspdlog_1_1details_1_1file__helper-members.html index e4e094e..7874495 100644 --- a/docs/classspdlog_1_1details_1_1file__helper-members.html +++ b/docs/classspdlog_1_1details_1_1file__helper-members.html @@ -1,10 +1,9 @@ - + - - +Livox SDK API: Member List @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ @@ -39,22 +41,42 @@
Livox SDK API -  V2.0.0 +  V2.1.0
- + - - - - + +
@@ -98,14 +118,14 @@ $(document).ready(function(){initNavTree('classspdlog_1_1details_1_1file__helper file_exists(const filename_t &fname)spdlog::details::file_helperinlinestatic file_helper()=defaultspdlog::details::file_helperexplicit file_helper(const file_helper &)=deletespdlog::details::file_helper - filename() constspdlog::details::file_helperinline + filename() const spdlog::details::file_helperinline flush()spdlog::details::file_helperinline open(const filename_t &fname, bool truncate=false)spdlog::details::file_helperinline open_intervalspdlog::details::file_helper open_triesspdlog::details::file_helper operator=(const file_helper &)=deletespdlog::details::file_helper reopen(bool truncate)spdlog::details::file_helperinline - size() constspdlog::details::file_helperinline + size() const spdlog::details::file_helperinline split_by_extension(const spdlog::filename_t &fname)spdlog::details::file_helperinlinestatic write(const fmt::memory_buffer &buf)spdlog::details::file_helperinline ~file_helper()spdlog::details::file_helperinline @@ -116,7 +136,7 @@ $(document).ready(function(){initNavTree('classspdlog_1_1details_1_1file__helper
    + doxygen 1.8.11
diff --git a/docs/classspdlog_1_1details_1_1file__helper.html b/docs/classspdlog_1_1details_1_1file__helper.html index b9a57dc..44ba920 100644 --- a/docs/classspdlog_1_1details_1_1file__helper.html +++ b/docs/classspdlog_1_1details_1_1file__helper.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: spdlog::details::file_helper Class Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -119,10 +139,10 @@ Public Member Functions   void write (const fmt::memory_buffer &buf)   -size_t size () const -  -const filename_tfilename () const -  +size_t size () const +  +const filename_tfilename () const +  @@ -140,11 +160,9 @@ Public Attributes

Static Public Member Functions

Detailed Description

-

Definition at line 25 of file file_helper.h.

+

Definition at line 25 of file file_helper.h.

Constructor & Destructor Documentation

- -

◆ file_helper() [1/2]

- +
@@ -167,9 +185,7 @@ Public Attributes - -

◆ file_helper() [2/2]

- +
@@ -193,9 +209,7 @@ Public Attributes - -

◆ ~file_helper()

- +
@@ -216,14 +230,12 @@ Public Attributes
-

Definition at line 37 of file file_helper.h.

+

Definition at line 37 of file file_helper.h.

Member Function Documentation

- -

◆ close()

- +
@@ -244,13 +256,11 @@ Public Attributes
-

Definition at line 74 of file file_helper.h.

+

Definition at line 74 of file file_helper.h.

- -

◆ file_exists()

- +
@@ -272,13 +282,11 @@ Public Attributes
-

Definition at line 107 of file file_helper.h.

+

Definition at line 107 of file file_helper.h.

- -

◆ filename()

- +
@@ -299,13 +307,11 @@ Public Attributes
-

Definition at line 102 of file file_helper.h.

+

Definition at line 102 of file file_helper.h.

- -

◆ flush()

- +
@@ -326,13 +332,11 @@ Public Attributes
-

Definition at line 69 of file file_helper.h.

+

Definition at line 69 of file file_helper.h.

- -

◆ open()

- +
@@ -364,13 +368,11 @@ Public Attributes
-

Definition at line 42 of file file_helper.h.

+

Definition at line 42 of file file_helper.h.

- -

◆ operator=()

- +
@@ -394,9 +396,7 @@ Public Attributes - -

◆ reopen()

- +
@@ -418,13 +418,11 @@ Public Attributes
-

Definition at line 60 of file file_helper.h.

+

Definition at line 60 of file file_helper.h.

- -

◆ size()

- +
@@ -445,13 +443,11 @@ Public Attributes
-

Definition at line 93 of file file_helper.h.

+

Definition at line 93 of file file_helper.h.

- -

◆ split_by_extension()

- +
@@ -473,13 +469,11 @@ Public Attributes
-

Definition at line 125 of file file_helper.h.

+

Definition at line 125 of file file_helper.h.

- -

◆ write()

- +
@@ -501,14 +495,12 @@ Public Attributes
-

Definition at line 83 of file file_helper.h.

+

Definition at line 83 of file file_helper.h.

Member Data Documentation

- -

◆ open_interval

- +
@@ -518,13 +510,11 @@ Public Attributes
-

Definition at line 30 of file file_helper.h.

+

Definition at line 30 of file file_helper.h.

- -

◆ open_tries

- +
@@ -534,7 +524,7 @@ Public Attributes
-

Definition at line 29 of file file_helper.h.

+

Definition at line 29 of file file_helper.h.

@@ -549,7 +539,7 @@ Public Attributes + doxygen 1.8.11
diff --git a/docs/classspdlog_1_1details_1_1file__helper.js b/docs/classspdlog_1_1details_1_1file__helper.js index e03c23d..776e418 100644 --- a/docs/classspdlog_1_1details_1_1file__helper.js +++ b/docs/classspdlog_1_1details_1_1file__helper.js @@ -5,12 +5,12 @@ var classspdlog_1_1details_1_1file__helper = [ "~file_helper", "classspdlog_1_1details_1_1file__helper.html#aad84ef5f999c2721a0a8ad36ce641e8c", null ], [ "close", "classspdlog_1_1details_1_1file__helper.html#a6a6d7a75014ae880857b4fe4fd01dc7a", null ], [ "file_exists", "classspdlog_1_1details_1_1file__helper.html#a8c5f69588e8a54f436c3565317c233bd", null ], - [ "filename", "classspdlog_1_1details_1_1file__helper.html#a76610058a1769b25bd6ed52a1443b552", null ], + [ "filename", "classspdlog_1_1details_1_1file__helper.html#a3cd06d6cc27e18111ff27702d0aeee5e", null ], [ "flush", "classspdlog_1_1details_1_1file__helper.html#a1a75f29ec0c13d9fbc269bcd8378b18b", null ], [ "open", "classspdlog_1_1details_1_1file__helper.html#a8612066fd098080cc60e3aefed6a6085", null ], [ "operator=", "classspdlog_1_1details_1_1file__helper.html#a7c7314360e404efa02326feb7aa98442", null ], [ "reopen", "classspdlog_1_1details_1_1file__helper.html#a21c688da7f241c53871b462c3a5c2c94", null ], - [ "size", "classspdlog_1_1details_1_1file__helper.html#ae945d9701134218c2d0558958e9d1cf2", null ], + [ "size", "classspdlog_1_1details_1_1file__helper.html#a764d7096002ae9fca80d526dcf7e83f5", null ], [ "split_by_extension", "classspdlog_1_1details_1_1file__helper.html#a28d87e3f42c52a12c95af0558aca66f2", null ], [ "write", "classspdlog_1_1details_1_1file__helper.html#a51eb58a2d46f1896f3ab7b9d323d97ae", null ], [ "open_interval", "classspdlog_1_1details_1_1file__helper.html#aea72ea8d655bb11f19dbe48477e6c8b3", null ], diff --git a/docs/classspdlog_1_1details_1_1flag__formatter-members.html b/docs/classspdlog_1_1details_1_1flag__formatter-members.html index 5df7739..2453779 100644 --- a/docs/classspdlog_1_1details_1_1flag__formatter-members.html +++ b/docs/classspdlog_1_1details_1_1flag__formatter-members.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Member List @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -106,7 +126,7 @@ $(document).ready(function(){initNavTree('classspdlog_1_1details_1_1flag__format
    + doxygen 1.8.11
diff --git a/docs/classspdlog_1_1details_1_1flag__formatter.html b/docs/classspdlog_1_1details_1_1flag__formatter.html index ddb45ae..703110e 100644 --- a/docs/classspdlog_1_1details_1_1flag__formatter.html +++ b/docs/classspdlog_1_1details_1_1flag__formatter.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: spdlog::details::flag_formatter Class Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -102,7 +122,7 @@ Inheritance diagram for spdlog::details::flag_formatter:
- + spdlog::details::a_formatter spdlog::details::A_formatter spdlog::details::aggregate_formatter @@ -142,8 +162,8 @@ Inheritance diagram for spdlog::details::flag_formatter:
spdlog::details::v_formatter spdlog::details::Y_formatter spdlog::details::z_formatter - -
+ + @@ -163,11 +183,9 @@ Protected Attributes

Public Member Functions

Detailed Description

-

Definition at line 111 of file pattern_formatter.h.

+

Definition at line 111 of file pattern_formatter.h.

Constructor & Destructor Documentation

- -

◆ flag_formatter() [1/2]

- +
@@ -189,13 +207,11 @@ Protected Attributes
-

Definition at line 114 of file pattern_formatter.h.

+

Definition at line 114 of file pattern_formatter.h.

- -

◆ flag_formatter() [2/2]

- +
@@ -218,9 +234,7 @@ Protected Attributes - -

◆ ~flag_formatter()

- +
@@ -244,9 +258,7 @@ Protected Attributes

Member Function Documentation

- -

◆ format()

- +
@@ -284,14 +296,12 @@ Protected Attributes
-

Implemented in spdlog::details::full_formatter, spdlog::details::z_formatter, spdlog::details::source_funcname_formatter, spdlog::details::source_linenum_formatter, spdlog::details::source_filename_formatter, spdlog::details::source_location_formatter, spdlog::details::color_stop_formatter, spdlog::details::color_start_formatter, spdlog::details::v_formatter, spdlog::details::i_formatter, spdlog::details::t_formatter, spdlog::details::E_formatter, spdlog::details::F_formatter, spdlog::details::f_formatter, spdlog::details::e_formatter, spdlog::details::short_level_formatter, spdlog::details::level_formatter, spdlog::details::name_formatter, spdlog::details::T_formatter, spdlog::details::R_formatter, spdlog::details::r_formatter, spdlog::details::p_formatter, spdlog::details::S_formatter, spdlog::details::M_formatter, spdlog::details::I_formatter, spdlog::details::H_formatter, spdlog::details::d_formatter, spdlog::details::m_formatter, spdlog::details::Y_formatter, spdlog::details::D_formatter, spdlog::details::C_formatter, spdlog::details::c_formatter, spdlog::details::B_formatter, spdlog::details::b_formatter, spdlog::details::A_formatter, spdlog::details::a_formatter, spdlog::details::aggregate_formatter, spdlog::details::ch_formatter, and spdlog::details::pid_formatter.

+

Implemented in spdlog::details::full_formatter, spdlog::details::source_funcname_formatter, spdlog::details::source_linenum_formatter, spdlog::details::source_filename_formatter, spdlog::details::source_location_formatter, spdlog::details::color_stop_formatter, spdlog::details::color_start_formatter, spdlog::details::aggregate_formatter, spdlog::details::ch_formatter, spdlog::details::v_formatter, spdlog::details::i_formatter, spdlog::details::pid_formatter, spdlog::details::t_formatter, spdlog::details::z_formatter, spdlog::details::T_formatter, spdlog::details::R_formatter, spdlog::details::r_formatter, spdlog::details::p_formatter, spdlog::details::E_formatter, spdlog::details::F_formatter, spdlog::details::f_formatter, spdlog::details::e_formatter, spdlog::details::S_formatter, spdlog::details::M_formatter, spdlog::details::I_formatter, spdlog::details::H_formatter, spdlog::details::d_formatter, spdlog::details::m_formatter, spdlog::details::Y_formatter, spdlog::details::D_formatter, spdlog::details::C_formatter, spdlog::details::c_formatter, spdlog::details::B_formatter, spdlog::details::b_formatter, spdlog::details::A_formatter, spdlog::details::a_formatter, spdlog::details::short_level_formatter, spdlog::details::level_formatter, and spdlog::details::name_formatter.

Member Data Documentation

- -

◆ padinfo_

- +
@@ -309,7 +319,7 @@ Protected Attributes
-

Definition at line 123 of file pattern_formatter.h.

+

Definition at line 123 of file pattern_formatter.h.

@@ -324,7 +334,7 @@ Protected Attributes + doxygen 1.8.11 diff --git a/docs/classspdlog_1_1details_1_1full__formatter-members.html b/docs/classspdlog_1_1details_1_1full__formatter-members.html index a0d4232..0a0b553 100644 --- a/docs/classspdlog_1_1details_1_1full__formatter-members.html +++ b/docs/classspdlog_1_1details_1_1full__formatter-members.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Member List @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -107,7 +127,7 @@ $(document).ready(function(){initNavTree('classspdlog_1_1details_1_1full__format
    + doxygen 1.8.11
diff --git a/docs/classspdlog_1_1details_1_1full__formatter.html b/docs/classspdlog_1_1details_1_1full__formatter.html index 4c5c3a6..3b88e2a 100644 --- a/docs/classspdlog_1_1details_1_1full__formatter.html +++ b/docs/classspdlog_1_1details_1_1full__formatter.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: spdlog::details::full_formatter Class Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -101,10 +121,10 @@ Inheritance diagram for spdlog::details::full_formatter:
- + spdlog::details::flag_formatter - -
+ + @@ -128,11 +148,9 @@ Additional Inherited Members

Public Member Functions

Detailed Description

-

Definition at line 918 of file pattern_formatter.h.

+

Definition at line 918 of file pattern_formatter.h.

Constructor & Destructor Documentation

- -

◆ full_formatter()

- +
@@ -154,14 +172,12 @@ Additional Inherited Members
-

Definition at line 921 of file pattern_formatter.h.

+

Definition at line 921 of file pattern_formatter.h.

Member Function Documentation

- -

◆ format()

- +
@@ -201,7 +217,7 @@ Additional Inherited Members

Implements spdlog::details::flag_formatter.

-

Definition at line 926 of file pattern_formatter.h.

+

Definition at line 926 of file pattern_formatter.h.

@@ -216,7 +232,7 @@ Additional Inherited Members + doxygen 1.8.11 diff --git a/docs/classspdlog_1_1details_1_1i__formatter-members.html b/docs/classspdlog_1_1details_1_1i__formatter-members.html index 11c2cc7..4c5db19 100644 --- a/docs/classspdlog_1_1details_1_1i__formatter-members.html +++ b/docs/classspdlog_1_1details_1_1i__formatter-members.html @@ -1,10 +1,9 @@ - + - - +Livox SDK API: Member List @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ @@ -39,22 +41,42 @@
Livox SDK API -  V2.0.0 +  V2.1.0
- + - - - - + +
@@ -107,7 +127,7 @@ $(document).ready(function(){initNavTree('classspdlog_1_1details_1_1i__formatter
    + doxygen 1.8.11
diff --git a/docs/classspdlog_1_1details_1_1i__formatter.html b/docs/classspdlog_1_1details_1_1i__formatter.html index d91166c..d7e8d97 100644 --- a/docs/classspdlog_1_1details_1_1i__formatter.html +++ b/docs/classspdlog_1_1details_1_1i__formatter.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: spdlog::details::i_formatter Class Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -101,10 +121,10 @@ Inheritance diagram for spdlog::details::i_formatter:
- + spdlog::details::flag_formatter - -
+ + @@ -128,11 +148,9 @@ Additional Inherited Members

Public Member Functions

Detailed Description

-

Definition at line 727 of file pattern_formatter.h.

+

Definition at line 727 of file pattern_formatter.h.

Constructor & Destructor Documentation

- -

◆ i_formatter()

- +
@@ -154,14 +172,12 @@ Additional Inherited Members
-

Definition at line 730 of file pattern_formatter.h.

+

Definition at line 730 of file pattern_formatter.h.

Member Function Documentation

- -

◆ format()

- +
@@ -201,7 +217,7 @@ Additional Inherited Members

Implements spdlog::details::flag_formatter.

-

Definition at line 733 of file pattern_formatter.h.

+

Definition at line 733 of file pattern_formatter.h.

@@ -216,7 +232,7 @@ Additional Inherited Members + doxygen 1.8.11 diff --git a/docs/classspdlog_1_1details_1_1level__formatter-members.html b/docs/classspdlog_1_1details_1_1level__formatter-members.html index 46fdac4..12150e0 100644 --- a/docs/classspdlog_1_1details_1_1level__formatter-members.html +++ b/docs/classspdlog_1_1details_1_1level__formatter-members.html @@ -1,10 +1,9 @@ - + - - +Livox SDK API: Member List @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ @@ -39,22 +41,42 @@
Livox SDK API -  V2.0.0 +  V2.1.0
- + - - - - + +
@@ -107,7 +127,7 @@ $(document).ready(function(){initNavTree('classspdlog_1_1details_1_1level__forma
    + doxygen 1.8.11
diff --git a/docs/classspdlog_1_1details_1_1level__formatter.html b/docs/classspdlog_1_1details_1_1level__formatter.html index 1287d7b..94ede08 100644 --- a/docs/classspdlog_1_1details_1_1level__formatter.html +++ b/docs/classspdlog_1_1details_1_1level__formatter.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: spdlog::details::level_formatter Class Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -101,10 +121,10 @@ Inheritance diagram for spdlog::details::level_formatter:
- + spdlog::details::flag_formatter - -
+ + @@ -128,11 +148,9 @@ Additional Inherited Members

Public Member Functions

Detailed Description

-

Definition at line 152 of file pattern_formatter.h.

+

Definition at line 152 of file pattern_formatter.h.

Constructor & Destructor Documentation

- -

◆ level_formatter()

- +
@@ -154,14 +172,12 @@ Additional Inherited Members
-

Definition at line 155 of file pattern_formatter.h.

+

Definition at line 155 of file pattern_formatter.h.

Member Function Documentation

- -

◆ format()

- +
@@ -201,7 +217,7 @@ Additional Inherited Members

Implements spdlog::details::flag_formatter.

-

Definition at line 160 of file pattern_formatter.h.

+

Definition at line 160 of file pattern_formatter.h.

@@ -216,7 +232,7 @@ Additional Inherited Members + doxygen 1.8.11 diff --git a/docs/classspdlog_1_1details_1_1m__formatter-members.html b/docs/classspdlog_1_1details_1_1m__formatter-members.html index 50c08a1..690fe8b 100644 --- a/docs/classspdlog_1_1details_1_1m__formatter-members.html +++ b/docs/classspdlog_1_1details_1_1m__formatter-members.html @@ -1,10 +1,9 @@ - + - - +Livox SDK API: Member List @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ @@ -39,22 +41,42 @@
Livox SDK API -  V2.0.0 +  V2.1.0
- + - - - - + +
@@ -107,7 +127,7 @@ $(document).ready(function(){initNavTree('classspdlog_1_1details_1_1m__formatter
    + doxygen 1.8.11
diff --git a/docs/classspdlog_1_1details_1_1m__formatter.html b/docs/classspdlog_1_1details_1_1m__formatter.html index a9a4fef..6e9c650 100644 --- a/docs/classspdlog_1_1details_1_1m__formatter.html +++ b/docs/classspdlog_1_1details_1_1m__formatter.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: spdlog::details::m_formatter Class Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -101,10 +121,10 @@ Inheritance diagram for spdlog::details::m_formatter:
- + spdlog::details::flag_formatter - -
+ + @@ -128,11 +148,9 @@ Additional Inherited Members

Public Member Functions

Detailed Description

-

Definition at line 366 of file pattern_formatter.h.

+

Definition at line 366 of file pattern_formatter.h.

Constructor & Destructor Documentation

- -

◆ m_formatter()

- +
@@ -154,14 +172,12 @@ Additional Inherited Members
-

Definition at line 369 of file pattern_formatter.h.

+

Definition at line 369 of file pattern_formatter.h.

Member Function Documentation

- -

◆ format()

- +
@@ -201,7 +217,7 @@ Additional Inherited Members

Implements spdlog::details::flag_formatter.

-

Definition at line 374 of file pattern_formatter.h.

+

Definition at line 374 of file pattern_formatter.h.

@@ -216,7 +232,7 @@ Additional Inherited Members + doxygen 1.8.11 diff --git a/docs/classspdlog_1_1details_1_1mpmc__blocking__queue-members.html b/docs/classspdlog_1_1details_1_1mpmc__blocking__queue-members.html index 2f4a5e0..3b003d0 100644 --- a/docs/classspdlog_1_1details_1_1mpmc__blocking__queue-members.html +++ b/docs/classspdlog_1_1details_1_1mpmc__blocking__queue-members.html @@ -1,10 +1,9 @@ - + - - +Livox SDK API: Member List @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ @@ -39,22 +41,42 @@
Livox SDK API -  V2.0.0 +  V2.1.0
- + - - - - + +
@@ -107,7 +127,7 @@ $(document).ready(function(){initNavTree('classspdlog_1_1details_1_1mpmc__blocki
    + doxygen 1.8.11
diff --git a/docs/classspdlog_1_1details_1_1mpmc__blocking__queue.html b/docs/classspdlog_1_1details_1_1mpmc__blocking__queue.html index c1f6a22..c39f5ea 100644 --- a/docs/classspdlog_1_1details_1_1mpmc__blocking__queue.html +++ b/docs/classspdlog_1_1details_1_1mpmc__blocking__queue.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: spdlog::details::mpmc_blocking_queue< T > Class Template Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -121,11 +141,9 @@ Public Member Functions class spdlog::details::mpmc_blocking_queue< T > -

Definition at line 24 of file mpmc_blocking_q.h.

+

Definition at line 24 of file mpmc_blocking_q.h.

Member Typedef Documentation

- -

◆ item_type

- +
@@ -137,14 +155,12 @@ template<typename T>
-

Definition at line 27 of file mpmc_blocking_q.h.

+

Definition at line 27 of file mpmc_blocking_q.h.

Constructor & Destructor Documentation

- -

◆ mpmc_blocking_queue()

- +
@@ -168,14 +184,12 @@ template<typename T>
-

Definition at line 28 of file mpmc_blocking_q.h.

+

Definition at line 28 of file mpmc_blocking_q.h.

Member Function Documentation

- -

◆ dequeue_for()

- +
@@ -209,13 +223,11 @@ template<typename T>
-

Definition at line 57 of file mpmc_blocking_q.h.

+

Definition at line 57 of file mpmc_blocking_q.h.

- -

◆ enqueue()

- +
@@ -239,13 +251,11 @@ template<typename T>
-

Definition at line 35 of file mpmc_blocking_q.h.

+

Definition at line 35 of file mpmc_blocking_q.h.

- -

◆ enqueue_nowait()

- +
@@ -269,13 +279,11 @@ template<typename T>
-

Definition at line 46 of file mpmc_blocking_q.h.

+

Definition at line 46 of file mpmc_blocking_q.h.

- -

◆ overrun_counter()

- +
@@ -298,7 +306,7 @@ template<typename T>
-

Definition at line 108 of file mpmc_blocking_q.h.

+

Definition at line 108 of file mpmc_blocking_q.h.

@@ -313,7 +321,7 @@ template<typename T> + doxygen 1.8.11 diff --git a/docs/classspdlog_1_1details_1_1name__formatter-members.html b/docs/classspdlog_1_1details_1_1name__formatter-members.html index 4c42ce4..ebf6b41 100644 --- a/docs/classspdlog_1_1details_1_1name__formatter-members.html +++ b/docs/classspdlog_1_1details_1_1name__formatter-members.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Member List @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -107,7 +127,7 @@ $(document).ready(function(){initNavTree('classspdlog_1_1details_1_1name__format
    + doxygen 1.8.11
diff --git a/docs/classspdlog_1_1details_1_1name__formatter.html b/docs/classspdlog_1_1details_1_1name__formatter.html index 2dbe268..9ca7355 100644 --- a/docs/classspdlog_1_1details_1_1name__formatter.html +++ b/docs/classspdlog_1_1details_1_1name__formatter.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: spdlog::details::name_formatter Class Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -101,10 +121,10 @@ Inheritance diagram for spdlog::details::name_formatter:
- + spdlog::details::flag_formatter - -
+ + @@ -128,11 +148,9 @@ Additional Inherited Members

Public Member Functions

Detailed Description

-

Definition at line 129 of file pattern_formatter.h.

+

Definition at line 129 of file pattern_formatter.h.

Constructor & Destructor Documentation

- -

◆ name_formatter()

- +
@@ -154,14 +172,12 @@ Additional Inherited Members
-

Definition at line 132 of file pattern_formatter.h.

+

Definition at line 132 of file pattern_formatter.h.

Member Function Documentation

- -

◆ format()

- +
@@ -201,7 +217,7 @@ Additional Inherited Members

Implements spdlog::details::flag_formatter.

-

Definition at line 137 of file pattern_formatter.h.

+

Definition at line 137 of file pattern_formatter.h.

@@ -216,7 +232,7 @@ Additional Inherited Members + doxygen 1.8.11 diff --git a/docs/classspdlog_1_1details_1_1p__formatter-members.html b/docs/classspdlog_1_1details_1_1p__formatter-members.html index b40b06e..66f7613 100644 --- a/docs/classspdlog_1_1details_1_1p__formatter-members.html +++ b/docs/classspdlog_1_1details_1_1p__formatter-members.html @@ -1,10 +1,9 @@ - + - - +Livox SDK API: Member List @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ @@ -39,22 +41,42 @@
Livox SDK API -  V2.0.0 +  V2.1.0
- + - - - - + +
@@ -107,7 +127,7 @@ $(document).ready(function(){initNavTree('classspdlog_1_1details_1_1p__formatter
    + doxygen 1.8.11
diff --git a/docs/classspdlog_1_1details_1_1p__formatter.html b/docs/classspdlog_1_1details_1_1p__formatter.html index 9d8558f..46cc25e 100644 --- a/docs/classspdlog_1_1details_1_1p__formatter.html +++ b/docs/classspdlog_1_1details_1_1p__formatter.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: spdlog::details::p_formatter Class Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -101,10 +121,10 @@ Inheritance diagram for spdlog::details::p_formatter:
- + spdlog::details::flag_formatter - -
+ + @@ -128,11 +148,9 @@ Additional Inherited Members

Public Member Functions

Detailed Description

-

Definition at line 548 of file pattern_formatter.h.

+

Definition at line 548 of file pattern_formatter.h.

Constructor & Destructor Documentation

- -

◆ p_formatter()

- +
@@ -154,14 +172,12 @@ Additional Inherited Members
-

Definition at line 551 of file pattern_formatter.h.

+

Definition at line 551 of file pattern_formatter.h.

Member Function Documentation

- -

◆ format()

- +
@@ -201,7 +217,7 @@ Additional Inherited Members

Implements spdlog::details::flag_formatter.

-

Definition at line 554 of file pattern_formatter.h.

+

Definition at line 554 of file pattern_formatter.h.

@@ -216,7 +232,7 @@ Additional Inherited Members + doxygen 1.8.11 diff --git a/docs/classspdlog_1_1details_1_1periodic__worker-members.html b/docs/classspdlog_1_1details_1_1periodic__worker-members.html index dc8c2d1..1449071 100644 --- a/docs/classspdlog_1_1details_1_1periodic__worker-members.html +++ b/docs/classspdlog_1_1details_1_1periodic__worker-members.html @@ -1,10 +1,9 @@ - + - - +Livox SDK API: Member List @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ @@ -39,22 +41,42 @@
Livox SDK API -  V2.0.0 +  V2.1.0
- + - - - - + +
@@ -105,7 +125,7 @@ $(document).ready(function(){initNavTree('classspdlog_1_1details_1_1periodic__wo
    + doxygen 1.8.11
diff --git a/docs/classspdlog_1_1details_1_1periodic__worker.html b/docs/classspdlog_1_1details_1_1periodic__worker.html index 9ee9933..1ee78bc 100644 --- a/docs/classspdlog_1_1details_1_1periodic__worker.html +++ b/docs/classspdlog_1_1details_1_1periodic__worker.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: spdlog::details::periodic_worker Class Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -110,11 +130,9 @@ Public Member Functions

Detailed Description

-

Definition at line 23 of file periodic_worker.h.

+

Definition at line 23 of file periodic_worker.h.

Constructor & Destructor Documentation

- -

◆ periodic_worker() [1/2]

- +
@@ -146,13 +164,11 @@ Public Member Functions
-

Definition at line 26 of file periodic_worker.h.

+

Definition at line 26 of file periodic_worker.h.

- -

◆ periodic_worker() [2/2]

- +
@@ -176,9 +192,7 @@ Public Member Functions - -

◆ ~periodic_worker()

- +
@@ -199,14 +213,12 @@ Public Member Functions
-

Definition at line 51 of file periodic_worker.h.

+

Definition at line 51 of file periodic_worker.h.

Member Function Documentation

- -

◆ operator=()

- +
@@ -241,7 +253,7 @@ Public Member Functions + doxygen 1.8.11 diff --git a/docs/classspdlog_1_1details_1_1pid__formatter-members.html b/docs/classspdlog_1_1details_1_1pid__formatter-members.html index 0dca386..fc06f96 100644 --- a/docs/classspdlog_1_1details_1_1pid__formatter-members.html +++ b/docs/classspdlog_1_1details_1_1pid__formatter-members.html @@ -1,10 +1,9 @@ - + - - +Livox SDK API: Member List @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ @@ -39,22 +41,42 @@
Livox SDK API -  V2.0.0 +  V2.1.0
- + - - - - + +
@@ -107,7 +127,7 @@ $(document).ready(function(){initNavTree('classspdlog_1_1details_1_1pid__formatt
    + doxygen 1.8.11
diff --git a/docs/classspdlog_1_1details_1_1pid__formatter.html b/docs/classspdlog_1_1details_1_1pid__formatter.html index 1befcc9..002cd3d 100644 --- a/docs/classspdlog_1_1details_1_1pid__formatter.html +++ b/docs/classspdlog_1_1details_1_1pid__formatter.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: spdlog::details::pid_formatter Class Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@
- + - - - - + +
@@ -101,10 +121,10 @@ Inheritance diagram for spdlog::details::pid_formatter:
- + spdlog::details::flag_formatter - -
+ + @@ -128,11 +148,9 @@ Additional Inherited Members

Public Member Functions

Detailed Description

-

Definition at line 704 of file pattern_formatter.h.

+

Definition at line 704 of file pattern_formatter.h.

Constructor & Destructor Documentation

- -

◆ pid_formatter()

- +
@@ -154,14 +172,12 @@ Additional Inherited Members
-

Definition at line 707 of file pattern_formatter.h.

+

Definition at line 707 of file pattern_formatter.h.

Member Function Documentation

- -

◆ format()

- +
@@ -201,7 +217,7 @@ Additional Inherited Members

Implements spdlog::details::flag_formatter.

-

Definition at line 710 of file pattern_formatter.h.

+

Definition at line 710 of file pattern_formatter.h.

@@ -216,7 +232,7 @@ Additional Inherited Members + doxygen 1.8.11 diff --git a/docs/classspdlog_1_1details_1_1r__formatter-members.html b/docs/classspdlog_1_1details_1_1r__formatter-members.html index b1a8309..927acde 100644 --- a/docs/classspdlog_1_1details_1_1r__formatter-members.html +++ b/docs/classspdlog_1_1details_1_1r__formatter-members.html @@ -1,10 +1,9 @@ - + - - +Livox SDK API: Member List @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ @@ -39,22 +41,42 @@
Livox SDK API -  V2.0.0 +  V2.1.0
- + - - - - + +
@@ -107,7 +127,7 @@ $(document).ready(function(){initNavTree('classspdlog_1_1details_1_1r__formatter
    + doxygen 1.8.11
diff --git a/docs/classspdlog_1_1details_1_1r__formatter.html b/docs/classspdlog_1_1details_1_1r__formatter.html index 8d597eb..6da01f1 100644 --- a/docs/classspdlog_1_1details_1_1r__formatter.html +++ b/docs/classspdlog_1_1details_1_1r__formatter.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: spdlog::details::r_formatter Class Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -101,10 +121,10 @@ Inheritance diagram for spdlog::details::r_formatter:
- + spdlog::details::flag_formatter - -
+ + @@ -128,11 +148,9 @@ Additional Inherited Members

Public Member Functions

Detailed Description

-

Definition at line 563 of file pattern_formatter.h.

+

Definition at line 563 of file pattern_formatter.h.

Constructor & Destructor Documentation

- -

◆ r_formatter()

- +
@@ -154,14 +172,12 @@ Additional Inherited Members
-

Definition at line 566 of file pattern_formatter.h.

+

Definition at line 566 of file pattern_formatter.h.

Member Function Documentation

- -

◆ format()

- +
@@ -201,7 +217,7 @@ Additional Inherited Members

Implements spdlog::details::flag_formatter.

-

Definition at line 569 of file pattern_formatter.h.

+

Definition at line 569 of file pattern_formatter.h.

@@ -216,7 +232,7 @@ Additional Inherited Members + doxygen 1.8.11 diff --git a/docs/classspdlog_1_1details_1_1registry-members.html b/docs/classspdlog_1_1details_1_1registry-members.html index 4e0c82b..7100b41 100644 --- a/docs/classspdlog_1_1details_1_1registry-members.html +++ b/docs/classspdlog_1_1details_1_1registry-members.html @@ -1,10 +1,9 @@ - + - - +Livox SDK API: Member List @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ @@ -39,22 +41,42 @@
Livox SDK API -  V2.0.0 +  V2.1.0
- + - - - - + +
@@ -124,7 +144,7 @@ $(document).ready(function(){initNavTree('classspdlog_1_1details_1_1registry.htm
    + doxygen 1.8.11
diff --git a/docs/classspdlog_1_1details_1_1registry.html b/docs/classspdlog_1_1details_1_1registry.html index eed1180..7be1066 100644 --- a/docs/classspdlog_1_1details_1_1registry.html +++ b/docs/classspdlog_1_1details_1_1registry.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: spdlog::details::registry Class Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -152,11 +172,9 @@ Static Public Member Functions

Detailed Description

-

Definition at line 36 of file registry.h.

+

Definition at line 36 of file registry.h.

Constructor & Destructor Documentation

- -

◆ registry()

- +
@@ -181,9 +199,7 @@ Static Public Member Functions

Member Function Documentation

- -

◆ apply_all()

- +
@@ -193,9 +209,9 @@ Static Public Member Functions - - - + + +
void spdlog::details::registry::apply_all (const std::function< void(const std::shared_ptr< logger) &const std::function< void(const std::shared_ptr< logger >)> & fun)
@@ -205,13 +221,11 @@ Static Public Member Functions
-

Definition at line 166 of file registry.h.

+

Definition at line 166 of file registry.h.

- -

◆ default_logger()

- +
@@ -232,13 +246,11 @@ Static Public Member Functions
-

Definition at line 74 of file registry.h.

+

Definition at line 74 of file registry.h.

- -

◆ drop()

- +
@@ -260,13 +272,11 @@ Static Public Member Functions
-

Definition at line 184 of file registry.h.

+

Definition at line 184 of file registry.h.

- -

◆ drop_all()

- +
@@ -287,13 +297,11 @@ Static Public Member Functions
-

Definition at line 194 of file registry.h.

+

Definition at line 194 of file registry.h.

- -

◆ flush_all()

- +
@@ -314,13 +322,11 @@ Static Public Member Functions
-

Definition at line 175 of file registry.h.

+

Definition at line 175 of file registry.h.

- -

◆ flush_every()

- +
@@ -342,13 +348,11 @@ Static Public Member Functions
-

Definition at line 149 of file registry.h.

+

Definition at line 149 of file registry.h.

- -

◆ flush_on()

- +
@@ -370,13 +374,11 @@ Static Public Member Functions
-

Definition at line 139 of file registry.h.

+

Definition at line 139 of file registry.h.

- -

◆ get()

- +
@@ -398,13 +400,11 @@ Static Public Member Functions
-

Definition at line 67 of file registry.h.

+

Definition at line 67 of file registry.h.

- -

◆ get_default_raw()

- +
@@ -425,13 +425,11 @@ Static Public Member Functions
-

Definition at line 84 of file registry.h.

+

Definition at line 84 of file registry.h.

- -

◆ get_tp()

- +
@@ -452,13 +450,11 @@ Static Public Member Functions
-

Definition at line 112 of file registry.h.

+

Definition at line 112 of file registry.h.

- -

◆ initialize_logger()

- +
@@ -480,13 +476,11 @@ Static Public Member Functions
-

Definition at line 48 of file registry.h.

+

Definition at line 48 of file registry.h.

- -

◆ instance()

- +
@@ -507,13 +501,11 @@ Static Public Member Functions
-

Definition at line 228 of file registry.h.

+

Definition at line 228 of file registry.h.

- -

◆ operator=()

- +
@@ -537,9 +529,7 @@ Static Public Member Functions - -

◆ register_logger()

- +
@@ -561,13 +551,11 @@ Static Public Member Functions
-

Definition at line 42 of file registry.h.

+

Definition at line 42 of file registry.h.

- -

◆ set_automatic_registration()

- +
@@ -589,13 +577,11 @@ Static Public Member Functions
-

Definition at line 222 of file registry.h.

+

Definition at line 222 of file registry.h.

- -

◆ set_default_logger()

- +
@@ -617,13 +603,11 @@ Static Public Member Functions
-

Definition at line 91 of file registry.h.

+

Definition at line 91 of file registry.h.

- -

◆ set_error_handler()

- +
@@ -645,13 +629,11 @@ Static Public Member Functions
-

Definition at line 156 of file registry.h.

+

Definition at line 156 of file registry.h.

- -

◆ set_formatter()

- +
@@ -673,13 +655,11 @@ Static Public Member Functions
-

Definition at line 119 of file registry.h.

+

Definition at line 119 of file registry.h.

- -

◆ set_level()

- +
@@ -701,13 +681,11 @@ Static Public Member Functions
-

Definition at line 129 of file registry.h.

+

Definition at line 129 of file registry.h.

- -

◆ set_tp()

- +
@@ -729,13 +707,11 @@ Static Public Member Functions
-

Definition at line 106 of file registry.h.

+

Definition at line 106 of file registry.h.

- -

◆ shutdown()

- +
@@ -756,13 +732,11 @@ Static Public Member Functions
-

Definition at line 202 of file registry.h.

+

Definition at line 202 of file registry.h.

- -

◆ tp_mutex()

- +
@@ -783,7 +757,7 @@ Static Public Member Functions
-

Definition at line 217 of file registry.h.

+

Definition at line 217 of file registry.h.

@@ -798,7 +772,7 @@ Static Public Member Functions + doxygen 1.8.11
diff --git a/docs/classspdlog_1_1details_1_1scoped__pad-members.html b/docs/classspdlog_1_1details_1_1scoped__pad-members.html index d71138c..e61c8f5 100644 --- a/docs/classspdlog_1_1details_1_1scoped__pad-members.html +++ b/docs/classspdlog_1_1details_1_1scoped__pad-members.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Member List @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -104,7 +124,7 @@ $(document).ready(function(){initNavTree('classspdlog_1_1details_1_1scoped__pad.
    + doxygen 1.8.11
diff --git a/docs/classspdlog_1_1details_1_1scoped__pad.html b/docs/classspdlog_1_1details_1_1scoped__pad.html index 5ba0037..a6664b1 100644 --- a/docs/classspdlog_1_1details_1_1scoped__pad.html +++ b/docs/classspdlog_1_1details_1_1scoped__pad.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: spdlog::details::scoped_pad Class Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -108,11 +128,9 @@ Public Member Functions

Detailed Description

-

Definition at line 53 of file pattern_formatter.h.

+

Definition at line 53 of file pattern_formatter.h.

Constructor & Destructor Documentation

- -

◆ scoped_pad() [1/2]

- +
@@ -150,13 +168,11 @@ Public Member Functions
-

Definition at line 56 of file pattern_formatter.h.

+

Definition at line 56 of file pattern_formatter.h.

- -

◆ scoped_pad() [2/2]

- +
@@ -194,13 +210,11 @@ Public Member Functions
-

Definition at line 82 of file pattern_formatter.h.

+

Definition at line 82 of file pattern_formatter.h.

- -

◆ ~scoped_pad()

- +
@@ -221,7 +235,7 @@ Public Member Functions
-

Definition at line 87 of file pattern_formatter.h.

+

Definition at line 87 of file pattern_formatter.h.

@@ -236,7 +250,7 @@ Public Member Functions + doxygen 1.8.11
diff --git a/docs/classspdlog_1_1details_1_1short__level__formatter-members.html b/docs/classspdlog_1_1details_1_1short__level__formatter-members.html index b2eb4b4..43c3036 100644 --- a/docs/classspdlog_1_1details_1_1short__level__formatter-members.html +++ b/docs/classspdlog_1_1details_1_1short__level__formatter-members.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Member List @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -107,7 +127,7 @@ $(document).ready(function(){initNavTree('classspdlog_1_1details_1_1short__level
    + doxygen 1.8.11
diff --git a/docs/classspdlog_1_1details_1_1short__level__formatter.html b/docs/classspdlog_1_1details_1_1short__level__formatter.html index 4101f87..9f16041 100644 --- a/docs/classspdlog_1_1details_1_1short__level__formatter.html +++ b/docs/classspdlog_1_1details_1_1short__level__formatter.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: spdlog::details::short_level_formatter Class Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -101,10 +121,10 @@ Inheritance diagram for spdlog::details::short_level_formatter:
- + spdlog::details::flag_formatter - -
+ + @@ -128,11 +148,9 @@ Additional Inherited Members

Public Member Functions

Detailed Description

-

Definition at line 176 of file pattern_formatter.h.

+

Definition at line 176 of file pattern_formatter.h.

Constructor & Destructor Documentation

- -

◆ short_level_formatter()

- +
@@ -154,14 +172,12 @@ Additional Inherited Members
-

Definition at line 179 of file pattern_formatter.h.

+

Definition at line 179 of file pattern_formatter.h.

Member Function Documentation

- -

◆ format()

- +
@@ -201,7 +217,7 @@ Additional Inherited Members

Implements spdlog::details::flag_formatter.

-

Definition at line 184 of file pattern_formatter.h.

+

Definition at line 184 of file pattern_formatter.h.

@@ -216,7 +232,7 @@ Additional Inherited Members + doxygen 1.8.11 diff --git a/docs/classspdlog_1_1details_1_1source__filename__formatter-members.html b/docs/classspdlog_1_1details_1_1source__filename__formatter-members.html index cdd6dba..8d76748 100644 --- a/docs/classspdlog_1_1details_1_1source__filename__formatter-members.html +++ b/docs/classspdlog_1_1details_1_1source__filename__formatter-members.html @@ -1,10 +1,9 @@ - + - - +Livox SDK API: Member List @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ @@ -39,22 +41,42 @@
Livox SDK API -  V2.0.0 +  V2.1.0
- + - - - - + +
@@ -107,7 +127,7 @@ $(document).ready(function(){initNavTree('classspdlog_1_1details_1_1source__file
    + doxygen 1.8.11
diff --git a/docs/classspdlog_1_1details_1_1source__filename__formatter.html b/docs/classspdlog_1_1details_1_1source__filename__formatter.html index a0cd2d7..0ec8cae 100644 --- a/docs/classspdlog_1_1details_1_1source__filename__formatter.html +++ b/docs/classspdlog_1_1details_1_1source__filename__formatter.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: spdlog::details::source_filename_formatter Class Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -101,10 +121,10 @@ Inheritance diagram for spdlog::details::source_filename_formatter:
- + spdlog::details::flag_formatter - -
+ + @@ -128,11 +148,9 @@ Additional Inherited Members

Public Member Functions

Detailed Description

-

Definition at line 857 of file pattern_formatter.h.

+

Definition at line 857 of file pattern_formatter.h.

Constructor & Destructor Documentation

- -

◆ source_filename_formatter()

- +
@@ -154,14 +172,12 @@ Additional Inherited Members
-

Definition at line 860 of file pattern_formatter.h.

+

Definition at line 860 of file pattern_formatter.h.

Member Function Documentation

- -

◆ format()

- +
@@ -201,7 +217,7 @@ Additional Inherited Members

Implements spdlog::details::flag_formatter.

-

Definition at line 863 of file pattern_formatter.h.

+

Definition at line 863 of file pattern_formatter.h.

@@ -216,7 +232,7 @@ Additional Inherited Members + doxygen 1.8.11 diff --git a/docs/classspdlog_1_1details_1_1source__funcname__formatter-members.html b/docs/classspdlog_1_1details_1_1source__funcname__formatter-members.html index d5f6149..b078f5e 100644 --- a/docs/classspdlog_1_1details_1_1source__funcname__formatter-members.html +++ b/docs/classspdlog_1_1details_1_1source__funcname__formatter-members.html @@ -1,10 +1,9 @@ - + - - +Livox SDK API: Member List @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ @@ -39,22 +41,42 @@
Livox SDK API -  V2.0.0 +  V2.1.0
- + - - - - + +
@@ -107,7 +127,7 @@ $(document).ready(function(){initNavTree('classspdlog_1_1details_1_1source__func
    + doxygen 1.8.11
diff --git a/docs/classspdlog_1_1details_1_1source__funcname__formatter.html b/docs/classspdlog_1_1details_1_1source__funcname__formatter.html index 81d3c39..259608b 100644 --- a/docs/classspdlog_1_1details_1_1source__funcname__formatter.html +++ b/docs/classspdlog_1_1details_1_1source__funcname__formatter.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: spdlog::details::source_funcname_formatter Class Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -101,10 +121,10 @@ Inheritance diagram for spdlog::details::source_funcname_formatter:
- + spdlog::details::flag_formatter - -
+ + @@ -128,11 +148,9 @@ Additional Inherited Members

Public Member Functions

Detailed Description

-

Definition at line 899 of file pattern_formatter.h.

+

Definition at line 899 of file pattern_formatter.h.

Constructor & Destructor Documentation

- -

◆ source_funcname_formatter()

- +
@@ -154,14 +172,12 @@ Additional Inherited Members
-

Definition at line 902 of file pattern_formatter.h.

+

Definition at line 902 of file pattern_formatter.h.

Member Function Documentation

- -

◆ format()

- +
@@ -201,7 +217,7 @@ Additional Inherited Members

Implements spdlog::details::flag_formatter.

-

Definition at line 905 of file pattern_formatter.h.

+

Definition at line 905 of file pattern_formatter.h.

@@ -216,7 +232,7 @@ Additional Inherited Members + doxygen 1.8.11 diff --git a/docs/classspdlog_1_1details_1_1source__linenum__formatter-members.html b/docs/classspdlog_1_1details_1_1source__linenum__formatter-members.html index 4354ed8..8318cb3 100644 --- a/docs/classspdlog_1_1details_1_1source__linenum__formatter-members.html +++ b/docs/classspdlog_1_1details_1_1source__linenum__formatter-members.html @@ -1,10 +1,9 @@ - + - - +Livox SDK API: Member List @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ @@ -39,22 +41,42 @@
Livox SDK API -  V2.0.0 +  V2.1.0
- + - - - - + +
@@ -107,7 +127,7 @@ $(document).ready(function(){initNavTree('classspdlog_1_1details_1_1source__line
    + doxygen 1.8.11
diff --git a/docs/classspdlog_1_1details_1_1source__linenum__formatter.html b/docs/classspdlog_1_1details_1_1source__linenum__formatter.html index 17da63f..e820de1 100644 --- a/docs/classspdlog_1_1details_1_1source__linenum__formatter.html +++ b/docs/classspdlog_1_1details_1_1source__linenum__formatter.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: spdlog::details::source_linenum_formatter Class Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -101,10 +121,10 @@ Inheritance diagram for spdlog::details::source_linenum_formatter:
- + spdlog::details::flag_formatter - -
+ + @@ -128,11 +148,9 @@ Additional Inherited Members

Public Member Functions

Detailed Description

-

Definition at line 874 of file pattern_formatter.h.

+

Definition at line 874 of file pattern_formatter.h.

Constructor & Destructor Documentation

- -

◆ source_linenum_formatter()

- +
@@ -154,14 +172,12 @@ Additional Inherited Members
-

Definition at line 877 of file pattern_formatter.h.

+

Definition at line 877 of file pattern_formatter.h.

Member Function Documentation

- -

◆ format()

- +
@@ -201,7 +217,7 @@ Additional Inherited Members

Implements spdlog::details::flag_formatter.

-

Definition at line 880 of file pattern_formatter.h.

+

Definition at line 880 of file pattern_formatter.h.

@@ -216,7 +232,7 @@ Additional Inherited Members + doxygen 1.8.11 diff --git a/docs/classspdlog_1_1details_1_1source__location__formatter-members.html b/docs/classspdlog_1_1details_1_1source__location__formatter-members.html index 61875b5..89bafd9 100644 --- a/docs/classspdlog_1_1details_1_1source__location__formatter-members.html +++ b/docs/classspdlog_1_1details_1_1source__location__formatter-members.html @@ -1,10 +1,9 @@ - + - - +Livox SDK API: Member List @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ @@ -39,22 +41,42 @@
Livox SDK API -  V2.0.0 +  V2.1.0
- + - - - - + +
@@ -107,7 +127,7 @@ $(document).ready(function(){initNavTree('classspdlog_1_1details_1_1source__loca
    + doxygen 1.8.11
diff --git a/docs/classspdlog_1_1details_1_1source__location__formatter.html b/docs/classspdlog_1_1details_1_1source__location__formatter.html index 09cd433..12883be 100644 --- a/docs/classspdlog_1_1details_1_1source__location__formatter.html +++ b/docs/classspdlog_1_1details_1_1source__location__formatter.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: spdlog::details::source_location_formatter Class Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -101,10 +121,10 @@ Inheritance diagram for spdlog::details::source_location_formatter:
- + spdlog::details::flag_formatter - -
+ + @@ -128,11 +148,9 @@ Additional Inherited Members

Public Member Functions

Detailed Description

-

Definition at line 828 of file pattern_formatter.h.

+

Definition at line 828 of file pattern_formatter.h.

Constructor & Destructor Documentation

- -

◆ source_location_formatter()

- +
@@ -154,14 +172,12 @@ Additional Inherited Members
-

Definition at line 831 of file pattern_formatter.h.

+

Definition at line 831 of file pattern_formatter.h.

Member Function Documentation

- -

◆ format()

- +
@@ -201,7 +217,7 @@ Additional Inherited Members

Implements spdlog::details::flag_formatter.

-

Definition at line 834 of file pattern_formatter.h.

+

Definition at line 834 of file pattern_formatter.h.

@@ -216,7 +232,7 @@ Additional Inherited Members + doxygen 1.8.11 diff --git a/docs/classspdlog_1_1details_1_1t__formatter-members.html b/docs/classspdlog_1_1details_1_1t__formatter-members.html index 7929ff6..8159d4f 100644 --- a/docs/classspdlog_1_1details_1_1t__formatter-members.html +++ b/docs/classspdlog_1_1details_1_1t__formatter-members.html @@ -1,10 +1,9 @@ - + - - +Livox SDK API: Member List @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ @@ -39,22 +41,42 @@
Livox SDK API -  V2.0.0 +  V2.1.0
- + - - - - + +
@@ -107,7 +127,7 @@ $(document).ready(function(){initNavTree('classspdlog_1_1details_1_1t__formatter
    + doxygen 1.8.11
diff --git a/docs/classspdlog_1_1details_1_1t__formatter.html b/docs/classspdlog_1_1details_1_1t__formatter.html index 7ddfbd4..c7067ef 100644 --- a/docs/classspdlog_1_1details_1_1t__formatter.html +++ b/docs/classspdlog_1_1details_1_1t__formatter.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: spdlog::details::t_formatter Class Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -101,10 +121,10 @@ Inheritance diagram for spdlog::details::t_formatter:
- + spdlog::details::flag_formatter - -
+ + @@ -128,11 +148,9 @@ Additional Inherited Members

Public Member Functions

Detailed Description

-

Definition at line 682 of file pattern_formatter.h.

+

Definition at line 682 of file pattern_formatter.h.

Constructor & Destructor Documentation

- -

◆ t_formatter()

- +
@@ -154,14 +172,12 @@ Additional Inherited Members
-

Definition at line 685 of file pattern_formatter.h.

+

Definition at line 685 of file pattern_formatter.h.

Member Function Documentation

- -

◆ format()

- +
@@ -201,7 +217,7 @@ Additional Inherited Members

Implements spdlog::details::flag_formatter.

-

Definition at line 688 of file pattern_formatter.h.

+

Definition at line 688 of file pattern_formatter.h.

@@ -216,7 +232,7 @@ Additional Inherited Members + doxygen 1.8.11 diff --git a/docs/classspdlog_1_1details_1_1thread__pool-members.html b/docs/classspdlog_1_1details_1_1thread__pool-members.html index 147db81..391f647 100644 --- a/docs/classspdlog_1_1details_1_1thread__pool-members.html +++ b/docs/classspdlog_1_1details_1_1thread__pool-members.html @@ -1,10 +1,9 @@ - + - - +Livox SDK API: Member List @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ @@ -39,22 +41,42 @@
Livox SDK API -  V2.0.0 +  V2.1.0
- + - - - - + +
@@ -110,7 +130,7 @@ $(document).ready(function(){initNavTree('classspdlog_1_1details_1_1thread__pool
    + doxygen 1.8.11
diff --git a/docs/classspdlog_1_1details_1_1thread__pool.html b/docs/classspdlog_1_1details_1_1thread__pool.html index 41cef42..a55487e 100644 --- a/docs/classspdlog_1_1details_1_1thread__pool.html +++ b/docs/classspdlog_1_1details_1_1thread__pool.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: spdlog::details::thread_pool Class Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -124,11 +144,9 @@ Public Member Functions

Detailed Description

-

Definition at line 118 of file thread_pool.h.

+

Definition at line 118 of file thread_pool.h.

Member Typedef Documentation

- -

◆ item_type

- +
@@ -138,13 +156,11 @@ Public Member Functions
-

Definition at line 121 of file thread_pool.h.

+

Definition at line 121 of file thread_pool.h.

- -

◆ q_type

- +
@@ -154,14 +170,12 @@ Public Member Functions
-

Definition at line 122 of file thread_pool.h.

+

Definition at line 122 of file thread_pool.h.

Constructor & Destructor Documentation

- -

◆ thread_pool() [1/2]

- +
@@ -193,13 +207,11 @@ Public Member Functions
-

Definition at line 124 of file thread_pool.h.

+

Definition at line 124 of file thread_pool.h.

- -

◆ ~thread_pool()

- +
@@ -220,13 +232,11 @@ Public Member Functions
-

Definition at line 141 of file thread_pool.h.

+

Definition at line 141 of file thread_pool.h.

- -

◆ thread_pool() [2/2]

- +
@@ -251,9 +261,7 @@ Public Member Functions

Member Function Documentation

- -

◆ operator=()

- +
@@ -277,9 +285,7 @@ Public Member Functions - -

◆ overrun_counter()

- +
@@ -300,13 +306,11 @@ Public Member Functions
-

Definition at line 174 of file thread_pool.h.

+

Definition at line 174 of file thread_pool.h.

- -

◆ post_flush()

- +
@@ -338,13 +342,11 @@ Public Member Functions
-

Definition at line 169 of file thread_pool.h.

+

Definition at line 169 of file thread_pool.h.

- -

◆ post_log()

- +
@@ -382,7 +384,7 @@ Public Member Functions
-

Definition at line 163 of file thread_pool.h.

+

Definition at line 163 of file thread_pool.h.

@@ -397,7 +399,7 @@ Public Member Functions + doxygen 1.8.11
diff --git a/docs/classspdlog_1_1details_1_1v__formatter-members.html b/docs/classspdlog_1_1details_1_1v__formatter-members.html index d99c47d..cf8c86b 100644 --- a/docs/classspdlog_1_1details_1_1v__formatter-members.html +++ b/docs/classspdlog_1_1details_1_1v__formatter-members.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Member List @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -107,7 +127,7 @@ $(document).ready(function(){initNavTree('classspdlog_1_1details_1_1v__formatter
    + doxygen 1.8.11
diff --git a/docs/classspdlog_1_1details_1_1v__formatter.html b/docs/classspdlog_1_1details_1_1v__formatter.html index d79c669..c7d05c0 100644 --- a/docs/classspdlog_1_1details_1_1v__formatter.html +++ b/docs/classspdlog_1_1details_1_1v__formatter.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: spdlog::details::v_formatter Class Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -101,10 +121,10 @@ Inheritance diagram for spdlog::details::v_formatter:
- + spdlog::details::flag_formatter - -
+ + @@ -128,11 +148,9 @@ Additional Inherited Members

Public Member Functions

Detailed Description

-

Definition at line 741 of file pattern_formatter.h.

+

Definition at line 741 of file pattern_formatter.h.

Constructor & Destructor Documentation

- -

◆ v_formatter()

- +
@@ -154,14 +172,12 @@ Additional Inherited Members
-

Definition at line 744 of file pattern_formatter.h.

+

Definition at line 744 of file pattern_formatter.h.

Member Function Documentation

- -

◆ format()

- +
@@ -201,7 +217,7 @@ Additional Inherited Members

Implements spdlog::details::flag_formatter.

-

Definition at line 747 of file pattern_formatter.h.

+

Definition at line 747 of file pattern_formatter.h.

@@ -216,7 +232,7 @@ Additional Inherited Members + doxygen 1.8.11 diff --git a/docs/classspdlog_1_1details_1_1z__formatter-members.html b/docs/classspdlog_1_1details_1_1z__formatter-members.html index 6fc0816..68e454e 100644 --- a/docs/classspdlog_1_1details_1_1z__formatter-members.html +++ b/docs/classspdlog_1_1details_1_1z__formatter-members.html @@ -1,10 +1,9 @@ - + - - +Livox SDK API: Member List @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ @@ -39,22 +41,42 @@
Livox SDK API -  V2.0.0 +  V2.1.0
- + - - - - + +
@@ -111,7 +131,7 @@ $(document).ready(function(){initNavTree('classspdlog_1_1details_1_1z__formatter
    + doxygen 1.8.11
diff --git a/docs/classspdlog_1_1details_1_1z__formatter.html b/docs/classspdlog_1_1details_1_1z__formatter.html index eafa5cf..6cc0557 100644 --- a/docs/classspdlog_1_1details_1_1z__formatter.html +++ b/docs/classspdlog_1_1details_1_1z__formatter.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: spdlog::details::z_formatter Class Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -102,10 +122,10 @@ Inheritance diagram for spdlog::details::z_formatter:
- + spdlog::details::flag_formatter - -
+ + @@ -140,11 +160,9 @@ Additional Inherited Members

Public Member Functions

Detailed Description

-

Definition at line 623 of file pattern_formatter.h.

+

Definition at line 623 of file pattern_formatter.h.

Constructor & Destructor Documentation

- -

◆ z_formatter() [1/3]

- +
@@ -166,13 +184,11 @@ Additional Inherited Members
-

Definition at line 626 of file pattern_formatter.h.

+

Definition at line 626 of file pattern_formatter.h.

- -

◆ z_formatter() [2/3]

- +
@@ -195,9 +211,7 @@ Additional Inherited Members - -

◆ z_formatter() [3/3]

- +
@@ -222,9 +236,7 @@ Additional Inherited Members

Member Function Documentation

- -

◆ format()

- +
@@ -264,13 +276,11 @@ Additional Inherited Members

Implements spdlog::details::flag_formatter.

-

Definition at line 635 of file pattern_formatter.h.

+

Definition at line 635 of file pattern_formatter.h.

- -

◆ operator=()

- +
@@ -295,9 +305,7 @@ Additional Inherited Members

Member Data Documentation

- -

◆ cache_refresh

- +
@@ -307,7 +315,7 @@ Additional Inherited Members
-

Definition at line 629 of file pattern_formatter.h.

+

Definition at line 629 of file pattern_formatter.h.

@@ -322,7 +330,7 @@ Additional Inherited Members + doxygen 1.8.11 diff --git a/docs/classspdlog_1_1formatter-members.html b/docs/classspdlog_1_1formatter-members.html index a5599c9..2e30cd9 100644 --- a/docs/classspdlog_1_1formatter-members.html +++ b/docs/classspdlog_1_1formatter-members.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Member List @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -104,7 +124,7 @@ $(document).ready(function(){initNavTree('classspdlog_1_1formatter.html','');});
    + doxygen 1.8.11
diff --git a/docs/classspdlog_1_1formatter.html b/docs/classspdlog_1_1formatter.html index 5f160e6..5b827c1 100644 --- a/docs/classspdlog_1_1formatter.html +++ b/docs/classspdlog_1_1formatter.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: spdlog::formatter Class Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -103,8 +123,8 @@ Inheritance diagram for spdlog::formatter:
spdlog::pattern_formatter - - + + @@ -117,11 +137,9 @@ Public Member Functions

Public Member Functions

Detailed Description

-

Definition at line 13 of file formatter.h.

+

Definition at line 13 of file formatter.h.

Constructor & Destructor Documentation

- -

◆ ~formatter()

- +
@@ -145,9 +163,7 @@ Public Member Functions

Member Function Documentation

- -

◆ clone()

- +
@@ -172,9 +188,7 @@ Public Member Functions - -

◆ format()

- +
@@ -221,7 +235,7 @@ Public Member Functions + doxygen 1.8.11 diff --git a/docs/classspdlog_1_1logger-members.html b/docs/classspdlog_1_1logger-members.html index 0c1e118..6cfa1bd 100644 --- a/docs/classspdlog_1_1logger-members.html +++ b/docs/classspdlog_1_1logger-members.html @@ -1,10 +1,9 @@ - + - - +Livox SDK API: Member List @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ @@ -39,22 +41,42 @@
Livox SDK API -  V2.0.0 +  V2.1.0
- + - - - - + +
@@ -95,29 +115,29 @@ $(document).ready(function(){initNavTree('classspdlog_1_1logger.html','');});

This is the complete list of members for spdlog::logger, including all inherited members.

- + - + - + - + - + - + - + - - + + @@ -128,7 +148,7 @@ $(document).ready(function(){initNavTree('classspdlog_1_1logger.html','');}); - + @@ -136,14 +156,14 @@ $(document).ready(function(){initNavTree('classspdlog_1_1logger.html','');}); - + - + - + - +
clone(std::string logger_name)spdlog::loggerinlinevirtual
critical(const char *fmt, const Args &... args)spdlog::loggerinline
critical(const char *fmt, const Args &...args)spdlog::loggerinline
critical(const T &msg)spdlog::loggerinline
debug(const char *fmt, const Args &... args)spdlog::loggerinline
debug(const char *fmt, const Args &...args)spdlog::loggerinline
debug(const T &msg)spdlog::loggerinline
default_err_handler_(const std::string &msg)spdlog::loggerinlineprotected
default_level()spdlog::loggerinlinestatic
err_handler_spdlog::loggerprotected
error(const char *fmt, const Args &... args)spdlog::loggerinline
error(const char *fmt, const Args &...args)spdlog::loggerinline
error(const T &msg)spdlog::loggerinline
error_handler() constspdlog::loggerinline
error_handler() const spdlog::loggerinline
flush()spdlog::loggerinline
flush_()spdlog::loggerinlineprotectedvirtual
flush_level() constspdlog::loggerinline
flush_level() const spdlog::loggerinline
flush_level_spdlog::loggerprotected
flush_on(level::level_enum log_level)spdlog::loggerinline
incr_msg_counter_(details::log_msg &msg)spdlog::loggerinlineprotected
info(const char *fmt, const Args &... args)spdlog::loggerinline
info(const char *fmt, const Args &...args)spdlog::loggerinline
info(const T &msg)spdlog::loggerinline
last_err_time_spdlog::loggerprotected
level() constspdlog::loggerinline
level() const spdlog::loggerinline
level_spdlog::loggerprotected
log(level::level_enum lvl, const char *fmt, const Args &... args)spdlog::loggerinline
log(source_loc loc, level::level_enum lvl, const char *fmt, const Args &... args)spdlog::loggerinline
log(level::level_enum lvl, const char *fmt, const Args &...args)spdlog::loggerinline
log(source_loc loc, level::level_enum lvl, const char *fmt, const Args &...args)spdlog::loggerinline
log(level::level_enum lvl, const char *msg)spdlog::loggerinline
log(source_loc loc, level::level_enum lvl, const char *msg)spdlog::loggerinline
log(level::level_enum lvl, const T &)spdlog::loggerinline
logger(std::string name, It begin, It end)spdlog::loggerinline
logger(const logger &)=deletespdlog::logger
msg_counter_spdlog::loggerprotected
name() constspdlog::loggerinline
name() const spdlog::loggerinline
name_spdlog::loggerprotected
operator=(const logger &)=deletespdlog::logger
set_error_handler(log_err_handler err_handler)spdlog::loggerinline
set_level(level::level_enum log_level)spdlog::loggerinline
set_pattern(std::string pattern, pattern_time_type time_type=pattern_time_type::local)spdlog::loggerinline
should_flush_(const details::log_msg &msg)spdlog::loggerinlineprotected
should_log(level::level_enum msg_level) constspdlog::loggerinline
should_log(level::level_enum msg_level) const spdlog::loggerinline
sink_it_(details::log_msg &msg)spdlog::loggerinlineprotectedvirtual
sinks() constspdlog::loggerinline
sinks() const spdlog::loggerinline
sinks()spdlog::loggerinline
sinks_spdlog::loggerprotected
trace(const char *fmt, const Args &... args)spdlog::loggerinline
trace(const char *fmt, const Args &...args)spdlog::loggerinline
trace(const T &msg)spdlog::loggerinline
warn(const char *fmt, const Args &... args)spdlog::loggerinline
warn(const char *fmt, const Args &...args)spdlog::loggerinline
warn(const T &msg)spdlog::loggerinline
~logger()spdlog::loggerinlinevirtual
@@ -153,7 +173,7 @@ $(document).ready(function(){initNavTree('classspdlog_1_1logger.html','');});
    + doxygen 1.8.11
diff --git a/docs/classspdlog_1_1logger.html b/docs/classspdlog_1_1logger.html index 9b862c3..67b8968 100644 --- a/docs/classspdlog_1_1logger.html +++ b/docs/classspdlog_1_1logger.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: spdlog::logger Class Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -106,17 +126,17 @@ Inheritance diagram for spdlog::logger:
spdlog::async_logger - - + + - + - + - + @@ -124,34 +144,34 @@ Public Member Functions - - - - - - + + + + + + - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + @@ -179,14 +199,14 @@ Public Member Functions - - + + - - - - + + + + @@ -195,16 +215,16 @@ Public Member Functions - - - - + + + + - - + +

Public Member Functions

 logger (std::string name, sink_ptr single_sink)
 logger (std::string name, sink_ptr single_sink)
 
 logger (std::string name, sinks_init_list sinks)
 logger (std::string name, sinks_init_list sinks)
 
template<typename It >
 logger (std::string name, It begin, It end)
 logger (std::string name, It begin, It end)
 
virtual ~logger ()
 
 
loggeroperator= (const logger &)=delete
 
template<typename... Args>
void log (level::level_enum lvl, const char *fmt, const Args &... args)
 
template<typename... Args>
void log (source_loc loc, level::level_enum lvl, const char *fmt, const Args &... args)
 
template<typename... Args>
void log (level::level_enum lvl, const char *fmt, const Args &...args)
 
template<typename... Args>
void log (source_loc loc, level::level_enum lvl, const char *fmt, const Args &...args)
 
void log (level::level_enum lvl, const char *msg)
 
void log (source_loc loc, level::level_enum lvl, const char *msg)
 
template<typename... Args>
void trace (const char *fmt, const Args &... args)
 
template<typename... Args>
void debug (const char *fmt, const Args &... args)
 
template<typename... Args>
void info (const char *fmt, const Args &... args)
 
template<typename... Args>
void warn (const char *fmt, const Args &... args)
 
template<typename... Args>
void error (const char *fmt, const Args &... args)
 
template<typename... Args>
void critical (const char *fmt, const Args &... args)
 
template<typename... Args>
void trace (const char *fmt, const Args &...args)
 
template<typename... Args>
void debug (const char *fmt, const Args &...args)
 
template<typename... Args>
void info (const char *fmt, const Args &...args)
 
template<typename... Args>
void warn (const char *fmt, const Args &...args)
 
template<typename... Args>
void error (const char *fmt, const Args &...args)
 
template<typename... Args>
void critical (const char *fmt, const Args &...args)
 
template<class T >
void log (level::level_enum lvl, const T &)
 
template<typename T >
void critical (const T &msg)
 
bool should_log (level::level_enum msg_level) const
 
bool should_log (level::level_enum msg_level) const
 
void set_level (level::level_enum log_level)
 
level::level_enum level () const
 
const std::string & name () const
 
level::level_enum level () const
 
const std::string & name () const
 
void set_formatter (std::unique_ptr< formatter > formatter)
 
void set_pattern (std::string pattern, pattern_time_type time_type=pattern_time_type::local)
 
void flush_on (level::level_enum log_level)
 
level::level_enum flush_level () const
 
const std::vector< sink_ptr > & sinks () const
 
level::level_enum flush_level () const
 
const std::vector< sink_ptr > & sinks () const
 
std::vector< sink_ptr > & sinks ()
 
void set_error_handler (log_err_handler err_handler)
 
log_err_handler error_handler () const
 
log_err_handler error_handler () const
 
virtual std::shared_ptr< loggerclone (std::string logger_name)
 
@@ -245,11 +265,9 @@ Protected Attributes

Detailed Description

-

Definition at line 31 of file logger.h.

+

Definition at line 31 of file logger.h.

Constructor & Destructor Documentation

- -

◆ logger() [1/4]

- +
@@ -281,13 +299,11 @@ Protected Attributes
-

Definition at line 39 of file logger_impl.h.

+

Definition at line 39 of file logger_impl.h.

- -

◆ logger() [2/4]

- +
@@ -319,13 +335,11 @@ Protected Attributes
-

Definition at line 33 of file logger_impl.h.

+

Definition at line 33 of file logger_impl.h.

- -

◆ logger() [3/4]

- +
@@ -365,13 +379,11 @@ template<typename It >
-

Definition at line 26 of file logger_impl.h.

+

Definition at line 26 of file logger_impl.h.

- -

◆ ~logger()

- +
@@ -394,9 +406,7 @@ template<typename It > - -

◆ logger() [4/4]

- +
@@ -421,9 +431,7 @@ template<typename It >

Member Function Documentation

- -

◆ clone()

- +
@@ -447,13 +455,11 @@ template<typename It >

Reimplemented in spdlog::async_logger.

-

Definition at line 428 of file logger_impl.h.

+

Definition at line 428 of file logger_impl.h.

- -

◆ critical() [1/2]

- +
@@ -487,13 +493,11 @@ template<typename... Args>
-

Definition at line 175 of file logger_impl.h.

+

Definition at line 175 of file logger_impl.h.

- -

◆ critical() [2/2]

- +
@@ -517,13 +521,11 @@ template<typename T>
-

Definition at line 211 of file logger_impl.h.

+

Definition at line 211 of file logger_impl.h.

- -

◆ debug() [1/2]

- +
@@ -557,13 +559,11 @@ template<typename... Args>
-

Definition at line 151 of file logger_impl.h.

+

Definition at line 151 of file logger_impl.h.

- -

◆ debug() [2/2]

- +
@@ -587,13 +587,11 @@ template<typename T>
-

Definition at line 187 of file logger_impl.h.

+

Definition at line 187 of file logger_impl.h.

- -

◆ default_err_handler_()

- +
@@ -615,13 +613,11 @@ template<typename T>
-

Definition at line 399 of file logger_impl.h.

+

Definition at line 399 of file logger_impl.h.

- -

◆ default_level()

- +
@@ -642,13 +638,11 @@ template<typename T>
-

Definition at line 353 of file logger_impl.h.

+

Definition at line 353 of file logger_impl.h.

- -

◆ error() [1/2]

- +
@@ -682,13 +676,11 @@ template<typename... Args>
-

Definition at line 169 of file logger_impl.h.

+

Definition at line 169 of file logger_impl.h.

- -

◆ error() [2/2]

- +
@@ -712,13 +704,11 @@ template<typename T>
-

Definition at line 205 of file logger_impl.h.

+

Definition at line 205 of file logger_impl.h.

- -

◆ error_handler()

- +
@@ -739,13 +729,11 @@ template<typename T>
-

Definition at line 323 of file logger_impl.h.

+

Definition at line 323 of file logger_impl.h.

- -

◆ flush()

- +
@@ -766,13 +754,11 @@ template<typename T>
-

Definition at line 328 of file logger_impl.h.

+

Definition at line 328 of file logger_impl.h.

- -

◆ flush_()

- +
@@ -795,13 +781,11 @@ template<typename T>

Reimplemented in spdlog::async_logger.

-

Definition at line 391 of file logger_impl.h.

+

Definition at line 391 of file logger_impl.h.

- -

◆ flush_level()

- +
@@ -822,13 +806,11 @@ template<typename T>
-

Definition at line 342 of file logger_impl.h.

+

Definition at line 342 of file logger_impl.h.

- -

◆ flush_on()

- +
@@ -850,13 +832,11 @@ template<typename T>
-

Definition at line 337 of file logger_impl.h.

+

Definition at line 337 of file logger_impl.h.

- -

◆ incr_msg_counter_()

- +
@@ -878,13 +858,11 @@ template<typename T>
-

Definition at line 413 of file logger_impl.h.

+

Definition at line 413 of file logger_impl.h.

- -

◆ info() [1/2]

- +
@@ -918,13 +896,11 @@ template<typename... Args>
-

Definition at line 157 of file logger_impl.h.

+

Definition at line 157 of file logger_impl.h.

- -

◆ info() [2/2]

- +
@@ -948,13 +924,11 @@ template<typename T>
-

Definition at line 193 of file logger_impl.h.

+

Definition at line 193 of file logger_impl.h.

- -

◆ level()

- +
@@ -975,13 +949,11 @@ template<typename T>
-

Definition at line 358 of file logger_impl.h.

+

Definition at line 358 of file logger_impl.h.

- -

◆ log() [1/7]

- +
@@ -1021,13 +993,61 @@ template<typename... Args>
-

Definition at line 80 of file logger_impl.h.

+

Definition at line 80 of file logger_impl.h.

- -

◆ log() [2/7]

+ +
+
+
+template<typename... Args>
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void spdlog::logger::log (source_loc loc,
level::level_enum lvl,
const char * fmt,
const Args &... args 
)
+
+inline
+
+

Definition at line 61 of file logger_impl.h.

+ +
+
+
@@ -1059,13 +1079,53 @@ template<typename... Args>
-

Definition at line 100 of file logger_impl.h.

+

Definition at line 100 of file logger_impl.h.

- -

◆ log() [3/7]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
void spdlog::logger::log (source_loc loc,
level::level_enum lvl,
const char * msg 
)
+
+inline
+
+

Definition at line 85 of file logger_impl.h.

+ +
+
+
@@ -1099,109 +1159,11 @@ template<class T>
-

Definition at line 106 of file logger_impl.h.

+

Definition at line 106 of file logger_impl.h.

- -

◆ log() [4/7]

- -
-
-
-template<typename... Args>
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void spdlog::logger::log (source_loc loc,
level::level_enum lvl,
const char * fmt,
const Args &... args 
)
-
-inline
-
- -

Definition at line 61 of file logger_impl.h.

- -
-
- -

◆ log() [5/7]

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
void spdlog::logger::log (source_loc loc,
level::level_enum lvl,
const char * msg 
)
-
-inline
-
- -

Definition at line 85 of file logger_impl.h.

- -
-
- -

◆ log() [6/7]

- +
@@ -1241,13 +1203,11 @@ template<class T, typename std::enable_if<!std::is_convertible< T, spdl
-

Definition at line 112 of file logger_impl.h.

+

Definition at line 112 of file logger_impl.h.

- -

◆ log() [7/7]

- +
@@ -1281,9 +1241,7 @@ template<class T , typename std::enable_if<!std::is_convertible< T, spd
- -

◆ name()

- +
@@ -1304,13 +1262,11 @@ template<class T , typename std::enable_if<!std::is_convertible< T, spd
-

Definition at line 308 of file logger_impl.h.

+

Definition at line 308 of file logger_impl.h.

- -

◆ operator=()

- +
@@ -1334,9 +1290,7 @@ template<class T , typename std::enable_if<!std::is_convertible< T, spd - -

◆ set_error_handler()

- +
@@ -1358,13 +1312,11 @@ template<class T , typename std::enable_if<!std::is_convertible< T, spd
-

Definition at line 318 of file logger_impl.h.

+

Definition at line 318 of file logger_impl.h.

- -

◆ set_formatter()

- +
@@ -1386,13 +1338,11 @@ template<class T , typename std::enable_if<!std::is_convertible< T, spd
-

Definition at line 46 of file logger_impl.h.

+

Definition at line 46 of file logger_impl.h.

- -

◆ set_level()

- +
@@ -1414,13 +1364,11 @@ template<class T , typename std::enable_if<!std::is_convertible< T, spd
-

Definition at line 313 of file logger_impl.h.

+

Definition at line 313 of file logger_impl.h.

- -

◆ set_pattern()

- +
@@ -1452,13 +1400,11 @@ template<class T , typename std::enable_if<!std::is_convertible< T, spd
-

Definition at line 54 of file logger_impl.h.

+

Definition at line 54 of file logger_impl.h.

- -

◆ should_flush_()

- +
@@ -1480,13 +1426,11 @@ template<class T , typename std::enable_if<!std::is_convertible< T, spd
-

Definition at line 347 of file logger_impl.h.

+

Definition at line 347 of file logger_impl.h.

- -

◆ should_log()

- +
@@ -1508,13 +1452,11 @@ template<class T , typename std::enable_if<!std::is_convertible< T, spd
-

Definition at line 363 of file logger_impl.h.

+

Definition at line 363 of file logger_impl.h.

- -

◆ sink_it_()

- +
@@ -1538,40 +1480,11 @@ template<class T , typename std::enable_if<!std::is_convertible< T, spd

Reimplemented in spdlog::async_logger.

-

Definition at line 372 of file logger_impl.h.

+

Definition at line 372 of file logger_impl.h.

- -

◆ sinks() [1/2]

- -
-
-
- - - - -
- - - - - - - -
std::vector< spdlog::sink_ptr > & spdlog::logger::sinks ()
-
-inline
-
- -

Definition at line 423 of file logger_impl.h.

- -
-
- -

◆ sinks() [2/2]

- +
@@ -1592,13 +1505,36 @@ template<class T , typename std::enable_if<!std::is_convertible< T, spd
-

Definition at line 418 of file logger_impl.h.

+

Definition at line 418 of file logger_impl.h.

- -

◆ trace() [1/2]

+ +
+
+ + + + + +
+ + + + + + + +
std::vector< spdlog::sink_ptr > & spdlog::logger::sinks ()
+
+inline
+
+

Definition at line 423 of file logger_impl.h.

+ +
+
+
@@ -1632,13 +1568,11 @@ template<typename... Args>
-

Definition at line 145 of file logger_impl.h.

+

Definition at line 145 of file logger_impl.h.

- -

◆ trace() [2/2]

- +
@@ -1662,13 +1596,11 @@ template<typename T>
-

Definition at line 181 of file logger_impl.h.

+

Definition at line 181 of file logger_impl.h.

- -

◆ warn() [1/2]

- +
@@ -1702,13 +1634,11 @@ template<typename... Args>
-

Definition at line 163 of file logger_impl.h.

+

Definition at line 163 of file logger_impl.h.

- -

◆ warn() [2/2]

- +
@@ -1732,14 +1662,12 @@ template<typename T>
-

Definition at line 199 of file logger_impl.h.

+

Definition at line 199 of file logger_impl.h.

Member Data Documentation

- -

◆ err_handler_

- +
@@ -1757,13 +1685,11 @@ template<typename T>
-

Definition at line 177 of file logger.h.

+

Definition at line 177 of file logger.h.

- -

◆ flush_level_

- +
@@ -1781,13 +1707,11 @@ template<typename T>
-

Definition at line 176 of file logger.h.

+

Definition at line 176 of file logger.h.

- -

◆ last_err_time_

- +
@@ -1805,13 +1729,11 @@ template<typename T>
-

Definition at line 178 of file logger.h.

+

Definition at line 178 of file logger.h.

- -

◆ level_

- +
@@ -1829,13 +1751,11 @@ template<typename T>
-

Definition at line 175 of file logger.h.

+

Definition at line 175 of file logger.h.

- -

◆ msg_counter_

- +
@@ -1853,13 +1773,11 @@ template<typename T>
-

Definition at line 179 of file logger.h.

+

Definition at line 179 of file logger.h.

- -

◆ name_

- +
@@ -1877,13 +1795,11 @@ template<typename T>
-

Definition at line 173 of file logger.h.

+

Definition at line 173 of file logger.h.

- -

◆ sinks_

- +
@@ -1901,7 +1817,7 @@ template<typename T>
-

Definition at line 174 of file logger.h.

+

Definition at line 174 of file logger.h.

@@ -1917,7 +1833,7 @@ template<typename T>
+ doxygen 1.8.11
diff --git a/docs/classspdlog_1_1logger.js b/docs/classspdlog_1_1logger.js index 1747e94..23196e3 100644 --- a/docs/classspdlog_1_1logger.js +++ b/docs/classspdlog_1_1logger.js @@ -6,44 +6,44 @@ var classspdlog_1_1logger = [ "~logger", "classspdlog_1_1logger.html#a3691352a0a61bcba0bf3fb32d236bce5", null ], [ "logger", "classspdlog_1_1logger.html#aa6074d763b0df4e7d16ccf7d307a3938", null ], [ "clone", "classspdlog_1_1logger.html#a649a3c1a1b380e2488a93f9c3ae694de", null ], - [ "critical", "classspdlog_1_1logger.html#a3d11416764fe7ead94868d4c6438f583", null ], + [ "critical", "classspdlog_1_1logger.html#af5194daad87b79f4bc3d298ad5a3eb08", null ], [ "critical", "classspdlog_1_1logger.html#a3c5140393ec153b2b8478361aac80eb6", null ], - [ "debug", "classspdlog_1_1logger.html#a1f60afc8308e0127c2eab2619ae352d5", null ], + [ "debug", "classspdlog_1_1logger.html#abccd1b923dcc02f7ab27bddc62d249e4", null ], [ "debug", "classspdlog_1_1logger.html#aca96637e71ab459738ccc7287be28c2e", null ], [ "default_err_handler_", "classspdlog_1_1logger.html#a3432e21bdc19d74024b57cc3f26a8471", null ], [ "default_level", "classspdlog_1_1logger.html#a0d0307a6501a9f56689c386a006991fe", null ], - [ "error", "classspdlog_1_1logger.html#a144338f88fd2d2bec2cae951e214a9a5", null ], + [ "error", "classspdlog_1_1logger.html#a0ffb0e950bd4ed068ee8a29e83efd304", null ], [ "error", "classspdlog_1_1logger.html#a9ce73acaa12b7dbbecde6ac3bc7353e5", null ], - [ "error_handler", "classspdlog_1_1logger.html#ac6c864952112a3bbe4084884cc1d64a1", null ], + [ "error_handler", "classspdlog_1_1logger.html#adbcb6adc49ff0b3dba74d196cf6e125e", null ], [ "flush", "classspdlog_1_1logger.html#a861bb4d4e65de07966148822075bee86", null ], [ "flush_", "classspdlog_1_1logger.html#a98981b19089a6000fdfa8765af52ef0e", null ], - [ "flush_level", "classspdlog_1_1logger.html#a1b9b7304f017163d181692e41101b648", null ], + [ "flush_level", "classspdlog_1_1logger.html#a459eb73410f80e574fb3688d2c6e39e0", null ], [ "flush_on", "classspdlog_1_1logger.html#a47c021d339c1f246758e1a87a41668e3", null ], [ "incr_msg_counter_", "classspdlog_1_1logger.html#a55bf9c5c960391a56399b5f1ea601b4b", null ], - [ "info", "classspdlog_1_1logger.html#a72f80c2e379df565c628adab1efdab34", null ], + [ "info", "classspdlog_1_1logger.html#ab9862f48bf0a87b8f3532d36d404235a", null ], [ "info", "classspdlog_1_1logger.html#a1e1dff0caa0d1bf072739dfcc1e331d8", null ], - [ "level", "classspdlog_1_1logger.html#a20dc8198d08c98f84ae10be635108bef", null ], - [ "log", "classspdlog_1_1logger.html#a1e4b2c515490efb5456665a9a64382d9", null ], + [ "level", "classspdlog_1_1logger.html#a6fdaf38b46b34772ffa728e8faa3e857", null ], + [ "log", "classspdlog_1_1logger.html#a5149c7b8c1ac8aeedbeba779b0e0cfb7", null ], + [ "log", "classspdlog_1_1logger.html#a92c2697af57b0f2b98effdcc06f130a1", null ], [ "log", "classspdlog_1_1logger.html#ae59d1c2d5b3a4cc4807534c73b46f297", null ], - [ "log", "classspdlog_1_1logger.html#a16d3d178ac86ea71b8a0becfca0c5449", null ], - [ "log", "classspdlog_1_1logger.html#a50417cea5f81704cd4800aaafa944bc5", null ], [ "log", "classspdlog_1_1logger.html#abf7d5c94e0c295aa2e55e1139b787a57", null ], + [ "log", "classspdlog_1_1logger.html#a16d3d178ac86ea71b8a0becfca0c5449", null ], [ "log", "classspdlog_1_1logger.html#a4ad269959d007dcbe38cdb3c4e70d85b", null ], [ "log", "classspdlog_1_1logger.html#a4ad269959d007dcbe38cdb3c4e70d85b", null ], - [ "name", "classspdlog_1_1logger.html#ac7c6ed0f30ace90402254dc2d3ef1453", null ], + [ "name", "classspdlog_1_1logger.html#a965147f4736d658065f8ba6e923c1c47", null ], [ "operator=", "classspdlog_1_1logger.html#afd373cd857f49de170d9a23f1dd34bc0", null ], [ "set_error_handler", "classspdlog_1_1logger.html#aeeb9d71caa8f357f4255447fb72135d3", null ], [ "set_formatter", "classspdlog_1_1logger.html#a9c5b880ddf9a9c86ec9893364e57071d", null ], [ "set_level", "classspdlog_1_1logger.html#a403ccd4cd1bc85c6ba6b1517c37726c7", null ], [ "set_pattern", "classspdlog_1_1logger.html#a0f61c15b955775652da9b2b813d9f3cd", null ], [ "should_flush_", "classspdlog_1_1logger.html#aa1bbe703cdeed2aef722a97a2bc1a800", null ], - [ "should_log", "classspdlog_1_1logger.html#a94c77395570c462953ded4188aaaf655", null ], + [ "should_log", "classspdlog_1_1logger.html#a7eff315349d73af6216fa3192fb6b907", null ], [ "sink_it_", "classspdlog_1_1logger.html#a43ac8d73671a109cba253eadb0b049e2", null ], + [ "sinks", "classspdlog_1_1logger.html#a59a64487a6c9714d2f7c70b5e094711b", null ], [ "sinks", "classspdlog_1_1logger.html#a7d93aa2653b924f2c9981d026aea9822", null ], - [ "sinks", "classspdlog_1_1logger.html#a00c27f251b795caf028718b605572e1f", null ], - [ "trace", "classspdlog_1_1logger.html#a59a8516fe055c6b78c9b1822148f78ec", null ], + [ "trace", "classspdlog_1_1logger.html#ad40c4deed02014ba07bd45d216808cb8", null ], [ "trace", "classspdlog_1_1logger.html#a66e008d30a46c33283c4546f3851a80a", null ], - [ "warn", "classspdlog_1_1logger.html#aa1027cf4e4d6fd7fcf361534affe7bdc", null ], + [ "warn", "classspdlog_1_1logger.html#a0382864b4285f133aea148baf896bbba", null ], [ "warn", "classspdlog_1_1logger.html#af9153fa3a0735a535ea56f684dc53256", null ], [ "err_handler_", "classspdlog_1_1logger.html#a3e623bd54bd38315f66063ae8907ce17", null ], [ "flush_level_", "classspdlog_1_1logger.html#a69f7cbb7e1b2d5204a409906a62c1e94", null ], diff --git a/docs/classspdlog_1_1pattern__formatter-members.html b/docs/classspdlog_1_1pattern__formatter-members.html index 8a59849..f46133f 100644 --- a/docs/classspdlog_1_1pattern__formatter-members.html +++ b/docs/classspdlog_1_1pattern__formatter-members.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Member List @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -108,7 +128,7 @@ $(document).ready(function(){initNavTree('classspdlog_1_1pattern__formatter.html
    + doxygen 1.8.11
diff --git a/docs/classspdlog_1_1pattern__formatter.html b/docs/classspdlog_1_1pattern__formatter.html index 2383da1..bfbce4b 100644 --- a/docs/classspdlog_1_1pattern__formatter.html +++ b/docs/classspdlog_1_1pattern__formatter.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: spdlog::pattern_formatter Class Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -101,16 +121,16 @@ Inheritance diagram for spdlog::pattern_formatter:
- + spdlog::formatter - -
+ + - + - + @@ -126,11 +146,9 @@ Public Member Functions

Public Member Functions

 pattern_formatter (std::string pattern, pattern_time_type time_type=pattern_time_type::local, std::string eol=spdlog::details::os::default_eol)
 pattern_formatter (std::string pattern, pattern_time_type time_type=pattern_time_type::local, std::string eol=spdlog::details::os::default_eol)
 
 pattern_formatter (pattern_time_type time_type=pattern_time_type::local, std::string eol=spdlog::details::os::default_eol)
 pattern_formatter (pattern_time_type time_type=pattern_time_type::local, std::string eol=spdlog::details::os::default_eol)
 
 pattern_formatter (const pattern_formatter &other)=delete
 

Detailed Description

-

Definition at line 1014 of file pattern_formatter.h.

+

Definition at line 1014 of file pattern_formatter.h.

Constructor & Destructor Documentation

- -

◆ pattern_formatter() [1/3]

- +
@@ -153,7 +171,7 @@ Public Member Functions - + @@ -168,13 +186,11 @@ Public Member Functions
std::string eol = spdlog::details::os::default_eol eol = spdlog::details::os::default_eol 
-

Definition at line 1017 of file pattern_formatter.h.

+

Definition at line 1017 of file pattern_formatter.h.

- -

◆ pattern_formatter() [2/3]

- +
@@ -191,7 +207,7 @@ Public Member Functions - + @@ -206,13 +222,11 @@ Public Member Functions
std::string eol = spdlog::details::os::default_eol eol = spdlog::details::os::default_eol 
-

Definition at line 1029 of file pattern_formatter.h.

+

Definition at line 1029 of file pattern_formatter.h.

- -

◆ pattern_formatter() [3/3]

- +
@@ -237,9 +251,7 @@ Public Member Functions

Member Function Documentation

- -

◆ clone()

- +
@@ -262,13 +274,11 @@ Public Member Functions

Implements spdlog::formatter.

-

Definition at line 1042 of file pattern_formatter.h.

+

Definition at line 1042 of file pattern_formatter.h.

- -

◆ format()

- +
@@ -302,13 +312,11 @@ Public Member Functions

Implements spdlog::formatter.

-

Definition at line 1047 of file pattern_formatter.h.

+

Definition at line 1047 of file pattern_formatter.h.

- -

◆ operator=()

- +
@@ -343,7 +351,7 @@ Public Member Functions + doxygen 1.8.11 diff --git a/docs/classspdlog_1_1sinks_1_1android__sink-members.html b/docs/classspdlog_1_1sinks_1_1android__sink-members.html index f938606..f2828b2 100644 --- a/docs/classspdlog_1_1sinks_1_1android__sink-members.html +++ b/docs/classspdlog_1_1sinks_1_1android__sink-members.html @@ -1,10 +1,9 @@ - + - - +Livox SDK API: Member List @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ @@ -39,22 +41,42 @@
Livox SDK API -  V2.0.0 +  V2.1.0
- + - - - - + +
@@ -100,7 +120,7 @@ $(document).ready(function(){initNavTree('classspdlog_1_1sinks_1_1android__sink. flush() finalspdlog::sinks::base_sink< Mutex >inlinevirtual flush_() overridespdlog::sinks::android_sink< Mutex >inlineprotectedvirtual formatter_spdlog::sinks::sinkprotected - level() constspdlog::sinks::sinkinline + level() const spdlog::sinks::sinkinline level_spdlog::sinks::sinkprotected log(const details::log_msg &msg) finalspdlog::sinks::base_sink< Mutex >inlinevirtual mutex_spdlog::sinks::base_sink< Mutex >protected @@ -110,7 +130,7 @@ $(document).ready(function(){initNavTree('classspdlog_1_1sinks_1_1android__sink. set_level(level::level_enum log_level)spdlog::sinks::sinkinline set_pattern(const std::string &pattern) finalspdlog::sinks::base_sink< Mutex >inlinevirtual set_pattern_(const std::string &pattern)spdlog::sinks::base_sink< Mutex >inlineprotectedvirtual - should_log(level::level_enum msg_level) constspdlog::sinks::sinkinline + should_log(level::level_enum msg_level) const spdlog::sinks::sinkinline sink()=defaultspdlog::sinks::sink sink(std::unique_ptr< spdlog::formatter > formatter)spdlog::sinks::sinkinlineexplicit sink_it_(const details::log_msg &msg) overridespdlog::sinks::android_sink< Mutex >inlineprotectedvirtual @@ -122,7 +142,7 @@ $(document).ready(function(){initNavTree('classspdlog_1_1sinks_1_1android__sink.
    + doxygen 1.8.11
diff --git a/docs/classspdlog_1_1sinks_1_1android__sink.html b/docs/classspdlog_1_1sinks_1_1android__sink.html index ceb5ff3..ca0d8ff 100644 --- a/docs/classspdlog_1_1sinks_1_1android__sink.html +++ b/docs/classspdlog_1_1sinks_1_1android__sink.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: spdlog::sinks::android_sink< Mutex > Class Template Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -102,11 +122,11 @@ Inheritance diagram for spdlog::sinks::android_sink< Mutex >:
- + spdlog::sinks::base_sink< Mutex > spdlog::sinks::sink - -
+ + @@ -134,12 +154,12 @@ Public Member Functions - - + + - - + +

Public Member Functions

 
virtual ~sink ()=default
 
bool should_log (level::level_enum msg_level) const
 
bool should_log (level::level_enum msg_level) const
 
void set_level (level::level_enum log_level)
 
level::level_enum level () const
 
level::level_enum level () const
 
@@ -161,7 +181,7 @@ Additional Inherited Members - +

Protected Member Functions

- Protected Attributes inherited from spdlog::sinks::sink
level_t level_ {level::trace}
 
std::unique_ptr< spdlog::formatterformatter_ {details::make_unique<spdlog::pattern_formatter>()}
std::unique_ptr< spdlog::formatterformatter_ {details::make_unique<spdlog::pattern_formatter>()}
 

Detailed Description

@@ -169,11 +189,9 @@ Additional Inherited Members class spdlog::sinks::android_sink< Mutex > -

Definition at line 34 of file android_sink.h.

+

Definition at line 34 of file android_sink.h.

Constructor & Destructor Documentation

- -

◆ android_sink()

- +
@@ -207,14 +225,12 @@ template<typename Mutex >
-

Definition at line 37 of file android_sink.h.

+

Definition at line 37 of file android_sink.h.

Member Function Documentation

- -

◆ flush_()

- +
@@ -239,13 +255,11 @@ template<typename Mutex >

Implements spdlog::sinks::base_sink< Mutex >.

-

Definition at line 75 of file android_sink.h.

+

Definition at line 75 of file android_sink.h.

- -

◆ sink_it_()

- +
@@ -271,7 +285,7 @@ template<typename Mutex >

Implements spdlog::sinks::base_sink< Mutex >.

-

Definition at line 44 of file android_sink.h.

+

Definition at line 44 of file android_sink.h.

@@ -286,7 +300,7 @@ template<typename Mutex > + doxygen 1.8.11 diff --git a/docs/classspdlog_1_1sinks_1_1ansicolor__sink-members.html b/docs/classspdlog_1_1sinks_1_1ansicolor__sink-members.html index 3b90976..00ebfa2 100644 --- a/docs/classspdlog_1_1sinks_1_1ansicolor__sink-members.html +++ b/docs/classspdlog_1_1sinks_1_1ansicolor__sink-members.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Member List @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -107,7 +127,7 @@ $(document).ready(function(){initNavTree('classspdlog_1_1sinks_1_1ansicolor__sin flush() overridespdlog::sinks::ansicolor_sink< TargetStream, ConsoleMutex >inlinevirtual formatter_spdlog::sinks::sinkprotected greenspdlog::sinks::ansicolor_sink< TargetStream, ConsoleMutex > - level() constspdlog::sinks::sinkinline + level() const spdlog::sinks::sinkinline level_spdlog::sinks::sinkprotected log(const details::log_msg &msg) overridespdlog::sinks::ansicolor_sink< TargetStream, ConsoleMutex >inlinevirtual magentaspdlog::sinks::ansicolor_sink< TargetStream, ConsoleMutex > @@ -129,7 +149,7 @@ $(document).ready(function(){initNavTree('classspdlog_1_1sinks_1_1ansicolor__sin set_level(level::level_enum log_level)spdlog::sinks::sinkinline set_pattern(const std::string &pattern) finalspdlog::sinks::ansicolor_sink< TargetStream, ConsoleMutex >inlinevirtual should_color()spdlog::sinks::ansicolor_sink< TargetStream, ConsoleMutex >inline - should_log(level::level_enum msg_level) constspdlog::sinks::sinkinline + should_log(level::level_enum msg_level) const spdlog::sinks::sinkinline sink()=defaultspdlog::sinks::sink sink(std::unique_ptr< spdlog::formatter > formatter)spdlog::sinks::sinkinlineexplicit underlinespdlog::sinks::ansicolor_sink< TargetStream, ConsoleMutex > @@ -144,7 +164,7 @@ $(document).ready(function(){initNavTree('classspdlog_1_1sinks_1_1ansicolor__sin
    + doxygen 1.8.11
diff --git a/docs/classspdlog_1_1sinks_1_1ansicolor__sink.html b/docs/classspdlog_1_1sinks_1_1ansicolor__sink.html index a6dbc7b..715ca4d 100644 --- a/docs/classspdlog_1_1sinks_1_1ansicolor__sink.html +++ b/docs/classspdlog_1_1sinks_1_1ansicolor__sink.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: spdlog::sinks::ansicolor_sink< TargetStream, ConsoleMutex > Class Template Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -103,10 +123,10 @@ Inheritance diagram for spdlog::sinks::ansicolor_sink< TargetStream, ConsoleM
- + spdlog::sinks::sink - -
+ +
@@ -142,17 +162,17 @@ Public Member Functions - - + + - - + +

Public Types

 
virtual ~sink ()=default
 
bool should_log (level::level_enum msg_level) const
 
bool should_log (level::level_enum msg_level) const
 
void set_level (level::level_enum log_level)
 
level::level_enum level () const
 
level::level_enum level () const
 
- + @@ -185,7 +205,7 @@ Public Attributes - + @@ -207,7 +227,7 @@ Additional Inherited Members - +

Public Attributes

const std::string reset = "\033[m"
 Formatting codes. More...
 Formatting codes. More...
 
const std::string bold = "\033[1m"
 
const std::string white = "\033[37m"
 
const std::string on_black = "\033[40m"
 Background colors. More...
 Background colors. More...
 
const std::string on_red = "\033[41m"
 
- Protected Attributes inherited from spdlog::sinks::sink
level_t level_ {level::trace}
 
std::unique_ptr< spdlog::formatterformatter_ {details::make_unique<spdlog::pattern_formatter>()}
std::unique_ptr< spdlog::formatterformatter_ {details::make_unique<spdlog::pattern_formatter>()}
 

Detailed Description

@@ -216,11 +236,9 @@ class spdlog::sinks::ansicolor_sink< TargetStream, ConsoleMutex >

This sink prefixes the output with an ANSI escape sequence color code depending on the severity of the message. If no color terminal detected, omit the escape codes.

-

Definition at line 32 of file ansicolor_sink.h.

+

Definition at line 32 of file ansicolor_sink.h.

Member Typedef Documentation

- -

◆ mutex_t

- +
@@ -232,14 +250,12 @@ template<typename TargetStream , class ConsoleMutex >
-

Definition at line 35 of file ansicolor_sink.h.

+

Definition at line 35 of file ansicolor_sink.h.

Constructor & Destructor Documentation

- -

◆ ansicolor_sink() [1/2]

- +
@@ -262,13 +278,11 @@ template<typename TargetStream , class ConsoleMutex >
-

Definition at line 36 of file ansicolor_sink.h.

+

Definition at line 36 of file ansicolor_sink.h.

- -

◆ ~ansicolor_sink()

- +
@@ -293,9 +307,7 @@ template<typename TargetStream , class ConsoleMutex >
- -

◆ ansicolor_sink() [2/2]

- +
@@ -322,9 +334,7 @@ template<typename TargetStream , class ConsoleMutex >

Member Function Documentation

- -

◆ flush()

- +
@@ -349,13 +359,11 @@ template<typename TargetStream , class ConsoleMutex >

Implements spdlog::sinks::sink.

-

Definition at line 118 of file ansicolor_sink.h.

+

Definition at line 118 of file ansicolor_sink.h.

- -

◆ log()

- +
@@ -381,13 +389,11 @@ template<typename TargetStream , class ConsoleMutex >

Implements spdlog::sinks::sink.

-

Definition at line 92 of file ansicolor_sink.h.

+

Definition at line 92 of file ansicolor_sink.h.

- -

◆ operator=()

- +
@@ -413,9 +419,7 @@ template<typename TargetStream , class ConsoleMutex >
- -

◆ set_color()

- +
@@ -449,13 +453,11 @@ template<typename TargetStream , class ConsoleMutex >
-

Definition at line 56 of file ansicolor_sink.h.

+

Definition at line 56 of file ansicolor_sink.h.

- -

◆ set_formatter()

- +
@@ -481,13 +483,11 @@ template<typename TargetStream , class ConsoleMutex >

Implements spdlog::sinks::sink.

-

Definition at line 130 of file ansicolor_sink.h.

+

Definition at line 130 of file ansicolor_sink.h.

- -

◆ set_pattern()

- +
@@ -513,13 +513,11 @@ template<typename TargetStream , class ConsoleMutex >

Implements spdlog::sinks::sink.

-

Definition at line 124 of file ansicolor_sink.h.

+

Definition at line 124 of file ansicolor_sink.h.

- -

◆ should_color()

- +
@@ -542,14 +540,12 @@ template<typename TargetStream , class ConsoleMutex >
-

Definition at line 136 of file ansicolor_sink.h.

+

Definition at line 136 of file ansicolor_sink.h.

Member Data Documentation

- -

◆ black

- +
@@ -561,13 +557,11 @@ template<typename TargetStream , class ConsoleMutex >
-

Definition at line 73 of file ansicolor_sink.h.

+

Definition at line 73 of file ansicolor_sink.h.

- -

◆ blink

- +
@@ -579,13 +573,11 @@ template<typename TargetStream , class ConsoleMutex >
-

Definition at line 67 of file ansicolor_sink.h.

+

Definition at line 67 of file ansicolor_sink.h.

- -

◆ blue

- +
@@ -597,13 +589,11 @@ template<typename TargetStream , class ConsoleMutex >
-

Definition at line 77 of file ansicolor_sink.h.

+

Definition at line 77 of file ansicolor_sink.h.

- -

◆ bold

- +
@@ -615,13 +605,11 @@ template<typename TargetStream , class ConsoleMutex >
-

Definition at line 64 of file ansicolor_sink.h.

+

Definition at line 64 of file ansicolor_sink.h.

- -

◆ clear_line

- +
@@ -633,13 +621,11 @@ template<typename TargetStream , class ConsoleMutex >
-

Definition at line 70 of file ansicolor_sink.h.

+

Definition at line 70 of file ansicolor_sink.h.

- -

◆ concealed

- +
@@ -651,13 +637,11 @@ template<typename TargetStream , class ConsoleMutex >
-

Definition at line 69 of file ansicolor_sink.h.

+

Definition at line 69 of file ansicolor_sink.h.

- -

◆ cyan

- +
@@ -669,13 +653,11 @@ template<typename TargetStream , class ConsoleMutex >
-

Definition at line 79 of file ansicolor_sink.h.

+

Definition at line 79 of file ansicolor_sink.h.

- -

◆ dark

- +
@@ -687,13 +669,11 @@ template<typename TargetStream , class ConsoleMutex >
-

Definition at line 65 of file ansicolor_sink.h.

+

Definition at line 65 of file ansicolor_sink.h.

- -

◆ green

- +
@@ -705,13 +685,11 @@ template<typename TargetStream , class ConsoleMutex >
-

Definition at line 75 of file ansicolor_sink.h.

+

Definition at line 75 of file ansicolor_sink.h.

- -

◆ magenta

- +
@@ -723,13 +701,11 @@ template<typename TargetStream , class ConsoleMutex >
-

Definition at line 78 of file ansicolor_sink.h.

+

Definition at line 78 of file ansicolor_sink.h.

- -

◆ on_black

- +
@@ -743,13 +719,11 @@ template<typename TargetStream , class ConsoleMutex >

Background colors.

-

Definition at line 83 of file ansicolor_sink.h.

+

Definition at line 83 of file ansicolor_sink.h.

- -

◆ on_blue

- +
@@ -761,13 +735,11 @@ template<typename TargetStream , class ConsoleMutex >
-

Definition at line 87 of file ansicolor_sink.h.

+

Definition at line 87 of file ansicolor_sink.h.

- -

◆ on_cyan

- +
@@ -779,13 +751,11 @@ template<typename TargetStream , class ConsoleMutex >
-

Definition at line 89 of file ansicolor_sink.h.

+

Definition at line 89 of file ansicolor_sink.h.

- -

◆ on_green

- +
@@ -797,13 +767,11 @@ template<typename TargetStream , class ConsoleMutex >
-

Definition at line 85 of file ansicolor_sink.h.

+

Definition at line 85 of file ansicolor_sink.h.

- -

◆ on_magenta

- +
@@ -815,13 +783,11 @@ template<typename TargetStream , class ConsoleMutex >
-

Definition at line 88 of file ansicolor_sink.h.

+

Definition at line 88 of file ansicolor_sink.h.

- -

◆ on_red

- +
@@ -833,13 +799,11 @@ template<typename TargetStream , class ConsoleMutex >
-

Definition at line 84 of file ansicolor_sink.h.

+

Definition at line 84 of file ansicolor_sink.h.

- -

◆ on_white

- +
@@ -851,13 +815,11 @@ template<typename TargetStream , class ConsoleMutex >
-

Definition at line 90 of file ansicolor_sink.h.

+

Definition at line 90 of file ansicolor_sink.h.

- -

◆ on_yellow

- +
@@ -869,13 +831,11 @@ template<typename TargetStream , class ConsoleMutex >
-

Definition at line 86 of file ansicolor_sink.h.

+

Definition at line 86 of file ansicolor_sink.h.

- -

◆ red

- +
@@ -887,13 +847,11 @@ template<typename TargetStream , class ConsoleMutex >
-

Definition at line 74 of file ansicolor_sink.h.

+

Definition at line 74 of file ansicolor_sink.h.

- -

◆ reset

- +
@@ -907,13 +865,11 @@ template<typename TargetStream , class ConsoleMutex >

Formatting codes.

-

Definition at line 63 of file ansicolor_sink.h.

+

Definition at line 63 of file ansicolor_sink.h.

- -

◆ reverse

- +
@@ -925,13 +881,11 @@ template<typename TargetStream , class ConsoleMutex >
-

Definition at line 68 of file ansicolor_sink.h.

+

Definition at line 68 of file ansicolor_sink.h.

- -

◆ underline

- +
@@ -943,13 +897,11 @@ template<typename TargetStream , class ConsoleMutex >
-

Definition at line 66 of file ansicolor_sink.h.

+

Definition at line 66 of file ansicolor_sink.h.

- -

◆ white

- +
@@ -961,13 +913,11 @@ template<typename TargetStream , class ConsoleMutex >
-

Definition at line 80 of file ansicolor_sink.h.

+

Definition at line 80 of file ansicolor_sink.h.

- -

◆ yellow

- +
@@ -979,7 +929,7 @@ template<typename TargetStream , class ConsoleMutex >
-

Definition at line 76 of file ansicolor_sink.h.

+

Definition at line 76 of file ansicolor_sink.h.

@@ -994,7 +944,7 @@ template<typename TargetStream , class ConsoleMutex > + doxygen 1.8.11 diff --git a/docs/classspdlog_1_1sinks_1_1base__sink-members.html b/docs/classspdlog_1_1sinks_1_1base__sink-members.html index 04a1505..c3d7bcc 100644 --- a/docs/classspdlog_1_1sinks_1_1base__sink-members.html +++ b/docs/classspdlog_1_1sinks_1_1base__sink-members.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Member List @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -99,7 +119,7 @@ $(document).ready(function(){initNavTree('classspdlog_1_1sinks_1_1base__sink.htm flush() finalspdlog::sinks::base_sink< Mutex >inlinevirtual flush_()=0spdlog::sinks::base_sink< Mutex >protectedpure virtual formatter_spdlog::sinks::sinkprotected - level() constspdlog::sinks::sinkinline + level() const spdlog::sinks::sinkinline level_spdlog::sinks::sinkprotected log(const details::log_msg &msg) finalspdlog::sinks::base_sink< Mutex >inlinevirtual mutex_spdlog::sinks::base_sink< Mutex >protected @@ -109,7 +129,7 @@ $(document).ready(function(){initNavTree('classspdlog_1_1sinks_1_1base__sink.htm set_level(level::level_enum log_level)spdlog::sinks::sinkinline set_pattern(const std::string &pattern) finalspdlog::sinks::base_sink< Mutex >inlinevirtual set_pattern_(const std::string &pattern)spdlog::sinks::base_sink< Mutex >inlineprotectedvirtual - should_log(level::level_enum msg_level) constspdlog::sinks::sinkinline + should_log(level::level_enum msg_level) const spdlog::sinks::sinkinline sink()=defaultspdlog::sinks::sink sink(std::unique_ptr< spdlog::formatter > formatter)spdlog::sinks::sinkinlineexplicit sink_it_(const details::log_msg &msg)=0spdlog::sinks::base_sink< Mutex >protectedpure virtual @@ -121,7 +141,7 @@ $(document).ready(function(){initNavTree('classspdlog_1_1sinks_1_1base__sink.htm
    + doxygen 1.8.11
diff --git a/docs/classspdlog_1_1sinks_1_1base__sink.html b/docs/classspdlog_1_1sinks_1_1base__sink.html index 30d8328..5f71830 100644 --- a/docs/classspdlog_1_1sinks_1_1base__sink.html +++ b/docs/classspdlog_1_1sinks_1_1base__sink.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: spdlog::sinks::base_sink< Mutex > Class Template Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -103,7 +123,7 @@ Inheritance diagram for spdlog::sinks::base_sink< Mutex >:
- + spdlog::sinks::sink spdlog::sinks::android_sink< Mutex > spdlog::sinks::basic_file_sink< Mutex > @@ -113,8 +133,8 @@ Inheritance diagram for spdlog::sinks::base_sink< Mutex >:
spdlog::sinks::ostream_sink< Mutex > spdlog::sinks::rotating_file_sink< Mutex > spdlog::sinks::syslog_sink< Mutex > - -
+ + @@ -139,12 +159,12 @@ Public Member Functions - - + + - - + +

Public Member Functions

 
virtual ~sink ()=default
 
bool should_log (level::level_enum msg_level) const
 
bool should_log (level::level_enum msg_level) const
 
void set_level (level::level_enum log_level)
 
level::level_enum level () const
 
level::level_enum level () const
 
@@ -164,7 +184,7 @@ Protected Attributes - +

Protected Member Functions

- Protected Attributes inherited from spdlog::sinks::sink
level_t level_ {level::trace}
 
std::unique_ptr< spdlog::formatterformatter_ {details::make_unique<spdlog::pattern_formatter>()}
std::unique_ptr< spdlog::formatterformatter_ {details::make_unique<spdlog::pattern_formatter>()}
 

Detailed Description

@@ -172,11 +192,9 @@ Protected Attributes class spdlog::sinks::base_sink< Mutex > -

Definition at line 22 of file base_sink.h.

+

Definition at line 22 of file base_sink.h.

Constructor & Destructor Documentation

- -

◆ base_sink() [1/2]

- +
@@ -201,9 +219,7 @@ template<typename Mutex >
- -

◆ base_sink() [2/2]

- +
@@ -230,9 +246,7 @@ template<typename Mutex >

Member Function Documentation

- -

◆ flush()

- +
@@ -257,13 +271,11 @@ template<typename Mutex >

Implements spdlog::sinks::sink.

-

Definition at line 35 of file base_sink.h.

+

Definition at line 35 of file base_sink.h.

- -

◆ flush_()

- +
@@ -290,9 +302,7 @@ template<typename Mutex >
- -

◆ log()

- +
@@ -318,13 +328,11 @@ template<typename Mutex >

Implements spdlog::sinks::sink.

-

Definition at line 29 of file base_sink.h.

+

Definition at line 29 of file base_sink.h.

- -

◆ operator=()

- +
@@ -350,9 +358,7 @@ template<typename Mutex >
- -

◆ set_formatter()

- +
@@ -378,13 +384,11 @@ template<typename Mutex >

Implements spdlog::sinks::sink.

-

Definition at line 47 of file base_sink.h.

+

Definition at line 47 of file base_sink.h.

- -

◆ set_formatter_()

- +
@@ -410,13 +414,11 @@ template<typename Mutex >

Reimplemented in spdlog::sinks::dist_sink< Mutex >.

-

Definition at line 62 of file base_sink.h.

+

Definition at line 62 of file base_sink.h.

- -

◆ set_pattern()

- +
@@ -442,13 +444,11 @@ template<typename Mutex >

Implements spdlog::sinks::sink.

-

Definition at line 41 of file base_sink.h.

+

Definition at line 41 of file base_sink.h.

- -

◆ set_pattern_()

- +
@@ -474,13 +474,11 @@ template<typename Mutex >

Reimplemented in spdlog::sinks::dist_sink< Mutex >.

-

Definition at line 57 of file base_sink.h.

+

Definition at line 57 of file base_sink.h.

- -

◆ sink_it_()

- +
@@ -509,9 +507,7 @@ template<typename Mutex >

Member Data Documentation

- -

◆ mutex_

- +
@@ -531,7 +527,7 @@ template<typename Mutex >
-

Definition at line 66 of file base_sink.h.

+

Definition at line 66 of file base_sink.h.

@@ -546,7 +542,7 @@ template<typename Mutex > + doxygen 1.8.11 diff --git a/docs/classspdlog_1_1sinks_1_1basic__file__sink-members.html b/docs/classspdlog_1_1sinks_1_1basic__file__sink-members.html index 63543f9..a892f39 100644 --- a/docs/classspdlog_1_1sinks_1_1basic__file__sink-members.html +++ b/docs/classspdlog_1_1sinks_1_1basic__file__sink-members.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Member List @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -97,11 +117,11 @@ $(document).ready(function(){initNavTree('classspdlog_1_1sinks_1_1basic__file__s base_sink()=defaultspdlog::sinks::base_sink< Mutex > base_sink(const base_sink &)=deletespdlog::sinks::base_sink< Mutex > basic_file_sink(const filename_t &filename, bool truncate=false)spdlog::sinks::basic_file_sink< Mutex >inlineexplicit - filename() constspdlog::sinks::basic_file_sink< Mutex >inline + filename() const spdlog::sinks::basic_file_sink< Mutex >inline flush() finalspdlog::sinks::base_sink< Mutex >inlinevirtual flush_() overridespdlog::sinks::basic_file_sink< Mutex >inlineprotectedvirtual formatter_spdlog::sinks::sinkprotected - level() constspdlog::sinks::sinkinline + level() const spdlog::sinks::sinkinline level_spdlog::sinks::sinkprotected log(const details::log_msg &msg) finalspdlog::sinks::base_sink< Mutex >inlinevirtual mutex_spdlog::sinks::base_sink< Mutex >protected @@ -111,7 +131,7 @@ $(document).ready(function(){initNavTree('classspdlog_1_1sinks_1_1basic__file__s set_level(level::level_enum log_level)spdlog::sinks::sinkinline set_pattern(const std::string &pattern) finalspdlog::sinks::base_sink< Mutex >inlinevirtual set_pattern_(const std::string &pattern)spdlog::sinks::base_sink< Mutex >inlineprotectedvirtual - should_log(level::level_enum msg_level) constspdlog::sinks::sinkinline + should_log(level::level_enum msg_level) const spdlog::sinks::sinkinline sink()=defaultspdlog::sinks::sink sink(std::unique_ptr< spdlog::formatter > formatter)spdlog::sinks::sinkinlineexplicit sink_it_(const details::log_msg &msg) overridespdlog::sinks::basic_file_sink< Mutex >inlineprotectedvirtual @@ -123,7 +143,7 @@ $(document).ready(function(){initNavTree('classspdlog_1_1sinks_1_1basic__file__s
    + doxygen 1.8.11
diff --git a/docs/classspdlog_1_1sinks_1_1basic__file__sink.html b/docs/classspdlog_1_1sinks_1_1basic__file__sink.html index eaa2361..3b3e31c 100644 --- a/docs/classspdlog_1_1sinks_1_1basic__file__sink.html +++ b/docs/classspdlog_1_1sinks_1_1basic__file__sink.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: spdlog::sinks::basic_file_sink< Mutex > Class Template Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -102,18 +122,18 @@ Inheritance diagram for spdlog::sinks::basic_file_sink< Mutex >:
- + spdlog::sinks::base_sink< Mutex > spdlog::sinks::sink - -
+ + - + - - + + @@ -136,12 +156,12 @@ Public Member Functions - - + + - - + +

Public Member Functions

 basic_file_sink (const filename_t &filename, bool truncate=false)
 basic_file_sink (const filename_t &filename, bool truncate=false)
 
const filename_tfilename () const
 
const filename_tfilename () const
 
- Public Member Functions inherited from spdlog::sinks::base_sink< Mutex >
 base_sink ()=default
 
 
virtual ~sink ()=default
 
bool should_log (level::level_enum msg_level) const
 
bool should_log (level::level_enum msg_level) const
 
void set_level (level::level_enum log_level)
 
level::level_enum level () const
 
level::level_enum level () const
 
@@ -163,7 +183,7 @@ Additional Inherited Members - +

Protected Member Functions

- Protected Attributes inherited from spdlog::sinks::sink
level_t level_ {level::trace}
 
std::unique_ptr< spdlog::formatterformatter_ {details::make_unique<spdlog::pattern_formatter>()}
std::unique_ptr< spdlog::formatterformatter_ {details::make_unique<spdlog::pattern_formatter>()}
 

Detailed Description

@@ -171,11 +191,9 @@ Additional Inherited Members class spdlog::sinks::basic_file_sink< Mutex > -

Definition at line 25 of file basic_file_sink.h.

+

Definition at line 25 of file basic_file_sink.h.

Constructor & Destructor Documentation

- -

◆ basic_file_sink()

- +
@@ -209,14 +227,12 @@ template<typename Mutex >
-

Definition at line 28 of file basic_file_sink.h.

+

Definition at line 28 of file basic_file_sink.h.

Member Function Documentation

- -

◆ filename()

- +
@@ -239,13 +255,11 @@ template<typename Mutex >
-

Definition at line 33 of file basic_file_sink.h.

+

Definition at line 33 of file basic_file_sink.h.

- -

◆ flush_()

- +
@@ -270,13 +284,11 @@ template<typename Mutex >

Implements spdlog::sinks::base_sink< Mutex >.

-

Definition at line 46 of file basic_file_sink.h.

+

Definition at line 46 of file basic_file_sink.h.

- -

◆ sink_it_()

- +
@@ -302,7 +314,7 @@ template<typename Mutex >

Implements spdlog::sinks::base_sink< Mutex >.

-

Definition at line 39 of file basic_file_sink.h.

+

Definition at line 39 of file basic_file_sink.h.

@@ -317,7 +329,7 @@ template<typename Mutex > + doxygen 1.8.11 diff --git a/docs/classspdlog_1_1sinks_1_1basic__file__sink.js b/docs/classspdlog_1_1sinks_1_1basic__file__sink.js index 0924e64..686fe56 100644 --- a/docs/classspdlog_1_1sinks_1_1basic__file__sink.js +++ b/docs/classspdlog_1_1sinks_1_1basic__file__sink.js @@ -1,7 +1,7 @@ var classspdlog_1_1sinks_1_1basic__file__sink = [ [ "basic_file_sink", "classspdlog_1_1sinks_1_1basic__file__sink.html#a799e95cc46fd69b03f4ef7497aa21436", null ], - [ "filename", "classspdlog_1_1sinks_1_1basic__file__sink.html#a5efef88cd9a88234e61a94ffd2f0312e", null ], + [ "filename", "classspdlog_1_1sinks_1_1basic__file__sink.html#a1a5b31711ea99d4ab4975ddb09311aa7", null ], [ "flush_", "classspdlog_1_1sinks_1_1basic__file__sink.html#a689a12d9459d081edff7f8c7d3af227c", null ], [ "sink_it_", "classspdlog_1_1sinks_1_1basic__file__sink.html#a8d9239f225478ade4e879dc643f577ba", null ] ]; \ No newline at end of file diff --git a/docs/classspdlog_1_1sinks_1_1daily__file__sink-members.html b/docs/classspdlog_1_1sinks_1_1daily__file__sink-members.html index 743cac5..717b3ef 100644 --- a/docs/classspdlog_1_1sinks_1_1daily__file__sink-members.html +++ b/docs/classspdlog_1_1sinks_1_1daily__file__sink-members.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Member List @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -97,11 +117,11 @@ $(document).ready(function(){initNavTree('classspdlog_1_1sinks_1_1daily__file__s base_sink()=defaultspdlog::sinks::base_sink< Mutex > base_sink(const base_sink &)=deletespdlog::sinks::base_sink< Mutex > daily_file_sink(filename_t base_filename, int rotation_hour, int rotation_minute, bool truncate=false)spdlog::sinks::daily_file_sink< Mutex, FileNameCalc >inline - filename() constspdlog::sinks::daily_file_sink< Mutex, FileNameCalc >inline + filename() const spdlog::sinks::daily_file_sink< Mutex, FileNameCalc >inline flush() finalspdlog::sinks::base_sink< Mutex >inlinevirtual flush_() overridespdlog::sinks::daily_file_sink< Mutex, FileNameCalc >inlineprotectedvirtual formatter_spdlog::sinks::sinkprotected - level() constspdlog::sinks::sinkinline + level() const spdlog::sinks::sinkinline level_spdlog::sinks::sinkprotected log(const details::log_msg &msg) finalspdlog::sinks::base_sink< Mutex >inlinevirtual mutex_spdlog::sinks::base_sink< Mutex >protected @@ -111,7 +131,7 @@ $(document).ready(function(){initNavTree('classspdlog_1_1sinks_1_1daily__file__s set_level(level::level_enum log_level)spdlog::sinks::sinkinline set_pattern(const std::string &pattern) finalspdlog::sinks::base_sink< Mutex >inlinevirtual set_pattern_(const std::string &pattern)spdlog::sinks::base_sink< Mutex >inlineprotectedvirtual - should_log(level::level_enum msg_level) constspdlog::sinks::sinkinline + should_log(level::level_enum msg_level) const spdlog::sinks::sinkinline sink()=defaultspdlog::sinks::sink sink(std::unique_ptr< spdlog::formatter > formatter)spdlog::sinks::sinkinlineexplicit sink_it_(const details::log_msg &msg) overridespdlog::sinks::daily_file_sink< Mutex, FileNameCalc >inlineprotectedvirtual @@ -123,7 +143,7 @@ $(document).ready(function(){initNavTree('classspdlog_1_1sinks_1_1daily__file__s
    + doxygen 1.8.11
diff --git a/docs/classspdlog_1_1sinks_1_1daily__file__sink.html b/docs/classspdlog_1_1sinks_1_1daily__file__sink.html index 6b38b1a..ca82e2a 100644 --- a/docs/classspdlog_1_1sinks_1_1daily__file__sink.html +++ b/docs/classspdlog_1_1sinks_1_1daily__file__sink.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: spdlog::sinks::daily_file_sink< Mutex, FileNameCalc > Class Template Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -102,18 +122,18 @@ Inheritance diagram for spdlog::sinks::daily_file_sink< Mutex, FileNameCalc &
- + spdlog::sinks::base_sink< Mutex > spdlog::sinks::sink - -
+ +
- - + + @@ -136,12 +156,12 @@ Public Member Functions - - + + - - + +

Public Member Functions

 daily_file_sink (filename_t base_filename, int rotation_hour, int rotation_minute, bool truncate=false)
 
const filename_tfilename () const
 
const filename_tfilename () const
 
- Public Member Functions inherited from spdlog::sinks::base_sink< Mutex >
 base_sink ()=default
 
 
virtual ~sink ()=default
 
bool should_log (level::level_enum msg_level) const
 
bool should_log (level::level_enum msg_level) const
 
void set_level (level::level_enum log_level)
 
level::level_enum level () const
 
level::level_enum level () const
 
@@ -163,7 +183,7 @@ Additional Inherited Members - +

Protected Member Functions

- Protected Attributes inherited from spdlog::sinks::sink
level_t level_ {level::trace}
 
std::unique_ptr< spdlog::formatterformatter_ {details::make_unique<spdlog::pattern_formatter>()}
std::unique_ptr< spdlog::formatterformatter_ {details::make_unique<spdlog::pattern_formatter>()}
 

Detailed Description

@@ -171,11 +191,9 @@ Additional Inherited Members class spdlog::sinks::daily_file_sink< Mutex, FileNameCalc > -

Definition at line 47 of file daily_file_sink.h.

+

Definition at line 47 of file daily_file_sink.h.

Constructor & Destructor Documentation

- -

◆ daily_file_sink()

- +
@@ -221,14 +239,12 @@ template<typename Mutex , typename FileNameCalc = daily_filename_calculator&
-

Definition at line 51 of file daily_file_sink.h.

+

Definition at line 51 of file daily_file_sink.h.

Member Function Documentation

- -

◆ filename()

- +
@@ -251,13 +267,11 @@ template<typename Mutex , typename FileNameCalc = daily_filename_calculator&
-

Definition at line 66 of file daily_file_sink.h.

+

Definition at line 66 of file daily_file_sink.h.

- -

◆ flush_()

- +
@@ -282,13 +296,11 @@ template<typename Mutex , typename FileNameCalc = daily_filename_calculator&

Implements spdlog::sinks::base_sink< Mutex >.

-

Definition at line 85 of file daily_file_sink.h.

+

Definition at line 85 of file daily_file_sink.h.

- -

◆ sink_it_()

- +
@@ -314,7 +326,7 @@ template<typename Mutex , typename FileNameCalc = daily_filename_calculator&

Implements spdlog::sinks::base_sink< Mutex >.

-

Definition at line 72 of file daily_file_sink.h.

+

Definition at line 72 of file daily_file_sink.h.

@@ -329,7 +341,7 @@ template<typename Mutex , typename FileNameCalc = daily_filename_calculator& + doxygen 1.8.11
diff --git a/docs/classspdlog_1_1sinks_1_1daily__file__sink.js b/docs/classspdlog_1_1sinks_1_1daily__file__sink.js index 85240ce..215e3f6 100644 --- a/docs/classspdlog_1_1sinks_1_1daily__file__sink.js +++ b/docs/classspdlog_1_1sinks_1_1daily__file__sink.js @@ -1,7 +1,7 @@ var classspdlog_1_1sinks_1_1daily__file__sink = [ [ "daily_file_sink", "classspdlog_1_1sinks_1_1daily__file__sink.html#a442164b0813283bc631ad39708fb3669", null ], - [ "filename", "classspdlog_1_1sinks_1_1daily__file__sink.html#a5563c23f71ed255510c79bafd5084339", null ], + [ "filename", "classspdlog_1_1sinks_1_1daily__file__sink.html#acc0e22ae2e607dd81223a97936cfc14e", null ], [ "flush_", "classspdlog_1_1sinks_1_1daily__file__sink.html#a37199f25868ac70b91e4f126bcc4b3f8", null ], [ "sink_it_", "classspdlog_1_1sinks_1_1daily__file__sink.html#ac82447cddb7a2ddb45ab81f97b74286d", null ] ]; \ No newline at end of file diff --git a/docs/classspdlog_1_1sinks_1_1dist__sink-members.html b/docs/classspdlog_1_1sinks_1_1dist__sink-members.html index f1077c5..f779aa9 100644 --- a/docs/classspdlog_1_1sinks_1_1dist__sink-members.html +++ b/docs/classspdlog_1_1sinks_1_1dist__sink-members.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Member List @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@
- + - - - - + +
@@ -102,7 +122,7 @@ $(document).ready(function(){initNavTree('classspdlog_1_1sinks_1_1dist__sink.htm flush() finalspdlog::sinks::base_sink< Mutex >inlinevirtual flush_() overridespdlog::sinks::dist_sink< Mutex >inlineprotectedvirtual formatter_spdlog::sinks::sinkprotected - level() constspdlog::sinks::sinkinline + level() const spdlog::sinks::sinkinline level_spdlog::sinks::sinkprotected log(const details::log_msg &msg) finalspdlog::sinks::base_sink< Mutex >inlinevirtual mutex_spdlog::sinks::base_sink< Mutex >protected @@ -115,7 +135,7 @@ $(document).ready(function(){initNavTree('classspdlog_1_1sinks_1_1dist__sink.htm set_pattern(const std::string &pattern) finalspdlog::sinks::base_sink< Mutex >inlinevirtual set_pattern_(const std::string &pattern) overridespdlog::sinks::dist_sink< Mutex >inlineprotectedvirtual set_sinks(std::vector< std::shared_ptr< sink >> sinks)spdlog::sinks::dist_sink< Mutex >inline - should_log(level::level_enum msg_level) constspdlog::sinks::sinkinline + should_log(level::level_enum msg_level) const spdlog::sinks::sinkinline sink()=defaultspdlog::sinks::sink sink(std::unique_ptr< spdlog::formatter > formatter)spdlog::sinks::sinkinlineexplicit sink_it_(const details::log_msg &msg) overridespdlog::sinks::dist_sink< Mutex >inlineprotectedvirtual @@ -128,7 +148,7 @@ $(document).ready(function(){initNavTree('classspdlog_1_1sinks_1_1dist__sink.htm
    + doxygen 1.8.11
diff --git a/docs/classspdlog_1_1sinks_1_1dist__sink.html b/docs/classspdlog_1_1sinks_1_1dist__sink.html index 13ed4e7..92beaba 100644 --- a/docs/classspdlog_1_1sinks_1_1dist__sink.html +++ b/docs/classspdlog_1_1sinks_1_1dist__sink.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: spdlog::sinks::dist_sink< Mutex > Class Template Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@
- + - - - - + +
@@ -103,11 +123,11 @@ Inheritance diagram for spdlog::sinks::dist_sink< Mutex >:
- + spdlog::sinks::base_sink< Mutex > spdlog::sinks::sink - -
+ + @@ -145,12 +165,12 @@ Public Member Functions - - + + - - + +

Public Member Functions

 
virtual ~sink ()=default
 
bool should_log (level::level_enum msg_level) const
 
bool should_log (level::level_enum msg_level) const
 
void set_level (level::level_enum log_level)
 
level::level_enum level () const
 
level::level_enum level () const
 
@@ -173,7 +193,7 @@ Protected Attributes - +

Protected Member Functions

- Protected Attributes inherited from spdlog::sinks::sink
level_t level_ {level::trace}
 
std::unique_ptr< spdlog::formatterformatter_ {details::make_unique<spdlog::pattern_formatter>()}
std::unique_ptr< spdlog::formatterformatter_ {details::make_unique<spdlog::pattern_formatter>()}
 

Detailed Description

@@ -181,11 +201,9 @@ Protected Attributes class spdlog::sinks::dist_sink< Mutex > -

Definition at line 28 of file dist_sink.h.

+

Definition at line 28 of file dist_sink.h.

Constructor & Destructor Documentation

- -

◆ dist_sink() [1/2]

- +
@@ -210,9 +228,7 @@ template<typename Mutex >
- -

◆ dist_sink() [2/2]

- +
@@ -239,9 +255,7 @@ template<typename Mutex >

Member Function Documentation

- -

◆ add_sink()

- +
@@ -265,13 +279,11 @@ template<typename Mutex >
-

Definition at line 35 of file dist_sink.h.

+

Definition at line 35 of file dist_sink.h.

- -

◆ flush_()

- +
@@ -296,13 +308,11 @@ template<typename Mutex >

Implements spdlog::sinks::base_sink< Mutex >.

-

Definition at line 66 of file dist_sink.h.

+

Definition at line 66 of file dist_sink.h.

- -

◆ operator=()

- +
@@ -328,9 +338,7 @@ template<typename Mutex >
- -

◆ remove_sink()

- +
@@ -354,13 +362,11 @@ template<typename Mutex >
-

Definition at line 41 of file dist_sink.h.

+

Definition at line 41 of file dist_sink.h.

- -

◆ set_formatter_()

- +
@@ -386,13 +392,11 @@ template<typename Mutex >

Reimplemented from spdlog::sinks::base_sink< Mutex >.

-

Definition at line 79 of file dist_sink.h.

+

Definition at line 79 of file dist_sink.h.

- -

◆ set_pattern_()

- +
@@ -418,13 +422,11 @@ template<typename Mutex >

Reimplemented from spdlog::sinks::base_sink< Mutex >.

-

Definition at line 74 of file dist_sink.h.

+

Definition at line 74 of file dist_sink.h.

- -

◆ set_sinks()

- +
@@ -448,13 +450,11 @@ template<typename Mutex >
-

Definition at line 47 of file dist_sink.h.

+

Definition at line 47 of file dist_sink.h.

- -

◆ sink_it_()

- +
@@ -480,14 +480,12 @@ template<typename Mutex >

Implements spdlog::sinks::base_sink< Mutex >.

-

Definition at line 54 of file dist_sink.h.

+

Definition at line 54 of file dist_sink.h.

Member Data Documentation

- -

◆ sinks_

- +
@@ -507,7 +505,7 @@ template<typename Mutex >
-

Definition at line 87 of file dist_sink.h.

+

Definition at line 87 of file dist_sink.h.

@@ -522,7 +520,7 @@ template<typename Mutex > + doxygen 1.8.11 diff --git a/docs/classspdlog_1_1sinks_1_1null__sink-members.html b/docs/classspdlog_1_1sinks_1_1null__sink-members.html index 7a63a58..214378f 100644 --- a/docs/classspdlog_1_1sinks_1_1null__sink-members.html +++ b/docs/classspdlog_1_1sinks_1_1null__sink-members.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Member List @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -99,7 +119,7 @@ $(document).ready(function(){initNavTree('classspdlog_1_1sinks_1_1null__sink.htm flush() finalspdlog::sinks::base_sink< Mutex >inlinevirtual flush_() overridespdlog::sinks::null_sink< Mutex >inlineprotectedvirtual formatter_spdlog::sinks::sinkprotected - level() constspdlog::sinks::sinkinline + level() const spdlog::sinks::sinkinline level_spdlog::sinks::sinkprotected log(const details::log_msg &msg) finalspdlog::sinks::base_sink< Mutex >inlinevirtual mutex_spdlog::sinks::base_sink< Mutex >protected @@ -109,7 +129,7 @@ $(document).ready(function(){initNavTree('classspdlog_1_1sinks_1_1null__sink.htm set_level(level::level_enum log_level)spdlog::sinks::sinkinline set_pattern(const std::string &pattern) finalspdlog::sinks::base_sink< Mutex >inlinevirtual set_pattern_(const std::string &pattern)spdlog::sinks::base_sink< Mutex >inlineprotectedvirtual - should_log(level::level_enum msg_level) constspdlog::sinks::sinkinline + should_log(level::level_enum msg_level) const spdlog::sinks::sinkinline sink()=defaultspdlog::sinks::sink sink(std::unique_ptr< spdlog::formatter > formatter)spdlog::sinks::sinkinlineexplicit sink_it_(const details::log_msg &) overridespdlog::sinks::null_sink< Mutex >inlineprotectedvirtual @@ -121,7 +141,7 @@ $(document).ready(function(){initNavTree('classspdlog_1_1sinks_1_1null__sink.htm
    + doxygen 1.8.11
diff --git a/docs/classspdlog_1_1sinks_1_1null__sink.html b/docs/classspdlog_1_1sinks_1_1null__sink.html index 62982b8..44ce230 100644 --- a/docs/classspdlog_1_1sinks_1_1null__sink.html +++ b/docs/classspdlog_1_1sinks_1_1null__sink.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: spdlog::sinks::null_sink< Mutex > Class Template Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -101,11 +121,11 @@ Inheritance diagram for spdlog::sinks::null_sink< Mutex >:
- + spdlog::sinks::base_sink< Mutex > spdlog::sinks::sink - -
+ + @@ -143,19 +163,19 @@ Additional Inherited Members - - + + - - + + - +

Protected Member Functions

 
virtual ~sink ()=default
 
bool should_log (level::level_enum msg_level) const
 
bool should_log (level::level_enum msg_level) const
 
void set_level (level::level_enum log_level)
 
level::level_enum level () const
 
level::level_enum level () const
 
- Protected Attributes inherited from spdlog::sinks::base_sink< Mutex >
Mutex mutex_
 
- Protected Attributes inherited from spdlog::sinks::sink
level_t level_ {level::trace}
 
std::unique_ptr< spdlog::formatterformatter_ {details::make_unique<spdlog::pattern_formatter>()}
std::unique_ptr< spdlog::formatterformatter_ {details::make_unique<spdlog::pattern_formatter>()}
 

Detailed Description

@@ -163,11 +183,9 @@ Additional Inherited Members class spdlog::sinks::null_sink< Mutex > -

Definition at line 21 of file null_sink.h.

+

Definition at line 21 of file null_sink.h.

Member Function Documentation

- -

◆ flush_()

- +
@@ -192,13 +210,11 @@ template<typename Mutex >

Implements spdlog::sinks::base_sink< Mutex >.

-

Definition at line 25 of file null_sink.h.

+

Definition at line 25 of file null_sink.h.

- -

◆ sink_it_()

- +
@@ -224,7 +240,7 @@ template<typename Mutex >

Implements spdlog::sinks::base_sink< Mutex >.

-

Definition at line 24 of file null_sink.h.

+

Definition at line 24 of file null_sink.h.

@@ -239,7 +255,7 @@ template<typename Mutex > + doxygen 1.8.11 diff --git a/docs/classspdlog_1_1sinks_1_1ostream__sink-members.html b/docs/classspdlog_1_1sinks_1_1ostream__sink-members.html index 8db8658..f764cd8 100644 --- a/docs/classspdlog_1_1sinks_1_1ostream__sink-members.html +++ b/docs/classspdlog_1_1sinks_1_1ostream__sink-members.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Member List @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -100,7 +120,7 @@ $(document).ready(function(){initNavTree('classspdlog_1_1sinks_1_1ostream__sink. flush_() overridespdlog::sinks::ostream_sink< Mutex >inlineprotectedvirtual force_flush_spdlog::sinks::ostream_sink< Mutex >protected formatter_spdlog::sinks::sinkprotected - level() constspdlog::sinks::sinkinline + level() const spdlog::sinks::sinkinline level_spdlog::sinks::sinkprotected log(const details::log_msg &msg) finalspdlog::sinks::base_sink< Mutex >inlinevirtual mutex_spdlog::sinks::base_sink< Mutex >protected @@ -114,7 +134,7 @@ $(document).ready(function(){initNavTree('classspdlog_1_1sinks_1_1ostream__sink. set_level(level::level_enum log_level)spdlog::sinks::sinkinline set_pattern(const std::string &pattern) finalspdlog::sinks::base_sink< Mutex >inlinevirtual set_pattern_(const std::string &pattern)spdlog::sinks::base_sink< Mutex >inlineprotectedvirtual - should_log(level::level_enum msg_level) constspdlog::sinks::sinkinline + should_log(level::level_enum msg_level) const spdlog::sinks::sinkinline sink()=defaultspdlog::sinks::sink sink(std::unique_ptr< spdlog::formatter > formatter)spdlog::sinks::sinkinlineexplicit sink_it_(const details::log_msg &msg) overridespdlog::sinks::ostream_sink< Mutex >inlineprotectedvirtual @@ -126,7 +146,7 @@ $(document).ready(function(){initNavTree('classspdlog_1_1sinks_1_1ostream__sink.
    + doxygen 1.8.11
diff --git a/docs/classspdlog_1_1sinks_1_1ostream__sink.html b/docs/classspdlog_1_1sinks_1_1ostream__sink.html index 05c4fc8..b74c32d 100644 --- a/docs/classspdlog_1_1sinks_1_1ostream__sink.html +++ b/docs/classspdlog_1_1sinks_1_1ostream__sink.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: spdlog::sinks::ostream_sink< Mutex > Class Template Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -103,11 +123,11 @@ Inheritance diagram for spdlog::sinks::ostream_sink< Mutex >:
- + spdlog::sinks::base_sink< Mutex > spdlog::sinks::sink - -
+ + @@ -139,12 +159,12 @@ Public Member Functions - - + + - - + +

Public Member Functions

 
virtual ~sink ()=default
 
bool should_log (level::level_enum msg_level) const
 
bool should_log (level::level_enum msg_level) const
 
void set_level (level::level_enum log_level)
 
level::level_enum level () const
 
level::level_enum level () const
 
@@ -170,7 +190,7 @@ Protected Attributes - +

Protected Member Functions

- Protected Attributes inherited from spdlog::sinks::sink
level_t level_ {level::trace}
 
std::unique_ptr< spdlog::formatterformatter_ {details::make_unique<spdlog::pattern_formatter>()}
std::unique_ptr< spdlog::formatterformatter_ {details::make_unique<spdlog::pattern_formatter>()}
 

Detailed Description

@@ -178,11 +198,9 @@ Protected Attributes class spdlog::sinks::ostream_sink< Mutex > -

Definition at line 21 of file ostream_sink.h.

+

Definition at line 21 of file ostream_sink.h.

Constructor & Destructor Documentation

- -

◆ ostream_sink() [1/2]

- +
@@ -216,13 +234,11 @@ template<typename Mutex >
-

Definition at line 24 of file ostream_sink.h.

+

Definition at line 24 of file ostream_sink.h.

- -

◆ ostream_sink() [2/2]

- +
@@ -249,9 +265,7 @@ template<typename Mutex >

Member Function Documentation

- -

◆ flush_()

- +
@@ -276,13 +290,11 @@ template<typename Mutex >

Implements spdlog::sinks::base_sink< Mutex >.

-

Definition at line 44 of file ostream_sink.h.

+

Definition at line 44 of file ostream_sink.h.

- -

◆ operator=()

- +
@@ -308,9 +320,7 @@ template<typename Mutex >
- -

◆ sink_it_()

- +
@@ -336,14 +346,12 @@ template<typename Mutex >

Implements spdlog::sinks::base_sink< Mutex >.

-

Definition at line 33 of file ostream_sink.h.

+

Definition at line 33 of file ostream_sink.h.

Member Data Documentation

- -

◆ force_flush_

- +
@@ -363,13 +371,11 @@ template<typename Mutex >
-

Definition at line 50 of file ostream_sink.h.

+

Definition at line 50 of file ostream_sink.h.

- -

◆ ostream_

- +
@@ -389,7 +395,7 @@ template<typename Mutex >
-

Definition at line 49 of file ostream_sink.h.

+

Definition at line 49 of file ostream_sink.h.

@@ -404,7 +410,7 @@ template<typename Mutex > + doxygen 1.8.11 diff --git a/docs/classspdlog_1_1sinks_1_1rotating__file__sink-members.html b/docs/classspdlog_1_1sinks_1_1rotating__file__sink-members.html index 9ec33e2..89f8730 100644 --- a/docs/classspdlog_1_1sinks_1_1rotating__file__sink-members.html +++ b/docs/classspdlog_1_1sinks_1_1rotating__file__sink-members.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Member List @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -97,11 +117,11 @@ $(document).ready(function(){initNavTree('classspdlog_1_1sinks_1_1rotating__file base_sink()=defaultspdlog::sinks::base_sink< Mutex > base_sink(const base_sink &)=deletespdlog::sinks::base_sink< Mutex > calc_filename(const filename_t &filename, std::size_t index)spdlog::sinks::rotating_file_sink< Mutex >inlinestatic - filename() constspdlog::sinks::rotating_file_sink< Mutex >inline + filename() const spdlog::sinks::rotating_file_sink< Mutex >inline flush() finalspdlog::sinks::base_sink< Mutex >inlinevirtual flush_() overridespdlog::sinks::rotating_file_sink< Mutex >inlineprotectedvirtual formatter_spdlog::sinks::sinkprotected - level() constspdlog::sinks::sinkinline + level() const spdlog::sinks::sinkinline level_spdlog::sinks::sinkprotected log(const details::log_msg &msg) finalspdlog::sinks::base_sink< Mutex >inlinevirtual mutex_spdlog::sinks::base_sink< Mutex >protected @@ -112,7 +132,7 @@ $(document).ready(function(){initNavTree('classspdlog_1_1sinks_1_1rotating__file set_level(level::level_enum log_level)spdlog::sinks::sinkinline set_pattern(const std::string &pattern) finalspdlog::sinks::base_sink< Mutex >inlinevirtual set_pattern_(const std::string &pattern)spdlog::sinks::base_sink< Mutex >inlineprotectedvirtual - should_log(level::level_enum msg_level) constspdlog::sinks::sinkinline + should_log(level::level_enum msg_level) const spdlog::sinks::sinkinline sink()=defaultspdlog::sinks::sink sink(std::unique_ptr< spdlog::formatter > formatter)spdlog::sinks::sinkinlineexplicit sink_it_(const details::log_msg &msg) overridespdlog::sinks::rotating_file_sink< Mutex >inlineprotectedvirtual @@ -124,7 +144,7 @@ $(document).ready(function(){initNavTree('classspdlog_1_1sinks_1_1rotating__file
    + doxygen 1.8.11
diff --git a/docs/classspdlog_1_1sinks_1_1rotating__file__sink.html b/docs/classspdlog_1_1sinks_1_1rotating__file__sink.html index 45453bb..d0b271a 100644 --- a/docs/classspdlog_1_1sinks_1_1rotating__file__sink.html +++ b/docs/classspdlog_1_1sinks_1_1rotating__file__sink.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: spdlog::sinks::rotating_file_sink< Mutex > Class Template Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -103,18 +123,18 @@ Inheritance diagram for spdlog::sinks::rotating_file_sink< Mutex >:
- + spdlog::sinks::base_sink< Mutex > spdlog::sinks::sink - -
+ + - - + + @@ -137,16 +157,16 @@ Public Member Functions - - + + - - + +

Public Member Functions

 rotating_file_sink (filename_t base_filename, std::size_t max_size, std::size_t max_files, bool rotate_on_open=false)
 
const filename_tfilename () const
 
const filename_tfilename () const
 
- Public Member Functions inherited from spdlog::sinks::base_sink< Mutex >
 base_sink ()=default
 
 
virtual ~sink ()=default
 
bool should_log (level::level_enum msg_level) const
 
bool should_log (level::level_enum msg_level) const
 
void set_level (level::level_enum log_level)
 
level::level_enum level () const
 
level::level_enum level () const
 
- +

Static Public Member Functions

static filename_t calc_filename (const filename_t &filename, std::size_t index)
static filename_t calc_filename (const filename_t &filename, std::size_t index)
 
- +

@@ -169,7 +189,7 @@ Additional Inherited Members

- Protected Attributes inherited from spdlog::sinks::sink
level_t level_ {level::trace}
 
std::unique_ptr< spdlog::formatterformatter_ {details::make_unique<spdlog::pattern_formatter>()}
std::unique_ptr< spdlog::formatterformatter_ {details::make_unique<spdlog::pattern_formatter>()}
 

Detailed Description

@@ -177,11 +197,9 @@ Additional Inherited Members class spdlog::sinks::rotating_file_sink< Mutex > -

Definition at line 31 of file rotating_file_sink.h.

+

Definition at line 31 of file rotating_file_sink.h.

Constructor & Destructor Documentation

- -

◆ rotating_file_sink()

- +
@@ -227,14 +245,12 @@ template<typename Mutex >
-

Definition at line 34 of file rotating_file_sink.h.

+

Definition at line 34 of file rotating_file_sink.h.

Member Function Documentation

- -

◆ calc_filename()

- +
@@ -268,13 +284,11 @@ template<typename Mutex >
-

Definition at line 49 of file rotating_file_sink.h.

+

Definition at line 49 of file rotating_file_sink.h.

- -

◆ filename()

- +
@@ -297,13 +311,11 @@ template<typename Mutex >
-

Definition at line 65 of file rotating_file_sink.h.

+

Definition at line 65 of file rotating_file_sink.h.

- -

◆ flush_()

- +
@@ -328,13 +340,11 @@ template<typename Mutex >

Implements spdlog::sinks::base_sink< Mutex >.

-

Definition at line 84 of file rotating_file_sink.h.

+

Definition at line 84 of file rotating_file_sink.h.

- -

◆ sink_it_()

- +
@@ -360,7 +370,7 @@ template<typename Mutex >

Implements spdlog::sinks::base_sink< Mutex >.

-

Definition at line 71 of file rotating_file_sink.h.

+

Definition at line 71 of file rotating_file_sink.h.

@@ -375,7 +385,7 @@ template<typename Mutex > + doxygen 1.8.11 diff --git a/docs/classspdlog_1_1sinks_1_1rotating__file__sink.js b/docs/classspdlog_1_1sinks_1_1rotating__file__sink.js index 737f3f8..615671a 100644 --- a/docs/classspdlog_1_1sinks_1_1rotating__file__sink.js +++ b/docs/classspdlog_1_1sinks_1_1rotating__file__sink.js @@ -2,7 +2,7 @@ var classspdlog_1_1sinks_1_1rotating__file__sink = [ [ "rotating_file_sink", "classspdlog_1_1sinks_1_1rotating__file__sink.html#a1dcebdde175de15bee24da6e9ec70990", null ], [ "calc_filename", "classspdlog_1_1sinks_1_1rotating__file__sink.html#a05d77d7013bc54f55cac702c122ac1c9", null ], - [ "filename", "classspdlog_1_1sinks_1_1rotating__file__sink.html#a16489efcc8bd112bbc0151f54ba46f2e", null ], + [ "filename", "classspdlog_1_1sinks_1_1rotating__file__sink.html#af2c15df03b0d7d2d4b3b653633b70fd0", null ], [ "flush_", "classspdlog_1_1sinks_1_1rotating__file__sink.html#ae93e4792b76f73bb0be8e50b5c5e889b", null ], [ "sink_it_", "classspdlog_1_1sinks_1_1rotating__file__sink.html#a3cf93e445ad92380c7d352f971cd76a4", null ] ]; \ No newline at end of file diff --git a/docs/classspdlog_1_1sinks_1_1sink-members.html b/docs/classspdlog_1_1sinks_1_1sink-members.html index 0a134e9..36aae89 100644 --- a/docs/classspdlog_1_1sinks_1_1sink-members.html +++ b/docs/classspdlog_1_1sinks_1_1sink-members.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Member List @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -96,13 +116,13 @@ $(document).ready(function(){initNavTree('classspdlog_1_1sinks_1_1sink.html','') - + - + @@ -113,7 +133,7 @@ $(document).ready(function(){initNavTree('classspdlog_1_1sinks_1_1sink.html','')
    + doxygen 1.8.11
diff --git a/docs/classspdlog_1_1sinks_1_1sink.html b/docs/classspdlog_1_1sinks_1_1sink.html index 7b95223..4fef44e 100644 --- a/docs/classspdlog_1_1sinks_1_1sink.html +++ b/docs/classspdlog_1_1sinks_1_1sink.html @@ -1,10 +1,9 @@ - + - - +Livox SDK API: spdlog::sinks::sink Class Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ @@ -39,22 +41,42 @@
flush()=0spdlog::sinks::sinkpure virtual
formatter_spdlog::sinks::sinkprotected
level() constspdlog::sinks::sinkinline
level() const spdlog::sinks::sinkinline
level_spdlog::sinks::sinkprotected
log(const details::log_msg &msg)=0spdlog::sinks::sinkpure virtual
set_formatter(std::unique_ptr< spdlog::formatter > sink_formatter)=0spdlog::sinks::sinkpure virtual
set_level(level::level_enum log_level)spdlog::sinks::sinkinline
set_pattern(const std::string &pattern)=0spdlog::sinks::sinkpure virtual
should_log(level::level_enum msg_level) constspdlog::sinks::sinkinline
should_log(level::level_enum msg_level) const spdlog::sinks::sinkinline
sink()=defaultspdlog::sinks::sink
sink(std::unique_ptr< spdlog::formatter > formatter)spdlog::sinks::sinkinlineexplicit
~sink()=defaultspdlog::sinks::sinkvirtual
Livox SDK API -  V2.0.0 +  V2.1.0
- + - - - - + +
@@ -115,8 +135,8 @@ Inheritance diagram for spdlog::sinks::sink:
spdlog::sinks::ostream_sink< Mutex > spdlog::sinks::rotating_file_sink< Mutex > spdlog::sinks::syslog_sink< Mutex > - - + + @@ -134,27 +154,25 @@ Public Member Functions - - + + - - + +

Public Member Functions

 
virtual void set_formatter (std::unique_ptr< spdlog::formatter > sink_formatter)=0
 
bool should_log (level::level_enum msg_level) const
 
bool should_log (level::level_enum msg_level) const
 
void set_level (level::level_enum log_level)
 
level::level_enum level () const
 
level::level_enum level () const
 
- +

Protected Attributes

level_t level_ {level::trace}
 
std::unique_ptr< spdlog::formatterformatter_ {details::make_unique<spdlog::pattern_formatter>()}
std::unique_ptr< spdlog::formatterformatter_ {details::make_unique<spdlog::pattern_formatter>()}
 

Detailed Description

-

Definition at line 14 of file sink.h.

+

Definition at line 14 of file sink.h.

Constructor & Destructor Documentation

- -

◆ sink() [1/2]

- +
@@ -177,9 +195,7 @@ Protected Attributes - -

◆ sink() [2/2]

- +
@@ -201,13 +217,11 @@ Protected Attributes
-

Definition at line 19 of file sink.h.

+

Definition at line 19 of file sink.h.

- -

◆ ~sink()

- + - -

◆ level()

- +
@@ -281,13 +291,11 @@ Protected Attributes
-

Definition at line 40 of file sink.h.

+

Definition at line 40 of file sink.h.

- -

◆ log()

- + - -

◆ set_formatter()

- + - -

◆ set_level()

- +
@@ -365,13 +369,11 @@ Protected Attributes
-

Definition at line 35 of file sink.h.

+

Definition at line 35 of file sink.h.

- -

◆ set_pattern()

- + - -

◆ should_log()

- +
@@ -421,14 +421,12 @@ Protected Attributes
-

Definition at line 30 of file sink.h.

+

Definition at line 30 of file sink.h.

Member Data Documentation

- -

◆ formatter_

- +
@@ -436,7 +434,7 @@ Protected Attributes @@ -446,13 +444,11 @@ Protected Attributes
- +
std::unique_ptr<spdlog::formatter> spdlog::sinks::sink::formatter_ {details::make_unique<spdlog::pattern_formatter>()}std::unique_ptr<spdlog::formatter> spdlog::sinks::sink::formatter_ {details::make_unique<spdlog::pattern_formatter>()}
-

Definition at line 50 of file sink.h.

+

Definition at line 50 of file sink.h.

- -

◆ level_

- +
@@ -470,7 +466,7 @@ Protected Attributes
-

Definition at line 47 of file sink.h.

+

Definition at line 47 of file sink.h.

@@ -485,7 +481,7 @@ Protected Attributes + doxygen 1.8.11 diff --git a/docs/classspdlog_1_1sinks_1_1sink.js b/docs/classspdlog_1_1sinks_1_1sink.js index 21aa2a2..4a061b2 100644 --- a/docs/classspdlog_1_1sinks_1_1sink.js +++ b/docs/classspdlog_1_1sinks_1_1sink.js @@ -4,12 +4,12 @@ var classspdlog_1_1sinks_1_1sink = [ "sink", "classspdlog_1_1sinks_1_1sink.html#aea8106cba54ae87840fc1cf33cdfd2c1", null ], [ "~sink", "classspdlog_1_1sinks_1_1sink.html#a2637af0973ac863eedd76ee683279c0b", null ], [ "flush", "classspdlog_1_1sinks_1_1sink.html#a8a0674ae3bca8f1617aef820e23a2ccd", null ], - [ "level", "classspdlog_1_1sinks_1_1sink.html#ae59ca2b418c5cdfed1c04e49a444be1c", null ], + [ "level", "classspdlog_1_1sinks_1_1sink.html#a026877b46301b9bd0d22afc65c2f3eca", null ], [ "log", "classspdlog_1_1sinks_1_1sink.html#a51d8f34ad79064e0dc13c6013236e427", null ], [ "set_formatter", "classspdlog_1_1sinks_1_1sink.html#ac410f2229e583a75337a5fdf45d020be", null ], [ "set_level", "classspdlog_1_1sinks_1_1sink.html#a038a91409395dca18a7ccca81622fd83", null ], [ "set_pattern", "classspdlog_1_1sinks_1_1sink.html#a7e5cfd4b683c8bfa8fbd602d7f409632", null ], - [ "should_log", "classspdlog_1_1sinks_1_1sink.html#a1c932f19f67057fbe7518999bdd5c422", null ], + [ "should_log", "classspdlog_1_1sinks_1_1sink.html#aee70cdd1f77473d658840447d3f3afff", null ], [ "formatter_", "classspdlog_1_1sinks_1_1sink.html#aa0d19f09363a11b63b4a9b1d46f8a4b3", null ], [ "level_", "classspdlog_1_1sinks_1_1sink.html#a435da07b59e1165b38d53635cdada30a", null ] ]; \ No newline at end of file diff --git a/docs/classspdlog_1_1sinks_1_1stdout__sink-members.html b/docs/classspdlog_1_1sinks_1_1stdout__sink-members.html index e270000..8f42ce9 100644 --- a/docs/classspdlog_1_1sinks_1_1stdout__sink-members.html +++ b/docs/classspdlog_1_1sinks_1_1stdout__sink-members.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Member List @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -96,7 +116,7 @@ $(document).ready(function(){initNavTree('classspdlog_1_1sinks_1_1stdout__sink.h - + @@ -104,7 +124,7 @@ $(document).ready(function(){initNavTree('classspdlog_1_1sinks_1_1stdout__sink.h - + @@ -118,7 +138,7 @@ $(document).ready(function(){initNavTree('classspdlog_1_1sinks_1_1stdout__sink.h
    + doxygen 1.8.11
diff --git a/docs/classspdlog_1_1sinks_1_1stdout__sink.html b/docs/classspdlog_1_1sinks_1_1stdout__sink.html index 8c36a63..079ad50 100644 --- a/docs/classspdlog_1_1sinks_1_1stdout__sink.html +++ b/docs/classspdlog_1_1sinks_1_1stdout__sink.html @@ -1,10 +1,9 @@ - + - - +Livox SDK API: spdlog::sinks::stdout_sink< TargetStream, ConsoleMutex > Class Template Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ @@ -39,22 +41,42 @@
flush() overridespdlog::sinks::stdout_sink< TargetStream, ConsoleMutex >inlinevirtual
formatter_spdlog::sinks::sinkprotected
level() constspdlog::sinks::sinkinline
level() const spdlog::sinks::sinkinline
level_spdlog::sinks::sinkprotected
log(const details::log_msg &msg) overridespdlog::sinks::stdout_sink< TargetStream, ConsoleMutex >inlinevirtual
mutex_t typedefspdlog::sinks::stdout_sink< TargetStream, ConsoleMutex >
set_formatter(std::unique_ptr< spdlog::formatter > sink_formatter) overridespdlog::sinks::stdout_sink< TargetStream, ConsoleMutex >inlinevirtual
set_level(level::level_enum log_level)spdlog::sinks::sinkinline
set_pattern(const std::string &pattern) overridespdlog::sinks::stdout_sink< TargetStream, ConsoleMutex >inlinevirtual
should_log(level::level_enum msg_level) constspdlog::sinks::sinkinline
should_log(level::level_enum msg_level) const spdlog::sinks::sinkinline
sink()=defaultspdlog::sinks::sink
sink(std::unique_ptr< spdlog::formatter > formatter)spdlog::sinks::sinkinlineexplicit
stdout_sink()spdlog::sinks::stdout_sink< TargetStream, ConsoleMutex >inline
Livox SDK API -  V2.0.0 +  V2.1.0
- + - - - - + +
@@ -102,10 +122,10 @@ Inheritance diagram for spdlog::sinks::stdout_sink< TargetStream, ConsoleMute
- + spdlog::sinks::sink - -
+ +
@@ -137,19 +157,19 @@ Public Member Functions - - + + - - + +

Public Types

 
virtual ~sink ()=default
 
bool should_log (level::level_enum msg_level) const
 
bool should_log (level::level_enum msg_level) const
 
void set_level (level::level_enum log_level)
 
level::level_enum level () const
 
level::level_enum level () const
 
- +

Additional Inherited Members

- Protected Attributes inherited from spdlog::sinks::sink
level_t level_ {level::trace}
 
std::unique_ptr< spdlog::formatterformatter_ {details::make_unique<spdlog::pattern_formatter>()}
std::unique_ptr< spdlog::formatterformatter_ {details::make_unique<spdlog::pattern_formatter>()}
 

Detailed Description

@@ -157,11 +177,9 @@ Additional Inherited Members class spdlog::sinks::stdout_sink< TargetStream, ConsoleMutex > -

Definition at line 24 of file stdout_sinks.h.

+

Definition at line 24 of file stdout_sinks.h.

Member Typedef Documentation

- -

◆ mutex_t

- +
@@ -173,14 +191,12 @@ template<typename TargetStream , typename ConsoleMutex >
-

Definition at line 27 of file stdout_sinks.h.

+

Definition at line 27 of file stdout_sinks.h.

Constructor & Destructor Documentation

- -

◆ stdout_sink() [1/2]

- +
@@ -203,13 +219,11 @@ template<typename TargetStream , typename ConsoleMutex >
-

Definition at line 28 of file stdout_sinks.h.

+

Definition at line 28 of file stdout_sinks.h.

- -

◆ ~stdout_sink()

- +
@@ -234,9 +248,7 @@ template<typename TargetStream , typename ConsoleMutex >
- -

◆ stdout_sink() [2/2]

- +
@@ -263,9 +275,7 @@ template<typename TargetStream , typename ConsoleMutex >

Member Function Documentation

- -

◆ flush()

- +
@@ -290,13 +300,11 @@ template<typename TargetStream , typename ConsoleMutex >

Implements spdlog::sinks::sink.

-

Definition at line 47 of file stdout_sinks.h.

+

Definition at line 47 of file stdout_sinks.h.

- -

◆ log()

- +
@@ -322,13 +330,11 @@ template<typename TargetStream , typename ConsoleMutex >

Implements spdlog::sinks::sink.

-

Definition at line 38 of file stdout_sinks.h.

+

Definition at line 38 of file stdout_sinks.h.

- -

◆ operator=()

- +
@@ -354,9 +360,7 @@ template<typename TargetStream , typename ConsoleMutex >
- -

◆ set_formatter()

- +
@@ -382,13 +386,11 @@ template<typename TargetStream , typename ConsoleMutex >

Implements spdlog::sinks::sink.

-

Definition at line 59 of file stdout_sinks.h.

+

Definition at line 59 of file stdout_sinks.h.

- -

◆ set_pattern()

- +
@@ -414,7 +416,7 @@ template<typename TargetStream , typename ConsoleMutex >

Implements spdlog::sinks::sink.

-

Definition at line 53 of file stdout_sinks.h.

+

Definition at line 53 of file stdout_sinks.h.

@@ -429,7 +431,7 @@ template<typename TargetStream , typename ConsoleMutex > + doxygen 1.8.11 diff --git a/docs/classspdlog_1_1sinks_1_1syslog__sink-members.html b/docs/classspdlog_1_1sinks_1_1syslog__sink-members.html index d4463bd..43dc743 100644 --- a/docs/classspdlog_1_1sinks_1_1syslog__sink-members.html +++ b/docs/classspdlog_1_1sinks_1_1syslog__sink-members.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Member List @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -99,7 +119,7 @@ $(document).ready(function(){initNavTree('classspdlog_1_1sinks_1_1syslog__sink.h flush() finalspdlog::sinks::base_sink< Mutex >inlinevirtual flush_() overridespdlog::sinks::syslog_sink< Mutex >inlineprotectedvirtual formatter_spdlog::sinks::sinkprotected - level() constspdlog::sinks::sinkinline + level() const spdlog::sinks::sinkinline level_spdlog::sinks::sinkprotected log(const details::log_msg &msg) finalspdlog::sinks::base_sink< Mutex >inlinevirtual mutex_spdlog::sinks::base_sink< Mutex >protected @@ -110,7 +130,7 @@ $(document).ready(function(){initNavTree('classspdlog_1_1sinks_1_1syslog__sink.h set_level(level::level_enum log_level)spdlog::sinks::sinkinline set_pattern(const std::string &pattern) finalspdlog::sinks::base_sink< Mutex >inlinevirtual set_pattern_(const std::string &pattern)spdlog::sinks::base_sink< Mutex >inlineprotectedvirtual - should_log(level::level_enum msg_level) constspdlog::sinks::sinkinline + should_log(level::level_enum msg_level) const spdlog::sinks::sinkinline sink()=defaultspdlog::sinks::sink sink(std::unique_ptr< spdlog::formatter > formatter)spdlog::sinks::sinkinlineexplicit sink_it_(const details::log_msg &msg) overridespdlog::sinks::syslog_sink< Mutex >inlineprotectedvirtual @@ -125,7 +145,7 @@ $(document).ready(function(){initNavTree('classspdlog_1_1sinks_1_1syslog__sink.h
    + doxygen 1.8.11
diff --git a/docs/classspdlog_1_1sinks_1_1syslog__sink.html b/docs/classspdlog_1_1sinks_1_1syslog__sink.html index a19c10c..687aa46 100644 --- a/docs/classspdlog_1_1sinks_1_1syslog__sink.html +++ b/docs/classspdlog_1_1sinks_1_1syslog__sink.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: spdlog::sinks::syslog_sink< Mutex > Class Template Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -102,11 +122,11 @@ Inheritance diagram for spdlog::sinks::syslog_sink< Mutex >:
- + spdlog::sinks::base_sink< Mutex > spdlog::sinks::sink - -
+ + @@ -140,12 +160,12 @@ Public Member Functions - - + + - - + +

Public Member Functions

 
virtual ~sink ()=default
 
bool should_log (level::level_enum msg_level) const
 
bool should_log (level::level_enum msg_level) const
 
void set_level (level::level_enum log_level)
 
level::level_enum level () const
 
level::level_enum level () const
 
@@ -167,7 +187,7 @@ Additional Inherited Members - +

Protected Member Functions

- Protected Attributes inherited from spdlog::sinks::sink
level_t level_ {level::trace}
 
std::unique_ptr< spdlog::formatterformatter_ {details::make_unique<spdlog::pattern_formatter>()}
std::unique_ptr< spdlog::formatterformatter_ {details::make_unique<spdlog::pattern_formatter>()}
 

Detailed Description

@@ -177,11 +197,9 @@ class spdlog::sinks::syslog_sink< Mutex >

Sink that write to syslog using the syscall() library call.

Locking is not needed, as syslog() itself is thread-safe.

-

Definition at line 26 of file syslog_sink.h.

+

Definition at line 26 of file syslog_sink.h.

Constructor & Destructor Documentation

- -

◆ syslog_sink() [1/2]

- +
@@ -221,13 +239,11 @@ template<typename Mutex >
-

Definition at line 30 of file syslog_sink.h.

+

Definition at line 30 of file syslog_sink.h.

- -

◆ ~syslog_sink()

- +
@@ -250,13 +266,11 @@ template<typename Mutex >
-

Definition at line 45 of file syslog_sink.h.

+

Definition at line 45 of file syslog_sink.h.

- -

◆ syslog_sink() [2/2]

- +
@@ -283,9 +297,7 @@ template<typename Mutex >

Member Function Documentation

- -

◆ flush_()

- +
@@ -310,13 +322,11 @@ template<typename Mutex >

Implements spdlog::sinks::base_sink< Mutex >.

-

Definition at line 59 of file syslog_sink.h.

+

Definition at line 59 of file syslog_sink.h.

- -

◆ operator=()

- +
@@ -342,9 +352,7 @@ template<typename Mutex >
- -

◆ sink_it_()

- +
@@ -370,7 +378,7 @@ template<typename Mutex >

Implements spdlog::sinks::base_sink< Mutex >.

-

Definition at line 54 of file syslog_sink.h.

+

Definition at line 54 of file syslog_sink.h.

@@ -385,7 +393,7 @@ template<typename Mutex > + doxygen 1.8.11 diff --git a/docs/classspdlog_1_1sinks_1_1wincolor__sink-members.html b/docs/classspdlog_1_1sinks_1_1wincolor__sink-members.html index 01019cd..adcc973 100644 --- a/docs/classspdlog_1_1sinks_1_1wincolor__sink-members.html +++ b/docs/classspdlog_1_1sinks_1_1wincolor__sink-members.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Member List @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -96,19 +116,19 @@ $(document).ready(function(){initNavTree('classspdlog_1_1sinks_1_1wincolor__sink - + - + - + - + - - + + @@ -124,7 +144,7 @@ $(document).ready(function(){initNavTree('classspdlog_1_1sinks_1_1wincolor__sink
    + doxygen 1.8.11
diff --git a/docs/classspdlog_1_1sinks_1_1wincolor__sink.html b/docs/classspdlog_1_1sinks_1_1wincolor__sink.html index 98beba4..57c7952 100644 --- a/docs/classspdlog_1_1sinks_1_1wincolor__sink.html +++ b/docs/classspdlog_1_1sinks_1_1wincolor__sink.html @@ -1,10 +1,9 @@ - + - - +Livox SDK API: spdlog::sinks::wincolor_sink< OutHandle, ConsoleMutex > Class Template Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ @@ -39,22 +41,42 @@
BOLDspdlog::sinks::wincolor_sink< OutHandle, ConsoleMutex >
CYANspdlog::sinks::wincolor_sink< OutHandle, ConsoleMutex >
flush() final overridespdlog::sinks::wincolor_sink< OutHandle, ConsoleMutex >inlinevirtual
flush() finaloverridespdlog::sinks::wincolor_sink< OutHandle, ConsoleMutex >inlinevirtual
formatter_spdlog::sinks::sinkprotected
GREENspdlog::sinks::wincolor_sink< OutHandle, ConsoleMutex >
level() constspdlog::sinks::sinkinline
level() const spdlog::sinks::sinkinline
level_spdlog::sinks::sinkprotected
log(const details::log_msg &msg) final overridespdlog::sinks::wincolor_sink< OutHandle, ConsoleMutex >inlinevirtual
log(const details::log_msg &msg) finaloverridespdlog::sinks::wincolor_sink< OutHandle, ConsoleMutex >inlinevirtual
operator=(const wincolor_sink &other)=deletespdlog::sinks::wincolor_sink< OutHandle, ConsoleMutex >
REDspdlog::sinks::wincolor_sink< OutHandle, ConsoleMutex >
set_color(level::level_enum level, WORD color)spdlog::sinks::wincolor_sink< OutHandle, ConsoleMutex >inline
set_formatter(std::unique_ptr< spdlog::formatter > sink_formatter) override finalspdlog::sinks::wincolor_sink< OutHandle, ConsoleMutex >inlinevirtual
set_formatter(std::unique_ptr< spdlog::formatter > sink_formatter) overridefinalspdlog::sinks::wincolor_sink< OutHandle, ConsoleMutex >inlinevirtual
set_level(level::level_enum log_level)spdlog::sinks::sinkinline
set_pattern(const std::string &pattern) override finalspdlog::sinks::wincolor_sink< OutHandle, ConsoleMutex >inlinevirtual
should_log(level::level_enum msg_level) constspdlog::sinks::sinkinline
set_pattern(const std::string &pattern) overridefinalspdlog::sinks::wincolor_sink< OutHandle, ConsoleMutex >inlinevirtual
should_log(level::level_enum msg_level) const spdlog::sinks::sinkinline
sink()=defaultspdlog::sinks::sink
sink(std::unique_ptr< spdlog::formatter > formatter)spdlog::sinks::sinkinlineexplicit
WHITEspdlog::sinks::wincolor_sink< OutHandle, ConsoleMutex >
Livox SDK API -  V2.0.0 +  V2.1.0
- + - - - - + +
@@ -102,10 +122,10 @@ Inheritance diagram for spdlog::sinks::wincolor_sink< OutHandle, ConsoleMutex
- + spdlog::sinks::sink - -
+ +
@@ -117,16 +137,16 @@ Public Member Functions - + - - - - - - - - + + + + + + + + @@ -134,12 +154,12 @@ Public Member Functions - - + + - - + +

Public Member Functions

 
wincolor_sinkoperator= (const wincolor_sink &other)=delete
 
void set_color (level::level_enum level, WORD color)
void set_color (level::level_enum level, WORD color)
 
void log (const details::log_msg &msg) final override
 
void flush () final override
 
void set_pattern (const std::string &pattern) override final
 
void set_formatter (std::unique_ptr< spdlog::formatter > sink_formatter) override final
 
void log (const details::log_msg &msg) finaloverride
 
void flush () finaloverride
 
void set_pattern (const std::string &pattern) overridefinal
 
void set_formatter (std::unique_ptr< spdlog::formatter > sink_formatter) overridefinal
 
- Public Member Functions inherited from spdlog::sinks::sink
 sink ()=default
 
 
virtual ~sink ()=default
 
bool should_log (level::level_enum msg_level) const
 
bool should_log (level::level_enum msg_level) const
 
void set_level (level::level_enum log_level)
 
level::level_enum level () const
 
level::level_enum level () const
 
@@ -161,7 +181,7 @@ Additional Inherited Members - +

Public Attributes

- Protected Attributes inherited from spdlog::sinks::sink
level_t level_ {level::trace}
 
std::unique_ptr< spdlog::formatterformatter_ {details::make_unique<spdlog::pattern_formatter>()}
std::unique_ptr< spdlog::formatterformatter_ {details::make_unique<spdlog::pattern_formatter>()}
 

Detailed Description

@@ -169,11 +189,9 @@ Additional Inherited Members class spdlog::sinks::wincolor_sink< OutHandle, ConsoleMutex > -

Definition at line 30 of file wincolor_sink.h.

+

Definition at line 30 of file wincolor_sink.h.

Constructor & Destructor Documentation

- -

◆ wincolor_sink() [1/2]

- +
@@ -196,13 +214,11 @@ template<typename OutHandle , typename ConsoleMutex >
-

Definition at line 40 of file wincolor_sink.h.

+

Definition at line 40 of file wincolor_sink.h.

- -

◆ ~wincolor_sink()

- +
@@ -225,13 +241,11 @@ template<typename OutHandle , typename ConsoleMutex >
-

Definition at line 53 of file wincolor_sink.h.

+

Definition at line 53 of file wincolor_sink.h.

- -

◆ wincolor_sink() [2/2]

- +
@@ -258,9 +272,7 @@ template<typename OutHandle , typename ConsoleMutex >

Member Function Documentation

- -

◆ flush()

- +
@@ -285,13 +297,11 @@ template<typename OutHandle , typename ConsoleMutex >

Implements spdlog::sinks::sink.

-

Definition at line 92 of file wincolor_sink.h.

+

Definition at line 92 of file wincolor_sink.h.

- -

◆ log()

- +
@@ -317,13 +327,11 @@ template<typename OutHandle , typename ConsoleMutex >

Implements spdlog::sinks::sink.

-

Definition at line 68 of file wincolor_sink.h.

+

Definition at line 68 of file wincolor_sink.h.

- -

◆ operator=()

- +
@@ -349,9 +357,7 @@ template<typename OutHandle , typename ConsoleMutex >
- -

◆ set_color()

- +
@@ -385,13 +391,11 @@ template<typename OutHandle , typename ConsoleMutex >
-

Definition at line 62 of file wincolor_sink.h.

+

Definition at line 62 of file wincolor_sink.h.

- -

◆ set_formatter()

- +
@@ -417,13 +421,11 @@ template<typename OutHandle , typename ConsoleMutex >

Implements spdlog::sinks::sink.

-

Definition at line 103 of file wincolor_sink.h.

+

Definition at line 103 of file wincolor_sink.h.

- -

◆ set_pattern()

- +
@@ -449,14 +451,12 @@ template<typename OutHandle , typename ConsoleMutex >

Implements spdlog::sinks::sink.

-

Definition at line 97 of file wincolor_sink.h.

+

Definition at line 97 of file wincolor_sink.h.

Member Data Documentation

- -

◆ BOLD

- +
@@ -468,13 +468,11 @@ template<typename OutHandle , typename ConsoleMutex >
-

Definition at line 33 of file wincolor_sink.h.

+

Definition at line 33 of file wincolor_sink.h.

- -

◆ CYAN

- +
@@ -486,13 +484,11 @@ template<typename OutHandle , typename ConsoleMutex >
-

Definition at line 36 of file wincolor_sink.h.

+

Definition at line 36 of file wincolor_sink.h.

- -

◆ GREEN

- +
@@ -504,13 +500,11 @@ template<typename OutHandle , typename ConsoleMutex >
-

Definition at line 35 of file wincolor_sink.h.

+

Definition at line 35 of file wincolor_sink.h.

- -

◆ RED

- +
@@ -522,13 +516,11 @@ template<typename OutHandle , typename ConsoleMutex >
-

Definition at line 34 of file wincolor_sink.h.

+

Definition at line 34 of file wincolor_sink.h.

- -

◆ WHITE

- +
@@ -540,13 +532,11 @@ template<typename OutHandle , typename ConsoleMutex >
-

Definition at line 37 of file wincolor_sink.h.

+

Definition at line 37 of file wincolor_sink.h.

- -

◆ YELLOW

- +
@@ -558,7 +548,7 @@ template<typename OutHandle , typename ConsoleMutex >
-

Definition at line 38 of file wincolor_sink.h.

+

Definition at line 38 of file wincolor_sink.h.

@@ -573,7 +563,7 @@ template<typename OutHandle , typename ConsoleMutex > + doxygen 1.8.11 diff --git a/docs/classspdlog_1_1sinks_1_1wincolor__sink.js b/docs/classspdlog_1_1sinks_1_1wincolor__sink.js index fa64d83..a6af06e 100644 --- a/docs/classspdlog_1_1sinks_1_1wincolor__sink.js +++ b/docs/classspdlog_1_1sinks_1_1wincolor__sink.js @@ -3,12 +3,12 @@ var classspdlog_1_1sinks_1_1wincolor__sink = [ "wincolor_sink", "classspdlog_1_1sinks_1_1wincolor__sink.html#a4ed05c6780bc65806080c88202d80577", null ], [ "~wincolor_sink", "classspdlog_1_1sinks_1_1wincolor__sink.html#a229d666b7880d587aefa8c5d999acfb4", null ], [ "wincolor_sink", "classspdlog_1_1sinks_1_1wincolor__sink.html#a89e2ddbd1297c8c722d63277b458b5c1", null ], - [ "flush", "classspdlog_1_1sinks_1_1wincolor__sink.html#a3746a35fc36218e76dc3080e52fe6233", null ], - [ "log", "classspdlog_1_1sinks_1_1wincolor__sink.html#a64d98363a05d1a7a4f295f6de1b5cec1", null ], + [ "flush", "classspdlog_1_1sinks_1_1wincolor__sink.html#ae2737f6eadcaf2023810c8a0f0518924", null ], + [ "log", "classspdlog_1_1sinks_1_1wincolor__sink.html#ad2408ac4697dfee3c6631ceae432da64", null ], [ "operator=", "classspdlog_1_1sinks_1_1wincolor__sink.html#a54ca784b8f5e1ee9c2adcda3125c3515", null ], [ "set_color", "classspdlog_1_1sinks_1_1wincolor__sink.html#a914a0d9aed02627be8cd287a2dee9916", null ], - [ "set_formatter", "classspdlog_1_1sinks_1_1wincolor__sink.html#a48cc1a252565bdbb66b12ba2a40e62f9", null ], - [ "set_pattern", "classspdlog_1_1sinks_1_1wincolor__sink.html#a5032da6fc760507134a7d1eff1a20b0a", null ], + [ "set_formatter", "classspdlog_1_1sinks_1_1wincolor__sink.html#ae9d81f19a78193d0b6da7854ffaa7b23", null ], + [ "set_pattern", "classspdlog_1_1sinks_1_1wincolor__sink.html#a61ce970e409e842377a1cf2c764553f1", null ], [ "BOLD", "classspdlog_1_1sinks_1_1wincolor__sink.html#a77ef730edcfe9f6f000bed8c846aa6bf", null ], [ "CYAN", "classspdlog_1_1sinks_1_1wincolor__sink.html#a6cbc30363fd20b20c1cd0f22211f0612", null ], [ "GREEN", "classspdlog_1_1sinks_1_1wincolor__sink.html#a39daa889c7395936e2caf95baf2c4181", null ], diff --git a/docs/classspdlog_1_1spdlog__ex-members.html b/docs/classspdlog_1_1spdlog__ex-members.html index 2f957c1..31c0cda 100644 --- a/docs/classspdlog_1_1spdlog__ex-members.html +++ b/docs/classspdlog_1_1spdlog__ex-members.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Member List @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -96,7 +116,7 @@ $(document).ready(function(){initNavTree('classspdlog_1_1spdlog__ex.html','');}) - +
spdlog_ex(std::string msg)spdlog::spdlog_exinlineexplicit
spdlog_ex(const std::string &msg, int last_errno)spdlog::spdlog_exinline
what() const noexcept overridespdlog::spdlog_exinline
what() const noexceptoverridespdlog::spdlog_exinline
@@ -104,7 +124,7 @@ $(document).ready(function(){initNavTree('classspdlog_1_1spdlog__ex.html','');})
    + doxygen 1.8.11
diff --git a/docs/classspdlog_1_1spdlog__ex.html b/docs/classspdlog_1_1spdlog__ex.html index 94f3267..8daf3c2 100644 --- a/docs/classspdlog_1_1spdlog__ex.html +++ b/docs/classspdlog_1_1spdlog__ex.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: spdlog::spdlog_ex Class Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -100,7 +120,9 @@ $(document).ready(function(){initNavTree('classspdlog_1_1spdlog__ex.html','');}) Inheritance diagram for spdlog::spdlog_ex:
- + + +
- - + +

@@ -109,16 +131,14 @@ Public Member Functions

 
 spdlog_ex (const std::string &msg, int last_errno)
 
const char * what () const noexcept override
 
const char * what () const noexceptoverride
 

Detailed Description

-

Definition at line 175 of file common.h.

+

Definition at line 175 of file common.h.

Constructor & Destructor Documentation

- -

◆ spdlog_ex() [1/2]

- +
@@ -140,13 +160,11 @@ Public Member Functions
-

Definition at line 178 of file common.h.

+

Definition at line 178 of file common.h.

- -

◆ spdlog_ex() [2/2]

- +
@@ -178,14 +196,12 @@ Public Member Functions
-

Definition at line 183 of file common.h.

+

Definition at line 183 of file common.h.

Member Function Documentation

- -

◆ what()

- +
@@ -206,7 +222,7 @@ Public Member Functions
-

Definition at line 190 of file common.h.

+

Definition at line 190 of file common.h.

@@ -221,7 +237,7 @@ Public Member Functions + doxygen 1.8.11 diff --git a/docs/classspdlog_1_1spdlog__ex.js b/docs/classspdlog_1_1spdlog__ex.js index d61dd40..a105c49 100644 --- a/docs/classspdlog_1_1spdlog__ex.js +++ b/docs/classspdlog_1_1spdlog__ex.js @@ -2,5 +2,5 @@ var classspdlog_1_1spdlog__ex = [ [ "spdlog_ex", "classspdlog_1_1spdlog__ex.html#a95052672da1a71145ac56d143b751b3f", null ], [ "spdlog_ex", "classspdlog_1_1spdlog__ex.html#a0758933dd1e6c4c8e76bb8e7134f7d9b", null ], - [ "what", "classspdlog_1_1spdlog__ex.html#abb3438f30d2e0fffb037931e8867f523", null ] + [ "what", "classspdlog_1_1spdlog__ex.html#a7f1ffdbacfd99191496267c01a69ca9a", null ] ]; \ No newline at end of file diff --git a/docs/classstd_1_1numeric__limits_3_01fmt_1_1internal_1_1dummy__int_01_4-members.html b/docs/classstd_1_1numeric__limits_3_01fmt_1_1internal_1_1dummy__int_01_4-members.html index 94ccfa5..1c14083 100644 --- a/docs/classstd_1_1numeric__limits_3_01fmt_1_1internal_1_1dummy__int_01_4-members.html +++ b/docs/classstd_1_1numeric__limits_3_01fmt_1_1internal_1_1dummy__int_01_4-members.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Member List @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -103,7 +123,7 @@ $(document).ready(function(){initNavTree('classstd_1_1numeric__limits_3_01fmt_1_
    + doxygen 1.8.11
diff --git a/docs/classstd_1_1numeric__limits_3_01fmt_1_1internal_1_1dummy__int_01_4.html b/docs/classstd_1_1numeric__limits_3_01fmt_1_1internal_1_1dummy__int_01_4.html index 12b109e..b6e4024 100644 --- a/docs/classstd_1_1numeric__limits_3_01fmt_1_1internal_1_1dummy__int_01_4.html +++ b/docs/classstd_1_1numeric__limits_3_01fmt_1_1internal_1_1dummy__int_01_4.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: std::numeric_limits< fmt::internal::dummy_int > Class Template Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,42 @@ - + - - - - + +
@@ -100,7 +120,9 @@ $(document).ready(function(){initNavTree('classstd_1_1numeric__limits_3_01fmt_1_ Inheritance diagram for std::numeric_limits< fmt::internal::dummy_int >:
- + + +
class std::numeric_limits< fmt::internal::dummy_int > -

Definition at line 303 of file format.h.

+

Definition at line 303 of file format.h.

Member Function Documentation

- -

◆ isinfinity()

- +
@@ -145,13 +165,11 @@ template<typename T >

@@ -117,11 +139,9 @@ Static Public Member Functions

-

Definition at line 308 of file format.h.

+

Definition at line 308 of file format.h.

- -

◆ isnotanumber()

- +
@@ -175,7 +193,7 @@ template<typename T >
-

Definition at line 319 of file format.h.

+

Definition at line 319 of file format.h.

@@ -190,7 +208,7 @@ template<typename T > + doxygen 1.8.11 diff --git a/docs/color_8h.html b/docs/color_8h.html index 12947a2..de19de6 100644 --- a/docs/color_8h.html +++ b/docs/color_8h.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: sdk_core/include/third_party/spdlog/spdlog/fmt/bundled/color.h File Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,40 @@ - + - - - - + +
@@ -370,12 +388,12 @@ Functions template<typename S , typename Char = typename internal::char_t<S>::type> void fmt::v5::vprint (std::FILE *f, const text_style &ts, const S &format, basic_format_args< typename buffer_context< Char >::type > args)   -template<typename String , typename... Args> -std::enable_if< internal::is_string< String >::value >::type fmt::v5::print (std::FILE *f, const text_style &ts, const String &format_str, const Args &... args) -  -template<typename String , typename... Args> -std::enable_if< internal::is_string< String >::value >::type fmt::v5::print (const text_style &ts, const String &format_str, const Args &... args) -  +template<typename String , typename... Args> +std::enable_if< internal::is_string< String >::value >::type fmt::v5::print (std::FILE *f, const text_style &ts, const String &format_str, const Args &...args) +  +template<typename String , typename... Args> +std::enable_if< internal::is_string< String >::value >::type fmt::v5::print (const text_style &ts, const String &format_str, const Args &...args) + 
@@ -385,7 +403,7 @@ Functions + doxygen 1.8.11 diff --git a/docs/color_8h.js b/docs/color_8h.js index d9d5ac1..ee2676e 100644 --- a/docs/color_8h.js +++ b/docs/color_8h.js @@ -182,8 +182,8 @@ var color_8h = [ "make_emphasis", "color_8h.html#a8ef34ce57c1deb6af9b8c62f27edb49c", null ], [ "make_foreground_color", "color_8h.html#ae4693bb9287d6264cdbded4233e707c0", null ], [ "operator|", "color_8h.html#a7e5a3d7f521a367387e1191c7893a240", null ], - [ "print", "color_8h.html#a7373458bc3acf69f580a4ead0ebc159f", null ], - [ "print", "color_8h.html#ab1d87084097ae33226e005179e09befd", null ], + [ "print", "color_8h.html#ae5de564f1a27b01b867e11543f2292ed", null ], + [ "print", "color_8h.html#a494680e244e77c39621cf03cb67ac236", null ], [ "reset_color", "color_8h.html#a3c469199b831e4d4d2b3728bb8e99b1f", null ], [ "reset_color< wchar_t >", "color_8h.html#acba41814a0db9856bd9785841f7aa4a0", null ], [ "vprint", "color_8h.html#a4df07cd85241561a9b8ce9a7351b1606", null ] diff --git a/docs/color_8h_source.html b/docs/color_8h_source.html index 8eac283..038736c 100644 --- a/docs/color_8h_source.html +++ b/docs/color_8h_source.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: sdk_core/include/third_party/spdlog/spdlog/fmt/bundled/color.h Source File @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,40 @@ - + - - - - + +
@@ -91,804 +109,241 @@ $(document).ready(function(){initNavTree('color_8h_source.html','');});
color.h
-Go to the documentation of this file.
1 // Formatting library for C++ - color support
-
2 //
-
3 // Copyright (c) 2018 - present, Victor Zverovich and fmt contributors
-
4 // All rights reserved.
-
5 //
-
6 // For the license information refer to format.h.
-
7 
-
8 #ifndef FMT_COLOR_H_
-
9 #define FMT_COLOR_H_
-
10 
-
11 #include "format.h"
-
12 
- -
14 
-
15 #ifdef FMT_DEPRECATED_COLORS
-
16 
-
17 // color and (v)print_colored are deprecated.
-
18 enum color { black, red, green, yellow, blue, magenta, cyan, white };
-
19 FMT_API void vprint_colored(color c, string_view format, format_args args);
-
20 FMT_API void vprint_colored(color c, wstring_view format, wformat_args args);
-
21 template <typename... Args>
-
22 inline void print_colored(color c, string_view format_str,
-
23  const Args & ... args) {
-
24  vprint_colored(c, format_str, make_format_args(args...));
-
25 }
-
26 template <typename... Args>
-
27 inline void print_colored(color c, wstring_view format_str,
-
28  const Args & ... args) {
-
29  vprint_colored(c, format_str, make_format_args<wformat_context>(args...));
-
30 }
-
31 
-
32 inline void vprint_colored(color c, string_view format, format_args args) {
-
33  char escape[] = "\x1b[30m";
-
34  escape[3] = static_cast<char>('0' + c);
-
35  std::fputs(escape, stdout);
-
36  vprint(format, args);
-
37  std::fputs(internal::data::RESET_COLOR, stdout);
-
38 }
-
39 
-
40 inline void vprint_colored(color c, wstring_view format, wformat_args args) {
-
41  wchar_t escape[] = L"\x1b[30m";
-
42  escape[3] = static_cast<wchar_t>('0' + c);
-
43  std::fputws(escape, stdout);
-
44  vprint(format, args);
-
45  std::fputws(internal::data::WRESET_COLOR, stdout);
-
46 }
-
47 
-
48 #else
-
49 
-
50 enum class color : uint32_t {
-
51  alice_blue = 0xF0F8FF, // rgb(240,248,255)
-
52  antique_white = 0xFAEBD7, // rgb(250,235,215)
-
53  aqua = 0x00FFFF, // rgb(0,255,255)
-
54  aquamarine = 0x7FFFD4, // rgb(127,255,212)
-
55  azure = 0xF0FFFF, // rgb(240,255,255)
-
56  beige = 0xF5F5DC, // rgb(245,245,220)
-
57  bisque = 0xFFE4C4, // rgb(255,228,196)
-
58  black = 0x000000, // rgb(0,0,0)
-
59  blanched_almond = 0xFFEBCD, // rgb(255,235,205)
-
60  blue = 0x0000FF, // rgb(0,0,255)
-
61  blue_violet = 0x8A2BE2, // rgb(138,43,226)
-
62  brown = 0xA52A2A, // rgb(165,42,42)
-
63  burly_wood = 0xDEB887, // rgb(222,184,135)
-
64  cadet_blue = 0x5F9EA0, // rgb(95,158,160)
-
65  chartreuse = 0x7FFF00, // rgb(127,255,0)
-
66  chocolate = 0xD2691E, // rgb(210,105,30)
-
67  coral = 0xFF7F50, // rgb(255,127,80)
-
68  cornflower_blue = 0x6495ED, // rgb(100,149,237)
-
69  cornsilk = 0xFFF8DC, // rgb(255,248,220)
-
70  crimson = 0xDC143C, // rgb(220,20,60)
-
71  cyan = 0x00FFFF, // rgb(0,255,255)
-
72  dark_blue = 0x00008B, // rgb(0,0,139)
-
73  dark_cyan = 0x008B8B, // rgb(0,139,139)
-
74  dark_golden_rod = 0xB8860B, // rgb(184,134,11)
-
75  dark_gray = 0xA9A9A9, // rgb(169,169,169)
-
76  dark_green = 0x006400, // rgb(0,100,0)
-
77  dark_khaki = 0xBDB76B, // rgb(189,183,107)
-
78  dark_magenta = 0x8B008B, // rgb(139,0,139)
-
79  dark_olive_green = 0x556B2F, // rgb(85,107,47)
-
80  dark_orange = 0xFF8C00, // rgb(255,140,0)
-
81  dark_orchid = 0x9932CC, // rgb(153,50,204)
-
82  dark_red = 0x8B0000, // rgb(139,0,0)
-
83  dark_salmon = 0xE9967A, // rgb(233,150,122)
-
84  dark_sea_green = 0x8FBC8F, // rgb(143,188,143)
-
85  dark_slate_blue = 0x483D8B, // rgb(72,61,139)
-
86  dark_slate_gray = 0x2F4F4F, // rgb(47,79,79)
-
87  dark_turquoise = 0x00CED1, // rgb(0,206,209)
-
88  dark_violet = 0x9400D3, // rgb(148,0,211)
-
89  deep_pink = 0xFF1493, // rgb(255,20,147)
-
90  deep_sky_blue = 0x00BFFF, // rgb(0,191,255)
-
91  dim_gray = 0x696969, // rgb(105,105,105)
-
92  dodger_blue = 0x1E90FF, // rgb(30,144,255)
-
93  fire_brick = 0xB22222, // rgb(178,34,34)
-
94  floral_white = 0xFFFAF0, // rgb(255,250,240)
-
95  forest_green = 0x228B22, // rgb(34,139,34)
-
96  fuchsia = 0xFF00FF, // rgb(255,0,255)
-
97  gainsboro = 0xDCDCDC, // rgb(220,220,220)
-
98  ghost_white = 0xF8F8FF, // rgb(248,248,255)
-
99  gold = 0xFFD700, // rgb(255,215,0)
-
100  golden_rod = 0xDAA520, // rgb(218,165,32)
-
101  gray = 0x808080, // rgb(128,128,128)
-
102  green = 0x008000, // rgb(0,128,0)
-
103  green_yellow = 0xADFF2F, // rgb(173,255,47)
-
104  honey_dew = 0xF0FFF0, // rgb(240,255,240)
-
105  hot_pink = 0xFF69B4, // rgb(255,105,180)
-
106  indian_red = 0xCD5C5C, // rgb(205,92,92)
-
107  indigo = 0x4B0082, // rgb(75,0,130)
-
108  ivory = 0xFFFFF0, // rgb(255,255,240)
-
109  khaki = 0xF0E68C, // rgb(240,230,140)
-
110  lavender = 0xE6E6FA, // rgb(230,230,250)
-
111  lavender_blush = 0xFFF0F5, // rgb(255,240,245)
-
112  lawn_green = 0x7CFC00, // rgb(124,252,0)
-
113  lemon_chiffon = 0xFFFACD, // rgb(255,250,205)
-
114  light_blue = 0xADD8E6, // rgb(173,216,230)
-
115  light_coral = 0xF08080, // rgb(240,128,128)
-
116  light_cyan = 0xE0FFFF, // rgb(224,255,255)
-
117  light_golden_rod_yellow = 0xFAFAD2, // rgb(250,250,210)
-
118  light_gray = 0xD3D3D3, // rgb(211,211,211)
-
119  light_green = 0x90EE90, // rgb(144,238,144)
-
120  light_pink = 0xFFB6C1, // rgb(255,182,193)
-
121  light_salmon = 0xFFA07A, // rgb(255,160,122)
-
122  light_sea_green = 0x20B2AA, // rgb(32,178,170)
-
123  light_sky_blue = 0x87CEFA, // rgb(135,206,250)
-
124  light_slate_gray = 0x778899, // rgb(119,136,153)
-
125  light_steel_blue = 0xB0C4DE, // rgb(176,196,222)
-
126  light_yellow = 0xFFFFE0, // rgb(255,255,224)
-
127  lime = 0x00FF00, // rgb(0,255,0)
-
128  lime_green = 0x32CD32, // rgb(50,205,50)
-
129  linen = 0xFAF0E6, // rgb(250,240,230)
-
130  magenta = 0xFF00FF, // rgb(255,0,255)
-
131  maroon = 0x800000, // rgb(128,0,0)
-
132  medium_aquamarine = 0x66CDAA, // rgb(102,205,170)
-
133  medium_blue = 0x0000CD, // rgb(0,0,205)
-
134  medium_orchid = 0xBA55D3, // rgb(186,85,211)
-
135  medium_purple = 0x9370DB, // rgb(147,112,219)
-
136  medium_sea_green = 0x3CB371, // rgb(60,179,113)
-
137  medium_slate_blue = 0x7B68EE, // rgb(123,104,238)
-
138  medium_spring_green = 0x00FA9A, // rgb(0,250,154)
-
139  medium_turquoise = 0x48D1CC, // rgb(72,209,204)
-
140  medium_violet_red = 0xC71585, // rgb(199,21,133)
-
141  midnight_blue = 0x191970, // rgb(25,25,112)
-
142  mint_cream = 0xF5FFFA, // rgb(245,255,250)
-
143  misty_rose = 0xFFE4E1, // rgb(255,228,225)
-
144  moccasin = 0xFFE4B5, // rgb(255,228,181)
-
145  navajo_white = 0xFFDEAD, // rgb(255,222,173)
-
146  navy = 0x000080, // rgb(0,0,128)
-
147  old_lace = 0xFDF5E6, // rgb(253,245,230)
-
148  olive = 0x808000, // rgb(128,128,0)
-
149  olive_drab = 0x6B8E23, // rgb(107,142,35)
-
150  orange = 0xFFA500, // rgb(255,165,0)
-
151  orange_red = 0xFF4500, // rgb(255,69,0)
-
152  orchid = 0xDA70D6, // rgb(218,112,214)
-
153  pale_golden_rod = 0xEEE8AA, // rgb(238,232,170)
-
154  pale_green = 0x98FB98, // rgb(152,251,152)
-
155  pale_turquoise = 0xAFEEEE, // rgb(175,238,238)
-
156  pale_violet_red = 0xDB7093, // rgb(219,112,147)
-
157  papaya_whip = 0xFFEFD5, // rgb(255,239,213)
-
158  peach_puff = 0xFFDAB9, // rgb(255,218,185)
-
159  peru = 0xCD853F, // rgb(205,133,63)
-
160  pink = 0xFFC0CB, // rgb(255,192,203)
-
161  plum = 0xDDA0DD, // rgb(221,160,221)
-
162  powder_blue = 0xB0E0E6, // rgb(176,224,230)
-
163  purple = 0x800080, // rgb(128,0,128)
-
164  rebecca_purple = 0x663399, // rgb(102,51,153)
-
165  red = 0xFF0000, // rgb(255,0,0)
-
166  rosy_brown = 0xBC8F8F, // rgb(188,143,143)
-
167  royal_blue = 0x4169E1, // rgb(65,105,225)
-
168  saddle_brown = 0x8B4513, // rgb(139,69,19)
-
169  salmon = 0xFA8072, // rgb(250,128,114)
-
170  sandy_brown = 0xF4A460, // rgb(244,164,96)
-
171  sea_green = 0x2E8B57, // rgb(46,139,87)
-
172  sea_shell = 0xFFF5EE, // rgb(255,245,238)
-
173  sienna = 0xA0522D, // rgb(160,82,45)
-
174  silver = 0xC0C0C0, // rgb(192,192,192)
-
175  sky_blue = 0x87CEEB, // rgb(135,206,235)
-
176  slate_blue = 0x6A5ACD, // rgb(106,90,205)
-
177  slate_gray = 0x708090, // rgb(112,128,144)
-
178  snow = 0xFFFAFA, // rgb(255,250,250)
-
179  spring_green = 0x00FF7F, // rgb(0,255,127)
-
180  steel_blue = 0x4682B4, // rgb(70,130,180)
-
181  tan = 0xD2B48C, // rgb(210,180,140)
-
182  teal = 0x008080, // rgb(0,128,128)
-
183  thistle = 0xD8BFD8, // rgb(216,191,216)
-
184  tomato = 0xFF6347, // rgb(255,99,71)
-
185  turquoise = 0x40E0D0, // rgb(64,224,208)
-
186  violet = 0xEE82EE, // rgb(238,130,238)
-
187  wheat = 0xF5DEB3, // rgb(245,222,179)
-
188  white = 0xFFFFFF, // rgb(255,255,255)
-
189  white_smoke = 0xF5F5F5, // rgb(245,245,245)
-
190  yellow = 0xFFFF00, // rgb(255,255,0)
-
191  yellow_green = 0x9ACD32 // rgb(154,205,50)
-
192 }; // enum class color
-
193 
-
194 enum class terminal_color : uint8_t {
-
195  black = 30,
-
196  red,
-
197  green,
-
198  yellow,
-
199  blue,
-
200  magenta,
-
201  cyan,
-
202  white,
-
203  bright_black = 90,
-
204  bright_red,
-
205  bright_green,
- -
207  bright_blue,
- -
209  bright_cyan,
- -
211 }; // enum class terminal_color
-
212 
-
213 enum class emphasis : uint8_t {
-
214  bold = 1,
-
215  italic = 1 << 1,
-
216  underline = 1 << 2,
-
217  strikethrough = 1 << 3
-
218 }; // enum class emphasis
-
219 
-
220 // rgb is a struct for red, green and blue colors.
-
221 // We use rgb as name because some editors will show it as color direct in the
-
222 // editor.
-
223 struct rgb {
-
224  FMT_CONSTEXPR_DECL rgb() : r(0), g(0), b(0) {}
-
225  FMT_CONSTEXPR_DECL rgb(uint8_t r_, uint8_t g_, uint8_t b_)
-
226  : r(r_), g(g_), b(b_) {}
-
227  FMT_CONSTEXPR_DECL rgb(uint32_t hex)
-
228  : r((hex >> 16) & 0xFF), g((hex >> 8) & 0xFF), b((hex) & 0xFF) {}
- -
230  : r((uint32_t(hex) >> 16) & 0xFF), g((uint32_t(hex) >> 8) & 0xFF),
-
231  b(uint32_t(hex) & 0xFF) {}
-
232  uint8_t r;
-
233  uint8_t g;
-
234  uint8_t b;
-
235 };
-
236 
-
237 namespace internal {
-
238 
-
239 // color is a struct of either a rgb color or a terminal color.
-
240 struct color_type {
- -
242  : is_rgb(), value{} {}
- -
244  : is_rgb(true), value{} {
-
245  value.rgb_color = static_cast<uint32_t>(rgb_color);
-
246  }
- -
248  : is_rgb(true), value{} {
-
249  value.rgb_color = (static_cast<uint32_t>(rgb_color.r) << 16)
-
250  | (static_cast<uint32_t>(rgb_color.g) << 8) | rgb_color.b;
-
251  }
- -
253  : is_rgb(), value{} {
-
254  value.term_color = static_cast<uint8_t>(term_color);
-
255  }
-
256  bool is_rgb;
-
257  union color_union {
-
258  uint8_t term_color;
-
259  uint32_t rgb_color;
-
260  } value;
-
261 };
-
262 } // namespace internal
-
263 
-
264 // Experimental text formatting support.
-
265 class text_style {
-
266  public:
- -
268  : set_foreground_color(), set_background_color(), ems(em) {}
-
269 
- -
271  if (!set_foreground_color) {
-
272  set_foreground_color = rhs.set_foreground_color;
-
273  foreground_color = rhs.foreground_color;
-
274  } else if (rhs.set_foreground_color) {
-
275  if (!foreground_color.is_rgb || !rhs.foreground_color.is_rgb)
-
276  throw format_error("can't OR a terminal color");
-
277  foreground_color.value.rgb_color |= rhs.foreground_color.value.rgb_color;
-
278  }
-
279 
-
280  if (!set_background_color) {
-
281  set_background_color = rhs.set_background_color;
-
282  background_color = rhs.background_color;
-
283  } else if (rhs.set_background_color) {
-
284  if (!background_color.is_rgb || !rhs.background_color.is_rgb)
-
285  throw format_error("can't OR a terminal color");
-
286  background_color.value.rgb_color |= rhs.background_color.value.rgb_color;
-
287  }
-
288 
-
289  ems = static_cast<emphasis>(static_cast<uint8_t>(ems) |
-
290  static_cast<uint8_t>(rhs.ems));
-
291  return *this;
-
292  }
-
293 
-
294  friend FMT_CONSTEXPR
- -
296  return lhs |= rhs;
-
297  }
-
298 
- -
300  if (!set_foreground_color) {
-
301  set_foreground_color = rhs.set_foreground_color;
-
302  foreground_color = rhs.foreground_color;
-
303  } else if (rhs.set_foreground_color) {
-
304  if (!foreground_color.is_rgb || !rhs.foreground_color.is_rgb)
-
305  throw format_error("can't AND a terminal color");
-
306  foreground_color.value.rgb_color &= rhs.foreground_color.value.rgb_color;
-
307  }
-
308 
-
309  if (!set_background_color) {
-
310  set_background_color = rhs.set_background_color;
-
311  background_color = rhs.background_color;
-
312  } else if (rhs.set_background_color) {
-
313  if (!background_color.is_rgb || !rhs.background_color.is_rgb)
-
314  throw format_error("can't AND a terminal color");
-
315  background_color.value.rgb_color &= rhs.background_color.value.rgb_color;
-
316  }
-
317 
-
318  ems = static_cast<emphasis>(static_cast<uint8_t>(ems) &
-
319  static_cast<uint8_t>(rhs.ems));
-
320  return *this;
-
321  }
-
322 
-
323  friend FMT_CONSTEXPR
- -
325  return lhs &= rhs;
-
326  }
-
327 
- -
329  return set_foreground_color;
-
330  }
- -
332  return set_background_color;
-
333  }
- -
335  return static_cast<uint8_t>(ems) != 0;
-
336  }
- -
338  assert(has_foreground() && "no foreground specified for this style");
-
339  return foreground_color;
-
340  }
- -
342  assert(has_background() && "no background specified for this style");
-
343  return background_color;
-
344  }
- -
346  assert(has_emphasis() && "no emphasis specified for this style");
-
347  return ems;
-
348  }
-
349 
-
350 private:
-
351  FMT_CONSTEXPR text_style(bool is_foreground,
- -
353  : set_foreground_color(),
-
354  set_background_color(),
-
355  ems() {
-
356  if (is_foreground) {
-
357  foreground_color = text_color;
-
358  set_foreground_color = true;
-
359  } else {
-
360  background_color = text_color;
-
361  set_background_color = true;
-
362  }
-
363  }
-
364 
-
365  friend FMT_CONSTEXPR_DECL text_style fg(internal::color_type foreground)
-
366  FMT_NOEXCEPT;
-
367  friend FMT_CONSTEXPR_DECL text_style bg(internal::color_type background)
-
368  FMT_NOEXCEPT;
-
369 
-
370  internal::color_type foreground_color;
-
371  internal::color_type background_color;
-
372  bool set_foreground_color;
-
373  bool set_background_color;
-
374  emphasis ems;
-
375 };
-
376 
- -
378  return text_style(/*is_foreground=*/true, foreground);
-
379 }
-
380 
- -
382  return text_style(/*is_foreground=*/false, background);
-
383 }
-
384 
- -
386  return text_style(lhs) | rhs;
-
387 }
-
388 
-
389 namespace internal {
-
390 
-
391 template <typename Char>
- - -
394  const char * esc) FMT_NOEXCEPT {
-
395  // If we have a terminal color, we need to output another escape code
-
396  // sequence.
-
397  if (!text_color.is_rgb) {
-
398  bool is_background = esc == internal::data::BACKGROUND_COLOR;
-
399  uint32_t value = text_color.value.term_color;
-
400  // Background ASCII codes are the same as the foreground ones but with
-
401  // 10 more.
-
402  if (is_background)
-
403  value += 10u;
-
404 
-
405  std::size_t index = 0;
-
406  buffer[index++] = static_cast<Char>('\x1b');
-
407  buffer[index++] = static_cast<Char>('[');
-
408 
-
409  if (value >= 100u) {
-
410  buffer[index++] = static_cast<Char>('1');
-
411  value %= 100u;
-
412  }
-
413  buffer[index++] = static_cast<Char>('0' + value / 10u);
-
414  buffer[index++] = static_cast<Char>('0' + value % 10u);
-
415 
-
416  buffer[index++] = static_cast<Char>('m');
-
417  buffer[index++] = static_cast<Char>('\0');
-
418  return;
-
419  }
-
420 
-
421  for (int i = 0; i < 7; i++) {
-
422  buffer[i] = static_cast<Char>(esc[i]);
-
423  }
-
424  rgb color(text_color.value.rgb_color);
-
425  to_esc(color.r, buffer + 7, ';');
-
426  to_esc(color.g, buffer + 11, ';');
-
427  to_esc(color.b, buffer + 15, 'm');
-
428  buffer[19] = static_cast<Char>(0);
-
429  }
- -
431  uint8_t em_codes[4] = {};
-
432  uint8_t em_bits = static_cast<uint8_t>(em);
-
433  if (em_bits & static_cast<uint8_t>(emphasis::bold))
-
434  em_codes[0] = 1;
-
435  if (em_bits & static_cast<uint8_t>(emphasis::italic))
-
436  em_codes[1] = 3;
-
437  if (em_bits & static_cast<uint8_t>(emphasis::underline))
-
438  em_codes[2] = 4;
-
439  if (em_bits & static_cast<uint8_t>(emphasis::strikethrough))
-
440  em_codes[3] = 9;
-
441 
-
442  std::size_t index = 0;
-
443  for (int i = 0; i < 4; ++i) {
-
444  if (!em_codes[i])
-
445  continue;
-
446  buffer[index++] = static_cast<Char>('\x1b');
-
447  buffer[index++] = static_cast<Char>('[');
-
448  buffer[index++] = static_cast<Char>('0' + em_codes[i]);
-
449  buffer[index++] = static_cast<Char>('m');
-
450  }
-
451  buffer[index++] = static_cast<Char>(0);
-
452  }
-
453  FMT_CONSTEXPR operator const Char *() const FMT_NOEXCEPT { return buffer; }
-
454 
-
455 private:
-
456  Char buffer[7u + 3u * 4u + 1u];
-
457 
-
458  static FMT_CONSTEXPR void to_esc(uint8_t c, Char *out,
-
459  char delimiter) FMT_NOEXCEPT {
-
460  out[0] = static_cast<Char>('0' + c / 100);
-
461  out[1] = static_cast<Char>('0' + c / 10 % 10);
-
462  out[2] = static_cast<Char>('0' + c % 10);
-
463  out[3] = static_cast<Char>(delimiter);
-
464  }
-
465 };
-
466 
-
467 template <typename Char>
-
468 FMT_CONSTEXPR ansi_color_escape<Char>
- -
470  return ansi_color_escape<Char>(foreground, internal::data::FOREGROUND_COLOR);
-
471 }
-
472 
-
473 template <typename Char>
-
474 FMT_CONSTEXPR ansi_color_escape<Char>
- -
476  return ansi_color_escape<Char>(background, internal::data::BACKGROUND_COLOR);
-
477 }
-
478 
-
479 template <typename Char>
-
480 FMT_CONSTEXPR ansi_color_escape<Char>
- -
482  return ansi_color_escape<Char>(em);
-
483 }
-
484 
-
485 template <typename Char>
-
486 inline void fputs(const Char *chars, FILE *stream) FMT_NOEXCEPT {
-
487  std::fputs(chars, stream);
-
488 }
-
489 
-
490 template <>
-
491 inline void fputs<wchar_t>(const wchar_t *chars, FILE *stream) FMT_NOEXCEPT {
-
492  std::fputws(chars, stream);
-
493 }
-
494 
-
495 template <typename Char>
-
496 inline void reset_color(FILE *stream) FMT_NOEXCEPT {
-
497  fputs(internal::data::RESET_COLOR, stream);
-
498 }
-
499 
-
500 template <>
-
501 inline void reset_color<wchar_t>(FILE *stream) FMT_NOEXCEPT {
-
502  fputs(internal::data::WRESET_COLOR, stream);
-
503 }
-
504 
-
505 // The following specialiazation disables using std::FILE as a character type,
-
506 // which is needed because or else
-
507 // fmt::print(stderr, fmt::emphasis::bold, "");
-
508 // would take stderr (a std::FILE *) as the format string.
-
509 template <>
-
510 struct is_string<std::FILE *> : std::false_type {};
-
511 template <>
-
512 struct is_string<const std::FILE *> : std::false_type {};
-
513 } // namespace internal
-
514 
-
515 template <
-
516  typename S, typename Char = typename internal::char_t<S>::type>
-
517 void vprint(std::FILE *f, const text_style &ts, const S &format,
- -
519  bool has_style = false;
-
520  if (ts.has_emphasis()) {
-
521  has_style = true;
-
522  internal::fputs<Char>(
-
523  internal::make_emphasis<Char>(ts.get_emphasis()), f);
-
524  }
-
525  if (ts.has_foreground()) {
-
526  has_style = true;
-
527  internal::fputs<Char>(
-
528  internal::make_foreground_color<Char>(ts.get_foreground()), f);
-
529  }
-
530  if (ts.has_background()) {
-
531  has_style = true;
-
532  internal::fputs<Char>(
-
533  internal::make_background_color<Char>(ts.get_background()), f);
-
534  }
-
535  vprint(f, format, args);
-
536  if (has_style) {
-
537  internal::reset_color<Char>(f);
-
538  }
-
539 }
-
540 
-
548 template <typename String, typename... Args>
-
549 typename std::enable_if<internal::is_string<String>::value>::type print(
-
550  std::FILE *f, const text_style &ts, const String &format_str,
-
551  const Args &... args) {
-
552  internal::check_format_string<Args...>(format_str);
-
553  typedef typename internal::char_t<String>::type char_t;
-
554  typedef typename buffer_context<char_t>::type context_t;
-
555  format_arg_store<context_t, Args...> as{args...};
-
556  vprint(f, ts, format_str, basic_format_args<context_t>(as));
-
557 }
-
558 
-
566 template <typename String, typename... Args>
-
567 typename std::enable_if<internal::is_string<String>::value>::type print(
-
568  const text_style &ts, const String &format_str,
-
569  const Args &... args) {
-
570  return print(stdout, ts, format_str, args...);
-
571 }
-
572 
-
573 #endif
-
574 
- -
576 
-
577 #endif // FMT_COLOR_H_
+Go to the documentation of this file.
1 // Formatting library for C++ - color support
2 //
3 // Copyright (c) 2018 - present, Victor Zverovich and fmt contributors
4 // All rights reserved.
5 //
6 // For the license information refer to format.h.
7 
8 #ifndef FMT_COLOR_H_
9 #define FMT_COLOR_H_
10 
11 #include "format.h"
12 
14 
15 #ifdef FMT_DEPRECATED_COLORS
16 
17 // color and (v)print_colored are deprecated.
18 enum color { black, red, green, yellow, blue, magenta, cyan, white };
19 FMT_API void vprint_colored(color c, string_view format, format_args args);
20 FMT_API void vprint_colored(color c, wstring_view format, wformat_args args);
21 template <typename... Args>
22 inline void print_colored(color c, string_view format_str,
23  const Args & ... args) {
24  vprint_colored(c, format_str, make_format_args(args...));
25 }
26 template <typename... Args>
27 inline void print_colored(color c, wstring_view format_str,
28  const Args & ... args) {
29  vprint_colored(c, format_str, make_format_args<wformat_context>(args...));
30 }
31 
32 inline void vprint_colored(color c, string_view format, format_args args) {
33  char escape[] = "\x1b[30m";
34  escape[3] = static_cast<char>('0' + c);
35  std::fputs(escape, stdout);
36  vprint(format, args);
37  std::fputs(internal::data::RESET_COLOR, stdout);
38 }
39 
40 inline void vprint_colored(color c, wstring_view format, wformat_args args) {
41  wchar_t escape[] = L"\x1b[30m";
42  escape[3] = static_cast<wchar_t>('0' + c);
43  std::fputws(escape, stdout);
44  vprint(format, args);
45  std::fputws(internal::data::WRESET_COLOR, stdout);
46 }
47 
48 #else
49 
50 enum class color : uint32_t {
51  alice_blue = 0xF0F8FF, // rgb(240,248,255)
52  antique_white = 0xFAEBD7, // rgb(250,235,215)
53  aqua = 0x00FFFF, // rgb(0,255,255)
54  aquamarine = 0x7FFFD4, // rgb(127,255,212)
55  azure = 0xF0FFFF, // rgb(240,255,255)
56  beige = 0xF5F5DC, // rgb(245,245,220)
57  bisque = 0xFFE4C4, // rgb(255,228,196)
58  black = 0x000000, // rgb(0,0,0)
59  blanched_almond = 0xFFEBCD, // rgb(255,235,205)
60  blue = 0x0000FF, // rgb(0,0,255)
61  blue_violet = 0x8A2BE2, // rgb(138,43,226)
62  brown = 0xA52A2A, // rgb(165,42,42)
63  burly_wood = 0xDEB887, // rgb(222,184,135)
64  cadet_blue = 0x5F9EA0, // rgb(95,158,160)
65  chartreuse = 0x7FFF00, // rgb(127,255,0)
66  chocolate = 0xD2691E, // rgb(210,105,30)
67  coral = 0xFF7F50, // rgb(255,127,80)
68  cornflower_blue = 0x6495ED, // rgb(100,149,237)
69  cornsilk = 0xFFF8DC, // rgb(255,248,220)
70  crimson = 0xDC143C, // rgb(220,20,60)
71  cyan = 0x00FFFF, // rgb(0,255,255)
72  dark_blue = 0x00008B, // rgb(0,0,139)
73  dark_cyan = 0x008B8B, // rgb(0,139,139)
74  dark_golden_rod = 0xB8860B, // rgb(184,134,11)
75  dark_gray = 0xA9A9A9, // rgb(169,169,169)
76  dark_green = 0x006400, // rgb(0,100,0)
77  dark_khaki = 0xBDB76B, // rgb(189,183,107)
78  dark_magenta = 0x8B008B, // rgb(139,0,139)
79  dark_olive_green = 0x556B2F, // rgb(85,107,47)
80  dark_orange = 0xFF8C00, // rgb(255,140,0)
81  dark_orchid = 0x9932CC, // rgb(153,50,204)
82  dark_red = 0x8B0000, // rgb(139,0,0)
83  dark_salmon = 0xE9967A, // rgb(233,150,122)
84  dark_sea_green = 0x8FBC8F, // rgb(143,188,143)
85  dark_slate_blue = 0x483D8B, // rgb(72,61,139)
86  dark_slate_gray = 0x2F4F4F, // rgb(47,79,79)
87  dark_turquoise = 0x00CED1, // rgb(0,206,209)
88  dark_violet = 0x9400D3, // rgb(148,0,211)
89  deep_pink = 0xFF1493, // rgb(255,20,147)
90  deep_sky_blue = 0x00BFFF, // rgb(0,191,255)
91  dim_gray = 0x696969, // rgb(105,105,105)
92  dodger_blue = 0x1E90FF, // rgb(30,144,255)
93  fire_brick = 0xB22222, // rgb(178,34,34)
94  floral_white = 0xFFFAF0, // rgb(255,250,240)
95  forest_green = 0x228B22, // rgb(34,139,34)
96  fuchsia = 0xFF00FF, // rgb(255,0,255)
97  gainsboro = 0xDCDCDC, // rgb(220,220,220)
98  ghost_white = 0xF8F8FF, // rgb(248,248,255)
99  gold = 0xFFD700, // rgb(255,215,0)
100  golden_rod = 0xDAA520, // rgb(218,165,32)
101  gray = 0x808080, // rgb(128,128,128)
102  green = 0x008000, // rgb(0,128,0)
103  green_yellow = 0xADFF2F, // rgb(173,255,47)
104  honey_dew = 0xF0FFF0, // rgb(240,255,240)
105  hot_pink = 0xFF69B4, // rgb(255,105,180)
106  indian_red = 0xCD5C5C, // rgb(205,92,92)
107  indigo = 0x4B0082, // rgb(75,0,130)
108  ivory = 0xFFFFF0, // rgb(255,255,240)
109  khaki = 0xF0E68C, // rgb(240,230,140)
110  lavender = 0xE6E6FA, // rgb(230,230,250)
111  lavender_blush = 0xFFF0F5, // rgb(255,240,245)
112  lawn_green = 0x7CFC00, // rgb(124,252,0)
113  lemon_chiffon = 0xFFFACD, // rgb(255,250,205)
114  light_blue = 0xADD8E6, // rgb(173,216,230)
115  light_coral = 0xF08080, // rgb(240,128,128)
116  light_cyan = 0xE0FFFF, // rgb(224,255,255)
117  light_golden_rod_yellow = 0xFAFAD2, // rgb(250,250,210)
118  light_gray = 0xD3D3D3, // rgb(211,211,211)
119  light_green = 0x90EE90, // rgb(144,238,144)
120  light_pink = 0xFFB6C1, // rgb(255,182,193)
121  light_salmon = 0xFFA07A, // rgb(255,160,122)
122  light_sea_green = 0x20B2AA, // rgb(32,178,170)
123  light_sky_blue = 0x87CEFA, // rgb(135,206,250)
124  light_slate_gray = 0x778899, // rgb(119,136,153)
125  light_steel_blue = 0xB0C4DE, // rgb(176,196,222)
126  light_yellow = 0xFFFFE0, // rgb(255,255,224)
127  lime = 0x00FF00, // rgb(0,255,0)
128  lime_green = 0x32CD32, // rgb(50,205,50)
129  linen = 0xFAF0E6, // rgb(250,240,230)
130  magenta = 0xFF00FF, // rgb(255,0,255)
131  maroon = 0x800000, // rgb(128,0,0)
132  medium_aquamarine = 0x66CDAA, // rgb(102,205,170)
133  medium_blue = 0x0000CD, // rgb(0,0,205)
134  medium_orchid = 0xBA55D3, // rgb(186,85,211)
135  medium_purple = 0x9370DB, // rgb(147,112,219)
136  medium_sea_green = 0x3CB371, // rgb(60,179,113)
137  medium_slate_blue = 0x7B68EE, // rgb(123,104,238)
138  medium_spring_green = 0x00FA9A, // rgb(0,250,154)
139  medium_turquoise = 0x48D1CC, // rgb(72,209,204)
140  medium_violet_red = 0xC71585, // rgb(199,21,133)
141  midnight_blue = 0x191970, // rgb(25,25,112)
142  mint_cream = 0xF5FFFA, // rgb(245,255,250)
143  misty_rose = 0xFFE4E1, // rgb(255,228,225)
144  moccasin = 0xFFE4B5, // rgb(255,228,181)
145  navajo_white = 0xFFDEAD, // rgb(255,222,173)
146  navy = 0x000080, // rgb(0,0,128)
147  old_lace = 0xFDF5E6, // rgb(253,245,230)
148  olive = 0x808000, // rgb(128,128,0)
149  olive_drab = 0x6B8E23, // rgb(107,142,35)
150  orange = 0xFFA500, // rgb(255,165,0)
151  orange_red = 0xFF4500, // rgb(255,69,0)
152  orchid = 0xDA70D6, // rgb(218,112,214)
153  pale_golden_rod = 0xEEE8AA, // rgb(238,232,170)
154  pale_green = 0x98FB98, // rgb(152,251,152)
155  pale_turquoise = 0xAFEEEE, // rgb(175,238,238)
156  pale_violet_red = 0xDB7093, // rgb(219,112,147)
157  papaya_whip = 0xFFEFD5, // rgb(255,239,213)
158  peach_puff = 0xFFDAB9, // rgb(255,218,185)
159  peru = 0xCD853F, // rgb(205,133,63)
160  pink = 0xFFC0CB, // rgb(255,192,203)
161  plum = 0xDDA0DD, // rgb(221,160,221)
162  powder_blue = 0xB0E0E6, // rgb(176,224,230)
163  purple = 0x800080, // rgb(128,0,128)
164  rebecca_purple = 0x663399, // rgb(102,51,153)
165  red = 0xFF0000, // rgb(255,0,0)
166  rosy_brown = 0xBC8F8F, // rgb(188,143,143)
167  royal_blue = 0x4169E1, // rgb(65,105,225)
168  saddle_brown = 0x8B4513, // rgb(139,69,19)
169  salmon = 0xFA8072, // rgb(250,128,114)
170  sandy_brown = 0xF4A460, // rgb(244,164,96)
171  sea_green = 0x2E8B57, // rgb(46,139,87)
172  sea_shell = 0xFFF5EE, // rgb(255,245,238)
173  sienna = 0xA0522D, // rgb(160,82,45)
174  silver = 0xC0C0C0, // rgb(192,192,192)
175  sky_blue = 0x87CEEB, // rgb(135,206,235)
176  slate_blue = 0x6A5ACD, // rgb(106,90,205)
177  slate_gray = 0x708090, // rgb(112,128,144)
178  snow = 0xFFFAFA, // rgb(255,250,250)
179  spring_green = 0x00FF7F, // rgb(0,255,127)
180  steel_blue = 0x4682B4, // rgb(70,130,180)
181  tan = 0xD2B48C, // rgb(210,180,140)
182  teal = 0x008080, // rgb(0,128,128)
183  thistle = 0xD8BFD8, // rgb(216,191,216)
184  tomato = 0xFF6347, // rgb(255,99,71)
185  turquoise = 0x40E0D0, // rgb(64,224,208)
186  violet = 0xEE82EE, // rgb(238,130,238)
187  wheat = 0xF5DEB3, // rgb(245,222,179)
188  white = 0xFFFFFF, // rgb(255,255,255)
189  white_smoke = 0xF5F5F5, // rgb(245,245,245)
190  yellow = 0xFFFF00, // rgb(255,255,0)
191  yellow_green = 0x9ACD32 // rgb(154,205,50)
192 }; // enum class color
193 
194 enum class terminal_color : uint8_t {
195  black = 30,
196  red,
197  green,
198  yellow,
199  blue,
200  magenta,
201  cyan,
202  white,
203  bright_black = 90,
204  bright_red,
205  bright_green,
207  bright_blue,
209  bright_cyan,
211 }; // enum class terminal_color
212 
213 enum class emphasis : uint8_t {
214  bold = 1,
215  italic = 1 << 1,
216  underline = 1 << 2,
217  strikethrough = 1 << 3
218 }; // enum class emphasis
219 
220 // rgb is a struct for red, green and blue colors.
221 // We use rgb as name because some editors will show it as color direct in the
222 // editor.
223 struct rgb {
224  FMT_CONSTEXPR_DECL rgb() : r(0), g(0), b(0) {}
225  FMT_CONSTEXPR_DECL rgb(uint8_t r_, uint8_t g_, uint8_t b_)
226  : r(r_), g(g_), b(b_) {}
227  FMT_CONSTEXPR_DECL rgb(uint32_t hex)
228  : r((hex >> 16) & 0xFF), g((hex >> 8) & 0xFF), b((hex) & 0xFF) {}
230  : r((uint32_t(hex) >> 16) & 0xFF), g((uint32_t(hex) >> 8) & 0xFF),
231  b(uint32_t(hex) & 0xFF) {}
232  uint8_t r;
233  uint8_t g;
234  uint8_t b;
235 };
236 
237 namespace internal {
238 
239 // color is a struct of either a rgb color or a terminal color.
240 struct color_type {
242  : is_rgb(), value{} {}
244  : is_rgb(true), value{} {
245  value.rgb_color = static_cast<uint32_t>(rgb_color);
246  }
248  : is_rgb(true), value{} {
249  value.rgb_color = (static_cast<uint32_t>(rgb_color.r) << 16)
250  | (static_cast<uint32_t>(rgb_color.g) << 8) | rgb_color.b;
251  }
253  : is_rgb(), value{} {
254  value.term_color = static_cast<uint8_t>(term_color);
255  }
256  bool is_rgb;
257  union color_union {
258  uint8_t term_color;
259  uint32_t rgb_color;
260  } value;
261 };
262 } // namespace internal
263 
264 // Experimental text formatting support.
265 class text_style {
266  public:
268  : set_foreground_color(), set_background_color(), ems(em) {}
269 
271  if (!set_foreground_color) {
272  set_foreground_color = rhs.set_foreground_color;
273  foreground_color = rhs.foreground_color;
274  } else if (rhs.set_foreground_color) {
275  if (!foreground_color.is_rgb || !rhs.foreground_color.is_rgb)
276  throw format_error("can't OR a terminal color");
277  foreground_color.value.rgb_color |= rhs.foreground_color.value.rgb_color;
278  }
279 
280  if (!set_background_color) {
281  set_background_color = rhs.set_background_color;
282  background_color = rhs.background_color;
283  } else if (rhs.set_background_color) {
284  if (!background_color.is_rgb || !rhs.background_color.is_rgb)
285  throw format_error("can't OR a terminal color");
286  background_color.value.rgb_color |= rhs.background_color.value.rgb_color;
287  }
288 
289  ems = static_cast<emphasis>(static_cast<uint8_t>(ems) |
290  static_cast<uint8_t>(rhs.ems));
291  return *this;
292  }
293 
294  friend FMT_CONSTEXPR
296  return lhs |= rhs;
297  }
298 
300  if (!set_foreground_color) {
301  set_foreground_color = rhs.set_foreground_color;
302  foreground_color = rhs.foreground_color;
303  } else if (rhs.set_foreground_color) {
304  if (!foreground_color.is_rgb || !rhs.foreground_color.is_rgb)
305  throw format_error("can't AND a terminal color");
306  foreground_color.value.rgb_color &= rhs.foreground_color.value.rgb_color;
307  }
308 
309  if (!set_background_color) {
310  set_background_color = rhs.set_background_color;
311  background_color = rhs.background_color;
312  } else if (rhs.set_background_color) {
313  if (!background_color.is_rgb || !rhs.background_color.is_rgb)
314  throw format_error("can't AND a terminal color");
315  background_color.value.rgb_color &= rhs.background_color.value.rgb_color;
316  }
317 
318  ems = static_cast<emphasis>(static_cast<uint8_t>(ems) &
319  static_cast<uint8_t>(rhs.ems));
320  return *this;
321  }
322 
323  friend FMT_CONSTEXPR
325  return lhs &= rhs;
326  }
327 
329  return set_foreground_color;
330  }
332  return set_background_color;
333  }
335  return static_cast<uint8_t>(ems) != 0;
336  }
338  assert(has_foreground() && "no foreground specified for this style");
339  return foreground_color;
340  }
342  assert(has_background() && "no background specified for this style");
343  return background_color;
344  }
346  assert(has_emphasis() && "no emphasis specified for this style");
347  return ems;
348  }
349 
350 private:
351  FMT_CONSTEXPR text_style(bool is_foreground,
353  : set_foreground_color(),
354  set_background_color(),
355  ems() {
356  if (is_foreground) {
357  foreground_color = text_color;
358  set_foreground_color = true;
359  } else {
360  background_color = text_color;
361  set_background_color = true;
362  }
363  }
364 
366  FMT_NOEXCEPT;
368  FMT_NOEXCEPT;
369 
370  internal::color_type foreground_color;
371  internal::color_type background_color;
372  bool set_foreground_color;
373  bool set_background_color;
374  emphasis ems;
375 };
376 
378  return text_style(/*is_foreground=*/true, foreground);
379 }
380 
382  return text_style(/*is_foreground=*/false, background);
383 }
384 
386  return text_style(lhs) | rhs;
387 }
388 
389 namespace internal {
390 
391 template <typename Char>
394  const char * esc) FMT_NOEXCEPT {
395  // If we have a terminal color, we need to output another escape code
396  // sequence.
397  if (!text_color.is_rgb) {
398  bool is_background = esc == internal::data::BACKGROUND_COLOR;
399  uint32_t value = text_color.value.term_color;
400  // Background ASCII codes are the same as the foreground ones but with
401  // 10 more.
402  if (is_background)
403  value += 10u;
404 
405  std::size_t index = 0;
406  buffer[index++] = static_cast<Char>('\x1b');
407  buffer[index++] = static_cast<Char>('[');
408 
409  if (value >= 100u) {
410  buffer[index++] = static_cast<Char>('1');
411  value %= 100u;
412  }
413  buffer[index++] = static_cast<Char>('0' + value / 10u);
414  buffer[index++] = static_cast<Char>('0' + value % 10u);
415 
416  buffer[index++] = static_cast<Char>('m');
417  buffer[index++] = static_cast<Char>('\0');
418  return;
419  }
420 
421  for (int i = 0; i < 7; i++) {
422  buffer[i] = static_cast<Char>(esc[i]);
423  }
424  rgb color(text_color.value.rgb_color);
425  to_esc(color.r, buffer + 7, ';');
426  to_esc(color.g, buffer + 11, ';');
427  to_esc(color.b, buffer + 15, 'm');
428  buffer[19] = static_cast<Char>(0);
429  }
431  uint8_t em_codes[4] = {};
432  uint8_t em_bits = static_cast<uint8_t>(em);
433  if (em_bits & static_cast<uint8_t>(emphasis::bold))
434  em_codes[0] = 1;
435  if (em_bits & static_cast<uint8_t>(emphasis::italic))
436  em_codes[1] = 3;
437  if (em_bits & static_cast<uint8_t>(emphasis::underline))
438  em_codes[2] = 4;
439  if (em_bits & static_cast<uint8_t>(emphasis::strikethrough))
440  em_codes[3] = 9;
441 
442  std::size_t index = 0;
443  for (int i = 0; i < 4; ++i) {
444  if (!em_codes[i])
445  continue;
446  buffer[index++] = static_cast<Char>('\x1b');
447  buffer[index++] = static_cast<Char>('[');
448  buffer[index++] = static_cast<Char>('0' + em_codes[i]);
449  buffer[index++] = static_cast<Char>('m');
450  }
451  buffer[index++] = static_cast<Char>(0);
452  }
453  FMT_CONSTEXPR operator const Char *() const FMT_NOEXCEPT { return buffer; }
454 
455 private:
456  Char buffer[7u + 3u * 4u + 1u];
457 
458  static FMT_CONSTEXPR void to_esc(uint8_t c, Char *out,
459  char delimiter) FMT_NOEXCEPT {
460  out[0] = static_cast<Char>('0' + c / 100);
461  out[1] = static_cast<Char>('0' + c / 10 % 10);
462  out[2] = static_cast<Char>('0' + c % 10);
463  out[3] = static_cast<Char>(delimiter);
464  }
465 };
466 
467 template <typename Char>
470  return ansi_color_escape<Char>(foreground, internal::data::FOREGROUND_COLOR);
471 }
472 
473 template <typename Char>
476  return ansi_color_escape<Char>(background, internal::data::BACKGROUND_COLOR);
477 }
478 
479 template <typename Char>
482  return ansi_color_escape<Char>(em);
483 }
484 
485 template <typename Char>
486 inline void fputs(const Char *chars, FILE *stream) FMT_NOEXCEPT {
487  std::fputs(chars, stream);
488 }
489 
490 template <>
491 inline void fputs<wchar_t>(const wchar_t *chars, FILE *stream) FMT_NOEXCEPT {
492  std::fputws(chars, stream);
493 }
494 
495 template <typename Char>
496 inline void reset_color(FILE *stream) FMT_NOEXCEPT {
497  fputs(internal::data::RESET_COLOR, stream);
498 }
499 
500 template <>
501 inline void reset_color<wchar_t>(FILE *stream) FMT_NOEXCEPT {
502  fputs(internal::data::WRESET_COLOR, stream);
503 }
504 
505 // The following specialiazation disables using std::FILE as a character type,
506 // which is needed because or else
507 // fmt::print(stderr, fmt::emphasis::bold, "");
508 // would take stderr (a std::FILE *) as the format string.
509 template <>
510 struct is_string<std::FILE *> : std::false_type {};
511 template <>
512 struct is_string<const std::FILE *> : std::false_type {};
513 } // namespace internal
514 
515 template <
516  typename S, typename Char = typename internal::char_t<S>::type>
517 void vprint(std::FILE *f, const text_style &ts, const S &format,
519  bool has_style = false;
520  if (ts.has_emphasis()) {
521  has_style = true;
522  internal::fputs<Char>(
523  internal::make_emphasis<Char>(ts.get_emphasis()), f);
524  }
525  if (ts.has_foreground()) {
526  has_style = true;
527  internal::fputs<Char>(
528  internal::make_foreground_color<Char>(ts.get_foreground()), f);
529  }
530  if (ts.has_background()) {
531  has_style = true;
532  internal::fputs<Char>(
533  internal::make_background_color<Char>(ts.get_background()), f);
534  }
535  vprint(f, format, args);
536  if (has_style) {
537  internal::reset_color<Char>(f);
538  }
539 }
540 
548 template <typename String, typename... Args>
549 typename std::enable_if<internal::is_string<String>::value>::type print(
550  std::FILE *f, const text_style &ts, const String &format_str,
551  const Args &... args) {
552  internal::check_format_string<Args...>(format_str);
553  typedef typename internal::char_t<String>::type char_t;
554  typedef typename buffer_context<char_t>::type context_t;
555  format_arg_store<context_t, Args...> as{args...};
556  vprint(f, ts, format_str, basic_format_args<context_t>(as));
557 }
558 
566 template <typename String, typename... Args>
567 typename std::enable_if<internal::is_string<String>::value>::type print(
568  const text_style &ts, const String &format_str,
569  const Args &... args) {
570  return print(stdout, ts, format_str, args...);
571 }
572 
573 #endif
574 
576 
577 #endif // FMT_COLOR_H_
+
result::char_type type
Definition: core.h:521
+ + + + + +
emphasis
Definition: color.h:213
+ + + + +
text_style & operator&=(const text_style &rhs)
Definition: color.h:299
+ + + + +
color_type(rgb rgb_color)
Definition: color.h:247
+ + + + +
text_style operator|(emphasis lhs, emphasis rhs)
Definition: color.h:385
+
std::enable_if< internal::is_string< String >::value >::type print(const text_style &ts, const String &format_str, const Args &...args)
Definition: color.h:567
+ + + + + +
friend text_style operator|(text_style lhs, const text_style &rhs)
Definition: color.h:295
+ + +
color_type(color rgb_color)
Definition: color.h:243
+
friend text_style operator&(text_style lhs, const text_style &rhs)
Definition: color.h:324
+ +
void vprint(std::FILE *f, const text_style &ts, const S &format, basic_format_args< typename buffer_context< Char >::type > args)
Definition: color.h:517
+ + + + + + + +
rgb(uint8_t r_, uint8_t g_, uint8_t b_)
Definition: color.h:225
+ + + + + + + + + + + + +
uint8_t g
Definition: color.h:233
+ +
uint8_t r
Definition: color.h:232
+ + +
#define FMT_CONSTEXPR_DECL
Definition: core.h:70
+
Definition: format.h:297
+ + + + + + +
bool has_foreground() const
Definition: color.h:328
+
void reset_color< wchar_t >(FILE *stream)
Definition: color.h:501
+ + + + + + + +
color_type(terminal_color term_color)
Definition: color.h:252
+ + + +
uint8_t b
Definition: color.h:234
+
#define FMT_END_NAMESPACE
Definition: core.h:153
+
ansi_color_escape< Char > make_emphasis(emphasis em)
Definition: color.h:481
+ + + +
void reset_color(FILE *stream)
Definition: color.h:496
+ + +
ansi_color_escape< Char > make_background_color(internal::color_type background)
Definition: color.h:475
+ + +
basic_string_view< wchar_t > wstring_view
Definition: core.h:429
+ + + + +
void fputs(const Char *chars, FILE *stream)
Definition: color.h:486
+
rgb(uint32_t hex)
Definition: color.h:227
+ + +
union fmt::v5::internal::color_type::color_union value
+ + +
emphasis get_emphasis() const
Definition: color.h:345
+ + + +
basic_buffer< char > buffer
Definition: core.h:291
+ + + + + +
value(int val=0)
Definition: core.h:582
+
ansi_color_escape(internal::color_type text_color, const char *esc)
Definition: color.h:393
+ + + + + +
terminal_color
Definition: color.h:194
+ +
#define FMT_API
Definition: core.h:166
+
format_arg_store< Context, Args... > make_format_args(const Args &...args)
Definition: core.h:1199
+ + +
internal::color_type get_background() const
Definition: color.h:341
+ +
rgb(color hex)
Definition: color.h:229
+
text_style fg(internal::color_type foreground)
Definition: color.h:377
+ + + + + +
std::basic_string< typename char_t< S >::type > format(const S &format_str, const Args &...args)
Definition: core.h:1454
+
text_style(emphasis em=emphasis())
Definition: color.h:267
+
color
Definition: color.h:50
+ + + + + + + + + + +
ansi_color_escape< Char > make_foreground_color(internal::color_type foreground)
Definition: color.h:469
+ + + + + + + +
bool has_background() const
Definition: color.h:331
+ + + + + +
#define FMT_CONSTEXPR
Definition: core.h:69
+ + + + + + + +
void fputs< wchar_t >(const wchar_t *chars, FILE *stream)
Definition: color.h:491
+ + + + + + + + + + + + +
#define FMT_NOEXCEPT
Definition: core.h:140
+ + + + + + + +
#define FMT_BEGIN_NAMESPACE
Definition: core.h:155
+ + + + + +
internal::color_type get_foreground() const
Definition: color.h:337
+ +
text_style bg(internal::color_type background)
Definition: color.h:381
+ +
std::enable_if<!is_compile_string< S >::value >::type check_format_string(const S &)
Definition: core.h:1352
+ + + +
text_style & operator|=(const text_style &rhs)
Definition: color.h:270
+ +
basic_string_view< char > string_view
Definition: core.h:428
+ + +
bool has_emphasis() const
Definition: color.h:334
+ + + + + + + + + + + +
- - - - - -
ansi_color_escape(internal::color_type text_color, const char *esc)
Definition: color.h:393
- - - - - -
result::char_type type
Definition: core.h:521
- - - - -
text_style & operator&=(const text_style &rhs)
Definition: color.h:299
- -
friend text_style operator|(text_style lhs, const text_style &rhs)
Definition: color.h:295
- - - - -
rgb(uint8_t r_, uint8_t g_, uint8_t b_)
Definition: color.h:225
- -
internal::color_type get_foreground() const
Definition: color.h:337
- - - - -
text_style operator|(emphasis lhs, emphasis rhs)
Definition: color.h:385
- - -
color_type(terminal_color term_color)
Definition: color.h:252
- - -
#define FMT_API
Definition: core.h:166
- - - - - - -
void fputs< wchar_t >(const wchar_t *chars, FILE *stream)
Definition: color.h:491
-
emphasis
Definition: color.h:213
- - -
void reset_color(FILE *stream)
Definition: color.h:496
- - - - - -
text_style bg(internal::color_type background)
Definition: color.h:381
- - - - -
terminal_color
Definition: color.h:194
-
color_type(rgb rgb_color)
Definition: color.h:247
- -
uint8_t g
Definition: color.h:233
- - - -
uint8_t b
Definition: color.h:234
- - - - - - -
uint8_t r
Definition: color.h:232
- - -
friend text_style operator&(text_style lhs, const text_style &rhs)
Definition: color.h:324
- - -
bool has_emphasis() const
Definition: color.h:334
-
std::enable_if<!is_compile_string< S >::value >::type check_format_string(const S &)
Definition: core.h:1352
- - - - - - - - - - - - - - - -
void vprint(std::FILE *f, const text_style &ts, const S &format, basic_format_args< typename buffer_context< Char >::type > args)
Definition: color.h:517
- -
emphasis get_emphasis() const
Definition: color.h:345
- - - - -
#define FMT_NOEXCEPT
Definition: core.h:140
-
basic_string_view< wchar_t > wstring_view
Definition: core.h:429
- - - - - - - -
void fputs(const Char *chars, FILE *stream)
Definition: color.h:486
- -
value(int val=0)
Definition: core.h:582
- - - - -
#define FMT_END_NAMESPACE
Definition: core.h:153
- -
void reset_color< wchar_t >(FILE *stream)
Definition: color.h:501
- - -
basic_buffer< char > buffer
Definition: core.h:291
- - -
rgb(uint32_t hex)
Definition: color.h:227
-
text_style fg(internal::color_type foreground)
Definition: color.h:377
- - - - - - -
format_arg_store< Context, Args... > make_format_args(const Args &... args)
Definition: core.h:1199
- - - - - -
text_style(emphasis em=emphasis())
Definition: color.h:267
- - -
rgb(color hex)
Definition: color.h:229
- -
internal::color_type get_background() const
Definition: color.h:341
- - - - - - - -
basic_string_view< char > string_view
Definition: core.h:428
- - - - - - -
color
Definition: color.h:50
- - - - -
ansi_color_escape< Char > make_foreground_color(internal::color_type foreground)
Definition: color.h:469
- - - - - - - -
std::enable_if< internal::is_string< String >::value >::type print(const text_style &ts, const String &format_str, const Args &... args)
Definition: color.h:567
-
text_style & operator|=(const text_style &rhs)
Definition: color.h:270
- - - -
ansi_color_escape< Char > make_emphasis(emphasis em)
Definition: color.h:481
-
Definition: format.h:297
- - - - - - -
color_type(color rgb_color)
Definition: color.h:243
- - - -
#define FMT_BEGIN_NAMESPACE
Definition: core.h:155
-
bool has_background() const
Definition: color.h:331
- - - - - -
bool has_foreground() const
Definition: color.h:328
- -
union fmt::v5::internal::color_type::color_union value
- - - - - - - - - - - - - - - - - -
std::basic_string< typename char_t< S >::type > format(const S &format_str, const Args &... args)
Definition: core.h:1454
- - - -
#define FMT_CONSTEXPR
Definition: core.h:69
- - -
ansi_color_escape< Char > make_background_color(internal::color_type background)
Definition: color.h:475
-
#define FMT_CONSTEXPR_DECL
Definition: core.h:70
diff --git a/docs/comm__port_8h.html b/docs/comm__port_8h.html index 25af059..6d40904 100644 --- a/docs/comm__port_8h.html +++ b/docs/comm__port_8h.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: sdk_core/include/comm/comm_port.h File Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,40 @@ - + - - - - + +
@@ -127,7 +145,7 @@ Variables + doxygen 1.8.11
diff --git a/docs/comm__port_8h_source.html b/docs/comm__port_8h_source.html index 06e3e3e..8e5421b 100644 --- a/docs/comm__port_8h_source.html +++ b/docs/comm__port_8h_source.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: sdk_core/include/comm/comm_port.h Source File @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,40 @@ - + - - - - + +
@@ -91,105 +109,33 @@ $(document).ready(function(){initNavTree('comm__port_8h_source.html','');});
comm_port.h
-Go to the documentation of this file.
1 //
-
2 // The MIT License (MIT)
-
3 //
-
4 // Copyright (c) 2019 Livox. All rights reserved.
-
5 //
-
6 // Permission is hereby granted, free of charge, to any person obtaining a copy
-
7 // of this software and associated documentation files (the "Software"), to deal
-
8 // in the Software without restriction, including without limitation the rights
-
9 // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-
10 // copies of the Software, and to permit persons to whom the Software is
-
11 // furnished to do so, subject to the following conditions:
-
12 //
-
13 // The above copyright notice and this permission notice shall be included in
-
14 // all copies or substantial portions of the Software.
-
15 //
-
16 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-
17 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-
18 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-
19 // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-
20 // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-
21 // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-
22 // SOFTWARE.
-
23 //
-
24 
-
25 #ifndef COMM_COMM_PORT_H_
-
26 #define COMM_COMM_PORT_H_
-
27 
-
28 #include <stdint.h>
-
29 #include "protocol.h"
-
30 
-
31 namespace livox {
-
32 const uint32_t kCacheSize = 8192;
-
33 const uint32_t kMoveCacheLimit = 1536;
-
34 
-
35 typedef struct {
-
36  uint8_t buf[kCacheSize];
-
37  uint32_t rd_idx;
-
38  uint32_t wr_idx;
-
39  uint32_t size;
-
40 } PortCache;
-
41 
-
42 class CommPort {
-
43  public:
-
44  CommPort();
-
45 
-
46  ~CommPort();
-
47 
-
48  int32_t Pack(uint8_t *o_buf, uint32_t o_buf_size, uint32_t *o_len, const CommPacket &i_packet);
-
49 
-
50  int32_t ParseCommStream(CommPacket *o_pack);
-
51 
-
52  uint8_t *FetchCacheFreeSpace(uint32_t *o_len);
-
53 
-
54  int32_t UpdateCacheWrIdx(uint32_t used_size);
-
55 
-
56  uint16_t GetAndUpdateSeqNum();
-
57 
-
58  private:
-
59  uint32_t GetCacheTailSize();
-
60 
-
61  uint32_t GetValidDataSize();
-
62 
-
63  void UpdateCache(void);
-
64 
-
65  PortCache cache_;
-
66  Protocol *protocol_;
-
67  uint32_t parse_step_;
-
68  uint16_t seq_num_;
-
69 };
-
70 
-
71 } // namespace livox
-
72 #endif // COMM_COMM_PORT_H_
+Go to the documentation of this file.
1 //
2 // The MIT License (MIT)
3 //
4 // Copyright (c) 2019 Livox. All rights reserved.
5 //
6 // Permission is hereby granted, free of charge, to any person obtaining a copy
7 // of this software and associated documentation files (the "Software"), to deal
8 // in the Software without restriction, including without limitation the rights
9 // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 // copies of the Software, and to permit persons to whom the Software is
11 // furnished to do so, subject to the following conditions:
12 //
13 // The above copyright notice and this permission notice shall be included in
14 // all copies or substantial portions of the Software.
15 //
16 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22 // SOFTWARE.
23 //
24 
25 #ifndef COMM_COMM_PORT_H_
26 #define COMM_COMM_PORT_H_
27 
28 #include <stdint.h>
29 #include "protocol.h"
30 
31 namespace livox {
32 const uint32_t kCacheSize = 8192;
33 const uint32_t kMoveCacheLimit = 1536;
34 
35 typedef struct {
36  uint8_t buf[kCacheSize];
37  uint32_t rd_idx;
38  uint32_t wr_idx;
39  uint32_t size;
40 } PortCache;
41 
42 class CommPort {
43  public:
44  CommPort();
45 
46  ~CommPort();
47 
48  int32_t Pack(uint8_t *o_buf, uint32_t o_buf_size, uint32_t *o_len, const CommPacket &i_packet);
49 
50  int32_t ParseCommStream(CommPacket *o_pack);
51 
52  uint8_t *FetchCacheFreeSpace(uint32_t *o_len);
53 
54  int32_t UpdateCacheWrIdx(uint32_t used_size);
55 
56  uint16_t GetAndUpdateSeqNum();
57 
58  private:
59  uint32_t GetCacheTailSize();
60 
61  uint32_t GetValidDataSize();
62 
63  void UpdateCache(void);
64 
65  PortCache cache_;
66  Protocol *protocol_;
67  uint32_t parse_step_;
68  uint16_t seq_num_;
69 };
70 
71 } // namespace livox
72 #endif // COMM_COMM_PORT_H_
+
uint32_t wr_idx
Definition: comm_port.h:38
+ +
uint32_t size
Definition: comm_port.h:39
+ +
int32_t ParseCommStream(CommPacket *o_pack)
+
uint32_t rd_idx
Definition: comm_port.h:37
+
const uint32_t kMoveCacheLimit
Definition: comm_port.h:33
+ +
const uint32_t kCacheSize
Definition: comm_port.h:32
+ +
uint8_t * FetchCacheFreeSpace(uint32_t *o_len)
+ + +
int32_t Pack(uint8_t *o_buf, uint32_t o_buf_size, uint32_t *o_len, const CommPacket &i_packet)
+
int32_t UpdateCacheWrIdx(uint32_t used_size)
+
uint16_t GetAndUpdateSeqNum()
+
-
int32_t UpdateCacheWrIdx(uint32_t used_size)
- -
uint8_t * FetchCacheFreeSpace(uint32_t *o_len)
- - -
int32_t ParseCommStream(CommPacket *o_pack)
-
uint32_t wr_idx
Definition: comm_port.h:38
-
int32_t Pack(uint8_t *o_buf, uint32_t o_buf_size, uint32_t *o_len, const CommPacket &i_packet)
- - -
uint16_t GetAndUpdateSeqNum()
-
uint32_t rd_idx
Definition: comm_port.h:37
- - -
const uint32_t kMoveCacheLimit
Definition: comm_port.h:33
- -
uint32_t size
Definition: comm_port.h:39
-
const uint32_t kCacheSize
Definition: comm_port.h:32
diff --git a/docs/common_8h.html b/docs/common_8h.html index b4bb0d9..545a1aa 100644 --- a/docs/common_8h.html +++ b/docs/common_8h.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: sdk_core/include/third_party/spdlog/spdlog/common.h File Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,40 @@ - + - - - - + +
@@ -214,9 +232,9 @@ Functions   spdlog::level::level_enum spdlog::level::from_str (const std::string &name) noexcept   -template<typename T , typename... Args> -std::unique_ptr< T > spdlog::details::make_unique (Args &&... args) -  +template<typename T , typename... Args> +std::unique_ptr< T > spdlog::details::make_unique (Args &&...args) +  @@ -226,9 +244,7 @@ Variables

Variables

 

Macro Definition Documentation

- -

◆ SPDLOG_ACTIVE_LEVEL

- +
@@ -238,13 +254,11 @@ Variables
-

Definition at line 106 of file common.h.

+

Definition at line 106 of file common.h.

- -

◆ SPDLOG_CONSTEXPR

- +
@@ -254,13 +268,11 @@ Variables
-

Definition at line 36 of file common.h.

+

Definition at line 36 of file common.h.

- -

◆ SPDLOG_DEPRECATED

- +
@@ -270,13 +282,11 @@ Variables
-

Definition at line 44 of file common.h.

+

Definition at line 44 of file common.h.

- -

◆ SPDLOG_FILE_BASENAME

- +
@@ -290,13 +300,11 @@ Variables
-

Definition at line 64 of file common.h.

+

Definition at line 64 of file common.h.

- -

◆ SPDLOG_FUNCTION

- +
@@ -306,13 +314,11 @@ Variables
-

Definition at line 68 of file common.h.

+

Definition at line 68 of file common.h.

- -

◆ SPDLOG_LEVEL_CRITICAL

- +
@@ -322,13 +328,11 @@ Variables
-

Definition at line 102 of file common.h.

+

Definition at line 102 of file common.h.

- -

◆ SPDLOG_LEVEL_DEBUG

- +
@@ -338,13 +342,11 @@ Variables
-

Definition at line 98 of file common.h.

+

Definition at line 98 of file common.h.

- -

◆ SPDLOG_LEVEL_ERROR

- +
@@ -354,13 +356,11 @@ Variables
-

Definition at line 101 of file common.h.

+

Definition at line 101 of file common.h.

- -

◆ SPDLOG_LEVEL_INFO

- +
@@ -370,13 +370,11 @@ Variables
-

Definition at line 99 of file common.h.

+

Definition at line 99 of file common.h.

- -

◆ SPDLOG_LEVEL_NAMES

- +
@@ -385,17 +383,12 @@ Variables
-Value:
{ \
-
"trace", "debug", "info", "warning", "error", "critical", "off" \
-
}
-
-

Definition at line 123 of file common.h.

+Value:
{ \
"trace", "debug", "info", "warning", "error", "critical", "off" \
}
+

Definition at line 123 of file common.h.

- -

◆ SPDLOG_LEVEL_OFF

- +
@@ -405,13 +398,11 @@ Variables
-

Definition at line 103 of file common.h.

+

Definition at line 103 of file common.h.

- -

◆ SPDLOG_LEVEL_TRACE

- +
@@ -421,13 +412,11 @@ Variables
-

Definition at line 97 of file common.h.

+

Definition at line 97 of file common.h.

- -

◆ SPDLOG_LEVEL_WARN

- +
@@ -437,13 +426,11 @@ Variables
-

Definition at line 100 of file common.h.

+

Definition at line 100 of file common.h.

- -

◆ SPDLOG_NOEXCEPT

- +
@@ -453,13 +440,11 @@ Variables
-

Definition at line 35 of file common.h.

+

Definition at line 35 of file common.h.

- -

◆ SPDLOG_SHORT_LEVEL_NAMES

- +
@@ -469,13 +454,11 @@ Variables
-

Definition at line 131 of file common.h.

+

Definition at line 131 of file common.h.

- -

◆ SPDLOG_STRRCHR

- +
@@ -499,7 +482,7 @@ Variables
-

Definition at line 58 of file common.h.

+

Definition at line 58 of file common.h.

@@ -511,7 +494,7 @@ Variables + doxygen 1.8.11
diff --git a/docs/common_8h.js b/docs/common_8h.js index f80f55e..2424dab 100644 --- a/docs/common_8h.js +++ b/docs/common_8h.js @@ -40,7 +40,7 @@ var common_8h = [ "utc", "common_8h.html#ad598fbd8338772e66ae09e8723a07ceda52d33cb937bbdab234ab1729a0f8225b", null ] ] ], [ "from_str", "common_8h.html#af1f71a172e3626a0271006a3a668e6ff", null ], - [ "make_unique", "common_8h.html#a2d61216ea1cb33ba27ddc6a78cc98ecd", null ], + [ "make_unique", "common_8h.html#a56e97a2b660d245b5988427c650cbe63", null ], [ "to_short_c_str", "common_8h.html#a320d85598eda29f072e343e57ec27ab8", null ], [ "to_string_view", "common_8h.html#a1ed786fe4b8a5babc3aeaa3eba9a9921", null ], [ "level_string_views", "common_8h.html#ae7c510cd37fa5221221eb91f03a98655", null ], diff --git a/docs/common_8h_source.html b/docs/common_8h_source.html index 36e0052..36ee7ff 100644 --- a/docs/common_8h_source.html +++ b/docs/common_8h_source.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: sdk_core/include/third_party/spdlog/spdlog/common.h Source File @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,40 @@ - + - - - - + +
@@ -91,319 +109,73 @@ $(document).ready(function(){initNavTree('common_8h_source.html','');});
common.h
-Go to the documentation of this file.
1 //
-
2 // Copyright(c) 2015 Gabi Melman.
-
3 // Distributed under the MIT License (http://opensource.org/licenses/MIT)
-
4 //
-
5 
-
6 #pragma once
-
7 
-
8 #include "spdlog/tweakme.h"
-
9 
-
10 #include <atomic>
-
11 #include <chrono>
-
12 #include <functional>
-
13 #include <initializer_list>
-
14 #include <memory>
-
15 #include <stdexcept>
-
16 #include <string>
-
17 #include <cstring>
-
18 #include <type_traits>
-
19 #include <unordered_map>
-
20 
-
21 #if defined(SPDLOG_WCHAR_FILENAMES) || defined(SPDLOG_WCHAR_TO_UTF8_SUPPORT)
-
22 #include <codecvt>
-
23 #include <locale>
-
24 #endif
-
25 
- -
27 
-
28 #include "spdlog/fmt/fmt.h"
-
29 
-
30 // visual studio upto 2013 does not support noexcept nor constexpr
-
31 #if defined(_MSC_VER) && (_MSC_VER < 1900)
-
32 #define SPDLOG_NOEXCEPT throw()
-
33 #define SPDLOG_CONSTEXPR
-
34 #else
-
35 #define SPDLOG_NOEXCEPT noexcept
-
36 #define SPDLOG_CONSTEXPR constexpr
-
37 #endif
-
38 
-
39 #if defined(__GNUC__) || defined(__clang__)
-
40 #define SPDLOG_DEPRECATED __attribute__((deprecated))
-
41 #elif defined(_MSC_VER)
-
42 #define SPDLOG_DEPRECATED __declspec(deprecated)
-
43 #else
-
44 #define SPDLOG_DEPRECATED
-
45 #endif
-
46 
-
47 // disable thread local on msvc 2013
-
48 #ifndef SPDLOG_NO_TLS
-
49 #if (defined(_MSC_VER) && (_MSC_VER < 1900)) || defined(__cplusplus_winrt)
-
50 #define SPDLOG_NO_TLS 1
-
51 #endif
-
52 #endif
-
53 
-
54 // Get the basename of __FILE__ (at compile time if possible)
-
55 #if FMT_HAS_FEATURE(__builtin_strrchr)
-
56 #define SPDLOG_STRRCHR(str, sep) __builtin_strrchr(str, sep)
-
57 #else
-
58 #define SPDLOG_STRRCHR(str, sep) strrchr(str, sep)
-
59 #endif //__builtin_strrchr not defined
-
60 
-
61 #ifdef _WIN32
-
62 #define SPDLOG_FILE_BASENAME(file) SPDLOG_STRRCHR("\\" file, '\\') + 1
-
63 #else
-
64 #define SPDLOG_FILE_BASENAME(file) SPDLOG_STRRCHR("/" file, '/') + 1
-
65 #endif
-
66 
-
67 #ifndef SPDLOG_FUNCTION
-
68 #define SPDLOG_FUNCTION __FUNCTION__
-
69 #endif
-
70 
-
71 namespace spdlog {
-
72 
-
73 class formatter;
-
74 
-
75 namespace sinks {
-
76 class sink;
-
77 }
-
78 
-
79 using log_clock = std::chrono::system_clock;
-
80 using sink_ptr = std::shared_ptr<sinks::sink>;
-
81 using sinks_init_list = std::initializer_list<sink_ptr>;
-
82 using log_err_handler = std::function<void(const std::string &err_msg)>;
-
83 
-
84 // string_view type - either std::string_view or fmt::string_view (pre c++17)
-
85 #if defined(FMT_USE_STD_STRING_VIEW)
- -
87 #else
- -
89 #endif
-
90 
-
91 #if defined(SPDLOG_NO_ATOMIC_LEVELS)
- -
93 #else
-
94 using level_t = std::atomic<int>;
-
95 #endif
-
96 
-
97 #define SPDLOG_LEVEL_TRACE 0
-
98 #define SPDLOG_LEVEL_DEBUG 1
-
99 #define SPDLOG_LEVEL_INFO 2
-
100 #define SPDLOG_LEVEL_WARN 3
-
101 #define SPDLOG_LEVEL_ERROR 4
-
102 #define SPDLOG_LEVEL_CRITICAL 5
-
103 #define SPDLOG_LEVEL_OFF 6
-
104 
-
105 #if !defined(SPDLOG_ACTIVE_LEVEL)
-
106 #define SPDLOG_ACTIVE_LEVEL SPDLOG_LEVEL_INFO
-
107 #endif
-
108 
-
109 // Log level enum
-
110 namespace level {
- -
112 {
- - - - - - - -
120 };
-
121 
-
122 #if !defined(SPDLOG_LEVEL_NAMES)
-
123 #define SPDLOG_LEVEL_NAMES \
-
124  { \
-
125  "trace", "debug", "info", "warning", "error", "critical", "off" \
-
126  }
-
127 #endif
- -
129 
-
130 #if !defined(SPDLOG_SHORT_LEVEL_NAMES)
-
131 #define SPDLOG_SHORT_LEVEL_NAMES {"T", "D", "I", "W", "E", "C", "O"}
-
132 #endif
- -
134 
- -
136 {
-
137  return level_string_views[l];
-
138 }
-
139 
- -
141 {
-
142  return short_level_names[l];
-
143 }
-
144 
-
145 inline spdlog::level::level_enum from_str(const std::string &name) SPDLOG_NOEXCEPT
-
146 {
-
147  int level = 0;
-
148  for (const auto &level_str : level_string_views)
-
149  {
-
150  if (level_str == name)
-
151  {
-
152  return static_cast<level::level_enum>(level);
-
153  }
-
154  level++;
-
155  }
-
156  return level::off;
-
157 }
-
158 
-
159 using level_hasher = std::hash<int>;
-
160 } // namespace level
-
161 
-
162 //
-
163 // Pattern time - specific time getting to use for pattern_formatter.
-
164 // local time by default
-
165 //
- -
167 {
-
168  local, // log localtime
-
169  utc // log utc
-
170 };
-
171 
-
172 //
-
173 // Log exception
-
174 //
-
175 class spdlog_ex : public std::exception
-
176 {
-
177 public:
-
178  explicit spdlog_ex(std::string msg)
-
179  : msg_(std::move(msg))
-
180  {
-
181  }
-
182 
-
183  spdlog_ex(const std::string &msg, int last_errno)
-
184  {
-
185  fmt::memory_buffer outbuf;
-
186  fmt::format_system_error(outbuf, last_errno, msg);
-
187  msg_ = fmt::to_string(outbuf);
-
188  }
-
189 
-
190  const char *what() const SPDLOG_NOEXCEPT override
-
191  {
-
192  return msg_.c_str();
-
193  }
-
194 
-
195 private:
-
196  std::string msg_;
-
197 };
-
198 
-
199 //
-
200 // wchar support for windows file names (SPDLOG_WCHAR_FILENAMES must be defined)
-
201 //
-
202 #if defined(_WIN32) && defined(SPDLOG_WCHAR_FILENAMES)
-
203 using filename_t = std::wstring;
-
204 #else
-
205 using filename_t = std::string;
-
206 #endif
-
207 
- -
209 {
- -
211  : filename{""}
-
212  , line{0}
-
213  , funcname{""}
-
214  {
-
215  }
-
216  SPDLOG_CONSTEXPR source_loc(const char *filename_in, int line_in, const char *funcname_in)
-
217  : filename{filename_in}
-
218  , line{static_cast<uint32_t>(line_in)}
-
219  , funcname{funcname_in}
-
220  {
-
221  }
-
222 
- -
224  {
-
225  return line == 0;
-
226  }
-
227  const char *filename;
-
228  uint32_t line;
-
229  const char *funcname;
-
230 };
-
231 
-
232 namespace details {
-
233 // make_unique support for pre c++14
-
234 
-
235 #if __cplusplus >= 201402L // C++14 and beyond
-
236 using std::make_unique;
-
237 #else
-
238 template<typename T, typename... Args>
-
239 std::unique_ptr<T> make_unique(Args &&... args)
-
240 {
-
241  static_assert(!std::is_array<T>::value, "arrays not supported");
-
242  return std::unique_ptr<T>(new T(std::forward<Args>(args)...));
-
243 }
-
244 #endif
-
245 } // namespace details
-
246 } // namespace spdlog
+Go to the documentation of this file.
1 //
2 // Copyright(c) 2015 Gabi Melman.
3 // Distributed under the MIT License (http://opensource.org/licenses/MIT)
4 //
5 
6 #pragma once
7 
8 #include "spdlog/tweakme.h"
9 
10 #include <atomic>
11 #include <chrono>
12 #include <functional>
13 #include <initializer_list>
14 #include <memory>
15 #include <stdexcept>
16 #include <string>
17 #include <cstring>
18 #include <type_traits>
19 #include <unordered_map>
20 
21 #if defined(SPDLOG_WCHAR_FILENAMES) || defined(SPDLOG_WCHAR_TO_UTF8_SUPPORT)
22 #include <codecvt>
23 #include <locale>
24 #endif
25 
27 
28 #include "spdlog/fmt/fmt.h"
29 
30 // visual studio upto 2013 does not support noexcept nor constexpr
31 #if defined(_MSC_VER) && (_MSC_VER < 1900)
32 #define SPDLOG_NOEXCEPT throw()
33 #define SPDLOG_CONSTEXPR
34 #else
35 #define SPDLOG_NOEXCEPT noexcept
36 #define SPDLOG_CONSTEXPR constexpr
37 #endif
38 
39 #if defined(__GNUC__) || defined(__clang__)
40 #define SPDLOG_DEPRECATED __attribute__((deprecated))
41 #elif defined(_MSC_VER)
42 #define SPDLOG_DEPRECATED __declspec(deprecated)
43 #else
44 #define SPDLOG_DEPRECATED
45 #endif
46 
47 // disable thread local on msvc 2013
48 #ifndef SPDLOG_NO_TLS
49 #if (defined(_MSC_VER) && (_MSC_VER < 1900)) || defined(__cplusplus_winrt)
50 #define SPDLOG_NO_TLS 1
51 #endif
52 #endif
53 
54 // Get the basename of __FILE__ (at compile time if possible)
55 #if FMT_HAS_FEATURE(__builtin_strrchr)
56 #define SPDLOG_STRRCHR(str, sep) __builtin_strrchr(str, sep)
57 #else
58 #define SPDLOG_STRRCHR(str, sep) strrchr(str, sep)
59 #endif //__builtin_strrchr not defined
60 
61 #ifdef _WIN32
62 #define SPDLOG_FILE_BASENAME(file) SPDLOG_STRRCHR("\\" file, '\\') + 1
63 #else
64 #define SPDLOG_FILE_BASENAME(file) SPDLOG_STRRCHR("/" file, '/') + 1
65 #endif
66 
67 #ifndef SPDLOG_FUNCTION
68 #define SPDLOG_FUNCTION __FUNCTION__
69 #endif
70 
71 namespace spdlog {
72 
73 class formatter;
74 
75 namespace sinks {
76 class sink;
77 }
78 
79 using log_clock = std::chrono::system_clock;
80 using sink_ptr = std::shared_ptr<sinks::sink>;
81 using sinks_init_list = std::initializer_list<sink_ptr>;
82 using log_err_handler = std::function<void(const std::string &err_msg)>;
83 
84 // string_view type - either std::string_view or fmt::string_view (pre c++17)
85 #if defined(FMT_USE_STD_STRING_VIEW)
87 #else
89 #endif
90 
91 #if defined(SPDLOG_NO_ATOMIC_LEVELS)
93 #else
94 using level_t = std::atomic<int>;
95 #endif
96 
97 #define SPDLOG_LEVEL_TRACE 0
98 #define SPDLOG_LEVEL_DEBUG 1
99 #define SPDLOG_LEVEL_INFO 2
100 #define SPDLOG_LEVEL_WARN 3
101 #define SPDLOG_LEVEL_ERROR 4
102 #define SPDLOG_LEVEL_CRITICAL 5
103 #define SPDLOG_LEVEL_OFF 6
104 
105 #if !defined(SPDLOG_ACTIVE_LEVEL)
106 #define SPDLOG_ACTIVE_LEVEL SPDLOG_LEVEL_INFO
107 #endif
108 
109 // Log level enum
110 namespace level {
112 {
120 };
121 
122 #if !defined(SPDLOG_LEVEL_NAMES)
123 #define SPDLOG_LEVEL_NAMES \
124  { \
125  "trace", "debug", "info", "warning", "error", "critical", "off" \
126  }
127 #endif
129 
130 #if !defined(SPDLOG_SHORT_LEVEL_NAMES)
131 #define SPDLOG_SHORT_LEVEL_NAMES {"T", "D", "I", "W", "E", "C", "O"}
132 #endif
134 
136 {
137  return level_string_views[l];
138 }
139 
141 {
142  return short_level_names[l];
143 }
144 
145 inline spdlog::level::level_enum from_str(const std::string &name) SPDLOG_NOEXCEPT
146 {
147  int level = 0;
148  for (const auto &level_str : level_string_views)
149  {
150  if (level_str == name)
151  {
152  return static_cast<level::level_enum>(level);
153  }
154  level++;
155  }
156  return level::off;
157 }
158 
159 using level_hasher = std::hash<int>;
160 } // namespace level
161 
162 //
163 // Pattern time - specific time getting to use for pattern_formatter.
164 // local time by default
165 //
167 {
168  local, // log localtime
169  utc // log utc
170 };
171 
172 //
173 // Log exception
174 //
175 class spdlog_ex : public std::exception
176 {
177 public:
178  explicit spdlog_ex(std::string msg)
179  : msg_(std::move(msg))
180  {
181  }
182 
183  spdlog_ex(const std::string &msg, int last_errno)
184  {
185  fmt::memory_buffer outbuf;
186  fmt::format_system_error(outbuf, last_errno, msg);
187  msg_ = fmt::to_string(outbuf);
188  }
189 
190  const char *what() const SPDLOG_NOEXCEPT override
191  {
192  return msg_.c_str();
193  }
194 
195 private:
196  std::string msg_;
197 };
198 
199 //
200 // wchar support for windows file names (SPDLOG_WCHAR_FILENAMES must be defined)
201 //
202 #if defined(_WIN32) && defined(SPDLOG_WCHAR_FILENAMES)
203 using filename_t = std::wstring;
204 #else
205 using filename_t = std::string;
206 #endif
207 
209 {
211  : filename{""}
212  , line{0}
213  , funcname{""}
214  {
215  }
216  SPDLOG_CONSTEXPR source_loc(const char *filename_in, int line_in, const char *funcname_in)
217  : filename{filename_in}
218  , line{static_cast<uint32_t>(line_in)}
219  , funcname{funcname_in}
220  {
221  }
222 
224  {
225  return line == 0;
226  }
227  const char *filename;
228  uint32_t line;
229  const char *funcname;
230 };
231 
232 namespace details {
233 // make_unique support for pre c++14
234 
235 #if __cplusplus >= 201402L // C++14 and beyond
236 using std::make_unique;
237 #else
238 template<typename T, typename... Args>
239 std::unique_ptr<T> make_unique(Args &&... args)
240 {
241  static_assert(!std::is_array<T>::value, "arrays not supported");
242  return std::unique_ptr<T>(new T(std::forward<Args>(args)...));
243 }
244 #endif
245 } // namespace details
246 } // namespace spdlog
+ + +
spdlog::level::level_enum from_str(const std::string &name) noexcept
Definition: common.h:145
+ +
std::initializer_list< sink_ptr > sinks_init_list
Definition: common.h:81
+ +
#define SPDLOG_LEVEL_WARN
Definition: common.h:100
+
void info(const char *fmt, const Args &...args)
Definition: spdlog.h:189
+ +
constexpr source_loc(const char *filename_in, int line_in, const char *funcname_in)
Definition: common.h:216
+ + +
Definition: format.h:297
+
#define SPDLOG_LEVEL_INFO
Definition: common.h:99
+
#define SPDLOG_LEVEL_NAMES
Definition: common.h:123
+
#define SPDLOG_LEVEL_TRACE
Definition: common.h:97
+ +
const char * funcname
Definition: common.h:229
+
#define SPDLOG_LEVEL_DEBUG
Definition: common.h:98
+
std::shared_ptr< sinks::sink > sink_ptr
Definition: common.h:80
+
const char * filename
Definition: common.h:227
+
#define SPDLOG_SHORT_LEVEL_NAMES
Definition: common.h:131
+
Definition: async.h:27
+
spdlog_ex(const std::string &msg, int last_errno)
Definition: common.h:183
+
std::hash< int > level_hasher
Definition: common.h:159
+
static string_view_t level_string_views[]
Definition: common.h:128
+
void critical(const char *fmt, const Args &...args)
Definition: spdlog.h:207
+
const char * to_short_c_str(spdlog::level::level_enum l) noexcept
Definition: common.h:140
+
#define SPDLOG_LEVEL_OFF
Definition: common.h:103
+ +
pattern_time_type
Definition: common.h:166
+ +
std::string filename_t
Definition: common.h:205
+
#define SPDLOG_LEVEL_ERROR
Definition: common.h:101
+
spdlog_ex(std::string msg)
Definition: common.h:178
+
std::chrono::system_clock log_clock
Definition: common.h:79
+
constexpr source_loc()
Definition: common.h:210
+
constexpr bool empty() const noexcept
Definition: common.h:223
+
std::unique_ptr< T > make_unique(Args &&...args)
Definition: common.h:239
+
void warn(const char *fmt, const Args &...args)
Definition: spdlog.h:195
+ +
string_view_t & to_string_view(spdlog::level::level_enum l) noexcept
Definition: common.h:135
+ +
void debug(const char *fmt, const Args &...args)
Definition: spdlog.h:183
+
#define SPDLOG_NOEXCEPT
Definition: common.h:35
+
#define SPDLOG_CONSTEXPR
Definition: common.h:36
+
std::atomic< int > level_t
Definition: common.h:94
+
std::string to_string(const T &value)
Definition: format.h:3209
+
static const char * short_level_names[]
Definition: common.h:133
+
void format_system_error(internal::buffer &out, int error_code, string_view message)
Definition: format-inl.h:906
+
#define SPDLOG_LEVEL_CRITICAL
Definition: common.h:102
+
std::function< void(const std::string &err_msg)> log_err_handler
Definition: common.h:82
+
basic_string_view< char > string_view
Definition: core.h:428
+
void trace(const char *fmt, const Args &...args)
Definition: spdlog.h:177
+
uint32_t line
Definition: common.h:228
+
const char * what() const noexceptoverride
Definition: common.h:190
+
- - - - -
const char * funcname
Definition: common.h:229
-
#define SPDLOG_LEVEL_DEBUG
Definition: common.h:98
-
#define SPDLOG_NOEXCEPT
Definition: common.h:35
-
std::function< void(const std::string &err_msg)> log_err_handler
Definition: common.h:82
- -
const char * filename
Definition: common.h:227
-
#define SPDLOG_LEVEL_INFO
Definition: common.h:99
- -
#define SPDLOG_LEVEL_NAMES
Definition: common.h:123
-
static const char * short_level_names[]
Definition: common.h:133
-
std::shared_ptr< sinks::sink > sink_ptr
Definition: common.h:80
-
void format_system_error(internal::buffer &out, int error_code, string_view message)
Definition: format-inl.h:906
-
spdlog::level::level_enum from_str(const std::string &name) noexcept
Definition: common.h:145
-
std::atomic< int > level_t
Definition: common.h:94
-
uint32_t line
Definition: common.h:228
-
const char * to_short_c_str(spdlog::level::level_enum l) noexcept
Definition: common.h:140
- - -
std::initializer_list< sink_ptr > sinks_init_list
Definition: common.h:81
-
#define SPDLOG_LEVEL_TRACE
Definition: common.h:97
-
std::string to_string(const T &value)
Definition: format.h:3209
-
std::chrono::system_clock log_clock
Definition: common.h:79
-
#define SPDLOG_LEVEL_WARN
Definition: common.h:100
- -
Definition: async.h:27
- - -
spdlog_ex(std::string msg)
Definition: common.h:178
-
string_view_t & to_string_view(spdlog::level::level_enum l) noexcept
Definition: common.h:135
-
#define SPDLOG_LEVEL_CRITICAL
Definition: common.h:102
- -
static string_view_t level_string_views[]
Definition: common.h:128
- - -
std::unique_ptr< T > make_unique(Args &&... args)
Definition: common.h:239
- -
basic_string_view< char > string_view
Definition: core.h:428
- - -
pattern_time_type
Definition: common.h:166
-
#define SPDLOG_SHORT_LEVEL_NAMES
Definition: common.h:131
-
Definition: format.h:297
-
#define SPDLOG_LEVEL_ERROR
Definition: common.h:101
-
#define SPDLOG_LEVEL_OFF
Definition: common.h:103
-
std::string filename_t
Definition: common.h:205
- -
constexpr source_loc(const char *filename_in, int line_in, const char *funcname_in)
Definition: common.h:216
-
std::hash< int > level_hasher
Definition: common.h:159
-
spdlog_ex(const std::string &msg, int last_errno)
Definition: common.h:183
- -
constexpr source_loc()
Definition: common.h:210
-
constexpr bool empty() const noexcept
Definition: common.h:223
-
#define SPDLOG_CONSTEXPR
Definition: common.h:36
-
const char * what() const noexcept override
Definition: common.h:190
diff --git a/docs/console__globals_8h.html b/docs/console__globals_8h.html index e24cc76..c3c2843 100644 --- a/docs/console__globals_8h.html +++ b/docs/console__globals_8h.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: sdk_core/include/third_party/spdlog/spdlog/details/console_globals.h File Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,40 @@ - + - - - - + +
@@ -126,7 +144,7 @@ Namespaces + doxygen 1.8.11
diff --git a/docs/console__globals_8h_source.html b/docs/console__globals_8h_source.html index 6cb9d13..f6cef54 100644 --- a/docs/console__globals_8h_source.html +++ b/docs/console__globals_8h_source.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: sdk_core/include/third_party/spdlog/spdlog/details/console_globals.h Source File @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,40 @@ - + - - - - + +
@@ -91,101 +109,27 @@ $(document).ready(function(){initNavTree('console__globals_8h_source.html','');}
console_globals.h
-Go to the documentation of this file.
1 #pragma once
-
2 //
-
3 // Copyright(c) 2018 Gabi Melman.
-
4 // Distributed under the MIT License (http://opensource.org/licenses/MIT)
-
5 //
-
6 
- -
8 #include <cstdio>
-
9 #include <mutex>
-
10 
-
11 #ifdef _WIN32
-
12 
-
13 #ifndef NOMINMAX
-
14 #define NOMINMAX // prevent windows redefining min/max
-
15 #endif
-
16 
-
17 #ifndef WIN32_LEAN_AND_MEAN
-
18 #define WIN32_LEAN_AND_MEAN
-
19 #endif
-
20 
-
21 #include <windows.h>
-
22 #endif
-
23 
-
24 namespace spdlog {
-
25 namespace details {
- -
27 {
-
28  static std::FILE *stream()
-
29  {
-
30  return stdout;
-
31  }
-
32 #ifdef _WIN32
-
33  static HANDLE handle()
-
34  {
-
35  return ::GetStdHandle(STD_OUTPUT_HANDLE);
-
36  }
-
37 #endif
-
38 };
-
39 
- -
41 {
-
42  static std::FILE *stream()
-
43  {
-
44  return stderr;
-
45  }
-
46 #ifdef _WIN32
-
47  static HANDLE handle()
-
48  {
-
49  return ::GetStdHandle(STD_ERROR_HANDLE);
-
50  }
-
51 #endif
-
52 };
-
53 
- -
55 {
-
56  using mutex_t = std::mutex;
-
57  static mutex_t &mutex()
-
58  {
-
59  static mutex_t s_mutex;
-
60  return s_mutex;
-
61  }
-
62 };
-
63 
- -
65 {
- -
67  static mutex_t &mutex()
-
68  {
-
69  static mutex_t s_mutex;
-
70  return s_mutex;
-
71  }
-
72 };
-
73 } // namespace details
-
74 } // namespace spdlog
+Go to the documentation of this file.
1 #pragma once
2 //
3 // Copyright(c) 2018 Gabi Melman.
4 // Distributed under the MIT License (http://opensource.org/licenses/MIT)
5 //
6 
8 #include <cstdio>
9 #include <mutex>
10 
11 #ifdef _WIN32
12 
13 #ifndef NOMINMAX
14 #define NOMINMAX // prevent windows redefining min/max
15 #endif
16 
17 #ifndef WIN32_LEAN_AND_MEAN
18 #define WIN32_LEAN_AND_MEAN
19 #endif
20 
21 #include <windows.h>
22 #endif
23 
24 namespace spdlog {
25 namespace details {
27 {
28  static std::FILE *stream()
29  {
30  return stdout;
31  }
32 #ifdef _WIN32
33  static HANDLE handle()
34  {
35  return ::GetStdHandle(STD_OUTPUT_HANDLE);
36  }
37 #endif
38 };
39 
41 {
42  static std::FILE *stream()
43  {
44  return stderr;
45  }
46 #ifdef _WIN32
47  static HANDLE handle()
48  {
49  return ::GetStdHandle(STD_ERROR_HANDLE);
50  }
51 #endif
52 };
53 
55 {
56  using mutex_t = std::mutex;
57  static mutex_t &mutex()
58  {
59  static mutex_t s_mutex;
60  return s_mutex;
61  }
62 };
63 
65 {
67  static mutex_t &mutex()
68  {
69  static mutex_t s_mutex;
70  return s_mutex;
71  }
72 };
73 } // namespace details
74 } // namespace spdlog
+ + +
Definition: async.h:27
+ + + + + + + +
- - - - - - - -
Definition: async.h:27
- - - - diff --git a/docs/core_8h.html b/docs/core_8h.html index 8c47417..44355d0 100644 --- a/docs/core_8h.html +++ b/docs/core_8h.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: sdk_core/include/third_party/spdlog/spdlog/fmt/bundled/core.h File Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,40 @@ - + - - - - + +
@@ -385,10 +403,10 @@ Functions init< C, unsigned, uint_type > fmt::v5::internal::make_value (unsigned val)   template<typename C > -init< C, long_type,(sizeof(long)==sizeof(int) ? int_type :long_long_type) > fmt::v5::internal::make_value (long val) +init< C, long_type,(sizeof(long)==sizeof(int)?int_type:long_long_type) > fmt::v5::internal::make_value (long val)   template<typename C > -init< C, ulong_type,(sizeof(unsigned long)==sizeof(unsigned) ? uint_type :ulong_long_type) > fmt::v5::internal::make_value (unsigned long val) +init< C, ulong_type,(sizeof(unsigned long)==sizeof(unsigned)?uint_type:ulong_long_type) > fmt::v5::internal::make_value (unsigned long val)   template<typename C > init< C, long long, long_long_type > fmt::v5::internal::make_value (long long val) @@ -486,9 +504,9 @@ Functions template<bool IS_PACKED, typename Context , typename T > std::enable_if<!IS_PACKED, basic_format_arg< Context > >::type fmt::v5::internal::make_arg (const T &value)   -template<typename Context = format_context, typename ... Args> -format_arg_store< Context, Args... > fmt::v5::make_format_args (const Args &... args) -  +template<typename Context = format_context, typename... Args> +format_arg_store< Context, Args... > fmt::v5::make_format_args (const Args &...args) +  template<typename... Args, typename S > std::enable_if<!is_compile_string< S >::value >::type fmt::v5::internal::check_format_string (const S &)   @@ -513,34 +531,32 @@ Functions template<typename Container , typename S > std::enable_if< is_contiguous< Container >::value, std::back_insert_iterator< Container > >::type fmt::v5::vformat_to (std::back_insert_iterator< Container > out, const S &format_str, basic_format_args< typename buffer_context< typename char_t< S >::type >::type > args)   -template<typename Container , typename S , typename... Args> -std::enable_if< is_contiguous< Container >::value &&internal::is_string< S >::value, std::back_insert_iterator< Container > >::type fmt::v5::format_to (std::back_insert_iterator< Container > out, const S &format_str, const Args &... args) -  +template<typename Container , typename S , typename... Args> +std::enable_if< is_contiguous< Container >::value &&internal::is_string< S >::value, std::back_insert_iterator< Container > >::type fmt::v5::format_to (std::back_insert_iterator< Container > out, const S &format_str, const Args &...args) +  template<typename S , typename Char = typename char_t< S >::type> std::basic_string< Char > fmt::v5::vformat (const S &format_str, basic_format_args< typename buffer_context< Char >::type > args)   -template<typename S , typename... Args> -std::basic_string< typename char_t< S >::type > fmt::v5::format (const S &format_str, const Args &... args) -  +template<typename S , typename... Args> +std::basic_string< typename char_t< S >::type > fmt::v5::format (const S &format_str, const Args &...args) +  void fmt::v5::vprint (std::FILE *f, string_view format_str, format_args args)   void fmt::v5::vprint (std::FILE *f, wstring_view format_str, wformat_args args)   -template<typename S , typename... Args> -std::enable_if< internal::is_string< S >::value, void >::type fmt::v5::print (std::FILE *f, const S &format_str, const Args &... args) -  +template<typename S , typename... Args> +std::enable_if< internal::is_string< S >::value, void >::type fmt::v5::print (std::FILE *f, const S &format_str, const Args &...args) +  void fmt::v5::vprint (string_view format_str, format_args args)   void fmt::v5::vprint (wstring_view format_str, wformat_args args)   -template<typename S , typename... Args> -std::enable_if< internal::is_string< S >::value, void >::type fmt::v5::print (const S &format_str, const Args &... args) -  +template<typename S , typename... Args> +std::enable_if< internal::is_string< S >::value, void >::type fmt::v5::print (const S &format_str, const Args &...args) + 

Macro Definition Documentation

- -

◆ FMT_API

- +
@@ -550,13 +566,11 @@ Functions
-

Definition at line 166 of file core.h.

+

Definition at line 166 of file core.h.

- -

◆ FMT_ASSERT

- +
@@ -580,13 +594,11 @@ Functions
-

Definition at line 170 of file core.h.

+

Definition at line 170 of file core.h.

- -

◆ FMT_BEGIN_NAMESPACE

- +
@@ -596,13 +608,11 @@ Functions
-

Definition at line 155 of file core.h.

+

Definition at line 155 of file core.h.

- -

◆ FMT_CHAR

- +
@@ -616,13 +626,11 @@ Functions
-

Definition at line 1320 of file core.h.

+

Definition at line 1320 of file core.h.

- -

◆ FMT_CONSTEXPR

- +
@@ -632,13 +640,11 @@ Functions
-

Definition at line 69 of file core.h.

+

Definition at line 69 of file core.h.

- -

◆ FMT_CONSTEXPR11

- +
@@ -648,13 +654,11 @@ Functions
-

Definition at line 80 of file core.h.

+

Definition at line 80 of file core.h.

- -

◆ FMT_CONSTEXPR_DECL

- +
@@ -664,13 +668,11 @@ Functions
-

Definition at line 70 of file core.h.

+

Definition at line 70 of file core.h.

- -

◆ FMT_DETECTED_NOEXCEPT

- +
@@ -680,13 +682,11 @@ Functions
-

Definition at line 134 of file core.h.

+

Definition at line 134 of file core.h.

- -

◆ FMT_ENABLE_IF_T

- +
@@ -710,13 +710,11 @@ Functions
-

Definition at line 1305 of file core.h.

+

Definition at line 1305 of file core.h.

- -

◆ FMT_END_NAMESPACE

- +
@@ -726,13 +724,11 @@ Functions
-

Definition at line 153 of file core.h.

+

Definition at line 153 of file core.h.

- -

◆ FMT_EXCEPTIONS

- +
@@ -742,13 +738,11 @@ Functions
-

Definition at line 120 of file core.h.

+

Definition at line 120 of file core.h.

- -

◆ FMT_EXPLICIT

- +
@@ -758,13 +752,11 @@ Functions
-

Definition at line 98 of file core.h.

+

Definition at line 98 of file core.h.

- -

◆ FMT_GCC_VERSION

- +
@@ -774,13 +766,11 @@ Functions
-

Definition at line 43 of file core.h.

+

Definition at line 43 of file core.h.

- -

◆ FMT_HAS_CPP_ATTRIBUTE

- +
@@ -794,13 +784,11 @@ Functions
-

Definition at line 37 of file core.h.

+

Definition at line 37 of file core.h.

- -

◆ FMT_HAS_CXX11_NOEXCEPT

- +
@@ -810,13 +798,11 @@ Functions
-

Definition at line 135 of file core.h.

+

Definition at line 135 of file core.h.

- -

◆ FMT_HAS_FEATURE

- +
@@ -830,13 +816,11 @@ Functions
-

Definition at line 24 of file core.h.

+

Definition at line 24 of file core.h.

- -

◆ FMT_HAS_GXX_CXX11

- +
@@ -846,13 +830,11 @@ Functions
-

Definition at line 49 of file core.h.

+

Definition at line 49 of file core.h.

- -

◆ FMT_HAS_INCLUDE

- +
@@ -866,13 +848,11 @@ Functions
-

Definition at line 31 of file core.h.

+

Definition at line 31 of file core.h.

- -

◆ FMT_INLINE_NAMESPACE

- +
@@ -882,13 +862,11 @@ Functions
-

Definition at line 152 of file core.h.

+

Definition at line 152 of file core.h.

- -

◆ FMT_MAKE_VALUE

- +
@@ -917,18 +895,14 @@ Functions
-Value:
template <typename C> \
-
FMT_CONSTEXPR init<C, ValueType, TAG> make_value(ArgType val) { \
-
return static_cast<ValueType>(val); \
-
}
+Value:
template <typename C> \
FMT_CONSTEXPR init<C, ValueType, TAG> make_value(ArgType val) { \
return static_cast<ValueType>(val); \
}
std::enable_if< internal::is_string< S >::value, init< C, basic_string_view< typename C::char_type >, string_type > >::type make_value(const S &val)
Definition: core.h:760
+
#define FMT_CONSTEXPR
Definition: core.h:69
-

Definition at line 642 of file core.h.

+

Definition at line 642 of file core.h.

- -

◆ FMT_MAKE_VALUE_SAME

- +
@@ -951,16 +925,14 @@ Functions
-Value:
template <typename C> \
-
FMT_CONSTEXPR init<C, Type, TAG> make_value(Type val) { return val; }
+Value:
template <typename C> \
FMT_CONSTEXPR init<C, Type, TAG> make_value(Type val) { return val; }
std::enable_if< internal::is_string< S >::value, init< C, basic_string_view< typename C::char_type >, string_type > >::type make_value(const S &val)
Definition: core.h:760
+
#define FMT_CONSTEXPR
Definition: core.h:69
-

Definition at line 648 of file core.h.

+

Definition at line 648 of file core.h.

- -

◆ FMT_MSC_VER

- +
@@ -970,13 +942,11 @@ Functions
-

Definition at line 55 of file core.h.

+

Definition at line 55 of file core.h.

- -

◆ FMT_NOEXCEPT

- +
@@ -986,13 +956,11 @@ Functions
-

Definition at line 140 of file core.h.

+

Definition at line 140 of file core.h.

- -

◆ FMT_NULL

- +
@@ -1002,13 +970,11 @@ Functions
-

Definition at line 107 of file core.h.

+

Definition at line 107 of file core.h.

- -

◆ FMT_OVERRIDE

- +
@@ -1018,13 +984,11 @@ Functions
-

Definition at line 88 of file core.h.

+

Definition at line 88 of file core.h.

- -

◆ FMT_USE_ALIAS_TEMPLATES

- +
@@ -1034,13 +998,11 @@ Functions
-

Definition at line 1308 of file core.h.

+

Definition at line 1308 of file core.h.

- -

◆ FMT_USE_CONSTEXPR

- +
@@ -1049,16 +1011,15 @@ Functions
-Value:
(FMT_HAS_FEATURE(cxx_relaxed_constexpr) || FMT_MSC_VER >= 1910 || \
-
(FMT_GCC_VERSION >= 600 && __cplusplus >= 201402L))
+Value:
(FMT_HAS_FEATURE(cxx_relaxed_constexpr) || FMT_MSC_VER >= 1910 || \
(FMT_GCC_VERSION >= 600 && __cplusplus >= 201402L))
#define FMT_MSC_VER
Definition: core.h:55
+
#define FMT_GCC_VERSION
Definition: core.h:43
+
#define FMT_HAS_FEATURE(x)
Definition: core.h:24
-

Definition at line 61 of file core.h.

+

Definition at line 61 of file core.h.

- -

◆ FMT_USE_CONSTEXPR11

- +
@@ -1068,13 +1029,11 @@ Functions
-

Definition at line 74 of file core.h.

+

Definition at line 74 of file core.h.

- -

◆ FMT_USE_EXPLICIT

- +
@@ -1084,13 +1043,11 @@ Functions
-

Definition at line 97 of file core.h.

+

Definition at line 97 of file core.h.

- -

◆ FMT_USE_NOEXCEPT

- +
@@ -1100,13 +1057,11 @@ Functions
-

Definition at line 126 of file core.h.

+

Definition at line 126 of file core.h.

- -

◆ FMT_USE_NULLPTR

- +
@@ -1116,13 +1071,11 @@ Functions
-

Definition at line 111 of file core.h.

+

Definition at line 111 of file core.h.

- -

◆ FMT_VERSION

- +
@@ -1132,23 +1085,19 @@ Functions
-

Definition at line 19 of file core.h.

+

Definition at line 19 of file core.h.

-
#define FMT_HAS_FEATURE(x)
Definition: core.h:24
-
std::enable_if< internal::is_string< S >::value, init< C, basic_string_view< typename C::char_type >, string_type > >::type make_value(const S &val)
Definition: core.h:760
-
#define FMT_GCC_VERSION
Definition: core.h:43
-
#define FMT_MSC_VER
Definition: core.h:55
diff --git a/docs/core_8h.js b/docs/core_8h.js index bf78af8..48ba98c 100644 --- a/docs/core_8h.js +++ b/docs/core_8h.js @@ -110,14 +110,14 @@ var core_8h = [ "pointer_type", "core_8h.html#af8b98afef956b03a99bc61d088705f13a355d7dd1bc164c3b845d96bb5ba1a5c0", null ], [ "custom_type", "core_8h.html#af8b98afef956b03a99bc61d088705f13a2bf13ea13c39343d5656a3804f53508a", null ] ] ], - [ "arg", "core_8h.html#a829ae121113d346b82fd668a780a671c", null ], [ "arg", "core_8h.html#a3ef982cd96cf71b5fa7c37269012dafd", null ], [ "arg", "core_8h.html#a988bfc81f48221fec1910c217bc0dfcc", null ], + [ "arg", "core_8h.html#a829ae121113d346b82fd668a780a671c", null ], [ "check_format_string", "core_8h.html#acd0741048e2d4d76c3a549c5a6d9d857", null ], [ "check_format_string", "core_8h.html#a1e8f98191fb8cde7f6fa0b768dccdab2", null ], [ "declval", "core_8h.html#ae8ef7d855b651c42243a7c6b109cd94b", null ], - [ "format", "core_8h.html#a8accad256e8cb70d1398a568742a60f0", null ], - [ "format_to", "core_8h.html#a253206334a77520a94a72af63516dabd", null ], + [ "format", "core_8h.html#af91049b32d6d61b2bc01cba4754ee870", null ], + [ "format_to", "core_8h.html#a45ad5d5a47de5513643bf7c75b8d7d91", null ], [ "get_container", "core_8h.html#a0ea486bdd96af45e228fa60a3ca90c6e", null ], [ "get_types", "core_8h.html#a6c122dc0a60ed6357913edb855c51d41", null ], [ "get_types", "core_8h.html#a25b3bfdbfda4389ce170995445fbb3bd", null ], @@ -126,47 +126,47 @@ var core_8h = [ "make_arg", "core_8h.html#aeb8392ed1d3db2b0d61256627fd0ee45", null ], [ "make_arg", "core_8h.html#a80b4b91c27453ab70741b162fb1b9ee9", null ], [ "make_arg", "core_8h.html#a12e2ca23ef7e44381012322943cd45e4", null ], - [ "make_format_args", "core_8h.html#a99faaaf62db5189f2e36070a04fc6981", null ], - [ "make_value", "core_8h.html#a026d4ace419ac741560868f9cf829727", null ], + [ "make_format_args", "core_8h.html#abcbcbcd2dcf4a32bc0d70898605dd17c", null ], [ "make_value", "core_8h.html#ae636a21b85a25f216949a2987bfd9d89", null ], + [ "make_value", "core_8h.html#a114b82825ab2dee13e1914fddb26dd87", null ], + [ "make_value", "core_8h.html#a7b75e2a1b428d2a4bdf085e65821c6ee", null ], + [ "make_value", "core_8h.html#a812744db908d21fe09cf9ba844d8b1ce", null ], + [ "make_value", "core_8h.html#ab4a71234cf33d295c8776c1ecfd04d80", null ], + [ "make_value", "core_8h.html#af68c2d6c2ea535e9fe1dde8a97016019", null ], + [ "make_value", "core_8h.html#ab49c070fd72bc190afe897235a6391b7", null ], + [ "make_value", "core_8h.html#a344b631dd2a44d6240a5bf881fa384e5", null ], + [ "make_value", "core_8h.html#a66e6c630864ba13be3eae6aed4b9a2ba", null ], + [ "make_value", "core_8h.html#ac6a1568f2fc1baa1c6b9e139c038a254", null ], + [ "make_value", "core_8h.html#a9cf9954148cb1b82eb6d8cf69fef9f0e", null ], [ "make_value", "core_8h.html#ab190353863f3a4660bed7bea829a6822", null ], [ "make_value", "core_8h.html#a6522e43666855e8166b0e1097d115d83", null ], - [ "make_value", "core_8h.html#a7f29400879301aadb96b80568b8fecc7", null ], - [ "make_value", "core_8h.html#ad61aad8232950c65bdff8b83abe92929", null ], + [ "make_value", "core_8h.html#a4f4a486379e85b8d88c73eff6197b768", null ], + [ "make_value", "core_8h.html#a8fcea7a9901c65a40f9ed5d76c3b53f9", null ], + [ "make_value", "core_8h.html#afd48e0f440edf24c821e4ff7554b9730", null ], + [ "make_value", "core_8h.html#aacbe9f39925b33b031be5cffc988c95e", null ], + [ "make_value", "core_8h.html#aa673164d8ab4b4bedc66e0dfa6faf952", null ], + [ "make_value", "core_8h.html#af1664d9b06d9e4b78a8db3ea1fa99d68", null ], [ "make_value", "core_8h.html#aae8c11e3b42fe7cd379cf3d5e076ce8c", null ], + [ "make_value", "core_8h.html#a3771b53380243f3c36d061438c0596b3", null ], + [ "make_value", "core_8h.html#a1bee81a83919db01b3cc9d95981d3311", null ], + [ "make_value", "core_8h.html#a026d4ace419ac741560868f9cf829727", null ], + [ "make_value", "core_8h.html#a842c0c5e03126468303bbd3b9a96a945", null ], [ "make_value", "core_8h.html#ab366b11763385ee5096ec32544a9ac63", null ], + [ "make_value", "core_8h.html#a3a6e943d8c70bf3cc543abaaec5bfc46", null ], + [ "make_value", "core_8h.html#a49a095fdcf7a195744579493e8b93e0b", null ], + [ "make_value", "core_8h.html#aa0d84dd629a961d4ba20bad142b6fa75", null ], [ "make_value", "core_8h.html#aab9ed525c003632b5b9c5314f22411af", null ], [ "make_value", "core_8h.html#a2f833eb53fcc22e4b5a7bd8cb99f0232", null ], [ "make_value", "core_8h.html#ad61b07c8fe83db5520e226ab23edf892", null ], - [ "make_value", "core_8h.html#aa0d84dd629a961d4ba20bad142b6fa75", null ], - [ "make_value", "core_8h.html#aa673164d8ab4b4bedc66e0dfa6faf952", null ], - [ "make_value", "core_8h.html#a1bee81a83919db01b3cc9d95981d3311", null ], - [ "make_value", "core_8h.html#a49a095fdcf7a195744579493e8b93e0b", null ], - [ "make_value", "core_8h.html#a8fcea7a9901c65a40f9ed5d76c3b53f9", null ], - [ "make_value", "core_8h.html#a4f4a486379e85b8d88c73eff6197b768", null ], - [ "make_value", "core_8h.html#a812744db908d21fe09cf9ba844d8b1ce", null ], - [ "make_value", "core_8h.html#afd48e0f440edf24c821e4ff7554b9730", null ], - [ "make_value", "core_8h.html#a344b631dd2a44d6240a5bf881fa384e5", null ], - [ "make_value", "core_8h.html#af68c2d6c2ea535e9fe1dde8a97016019", null ], - [ "make_value", "core_8h.html#a114b82825ab2dee13e1914fddb26dd87", null ], - [ "make_value", "core_8h.html#af1664d9b06d9e4b78a8db3ea1fa99d68", null ], - [ "make_value", "core_8h.html#ac6a1568f2fc1baa1c6b9e139c038a254", null ], - [ "make_value", "core_8h.html#a842c0c5e03126468303bbd3b9a96a945", null ], - [ "make_value", "core_8h.html#aacbe9f39925b33b031be5cffc988c95e", null ], - [ "make_value", "core_8h.html#a3771b53380243f3c36d061438c0596b3", null ], - [ "make_value", "core_8h.html#a9cf9954148cb1b82eb6d8cf69fef9f0e", null ], - [ "make_value", "core_8h.html#a66e6c630864ba13be3eae6aed4b9a2ba", null ], - [ "make_value", "core_8h.html#ab49c070fd72bc190afe897235a6391b7", null ], - [ "make_value", "core_8h.html#a7b75e2a1b428d2a4bdf085e65821c6ee", null ], - [ "make_value", "core_8h.html#ab4a71234cf33d295c8776c1ecfd04d80", null ], - [ "make_value", "core_8h.html#a3a6e943d8c70bf3cc543abaaec5bfc46", null ], - [ "print", "core_8h.html#a3f6a04fdf140370cbd2b83d8adae100f", null ], - [ "print", "core_8h.html#ad7545fdef9670aa6f3a042af78b14554", null ], - [ "to_string_view", "core_8h.html#a4b4263d060da175d7113962ebfd37819", null ], + [ "make_value", "core_8h.html#a7f29400879301aadb96b80568b8fecc7", null ], + [ "make_value", "core_8h.html#ad61aad8232950c65bdff8b83abe92929", null ], + [ "print", "core_8h.html#a37da59dce4fed39ff3044ee50758951f", null ], + [ "print", "core_8h.html#ae303d0205c0a9ed2fbe4cea986e0c184", null ], [ "to_string_view", "core_8h.html#a29e4c9965f74e7f2bb6f75d7153468b6", null ], + [ "to_string_view", "core_8h.html#a5b47584a9e90ebd6460675a6c1d6b238", null ], [ "to_string_view", "core_8h.html#ab264eb8eb9841f0cee5af4284196a4cc", null ], [ "to_string_view", "core_8h.html#a1fcfd29b295417c3eb7395c4df6ea1f9", null ], - [ "to_string_view", "core_8h.html#a5b47584a9e90ebd6460675a6c1d6b238", null ], + [ "to_string_view", "core_8h.html#a4b4263d060da175d7113962ebfd37819", null ], [ "to_unsigned", "core_8h.html#abef3b695050c4132b4fc4d7f256b9580", null ], [ "vformat", "core_8h.html#a8561b3876ffaedaf2b94f434da083c34", null ], [ "vformat", "core_8h.html#afbb941ac362fc08798ab3f9b1303f88f", null ], diff --git a/docs/core_8h_source.html b/docs/core_8h_source.html index fb49206..fd3b1d2 100644 --- a/docs/core_8h_source.html +++ b/docs/core_8h_source.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: sdk_core/include/third_party/spdlog/spdlog/fmt/bundled/core.h Source File @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,40 @@
- + - - - - + +
@@ -91,1633 +109,260 @@ $(document).ready(function(){initNavTree('core_8h_source.html','');});
core.h
-Go to the documentation of this file.
1 // Formatting library for C++ - the core API
-
2 //
-
3 // Copyright (c) 2012 - present, Victor Zverovich
-
4 // All rights reserved.
-
5 //
-
6 // For the license information refer to format.h.
-
7 
-
8 #ifndef FMT_CORE_H_
-
9 #define FMT_CORE_H_
-
10 
-
11 #include <cassert>
-
12 #include <cstdio> // std::FILE
-
13 #include <cstring>
-
14 #include <iterator>
-
15 #include <string>
-
16 #include <type_traits>
-
17 
-
18 // The fmt library version in the form major * 10000 + minor * 100 + patch.
-
19 #define FMT_VERSION 50300
-
20 
-
21 #ifdef __has_feature
-
22 # define FMT_HAS_FEATURE(x) __has_feature(x)
-
23 #else
-
24 # define FMT_HAS_FEATURE(x) 0
-
25 #endif
-
26 
-
27 #if defined(__has_include) && !defined(__INTELLISENSE__) && \
-
28  !(defined(__INTEL_COMPILER) && __INTEL_COMPILER < 1600)
-
29 # define FMT_HAS_INCLUDE(x) __has_include(x)
-
30 #else
-
31 # define FMT_HAS_INCLUDE(x) 0
-
32 #endif
-
33 
-
34 #ifdef __has_cpp_attribute
-
35 # define FMT_HAS_CPP_ATTRIBUTE(x) __has_cpp_attribute(x)
-
36 #else
-
37 # define FMT_HAS_CPP_ATTRIBUTE(x) 0
-
38 #endif
-
39 
-
40 #if defined(__GNUC__) && !defined(__clang__)
-
41 # define FMT_GCC_VERSION (__GNUC__ * 100 + __GNUC_MINOR__)
-
42 #else
-
43 # define FMT_GCC_VERSION 0
-
44 #endif
-
45 
-
46 #if __cplusplus >= 201103L || defined(__GXX_EXPERIMENTAL_CXX0X__)
-
47 # define FMT_HAS_GXX_CXX11 FMT_GCC_VERSION
-
48 #else
-
49 # define FMT_HAS_GXX_CXX11 0
-
50 #endif
-
51 
-
52 #ifdef _MSC_VER
-
53 # define FMT_MSC_VER _MSC_VER
-
54 #else
-
55 # define FMT_MSC_VER 0
-
56 #endif
-
57 
-
58 // Check if relaxed C++14 constexpr is supported.
-
59 // GCC doesn't allow throw in constexpr until version 6 (bug 67371).
-
60 #ifndef FMT_USE_CONSTEXPR
-
61 # define FMT_USE_CONSTEXPR \
-
62  (FMT_HAS_FEATURE(cxx_relaxed_constexpr) || FMT_MSC_VER >= 1910 || \
-
63  (FMT_GCC_VERSION >= 600 && __cplusplus >= 201402L))
-
64 #endif
-
65 #if FMT_USE_CONSTEXPR
-
66 # define FMT_CONSTEXPR constexpr
-
67 # define FMT_CONSTEXPR_DECL constexpr
-
68 #else
-
69 # define FMT_CONSTEXPR inline
-
70 # define FMT_CONSTEXPR_DECL
-
71 #endif
-
72 
-
73 #ifndef FMT_USE_CONSTEXPR11
-
74 # define FMT_USE_CONSTEXPR11 \
-
75  (FMT_USE_CONSTEXPR || FMT_GCC_VERSION >= 406 || FMT_MSC_VER >= 1900)
-
76 #endif
-
77 #if FMT_USE_CONSTEXPR11
-
78 # define FMT_CONSTEXPR11 constexpr
-
79 #else
-
80 # define FMT_CONSTEXPR11
-
81 #endif
-
82 
-
83 #ifndef FMT_OVERRIDE
-
84 # if FMT_HAS_FEATURE(cxx_override) || \
-
85  (FMT_GCC_VERSION >= 408 && FMT_HAS_GXX_CXX11) || FMT_MSC_VER >= 1900
-
86 # define FMT_OVERRIDE override
-
87 # else
-
88 # define FMT_OVERRIDE
-
89 # endif
-
90 #endif
-
91 
-
92 #if FMT_HAS_FEATURE(cxx_explicit_conversions) || \
-
93  FMT_GCC_VERSION >= 405 || FMT_MSC_VER >= 1800
-
94 # define FMT_USE_EXPLICIT 1
-
95 # define FMT_EXPLICIT explicit
-
96 #else
-
97 # define FMT_USE_EXPLICIT 0
-
98 # define FMT_EXPLICIT
-
99 #endif
-
100 
-
101 #ifndef FMT_NULL
-
102 # if FMT_HAS_FEATURE(cxx_nullptr) || \
-
103  (FMT_GCC_VERSION >= 408 && FMT_HAS_GXX_CXX11) || FMT_MSC_VER >= 1600
-
104 # define FMT_NULL nullptr
-
105 # define FMT_USE_NULLPTR 1
-
106 # else
-
107 # define FMT_NULL NULL
-
108 # endif
-
109 #endif
-
110 #ifndef FMT_USE_NULLPTR
-
111 # define FMT_USE_NULLPTR 0
-
112 #endif
-
113 
-
114 // Check if exceptions are disabled.
-
115 #ifndef FMT_EXCEPTIONS
-
116 # if (defined(__GNUC__) && !defined(__EXCEPTIONS)) || \
-
117  FMT_MSC_VER && !_HAS_EXCEPTIONS
-
118 # define FMT_EXCEPTIONS 0
-
119 # else
-
120 # define FMT_EXCEPTIONS 1
-
121 # endif
-
122 #endif
-
123 
-
124 // Define FMT_USE_NOEXCEPT to make fmt use noexcept (C++11 feature).
-
125 #ifndef FMT_USE_NOEXCEPT
-
126 # define FMT_USE_NOEXCEPT 0
-
127 #endif
-
128 
-
129 #if FMT_USE_NOEXCEPT || FMT_HAS_FEATURE(cxx_noexcept) || \
-
130  (FMT_GCC_VERSION >= 408 && FMT_HAS_GXX_CXX11) || FMT_MSC_VER >= 1900
-
131 # define FMT_DETECTED_NOEXCEPT noexcept
-
132 # define FMT_HAS_CXX11_NOEXCEPT 1
-
133 #else
-
134 # define FMT_DETECTED_NOEXCEPT throw()
-
135 # define FMT_HAS_CXX11_NOEXCEPT 0
-
136 #endif
-
137 
-
138 #ifndef FMT_NOEXCEPT
-
139 # if FMT_EXCEPTIONS || FMT_HAS_CXX11_NOEXCEPT
-
140 # define FMT_NOEXCEPT FMT_DETECTED_NOEXCEPT
-
141 # else
-
142 # define FMT_NOEXCEPT
-
143 # endif
-
144 #endif
-
145 
-
146 #ifndef FMT_BEGIN_NAMESPACE
-
147 # if FMT_HAS_FEATURE(cxx_inline_namespaces) || FMT_GCC_VERSION >= 404 || \
-
148  FMT_MSC_VER >= 1900
-
149 # define FMT_INLINE_NAMESPACE inline namespace
-
150 # define FMT_END_NAMESPACE }}
-
151 # else
-
152 # define FMT_INLINE_NAMESPACE namespace
-
153 # define FMT_END_NAMESPACE } using namespace v5; }
-
154 # endif
-
155 # define FMT_BEGIN_NAMESPACE namespace fmt { FMT_INLINE_NAMESPACE v5 {
-
156 #endif
-
157 
-
158 #if !defined(FMT_HEADER_ONLY) && defined(_WIN32)
-
159 # ifdef FMT_EXPORT
-
160 # define FMT_API __declspec(dllexport)
-
161 # elif defined(FMT_SHARED)
-
162 # define FMT_API __declspec(dllimport)
-
163 # endif
-
164 #endif
-
165 #ifndef FMT_API
-
166 # define FMT_API
-
167 #endif
-
168 
-
169 #ifndef FMT_ASSERT
-
170 # define FMT_ASSERT(condition, message) assert((condition) && message)
-
171 #endif
-
172 
-
173 // libc++ supports string_view in pre-c++17.
-
174 #if (FMT_HAS_INCLUDE(<string_view>) && \
-
175  (__cplusplus > 201402L || defined(_LIBCPP_VERSION))) || \
-
176  (defined(_MSVC_LANG) && _MSVC_LANG > 201402L && _MSC_VER >= 1910)
-
177 # include <string_view>
-
178 # define FMT_STRING_VIEW std::basic_string_view
-
179 #elif FMT_HAS_INCLUDE(<experimental/string_view>) && __cplusplus >= 201402L
-
180 # include <experimental/string_view>
-
181 # define FMT_STRING_VIEW std::experimental::basic_string_view
-
182 #endif
-
183 
-
184 // std::result_of is defined in <functional> in gcc 4.4.
-
185 #if FMT_GCC_VERSION && FMT_GCC_VERSION <= 404
-
186 # include <functional>
-
187 #endif
-
188 
- -
190 namespace internal {
-
191 
-
192 // An implementation of declval for pre-C++11 compilers such as gcc 4.
-
193 template <typename T>
- -
195 
-
196 template <typename>
-
197 struct result_of;
-
198 
-
199 template <typename F, typename... Args>
-
200 struct result_of<F(Args...)> {
-
201  // A workaround for gcc 4.4 that doesn't allow F to be a reference.
-
202  typedef typename std::result_of<
- -
204 };
-
205 
-
206 // Casts nonnegative integer to unsigned.
-
207 template <typename Int>
- -
209  FMT_ASSERT(value >= 0, "negative value");
-
210  return static_cast<typename std::make_unsigned<Int>::type>(value);
-
211 }
-
212 
-
214 template <typename T>
- -
216  private:
-
217  basic_buffer(const basic_buffer &) = delete;
-
218  void operator=(const basic_buffer &) = delete;
-
219 
-
220  T *ptr_;
-
221  std::size_t size_;
-
222  std::size_t capacity_;
-
223 
-
224  protected:
-
225  // Don't initialize ptr_ since it is not accessed to save a few cycles.
-
226  basic_buffer(std::size_t sz) FMT_NOEXCEPT: size_(sz), capacity_(sz) {}
-
227 
-
228  basic_buffer(T *p = FMT_NULL, std::size_t sz = 0, std::size_t cap = 0)
-
229  FMT_NOEXCEPT: ptr_(p), size_(sz), capacity_(cap) {}
-
230 
-
232  void set(T *buf_data, std::size_t buf_capacity) FMT_NOEXCEPT {
-
233  ptr_ = buf_data;
-
234  capacity_ = buf_capacity;
-
235  }
-
236 
-
238  virtual void grow(std::size_t capacity) = 0;
-
239 
-
240  public:
-
241  typedef T value_type;
-
242  typedef const T &const_reference;
-
243 
-
244  virtual ~basic_buffer() {}
-
245 
-
246  T *begin() FMT_NOEXCEPT { return ptr_; }
-
247  T *end() FMT_NOEXCEPT { return ptr_ + size_; }
-
248 
-
250  std::size_t size() const FMT_NOEXCEPT { return size_; }
-
251 
-
253  std::size_t capacity() const FMT_NOEXCEPT { return capacity_; }
-
254 
-
256  T *data() FMT_NOEXCEPT { return ptr_; }
-
257 
-
259  const T *data() const FMT_NOEXCEPT { return ptr_; }
-
260 
-
264  void resize(std::size_t new_size) {
-
265  reserve(new_size);
-
266  size_ = new_size;
-
267  }
-
268 
-
270  void clear() { size_ = 0; }
-
271 
-
273  void reserve(std::size_t new_capacity) {
-
274  if (new_capacity > capacity_)
-
275  grow(new_capacity);
-
276  }
-
277 
-
278  void push_back(const T &value) {
-
279  reserve(size_ + 1);
-
280  ptr_[size_++] = value;
-
281  }
-
282 
-
284  template <typename U>
-
285  void append(const U *begin, const U *end);
-
286 
-
287  T &operator[](std::size_t index) { return ptr_[index]; }
-
288  const T &operator[](std::size_t index) const { return ptr_[index]; }
-
289 };
-
290 
- - -
293 
-
294 // A container-backed buffer.
-
295 template <typename Container>
-
296 class container_buffer : public basic_buffer<typename Container::value_type> {
-
297  private:
-
298  Container &container_;
-
299 
-
300  protected:
-
301  void grow(std::size_t capacity) FMT_OVERRIDE {
-
302  container_.resize(capacity);
-
303  this->set(&container_[0], capacity);
-
304  }
-
305 
-
306  public:
-
307  explicit container_buffer(Container &c)
-
308  : basic_buffer<typename Container::value_type>(c.size()), container_(c) {}
-
309 };
-
310 
-
311 // Extracts a reference to the container from back_insert_iterator.
-
312 template <typename Container>
-
313 inline Container &get_container(std::back_insert_iterator<Container> it) {
-
314  typedef std::back_insert_iterator<Container> bi_iterator;
-
315  struct accessor: bi_iterator {
-
316  accessor(bi_iterator iter) : bi_iterator(iter) {}
-
317  using bi_iterator::container;
-
318  };
-
319  return *accessor(it).container;
-
320 }
-
321 
- - - -
325 
-
326  // This function is intentionally not constexpr to give a compile-time error.
-
327  FMT_API void on_error(const char *message);
-
328 };
-
329 
-
330 template <typename T>
-
331 struct no_formatter_error : std::false_type {};
-
332 } // namespace internal
-
333 
-
334 #if FMT_GCC_VERSION && FMT_GCC_VERSION < 405
-
335 template <typename... T>
-
336 struct is_constructible: std::false_type {};
-
337 #else
-
338 template <typename... T>
-
339 struct is_constructible : std::is_constructible<T...> {};
-
340 #endif
-
341 
-
349 template <typename Char>
- -
351  private:
-
352  const Char *data_;
-
353  size_t size_;
-
354 
-
355  public:
-
356  typedef Char char_type;
-
357  typedef const Char *iterator;
-
358 
- -
360 
-
362  FMT_CONSTEXPR basic_string_view(const Char *s, size_t count) FMT_NOEXCEPT
-
363  : data_(s), size_(count) {}
-
364 
-
371  basic_string_view(const Char *s)
-
372  : data_(s), size_(std::char_traits<Char>::length(s)) {}
-
373 
-
375  template <typename Alloc>
- -
377  const std::basic_string<Char, Alloc> &s) FMT_NOEXCEPT
-
378  : data_(s.data()), size_(s.size()) {}
-
379 
-
380 #ifdef FMT_STRING_VIEW
-
381  FMT_CONSTEXPR basic_string_view(FMT_STRING_VIEW<Char> s) FMT_NOEXCEPT
-
382  : data_(s.data()), size_(s.size()) {}
-
383 #endif
-
384 
-
386  FMT_CONSTEXPR const Char *data() const { return data_; }
-
387 
-
389  FMT_CONSTEXPR size_t size() const { return size_; }
-
390 
-
391  FMT_CONSTEXPR iterator begin() const { return data_; }
-
392  FMT_CONSTEXPR iterator end() const { return data_ + size_; }
-
393 
-
394  FMT_CONSTEXPR void remove_prefix(size_t n) {
-
395  data_ += n;
-
396  size_ -= n;
-
397  }
-
398 
-
399  // Lexicographically compare this string reference to other.
-
400  int compare(basic_string_view other) const {
-
401  size_t str_size = size_ < other.size_ ? size_ : other.size_;
-
402  int result = std::char_traits<Char>::compare(data_, other.data_, str_size);
-
403  if (result == 0)
-
404  result = size_ == other.size_ ? 0 : (size_ < other.size_ ? -1 : 1);
-
405  return result;
-
406  }
-
407 
- -
409  return lhs.compare(rhs) == 0;
-
410  }
- -
412  return lhs.compare(rhs) != 0;
-
413  }
- -
415  return lhs.compare(rhs) < 0;
-
416  }
- -
418  return lhs.compare(rhs) <= 0;
-
419  }
- -
421  return lhs.compare(rhs) > 0;
-
422  }
- -
424  return lhs.compare(rhs) >= 0;
-
425  }
-
426 };
-
427 
- - -
430 
-
453 template <typename Char>
- - -
456 
-
457 template <typename Char>
- -
459  to_string_view(const std::basic_string<Char> &s) { return s; }
-
460 
-
461 template <typename Char>
-
462 inline basic_string_view<Char> to_string_view(const Char *s) { return s; }
-
463 
-
464 #ifdef FMT_STRING_VIEW
-
465 template <typename Char>
- -
467  to_string_view(FMT_STRING_VIEW<Char> s) { return s; }
-
468 #endif
-
469 
-
470 // A base class for compile-time strings. It is defined in the fmt namespace to
-
471 // make formatting functions visible via ADL, e.g. format(fmt("{}"), 42).
-
472 struct compile_string {};
-
473 
-
474 template <typename S>
-
475 struct is_compile_string : std::is_base_of<compile_string, S> {};
-
476 
-
477 template <
-
478  typename S,
-
479  typename Enable = typename std::enable_if<is_compile_string<S>::value>::type>
- -
481  to_string_view(const S &s) { return s; }
-
482 
-
483 template <typename Context>
- -
485 
-
486 template <typename Context>
- -
488 
-
489 // A formatter for objects of type T.
-
490 template <typename T, typename Char = char, typename Enable = void>
-
491 struct formatter {
- -
493  "don't know how to format the type, include fmt/ostream.h if it provides "
-
494  "an operator<< that should be used");
-
495 
-
496  // The following functions are not defined intentionally.
-
497  template <typename ParseContext>
-
498  typename ParseContext::iterator parse(ParseContext &);
-
499  template <typename FormatContext>
-
500  auto format(const T &val, FormatContext &ctx) -> decltype(ctx.out());
-
501 };
-
502 
-
503 template <typename T, typename Char, typename Enable = void>
-
504 struct convert_to_int: std::integral_constant<
-
505  bool, !std::is_arithmetic<T>::value && std::is_convertible<T, int>::value> {};
-
506 
-
507 namespace internal {
-
508 
-
509 struct dummy_string_view { typedef void char_type; };
- - -
512 
-
513 // Specifies whether S is a string type convertible to fmt::basic_string_view.
-
514 template <typename S>
-
515 struct is_string : std::integral_constant<bool, !std::is_same<
-
516  dummy_string_view, decltype(to_string_view(declval<S>()))>::value> {};
-
517 
-
518 template <typename S>
-
519 struct char_t {
-
520  typedef decltype(to_string_view(declval<S>())) result;
-
521  typedef typename result::char_type type;
-
522 };
-
523 
-
524 template <typename Char>
- -
526 
-
527 template <typename T, typename Char>
-
528 struct named_arg;
-
529 
-
530 enum type {
- -
532  // Integer types should go first,
- - -
535  // followed by floating-point types.
- - -
538 };
-
539 
- -
541  FMT_ASSERT(t != internal::named_arg_type, "invalid argument type");
- -
543 }
-
544 
- -
546  FMT_ASSERT(t != internal::named_arg_type, "invalid argument type");
- -
548 }
-
549 
-
550 template <typename Char>
-
551 struct string_value {
-
552  const Char *value;
-
553  std::size_t size;
-
554 };
-
555 
-
556 template <typename Context>
-
557 struct custom_value {
-
558  const void *value;
-
559  void (*format)(const void *arg, Context &ctx);
-
560 };
-
561 
-
562 // A formatting argument value.
-
563 template <typename Context>
-
564 class value {
-
565  public:
-
566  typedef typename Context::char_type char_type;
-
567 
-
568  union {
- -
570  unsigned uint_value;
-
571  long long long_long_value;
-
572  unsigned long long ulong_long_value;
-
573  double double_value;
-
574  long double long_double_value;
-
575  const void *pointer;
- - - - -
580  };
-
581 
-
582  FMT_CONSTEXPR value(int val = 0) : int_value(val) {}
-
583  value(unsigned val) { uint_value = val; }
-
584  value(long long val) { long_long_value = val; }
-
585  value(unsigned long long val) { ulong_long_value = val; }
-
586  value(double val) { double_value = val; }
-
587  value(long double val) { long_double_value = val; }
-
588  value(const char_type *val) { string.value = val; }
-
589  value(const signed char *val) {
-
590  static_assert(std::is_same<char, char_type>::value,
-
591  "incompatible string types");
-
592  sstring.value = val;
-
593  }
-
594  value(const unsigned char *val) {
-
595  static_assert(std::is_same<char, char_type>::value,
-
596  "incompatible string types");
-
597  ustring.value = val;
-
598  }
- -
600  string.value = val.data();
-
601  string.size = val.size();
-
602  }
-
603  value(const void *val) { pointer = val; }
-
604 
-
605  template <typename T>
-
606  explicit value(const T &val) {
-
607  custom.value = &val;
-
608  custom.format = &format_custom_arg<T>;
-
609  }
-
610 
- -
612  return *static_cast<const named_arg_base<char_type>*>(pointer);
-
613  }
-
614 
-
615  private:
-
616  // Formats an argument of a custom type, such as a user-defined class.
-
617  template <typename T>
-
618  static void format_custom_arg(const void *arg, Context &ctx) {
-
619  // Get the formatter type through the context to allow different contexts
-
620  // have different extension points, e.g. `formatter<T>` for `format` and
-
621  // `printf_formatter<T>` for `printf`.
-
622  typename Context::template formatter_type<T>::type f;
-
623  auto &&parse_ctx = ctx.parse_context();
-
624  parse_ctx.advance_to(f.parse(parse_ctx));
-
625  ctx.advance_to(f.format(*static_cast<const T*>(arg), ctx));
-
626  }
-
627 };
-
628 
-
629 // Value initializer used to delay conversion to value and reduce memory churn.
-
630 template <typename Context, typename T, type TYPE>
-
631 struct init {
-
632  T val;
-
633  static const type type_tag = TYPE;
-
634 
-
635  FMT_CONSTEXPR init(const T &v) : val(v) {}
-
636  FMT_CONSTEXPR operator value<Context>() const { return value<Context>(val); }
-
637 };
-
638 
-
639 template <typename Context, typename T>
- -
641 
-
642 #define FMT_MAKE_VALUE(TAG, ArgType, ValueType) \
-
643  template <typename C> \
-
644  FMT_CONSTEXPR init<C, ValueType, TAG> make_value(ArgType val) { \
-
645  return static_cast<ValueType>(val); \
-
646  }
-
647 
-
648 #define FMT_MAKE_VALUE_SAME(TAG, Type) \
-
649  template <typename C> \
-
650  FMT_CONSTEXPR init<C, Type, TAG> make_value(Type val) { return val; }
-
651 
- - -
654 FMT_MAKE_VALUE(uint_type, unsigned short, unsigned)
- - -
657 
-
658 // To minimize the number of types we need to deal with, long is translated
-
659 // either to int or to long long depending on its size.
-
660 typedef std::conditional<sizeof(long) == sizeof(int), int, long long>::type
- - -
663  (sizeof(long) == sizeof(int) ? int_type : long_long_type), long, long_type)
-
664 typedef std::conditional<sizeof(unsigned long) == sizeof(unsigned),
-
665  unsigned, unsigned long long>::type ulong_type;
- -
667  (sizeof(unsigned long) == sizeof(unsigned) ? uint_type : ulong_long_type),
-
668  unsigned long, ulong_type)
-
669 
- - -
672 FMT_MAKE_VALUE(int_type, signed char, int)
-
673 FMT_MAKE_VALUE(uint_type, unsigned char, unsigned)
-
674 
-
675 // This doesn't use FMT_MAKE_VALUE because of ambiguity in gcc 4.4.
-
676 template <typename C, typename Char>
-
677 FMT_CONSTEXPR typename std::enable_if<
-
678  std::is_same<typename C::char_type, Char>::value,
-
679  init<C, int, char_type>>::type make_value(Char val) { return val; }
-
680 
-
681 template <typename C>
-
682 FMT_CONSTEXPR typename std::enable_if<
-
683  !std::is_same<typename C::char_type, char>::value,
-
684  init<C, int, char_type>>::type make_value(char val) { return val; }
-
685 
- - - -
689 
-
690 // Formatting of wide strings into a narrow buffer and multibyte strings
-
691 // into a wide buffer is disallowed (https://github.com/fmtlib/fmt/pull/606).
- -
693  const typename C::char_type*)
-
694 FMT_MAKE_VALUE(cstring_type, const typename C::char_type*,
-
695  const typename C::char_type*)
-
696 
-
697 FMT_MAKE_VALUE(cstring_type, signed char*, const signed char*)
-
698 FMT_MAKE_VALUE_SAME(cstring_type, const signed char*)
-
699 FMT_MAKE_VALUE(cstring_type, unsigned char*, const unsigned char*)
-
700 FMT_MAKE_VALUE_SAME(cstring_type, const unsigned char*)
- - -
703  typename basic_string_view<typename C::char_type>::type,
- -
705 FMT_MAKE_VALUE(string_type, const std::basic_string<typename C::char_type>&,
- -
707 FMT_MAKE_VALUE(pointer_type, void*, const void*)
- -
709 
-
710 #if FMT_USE_NULLPTR
-
711 FMT_MAKE_VALUE(pointer_type, std::nullptr_t, const void*)
-
712 #endif
-
713 
-
714 // Formatting of arbitrary pointers is disallowed. If you want to output a
-
715 // pointer cast it to "void *" or "const void *". In particular, this forbids
-
716 // formatting of "[const] volatile char *" which is printed as bool by
-
717 // iostreams.
-
718 template <typename C, typename T>
-
719 typename std::enable_if<!std::is_same<T, typename C::char_type>::value>::type
-
720  make_value(const T *) {
-
721  static_assert(!sizeof(T), "formatting of non-void pointers is disallowed");
-
722 }
-
723 
-
724 template <typename C, typename T>
-
725 inline typename std::enable_if<
-
726  std::is_enum<T>::value && convert_to_int<T, typename C::char_type>::value,
-
727  init<C, int, int_type>>::type
-
728  make_value(const T &val) { return static_cast<int>(val); }
-
729 
-
730 template <typename C, typename T, typename Char = typename C::char_type>
-
731 inline typename std::enable_if<
- - -
734  init<C, basic_string_view<Char>, string_type>>::type
-
735  make_value(const T &val) { return basic_string_view<Char>(val); }
-
736 
-
737 template <typename C, typename T, typename Char = typename C::char_type>
-
738 inline typename std::enable_if<
-
739  !convert_to_int<T, Char>::value && !std::is_same<T, Char>::value &&
-
740  !std::is_convertible<T, basic_string_view<Char>>::value &&
- - -
743  // Implicit conversion to std::string is not handled here because it's
-
744  // unsafe: https://github.com/fmtlib/fmt/issues/729
-
745  init<C, const T &, custom_type>>::type
-
746  make_value(const T &val) { return val; }
-
747 
-
748 template <typename C, typename T>
-
749 init<C, const void*, named_arg_type>
- -
751  basic_format_arg<C> arg = make_arg<C>(val.value);
-
752  std::memcpy(val.data, &arg, sizeof(arg));
-
753  return static_cast<const void*>(&val);
-
754 }
-
755 
-
756 template <typename C, typename S>
-
757 FMT_CONSTEXPR11 typename std::enable_if<
- -
759  init<C, basic_string_view<typename C::char_type>, string_type>>::type
-
760  make_value(const S &val) {
-
761  // Handle adapted strings.
-
762  static_assert(std::is_same<
-
763  typename C::char_type, typename internal::char_t<S>::type>::value,
-
764  "mismatch between char-types of context and argument");
-
765  return to_string_view(val);
-
766 }
-
767 
-
768 // Maximum number of arguments with packed types.
-
769 enum { max_packed_args = 15 };
-
770 enum : unsigned long long { is_unpacked_bit = 1ull << 63 };
-
771 
-
772 template <typename Context>
-
773 class arg_map;
-
774 } // namespace internal
-
775 
-
776 // A formatting argument. It is a trivially copyable/constructible type to
-
777 // allow storage in basic_memory_buffer.
-
778 template <typename Context>
-
779 class basic_format_arg {
-
780  private:
- -
782  internal::type type_;
-
783 
-
784  template <typename ContextType, typename T>
- -
786  internal::make_arg(const T &value);
-
787 
-
788  template <typename Visitor, typename Ctx>
-
789  friend FMT_CONSTEXPR typename internal::result_of<Visitor(int)>::type
-
790  visit_format_arg(Visitor &&vis, const basic_format_arg<Ctx> &arg);
-
791 
-
792  friend class basic_format_args<Context>;
-
793  friend class internal::arg_map<Context>;
-
794 
-
795  typedef typename Context::char_type char_type;
-
796 
-
797  public:
-
798  class handle {
-
799  public:
-
800  explicit handle(internal::custom_value<Context> custom): custom_(custom) {}
-
801 
-
802  void format(Context &ctx) const { custom_.format(custom_.value, ctx); }
-
803 
-
804  private:
- -
806  };
-
807 
-
808  FMT_CONSTEXPR basic_format_arg() : type_(internal::none_type) {}
-
809 
-
810  FMT_EXPLICIT operator bool() const FMT_NOEXCEPT {
-
811  return type_ != internal::none_type;
-
812  }
-
813 
-
814  internal::type type() const { return type_; }
-
815 
-
816  bool is_integral() const { return internal::is_integral(type_); }
-
817  bool is_arithmetic() const { return internal::is_arithmetic(type_); }
-
818 };
-
819 
-
820 struct monostate {};
-
821 
-
829 template <typename Visitor, typename Context>
-
830 FMT_CONSTEXPR typename internal::result_of<Visitor(int)>::type
- -
832  typedef typename Context::char_type char_type;
-
833  switch (arg.type_) {
-
834  case internal::none_type:
-
835  break;
- -
837  FMT_ASSERT(false, "invalid argument type");
-
838  break;
-
839  case internal::int_type:
-
840  return vis(arg.value_.int_value);
-
841  case internal::uint_type:
-
842  return vis(arg.value_.uint_value);
- -
844  return vis(arg.value_.long_long_value);
- -
846  return vis(arg.value_.ulong_long_value);
-
847  case internal::bool_type:
-
848  return vis(arg.value_.int_value != 0);
-
849  case internal::char_type:
-
850  return vis(static_cast<char_type>(arg.value_.int_value));
- -
852  return vis(arg.value_.double_value);
- -
854  return vis(arg.value_.long_double_value);
- -
856  return vis(arg.value_.string.value);
- -
858  return vis(basic_string_view<char_type>(
-
859  arg.value_.string.value, arg.value_.string.size));
- -
861  return vis(arg.value_.pointer);
- -
863  return vis(typename basic_format_arg<Context>::handle(arg.value_.custom));
-
864  }
-
865  return vis(monostate());
-
866 }
-
867 
-
868 // DEPRECATED!
-
869 template <typename Visitor, typename Context>
-
870 FMT_CONSTEXPR typename internal::result_of<Visitor(int)>::type
-
871  visit(Visitor &&vis, const basic_format_arg<Context> &arg) {
-
872  return visit_format_arg(std::forward<Visitor>(vis), arg);
-
873 }
-
874 
-
875 // Parsing context consisting of a format string range being parsed and an
-
876 // argument counter for automatic indexing.
-
877 template <typename Char, typename ErrorHandler = internal::error_handler>
-
878 class basic_parse_context : private ErrorHandler {
-
879  private:
-
880  basic_string_view<Char> format_str_;
-
881  int next_arg_id_;
-
882 
-
883  public:
-
884  typedef Char char_type;
- -
886 
- -
888  basic_string_view<Char> format_str, ErrorHandler eh = ErrorHandler())
-
889  : ErrorHandler(eh), format_str_(format_str), next_arg_id_(0) {}
-
890 
-
891  // Returns an iterator to the beginning of the format string range being
-
892  // parsed.
- -
894  return format_str_.begin();
-
895  }
-
896 
-
897  // Returns an iterator past the end of the format string range being parsed.
-
898  FMT_CONSTEXPR iterator end() const FMT_NOEXCEPT { return format_str_.end(); }
-
899 
-
900  // Advances the begin iterator to ``it``.
- -
902  format_str_.remove_prefix(internal::to_unsigned(it - begin()));
-
903  }
-
904 
-
905  // Returns the next argument index.
-
906  FMT_CONSTEXPR unsigned next_arg_id();
-
907 
-
908  FMT_CONSTEXPR bool check_arg_id(unsigned) {
-
909  if (next_arg_id_ > 0) {
-
910  on_error("cannot switch from automatic to manual argument indexing");
-
911  return false;
-
912  }
-
913  next_arg_id_ = -1;
-
914  return true;
-
915  }
- -
917 
-
918  FMT_CONSTEXPR void on_error(const char *message) {
-
919  ErrorHandler::on_error(message);
-
920  }
-
921 
-
922  FMT_CONSTEXPR ErrorHandler error_handler() const { return *this; }
-
923 };
-
924 
- - -
927 
-
928 // DEPRECATED!
- - -
931 
-
932 namespace internal {
-
933 // A map from argument names to their values for named arguments.
-
934 template <typename Context>
-
935 class arg_map {
-
936  private:
-
937  arg_map(const arg_map &) = delete;
-
938  void operator=(const arg_map &) = delete;
-
939 
-
940  typedef typename Context::char_type char_type;
-
941 
-
942  struct entry {
- - -
945  };
-
946 
-
947  entry *map_;
-
948  unsigned size_;
-
949 
-
950  void push_back(value<Context> val) {
-
951  const internal::named_arg_base<char_type> &named = val.as_named_arg();
-
952  map_[size_] = entry{named.name, named.template deserialize<Context>()};
-
953  ++size_;
-
954  }
-
955 
-
956  public:
-
957  arg_map() : map_(FMT_NULL), size_(0) {}
-
958  void init(const basic_format_args<Context> &args);
-
959  ~arg_map() { delete [] map_; }
-
960 
- -
962  // The list is unsorted, so just return the first matching name.
-
963  for (entry *it = map_, *end = map_ + size_; it != end; ++it) {
-
964  if (it->name == name)
-
965  return it->arg;
-
966  }
-
967  return {};
-
968  }
-
969 };
-
970 
-
971 // A type-erased reference to an std::locale to avoid heavy <locale> include.
-
972 class locale_ref {
-
973  private:
-
974  const void *locale_; // A type-erased pointer to std::locale.
-
975  friend class locale;
-
976 
-
977  public:
-
978  locale_ref() : locale_(FMT_NULL) {}
-
979 
-
980  template <typename Locale>
-
981  explicit locale_ref(const Locale &loc);
-
982 
-
983  template <typename Locale>
-
984  Locale get() const;
-
985 };
-
986 
-
987 template <typename OutputIt, typename Context, typename Char>
- -
989  public:
-
990  typedef OutputIt iterator;
-
991 
-
992  private:
-
993  basic_parse_context<Char> parse_context_;
-
994  iterator out_;
- -
996  locale_ref loc_;
-
997 
-
998  protected:
-
999  typedef Char char_type;
- -
1001 
-
1002  context_base(OutputIt out, basic_string_view<char_type> format_str,
-
1003  basic_format_args<Context> ctx_args,
-
1004  locale_ref loc = locale_ref())
-
1005  : parse_context_(format_str), out_(out), args_(ctx_args), loc_(loc) {}
-
1006 
-
1007  // Returns the argument with specified index.
-
1008  format_arg do_get_arg(unsigned arg_id) {
-
1009  format_arg arg = args_.get(arg_id);
-
1010  if (!arg)
-
1011  parse_context_.on_error("argument index out of range");
-
1012  return arg;
-
1013  }
-
1014 
-
1015  // Checks if manual indexing is used and returns the argument with
-
1016  // specified index.
-
1017  format_arg get_arg(unsigned arg_id) {
-
1018  return this->parse_context().check_arg_id(arg_id) ?
-
1019  this->do_get_arg(arg_id) : format_arg();
-
1020  }
-
1021 
-
1022  public:
-
1023  basic_parse_context<char_type> &parse_context() { return parse_context_; }
-
1024  basic_format_args<Context> args() const { return args_; } // DEPRECATED!
-
1025  basic_format_arg<Context> arg(unsigned id) const { return args_.get(id); }
-
1026 
- -
1028  return parse_context_.error_handler();
-
1029  }
-
1030 
-
1031  void on_error(const char *message) { parse_context_.on_error(message); }
-
1032 
-
1033  // Returns an iterator to the beginning of the output range.
-
1034  iterator out() { return out_; }
-
1035  iterator begin() { return out_; } // deprecated
-
1036 
-
1037  // Advances the begin iterator to ``it``.
-
1038  void advance_to(iterator it) { out_ = it; }
-
1039 
-
1040  locale_ref locale() { return loc_; }
-
1041 };
-
1042 
-
1043 template <typename Context, typename T>
-
1044 struct get_type {
-
1045  typedef decltype(make_value<Context>(
-
1046  declval<typename std::decay<T>::type&>())) value_type;
-
1047  static const type value = value_type::type_tag;
-
1048 };
-
1049 
-
1050 template <typename Context>
-
1051 FMT_CONSTEXPR11 unsigned long long get_types() { return 0; }
-
1052 
-
1053 template <typename Context, typename Arg, typename... Args>
-
1054 FMT_CONSTEXPR11 unsigned long long get_types() {
-
1055  return get_type<Context, Arg>::value | (get_types<Context, Args...>() << 4);
-
1056 }
-
1057 
-
1058 template <typename Context, typename T>
- - - -
1062  arg.value_ = make_value<Context>(value);
-
1063  return arg;
-
1064 }
-
1065 
-
1066 template <bool IS_PACKED, typename Context, typename T>
-
1067 inline typename std::enable_if<IS_PACKED, value<Context>>::type
-
1068  make_arg(const T &value) {
-
1069  return make_value<Context>(value);
-
1070 }
-
1071 
-
1072 template <bool IS_PACKED, typename Context, typename T>
-
1073 inline typename std::enable_if<!IS_PACKED, basic_format_arg<Context>>::type
-
1074  make_arg(const T &value) {
-
1075  return make_arg<Context>(value);
-
1076 }
-
1077 } // namespace internal
-
1078 
-
1079 // Formatting context.
-
1080 template <typename OutputIt, typename Char>
- -
1082  public internal::context_base<
-
1083  OutputIt, basic_format_context<OutputIt, Char>, Char> {
-
1084  public:
-
1086  typedef Char char_type;
-
1087 
-
1088  // using formatter_type = formatter<T, char_type>;
-
1089  template <typename T>
- -
1091 
-
1092  private:
- -
1094 
-
1095  basic_format_context(const basic_format_context &) = delete;
-
1096  void operator=(const basic_format_context &) = delete;
-
1097 
- -
1099  typedef typename base::format_arg format_arg;
-
1100  using base::get_arg;
-
1101 
-
1102  public:
-
1103  using typename base::iterator;
-
1104 
- - - -
1112  : base(out, format_str, ctx_args, loc) {}
-
1113 
- -
1115  return this->do_get_arg(this->parse_context().next_arg_id());
-
1116  }
-
1117  format_arg get_arg(unsigned arg_id) { return this->do_get_arg(arg_id); }
-
1118 
-
1119  // Checks if manual indexing is used and returns the argument with the
-
1120  // specified name.
-
1121  format_arg get_arg(basic_string_view<char_type> name);
-
1122 };
-
1123 
-
1124 template <typename Char>
- -
1126  typedef basic_format_context<
-
1127  std::back_insert_iterator<internal::basic_buffer<Char>>, Char> type;
-
1128 };
- - -
1131 
-
1139 template <typename Context, typename ...Args>
- -
1141  private:
-
1142  static const size_t NUM_ARGS = sizeof...(Args);
-
1143 
-
1144  // Packed is a macro on MinGW so use IS_PACKED instead.
-
1145  static const bool IS_PACKED = NUM_ARGS < internal::max_packed_args;
-
1146 
-
1147  typedef typename std::conditional<IS_PACKED,
- -
1149 
-
1150  // If the arguments are not packed, add one more element to mark the end.
-
1151  static const size_t DATA_SIZE =
-
1152  NUM_ARGS + (IS_PACKED && NUM_ARGS != 0 ? 0 : 1);
-
1153  value_type data_[DATA_SIZE];
-
1154 
-
1155  friend class basic_format_args<Context>;
-
1156 
-
1157  static FMT_CONSTEXPR11 unsigned long long get_types() {
-
1158  return IS_PACKED ?
-
1159  internal::get_types<Context, Args...>() :
-
1160  internal::is_unpacked_bit | NUM_ARGS;
-
1161  }
-
1162 
-
1163  public:
-
1164 #if FMT_USE_CONSTEXPR11
-
1165  static FMT_CONSTEXPR11 unsigned long long TYPES = get_types();
-
1166 #else
-
1167  static const unsigned long long TYPES;
-
1168 #endif
-
1169 
-
1170 #if (FMT_GCC_VERSION && FMT_GCC_VERSION <= 405) || \
-
1171  (FMT_MSC_VER && FMT_MSC_VER <= 1800)
-
1172  // Workaround array initialization issues in gcc <= 4.5 and MSVC <= 2013.
-
1173  format_arg_store(const Args &... args) {
-
1174  value_type init[DATA_SIZE] =
-
1175  {internal::make_arg<IS_PACKED, Context>(args)...};
-
1176  std::memcpy(data_, init, sizeof(init));
-
1177  }
-
1178 #else
-
1179  format_arg_store(const Args &... args)
-
1180  : data_{internal::make_arg<IS_PACKED, Context>(args)...} {}
-
1181 #endif
-
1182 };
-
1183 
-
1184 #if !FMT_USE_CONSTEXPR11
-
1185 template <typename Context, typename ...Args>
-
1186 const unsigned long long format_arg_store<Context, Args...>::TYPES =
-
1187  get_types();
-
1188 #endif
-
1189 
-
1197 template <typename Context = format_context, typename ...Args>
-
1198 inline format_arg_store<Context, Args...>
-
1199  make_format_args(const Args &... args) { return {args...}; }
-
1200 
-
1202 template <typename Context>
-
1203 class basic_format_args {
-
1204  public:
-
1205  typedef unsigned size_type;
- -
1207 
-
1208  private:
-
1209  // To reduce compiled code size per formatting function call, types of first
-
1210  // max_packed_args arguments are passed in the types_ field.
-
1211  unsigned long long types_;
-
1212  union {
-
1213  // If the number of arguments is less than max_packed_args, the argument
-
1214  // values are stored in values_, otherwise they are stored in args_.
-
1215  // This is done to reduce compiled code size as storing larger objects
-
1216  // may require more code (at least on x86-64) even if the same amount of
-
1217  // data is actually copied to stack. It saves ~10% on the bloat test.
- - -
1220  };
-
1221 
-
1222  bool is_packed() const { return (types_ & internal::is_unpacked_bit) == 0; }
-
1223 
-
1224  typename internal::type type(unsigned index) const {
-
1225  unsigned shift = index * 4;
-
1226  return static_cast<typename internal::type>(
-
1227  (types_ & (0xfull << shift)) >> shift);
-
1228  }
-
1229 
-
1230  friend class internal::arg_map<Context>;
-
1231 
-
1232  void set_data(const internal::value<Context> *values) { values_ = values; }
-
1233  void set_data(const format_arg *args) { args_ = args; }
-
1234 
-
1235  format_arg do_get(size_type index) const {
-
1236  format_arg arg;
-
1237  if (!is_packed()) {
-
1238  auto num_args = max_size();
-
1239  if (index < num_args)
-
1240  arg = args_[index];
-
1241  return arg;
-
1242  }
-
1243  if (index > internal::max_packed_args)
-
1244  return arg;
-
1245  arg.type_ = type(index);
-
1246  if (arg.type_ == internal::none_type)
-
1247  return arg;
-
1248  internal::value<Context> &val = arg.value_;
-
1249  val = values_[index];
-
1250  return arg;
-
1251  }
-
1252 
-
1253  public:
-
1254  basic_format_args() : types_(0) {}
-
1255 
-
1261  template <typename... Args>
- -
1263  : types_(static_cast<unsigned long long>(store.TYPES)) {
-
1264  set_data(store.data_);
-
1265  }
-
1266 
- -
1273  : types_(internal::is_unpacked_bit | count) {
-
1274  set_data(args);
-
1275  }
-
1276 
-
1278  format_arg get(size_type index) const {
-
1279  format_arg arg = do_get(index);
-
1280  if (arg.type_ == internal::named_arg_type)
-
1281  arg = arg.value_.as_named_arg().template deserialize<Context>();
-
1282  return arg;
-
1283  }
-
1284 
- -
1286  unsigned long long max_packed = internal::max_packed_args;
-
1287  return static_cast<size_type>(
-
1288  is_packed() ? max_packed : types_ & ~internal::is_unpacked_bit);
-
1289  }
-
1290 };
-
1291 
-
1293 // It is a separate type rather than a typedef to make symbols readable.
-
1294 struct format_args : basic_format_args<format_context> {
-
1295  template <typename ...Args>
-
1296  format_args(Args &&... arg)
-
1297  : basic_format_args<format_context>(std::forward<Args>(arg)...) {}
-
1298 };
-
1299 struct wformat_args : basic_format_args<wformat_context> {
-
1300  template <typename ...Args>
-
1301  wformat_args(Args &&... arg)
-
1302  : basic_format_args<wformat_context>(std::forward<Args>(arg)...) {}
-
1303 };
-
1304 
-
1305 #define FMT_ENABLE_IF_T(B, T) typename std::enable_if<B, T>::type
-
1306 
-
1307 #ifndef FMT_USE_ALIAS_TEMPLATES
-
1308 # define FMT_USE_ALIAS_TEMPLATES FMT_HAS_FEATURE(cxx_alias_templates)
-
1309 #endif
-
1310 #if FMT_USE_ALIAS_TEMPLATES
-
1311 
-
1312 template <typename S>
-
1313 using char_t = FMT_ENABLE_IF_T(
-
1314  internal::is_string<S>::value, typename internal::char_t<S>::type);
-
1315 #define FMT_CHAR(S) fmt::char_t<S>
-
1316 #else
-
1317 template <typename S>
-
1318 struct char_t : std::enable_if<
-
1319  internal::is_string<S>::value, typename internal::char_t<S>::type> {};
-
1320 #define FMT_CHAR(S) typename char_t<S>::type
-
1321 #endif
-
1322 
-
1323 namespace internal {
-
1324 template <typename Char>
-
1325 struct named_arg_base {
- -
1327 
-
1328  // Serialized value<context>.
-
1329  mutable char data[
- -
1331 
- -
1333 
-
1334  template <typename Context>
- - -
1337  std::memcpy(&arg, data, sizeof(basic_format_arg<Context>));
-
1338  return arg;
-
1339  }
-
1340 };
-
1341 
-
1342 template <typename T, typename Char>
-
1343 struct named_arg : named_arg_base<Char> {
-
1344  const T &value;
-
1345 
- -
1347  : named_arg_base<Char>(name), value(val) {}
-
1348 };
-
1349 
-
1350 template <typename... Args, typename S>
-
1351 inline typename std::enable_if<!is_compile_string<S>::value>::type
-
1352  check_format_string(const S &) {}
-
1353 template <typename... Args, typename S>
-
1354 typename std::enable_if<is_compile_string<S>::value>::type
- -
1356 
-
1357 template <typename S, typename... Args>
- -
1359  typename buffer_context<FMT_CHAR(S)>::type, Args...> {
-
1360  typedef typename buffer_context<FMT_CHAR(S)>::type context;
-
1361 
-
1362  checked_args(const S &format_str, const Args &... args):
-
1363  format_arg_store<context, Args...>(args...) {
-
1364  internal::check_format_string<Args...>(format_str);
-
1365  }
-
1366 
-
1367  basic_format_args<context> operator*() const { return *this; }
-
1368 };
-
1369 
-
1370 template <typename Char>
-
1371 std::basic_string<Char> vformat(
-
1372  basic_string_view<Char> format_str,
- -
1374 
-
1375 template <typename Char>
- - - -
1379 }
-
1380 
-
1390 template <typename T>
- -
1392  return {name, arg};
-
1393 }
-
1394 
-
1395 template <typename T>
- -
1397  return {name, arg};
-
1398 }
-
1399 
-
1400 // Disable nested named arguments, e.g. ``arg("a", arg("b", 42))``.
-
1401 template <typename S, typename T, typename Char>
-
1402 void arg(S, internal::named_arg<T, Char>) = delete;
-
1403 
-
1404 template <typename Container>
-
1405 struct is_contiguous: std::false_type {};
-
1406 
-
1407 template <typename Char>
-
1408 struct is_contiguous<std::basic_string<Char> >: std::true_type {};
-
1409 
-
1410 template <typename Char>
-
1411 struct is_contiguous<internal::basic_buffer<Char> >: std::true_type {};
-
1412 
-
1414 template <typename Container, typename S>
-
1415 typename std::enable_if<
-
1416  is_contiguous<Container>::value, std::back_insert_iterator<Container>>::type
- -
1418  std::back_insert_iterator<Container> out,
-
1419  const S &format_str,
-
1420  basic_format_args<typename buffer_context<FMT_CHAR(S)>::type> args) {
- -
1422  internal::vformat_to(buf, to_string_view(format_str), args);
-
1423  return out;
-
1424 }
-
1425 
-
1426 template <typename Container, typename S, typename... Args>
-
1427 inline typename std::enable_if<
- -
1429  std::back_insert_iterator<Container>>::type
-
1430  format_to(std::back_insert_iterator<Container> out, const S &format_str,
-
1431  const Args &... args) {
-
1432  internal::checked_args<S, Args...> ca(format_str, args...);
-
1433  return vformat_to(out, to_string_view(format_str), *ca);
-
1434 }
-
1435 
-
1436 template <typename S, typename Char = FMT_CHAR(S)>
-
1437 inline std::basic_string<Char> vformat(
-
1438  const S &format_str,
- -
1440  return internal::vformat(to_string_view(format_str), args);
-
1441 }
-
1442 
-
1453 template <typename S, typename... Args>
-
1454 inline std::basic_string<FMT_CHAR(S)> format(
-
1455  const S &format_str, const Args &... args) {
-
1456  return internal::vformat(
-
1457  to_string_view(format_str),
-
1458  *internal::checked_args<S, Args...>(format_str, args...));
-
1459 }
-
1460 
-
1461 FMT_API void vprint(std::FILE *f, string_view format_str, format_args args);
-
1462 FMT_API void vprint(std::FILE *f, wstring_view format_str, wformat_args args);
-
1463 
-
1475 template <typename S, typename... Args>
- -
1477  print(std::FILE *f, const S &format_str, const Args &... args) {
-
1478  vprint(f, to_string_view(format_str),
-
1479  internal::checked_args<S, Args...>(format_str, args...));
-
1480 }
-
1481 
-
1482 FMT_API void vprint(string_view format_str, format_args args);
-
1483 FMT_API void vprint(wstring_view format_str, wformat_args args);
-
1484 
-
1494 template <typename S, typename... Args>
- -
1496  print(const S &format_str, const Args &... args) {
-
1497  vprint(to_string_view(format_str),
-
1498  internal::checked_args<S, Args...>(format_str, args...));
-
1499 }
- -
1501 
-
1502 #endif // FMT_CORE_H_
+Go to the documentation of this file.
1 // Formatting library for C++ - the core API
2 //
3 // Copyright (c) 2012 - present, Victor Zverovich
4 // All rights reserved.
5 //
6 // For the license information refer to format.h.
7 
8 #ifndef FMT_CORE_H_
9 #define FMT_CORE_H_
10 
11 #include <cassert>
12 #include <cstdio> // std::FILE
13 #include <cstring>
14 #include <iterator>
15 #include <string>
16 #include <type_traits>
17 
18 // The fmt library version in the form major * 10000 + minor * 100 + patch.
19 #define FMT_VERSION 50300
20 
21 #ifdef __has_feature
22 # define FMT_HAS_FEATURE(x) __has_feature(x)
23 #else
24 # define FMT_HAS_FEATURE(x) 0
25 #endif
26 
27 #if defined(__has_include) && !defined(__INTELLISENSE__) && \
28  !(defined(__INTEL_COMPILER) && __INTEL_COMPILER < 1600)
29 # define FMT_HAS_INCLUDE(x) __has_include(x)
30 #else
31 # define FMT_HAS_INCLUDE(x) 0
32 #endif
33 
34 #ifdef __has_cpp_attribute
35 # define FMT_HAS_CPP_ATTRIBUTE(x) __has_cpp_attribute(x)
36 #else
37 # define FMT_HAS_CPP_ATTRIBUTE(x) 0
38 #endif
39 
40 #if defined(__GNUC__) && !defined(__clang__)
41 # define FMT_GCC_VERSION (__GNUC__ * 100 + __GNUC_MINOR__)
42 #else
43 # define FMT_GCC_VERSION 0
44 #endif
45 
46 #if __cplusplus >= 201103L || defined(__GXX_EXPERIMENTAL_CXX0X__)
47 # define FMT_HAS_GXX_CXX11 FMT_GCC_VERSION
48 #else
49 # define FMT_HAS_GXX_CXX11 0
50 #endif
51 
52 #ifdef _MSC_VER
53 # define FMT_MSC_VER _MSC_VER
54 #else
55 # define FMT_MSC_VER 0
56 #endif
57 
58 // Check if relaxed C++14 constexpr is supported.
59 // GCC doesn't allow throw in constexpr until version 6 (bug 67371).
60 #ifndef FMT_USE_CONSTEXPR
61 # define FMT_USE_CONSTEXPR \
62  (FMT_HAS_FEATURE(cxx_relaxed_constexpr) || FMT_MSC_VER >= 1910 || \
63  (FMT_GCC_VERSION >= 600 && __cplusplus >= 201402L))
64 #endif
65 #if FMT_USE_CONSTEXPR
66 # define FMT_CONSTEXPR constexpr
67 # define FMT_CONSTEXPR_DECL constexpr
68 #else
69 # define FMT_CONSTEXPR inline
70 # define FMT_CONSTEXPR_DECL
71 #endif
72 
73 #ifndef FMT_USE_CONSTEXPR11
74 # define FMT_USE_CONSTEXPR11 \
75  (FMT_USE_CONSTEXPR || FMT_GCC_VERSION >= 406 || FMT_MSC_VER >= 1900)
76 #endif
77 #if FMT_USE_CONSTEXPR11
78 # define FMT_CONSTEXPR11 constexpr
79 #else
80 # define FMT_CONSTEXPR11
81 #endif
82 
83 #ifndef FMT_OVERRIDE
84 # if FMT_HAS_FEATURE(cxx_override) || \
85  (FMT_GCC_VERSION >= 408 && FMT_HAS_GXX_CXX11) || FMT_MSC_VER >= 1900
86 # define FMT_OVERRIDE override
87 # else
88 # define FMT_OVERRIDE
89 # endif
90 #endif
91 
92 #if FMT_HAS_FEATURE(cxx_explicit_conversions) || \
93  FMT_GCC_VERSION >= 405 || FMT_MSC_VER >= 1800
94 # define FMT_USE_EXPLICIT 1
95 # define FMT_EXPLICIT explicit
96 #else
97 # define FMT_USE_EXPLICIT 0
98 # define FMT_EXPLICIT
99 #endif
100 
101 #ifndef FMT_NULL
102 # if FMT_HAS_FEATURE(cxx_nullptr) || \
103  (FMT_GCC_VERSION >= 408 && FMT_HAS_GXX_CXX11) || FMT_MSC_VER >= 1600
104 # define FMT_NULL nullptr
105 # define FMT_USE_NULLPTR 1
106 # else
107 # define FMT_NULL NULL
108 # endif
109 #endif
110 #ifndef FMT_USE_NULLPTR
111 # define FMT_USE_NULLPTR 0
112 #endif
113 
114 // Check if exceptions are disabled.
115 #ifndef FMT_EXCEPTIONS
116 # if (defined(__GNUC__) && !defined(__EXCEPTIONS)) || \
117  FMT_MSC_VER && !_HAS_EXCEPTIONS
118 # define FMT_EXCEPTIONS 0
119 # else
120 # define FMT_EXCEPTIONS 1
121 # endif
122 #endif
123 
124 // Define FMT_USE_NOEXCEPT to make fmt use noexcept (C++11 feature).
125 #ifndef FMT_USE_NOEXCEPT
126 # define FMT_USE_NOEXCEPT 0
127 #endif
128 
129 #if FMT_USE_NOEXCEPT || FMT_HAS_FEATURE(cxx_noexcept) || \
130  (FMT_GCC_VERSION >= 408 && FMT_HAS_GXX_CXX11) || FMT_MSC_VER >= 1900
131 # define FMT_DETECTED_NOEXCEPT noexcept
132 # define FMT_HAS_CXX11_NOEXCEPT 1
133 #else
134 # define FMT_DETECTED_NOEXCEPT throw()
135 # define FMT_HAS_CXX11_NOEXCEPT 0
136 #endif
137 
138 #ifndef FMT_NOEXCEPT
139 # if FMT_EXCEPTIONS || FMT_HAS_CXX11_NOEXCEPT
140 # define FMT_NOEXCEPT FMT_DETECTED_NOEXCEPT
141 # else
142 # define FMT_NOEXCEPT
143 # endif
144 #endif
145 
146 #ifndef FMT_BEGIN_NAMESPACE
147 # if FMT_HAS_FEATURE(cxx_inline_namespaces) || FMT_GCC_VERSION >= 404 || \
148  FMT_MSC_VER >= 1900
149 # define FMT_INLINE_NAMESPACE inline namespace
150 # define FMT_END_NAMESPACE }}
151 # else
152 # define FMT_INLINE_NAMESPACE namespace
153 # define FMT_END_NAMESPACE } using namespace v5; }
154 # endif
155 # define FMT_BEGIN_NAMESPACE namespace fmt { FMT_INLINE_NAMESPACE v5 {
156 #endif
157 
158 #if !defined(FMT_HEADER_ONLY) && defined(_WIN32)
159 # ifdef FMT_EXPORT
160 # define FMT_API __declspec(dllexport)
161 # elif defined(FMT_SHARED)
162 # define FMT_API __declspec(dllimport)
163 # endif
164 #endif
165 #ifndef FMT_API
166 # define FMT_API
167 #endif
168 
169 #ifndef FMT_ASSERT
170 # define FMT_ASSERT(condition, message) assert((condition) && message)
171 #endif
172 
173 // libc++ supports string_view in pre-c++17.
174 #if (FMT_HAS_INCLUDE(<string_view>) && \
175  (__cplusplus > 201402L || defined(_LIBCPP_VERSION))) || \
176  (defined(_MSVC_LANG) && _MSVC_LANG > 201402L && _MSC_VER >= 1910)
177 # include <string_view>
178 # define FMT_STRING_VIEW std::basic_string_view
179 #elif FMT_HAS_INCLUDE(<experimental/string_view>) && __cplusplus >= 201402L
180 # include <experimental/string_view>
181 # define FMT_STRING_VIEW std::experimental::basic_string_view
182 #endif
183 
184 // std::result_of is defined in <functional> in gcc 4.4.
185 #if FMT_GCC_VERSION && FMT_GCC_VERSION <= 404
186 # include <functional>
187 #endif
188 
190 namespace internal {
191 
192 // An implementation of declval for pre-C++11 compilers such as gcc 4.
193 template <typename T>
195 
196 template <typename>
197 struct result_of;
198 
199 template <typename F, typename... Args>
200 struct result_of<F(Args...)> {
201  // A workaround for gcc 4.4 that doesn't allow F to be a reference.
202  typedef typename std::result_of<
204 };
205 
206 // Casts nonnegative integer to unsigned.
207 template <typename Int>
209  FMT_ASSERT(value >= 0, "negative value");
210  return static_cast<typename std::make_unsigned<Int>::type>(value);
211 }
212 
214 template <typename T>
216  private:
217  basic_buffer(const basic_buffer &) = delete;
218  void operator=(const basic_buffer &) = delete;
219 
220  T *ptr_;
221  std::size_t size_;
222  std::size_t capacity_;
223 
224  protected:
225  // Don't initialize ptr_ since it is not accessed to save a few cycles.
226  basic_buffer(std::size_t sz) FMT_NOEXCEPT: size_(sz), capacity_(sz) {}
227 
228  basic_buffer(T *p = FMT_NULL, std::size_t sz = 0, std::size_t cap = 0)
229  FMT_NOEXCEPT: ptr_(p), size_(sz), capacity_(cap) {}
230 
232  void set(T *buf_data, std::size_t buf_capacity) FMT_NOEXCEPT {
233  ptr_ = buf_data;
234  capacity_ = buf_capacity;
235  }
236 
238  virtual void grow(std::size_t capacity) = 0;
239 
240  public:
241  typedef T value_type;
242  typedef const T &const_reference;
243 
244  virtual ~basic_buffer() {}
245 
246  T *begin() FMT_NOEXCEPT { return ptr_; }
247  T *end() FMT_NOEXCEPT { return ptr_ + size_; }
248 
250  std::size_t size() const FMT_NOEXCEPT { return size_; }
251 
253  std::size_t capacity() const FMT_NOEXCEPT { return capacity_; }
254 
256  T *data() FMT_NOEXCEPT { return ptr_; }
257 
259  const T *data() const FMT_NOEXCEPT { return ptr_; }
260 
264  void resize(std::size_t new_size) {
265  reserve(new_size);
266  size_ = new_size;
267  }
268 
270  void clear() { size_ = 0; }
271 
273  void reserve(std::size_t new_capacity) {
274  if (new_capacity > capacity_)
275  grow(new_capacity);
276  }
277 
278  void push_back(const T &value) {
279  reserve(size_ + 1);
280  ptr_[size_++] = value;
281  }
282 
284  template <typename U>
285  void append(const U *begin, const U *end);
286 
287  T &operator[](std::size_t index) { return ptr_[index]; }
288  const T &operator[](std::size_t index) const { return ptr_[index]; }
289 };
290 
293 
294 // A container-backed buffer.
295 template <typename Container>
296 class container_buffer : public basic_buffer<typename Container::value_type> {
297  private:
298  Container &container_;
299 
300  protected:
301  void grow(std::size_t capacity) FMT_OVERRIDE {
302  container_.resize(capacity);
303  this->set(&container_[0], capacity);
304  }
305 
306  public:
307  explicit container_buffer(Container &c)
308  : basic_buffer<typename Container::value_type>(c.size()), container_(c) {}
309 };
310 
311 // Extracts a reference to the container from back_insert_iterator.
312 template <typename Container>
313 inline Container &get_container(std::back_insert_iterator<Container> it) {
314  typedef std::back_insert_iterator<Container> bi_iterator;
315  struct accessor: bi_iterator {
316  accessor(bi_iterator iter) : bi_iterator(iter) {}
317  using bi_iterator::container;
318  };
319  return *accessor(it).container;
320 }
321 
325 
326  // This function is intentionally not constexpr to give a compile-time error.
327  FMT_API void on_error(const char *message);
328 };
329 
330 template <typename T>
331 struct no_formatter_error : std::false_type {};
332 } // namespace internal
333 
334 #if FMT_GCC_VERSION && FMT_GCC_VERSION < 405
335 template <typename... T>
336 struct is_constructible: std::false_type {};
337 #else
338 template <typename... T>
339 struct is_constructible : std::is_constructible<T...> {};
340 #endif
341 
349 template <typename Char>
351  private:
352  const Char *data_;
353  size_t size_;
354 
355  public:
356  typedef Char char_type;
357  typedef const Char *iterator;
358 
360 
362  FMT_CONSTEXPR basic_string_view(const Char *s, size_t count) FMT_NOEXCEPT
363  : data_(s), size_(count) {}
364 
371  basic_string_view(const Char *s)
372  : data_(s), size_(std::char_traits<Char>::length(s)) {}
373 
375  template <typename Alloc>
377  const std::basic_string<Char, Alloc> &s) FMT_NOEXCEPT
378  : data_(s.data()), size_(s.size()) {}
379 
380 #ifdef FMT_STRING_VIEW
381  FMT_CONSTEXPR basic_string_view(FMT_STRING_VIEW<Char> s) FMT_NOEXCEPT
382  : data_(s.data()), size_(s.size()) {}
383 #endif
384 
386  FMT_CONSTEXPR const Char *data() const { return data_; }
387 
389  FMT_CONSTEXPR size_t size() const { return size_; }
390 
391  FMT_CONSTEXPR iterator begin() const { return data_; }
392  FMT_CONSTEXPR iterator end() const { return data_ + size_; }
393 
394  FMT_CONSTEXPR void remove_prefix(size_t n) {
395  data_ += n;
396  size_ -= n;
397  }
398 
399  // Lexicographically compare this string reference to other.
400  int compare(basic_string_view other) const {
401  size_t str_size = size_ < other.size_ ? size_ : other.size_;
402  int result = std::char_traits<Char>::compare(data_, other.data_, str_size);
403  if (result == 0)
404  result = size_ == other.size_ ? 0 : (size_ < other.size_ ? -1 : 1);
405  return result;
406  }
407 
409  return lhs.compare(rhs) == 0;
410  }
412  return lhs.compare(rhs) != 0;
413  }
415  return lhs.compare(rhs) < 0;
416  }
418  return lhs.compare(rhs) <= 0;
419  }
421  return lhs.compare(rhs) > 0;
422  }
424  return lhs.compare(rhs) >= 0;
425  }
426 };
427 
430 
453 template <typename Char>
456 
457 template <typename Char>
459  to_string_view(const std::basic_string<Char> &s) { return s; }
460 
461 template <typename Char>
462 inline basic_string_view<Char> to_string_view(const Char *s) { return s; }
463 
464 #ifdef FMT_STRING_VIEW
465 template <typename Char>
467  to_string_view(FMT_STRING_VIEW<Char> s) { return s; }
468 #endif
469 
470 // A base class for compile-time strings. It is defined in the fmt namespace to
471 // make formatting functions visible via ADL, e.g. format(fmt("{}"), 42).
472 struct compile_string {};
473 
474 template <typename S>
475 struct is_compile_string : std::is_base_of<compile_string, S> {};
476 
477 template <
478  typename S,
479  typename Enable = typename std::enable_if<is_compile_string<S>::value>::type>
481  to_string_view(const S &s) { return s; }
482 
483 template <typename Context>
485 
486 template <typename Context>
488 
489 // A formatter for objects of type T.
490 template <typename T, typename Char = char, typename Enable = void>
491 struct formatter {
493  "don't know how to format the type, include fmt/ostream.h if it provides "
494  "an operator<< that should be used");
495 
496  // The following functions are not defined intentionally.
497  template <typename ParseContext>
498  typename ParseContext::iterator parse(ParseContext &);
499  template <typename FormatContext>
500  auto format(const T &val, FormatContext &ctx) -> decltype(ctx.out());
501 };
502 
503 template <typename T, typename Char, typename Enable = void>
504 struct convert_to_int: std::integral_constant<
505  bool, !std::is_arithmetic<T>::value && std::is_convertible<T, int>::value> {};
506 
507 namespace internal {
508 
509 struct dummy_string_view { typedef void char_type; };
512 
513 // Specifies whether S is a string type convertible to fmt::basic_string_view.
514 template <typename S>
515 struct is_string : std::integral_constant<bool, !std::is_same<
516  dummy_string_view, decltype(to_string_view(declval<S>()))>::value> {};
517 
518 template <typename S>
519 struct char_t {
520  typedef decltype(to_string_view(declval<S>())) result;
521  typedef typename result::char_type type;
522 };
523 
524 template <typename Char>
526 
527 template <typename T, typename Char>
528 struct named_arg;
529 
530 enum type {
532  // Integer types should go first,
535  // followed by floating-point types.
538 };
539 
541  FMT_ASSERT(t != internal::named_arg_type, "invalid argument type");
543 }
544 
546  FMT_ASSERT(t != internal::named_arg_type, "invalid argument type");
548 }
549 
550 template <typename Char>
551 struct string_value {
552  const Char *value;
553  std::size_t size;
554 };
555 
556 template <typename Context>
557 struct custom_value {
558  const void *value;
559  void (*format)(const void *arg, Context &ctx);
560 };
561 
562 // A formatting argument value.
563 template <typename Context>
564 class value {
565  public:
566  typedef typename Context::char_type char_type;
567 
568  union {
570  unsigned uint_value;
571  long long long_long_value;
572  unsigned long long ulong_long_value;
573  double double_value;
574  long double long_double_value;
575  const void *pointer;
580  };
581 
582  FMT_CONSTEXPR value(int val = 0) : int_value(val) {}
583  value(unsigned val) { uint_value = val; }
584  value(long long val) { long_long_value = val; }
585  value(unsigned long long val) { ulong_long_value = val; }
586  value(double val) { double_value = val; }
587  value(long double val) { long_double_value = val; }
588  value(const char_type *val) { string.value = val; }
589  value(const signed char *val) {
590  static_assert(std::is_same<char, char_type>::value,
591  "incompatible string types");
592  sstring.value = val;
593  }
594  value(const unsigned char *val) {
595  static_assert(std::is_same<char, char_type>::value,
596  "incompatible string types");
597  ustring.value = val;
598  }
600  string.value = val.data();
601  string.size = val.size();
602  }
603  value(const void *val) { pointer = val; }
604 
605  template <typename T>
606  explicit value(const T &val) {
607  custom.value = &val;
608  custom.format = &format_custom_arg<T>;
609  }
610 
612  return *static_cast<const named_arg_base<char_type>*>(pointer);
613  }
614 
615  private:
616  // Formats an argument of a custom type, such as a user-defined class.
617  template <typename T>
618  static void format_custom_arg(const void *arg, Context &ctx) {
619  // Get the formatter type through the context to allow different contexts
620  // have different extension points, e.g. `formatter<T>` for `format` and
621  // `printf_formatter<T>` for `printf`.
622  typename Context::template formatter_type<T>::type f;
623  auto &&parse_ctx = ctx.parse_context();
624  parse_ctx.advance_to(f.parse(parse_ctx));
625  ctx.advance_to(f.format(*static_cast<const T*>(arg), ctx));
626  }
627 };
628 
629 // Value initializer used to delay conversion to value and reduce memory churn.
630 template <typename Context, typename T, type TYPE>
631 struct init {
632  T val;
633  static const type type_tag = TYPE;
634 
635  FMT_CONSTEXPR init(const T &v) : val(v) {}
636  FMT_CONSTEXPR operator value<Context>() const { return value<Context>(val); }
637 };
638 
639 template <typename Context, typename T>
641 
642 #define FMT_MAKE_VALUE(TAG, ArgType, ValueType) \
643  template <typename C> \
644  FMT_CONSTEXPR init<C, ValueType, TAG> make_value(ArgType val) { \
645  return static_cast<ValueType>(val); \
646  }
647 
648 #define FMT_MAKE_VALUE_SAME(TAG, Type) \
649  template <typename C> \
650  FMT_CONSTEXPR init<C, Type, TAG> make_value(Type val) { return val; }
651 
654 FMT_MAKE_VALUE(uint_type, unsigned short, unsigned)
655 FMT_MAKE_VALUE_SAME(int_type, int)
656 FMT_MAKE_VALUE_SAME(uint_type, unsigned)
657 
658 // To minimize the number of types we need to deal with, long is translated
659 // either to int or to long long depending on its size.
660 typedef std::conditional<sizeof(long) == sizeof(int), int, long long>::type
663  (sizeof(long) == sizeof(int) ? int_type : long_long_type), long, long_type)
664 typedef std::conditional<sizeof(unsigned long) == sizeof(unsigned),
665  unsigned, unsigned long long>::type ulong_type;
667  (sizeof(unsigned long) == sizeof(unsigned) ? uint_type : ulong_long_type),
668  unsigned long, ulong_type)
669 
670 FMT_MAKE_VALUE_SAME(long_long_type, long long)
671 FMT_MAKE_VALUE_SAME(ulong_long_type, unsigned long long)
672 FMT_MAKE_VALUE(int_type, signed char, int)
673 FMT_MAKE_VALUE(uint_type, unsigned char, unsigned)
674 
675 // This doesn't use FMT_MAKE_VALUE because of ambiguity in gcc 4.4.
676 template <typename C, typename Char>
677 FMT_CONSTEXPR typename std::enable_if<
678  std::is_same<typename C::char_type, Char>::value,
679  init<C, int, char_type>>::type make_value(Char val) { return val; }
680 
681 template <typename C>
682 FMT_CONSTEXPR typename std::enable_if<
683  !std::is_same<typename C::char_type, char>::value,
684  init<C, int, char_type>>::type make_value(char val) { return val; }
685 
689 
690 // Formatting of wide strings into a narrow buffer and multibyte strings
691 // into a wide buffer is disallowed (https://github.com/fmtlib/fmt/pull/606).
692 FMT_MAKE_VALUE(cstring_type, typename C::char_type*,
693  const typename C::char_type*)
694 FMT_MAKE_VALUE(cstring_type, const typename C::char_type*,
695  const typename C::char_type*)
696 
697 FMT_MAKE_VALUE(cstring_type, signed char*, const signed char*)
698 FMT_MAKE_VALUE_SAME(cstring_type, const signed char*)
699 FMT_MAKE_VALUE(cstring_type, unsigned char*, const unsigned char*)
700 FMT_MAKE_VALUE_SAME(cstring_type, const unsigned char*)
702 FMT_MAKE_VALUE(string_type,
703  typename basic_string_view<typename C::char_type>::type,
704  basic_string_view<typename C::char_type>)
705 FMT_MAKE_VALUE(string_type, const std::basic_string<typename C::char_type>&,
706  basic_string_view<typename C::char_type>)
707 FMT_MAKE_VALUE(pointer_type, void*, const void*)
708 FMT_MAKE_VALUE_SAME(pointer_type, const void*)
709 
710 #if FMT_USE_NULLPTR
711 FMT_MAKE_VALUE(pointer_type, std::nullptr_t, const void*)
712 #endif
713 
714 // Formatting of arbitrary pointers is disallowed. If you want to output a
715 // pointer cast it to "void *" or "const void *". In particular, this forbids
716 // formatting of "[const] volatile char *" which is printed as bool by
717 // iostreams.
718 template <typename C, typename T>
719 typename std::enable_if<!std::is_same<T, typename C::char_type>::value>::type
720  make_value(const T *) {
721  static_assert(!sizeof(T), "formatting of non-void pointers is disallowed");
722 }
723 
724 template <typename C, typename T>
725 inline typename std::enable_if<
726  std::is_enum<T>::value && convert_to_int<T, typename C::char_type>::value,
728  make_value(const T &val) { return static_cast<int>(val); }
729 
730 template <typename C, typename T, typename Char = typename C::char_type>
731 inline typename std::enable_if<
735  make_value(const T &val) { return basic_string_view<Char>(val); }
736 
737 template <typename C, typename T, typename Char = typename C::char_type>
738 inline typename std::enable_if<
739  !convert_to_int<T, Char>::value && !std::is_same<T, Char>::value &&
740  !std::is_convertible<T, basic_string_view<Char>>::value &&
741  !is_constructible<basic_string_view<Char>, T>::value &&
743  // Implicit conversion to std::string is not handled here because it's
744  // unsafe: https://github.com/fmtlib/fmt/issues/729
746  make_value(const T &val) { return val; }
747 
748 template <typename C, typename T>
751  basic_format_arg<C> arg = make_arg<C>(val.value);
752  std::memcpy(val.data, &arg, sizeof(arg));
753  return static_cast<const void*>(&val);
754 }
755 
756 template <typename C, typename S>
757 FMT_CONSTEXPR11 typename std::enable_if<
760  make_value(const S &val) {
761  // Handle adapted strings.
762  static_assert(std::is_same<
763  typename C::char_type, typename internal::char_t<S>::type>::value,
764  "mismatch between char-types of context and argument");
765  return to_string_view(val);
766 }
767 
768 // Maximum number of arguments with packed types.
769 enum { max_packed_args = 15 };
770 enum : unsigned long long { is_unpacked_bit = 1ull << 63 };
771 
772 template <typename Context>
773 class arg_map;
774 } // namespace internal
775 
776 // A formatting argument. It is a trivially copyable/constructible type to
777 // allow storage in basic_memory_buffer.
778 template <typename Context>
779 class basic_format_arg {
780  private:
782  internal::type type_;
783 
784  template <typename ContextType, typename T>
786  internal::make_arg(const T &value);
787 
788  template <typename Visitor, typename Ctx>
790  visit_format_arg(Visitor &&vis, const basic_format_arg<Ctx> &arg);
791 
792  friend class basic_format_args<Context>;
793  friend class internal::arg_map<Context>;
794 
795  typedef typename Context::char_type char_type;
796 
797  public:
798  class handle {
799  public:
800  explicit handle(internal::custom_value<Context> custom): custom_(custom) {}
801 
802  void format(Context &ctx) const { custom_.format(custom_.value, ctx); }
803 
804  private:
806  };
807 
808  FMT_CONSTEXPR basic_format_arg() : type_(internal::none_type) {}
809 
810  FMT_EXPLICIT operator bool() const FMT_NOEXCEPT {
811  return type_ != internal::none_type;
812  }
813 
814  internal::type type() const { return type_; }
815 
816  bool is_integral() const { return internal::is_integral(type_); }
817  bool is_arithmetic() const { return internal::is_arithmetic(type_); }
818 };
819 
820 struct monostate {};
821 
829 template <typename Visitor, typename Context>
832  typedef typename Context::char_type char_type;
833  switch (arg.type_) {
834  case internal::none_type:
835  break;
837  FMT_ASSERT(false, "invalid argument type");
838  break;
839  case internal::int_type:
840  return vis(arg.value_.int_value);
841  case internal::uint_type:
842  return vis(arg.value_.uint_value);
844  return vis(arg.value_.long_long_value);
846  return vis(arg.value_.ulong_long_value);
847  case internal::bool_type:
848  return vis(arg.value_.int_value != 0);
849  case internal::char_type:
850  return vis(static_cast<char_type>(arg.value_.int_value));
852  return vis(arg.value_.double_value);
854  return vis(arg.value_.long_double_value);
856  return vis(arg.value_.string.value);
858  return vis(basic_string_view<char_type>(
859  arg.value_.string.value, arg.value_.string.size));
861  return vis(arg.value_.pointer);
863  return vis(typename basic_format_arg<Context>::handle(arg.value_.custom));
864  }
865  return vis(monostate());
866 }
867 
868 // DEPRECATED!
869 template <typename Visitor, typename Context>
871  visit(Visitor &&vis, const basic_format_arg<Context> &arg) {
872  return visit_format_arg(std::forward<Visitor>(vis), arg);
873 }
874 
875 // Parsing context consisting of a format string range being parsed and an
876 // argument counter for automatic indexing.
877 template <typename Char, typename ErrorHandler = internal::error_handler>
878 class basic_parse_context : private ErrorHandler {
879  private:
880  basic_string_view<Char> format_str_;
881  int next_arg_id_;
882 
883  public:
884  typedef Char char_type;
886 
888  basic_string_view<Char> format_str, ErrorHandler eh = ErrorHandler())
889  : ErrorHandler(eh), format_str_(format_str), next_arg_id_(0) {}
890 
891  // Returns an iterator to the beginning of the format string range being
892  // parsed.
893  FMT_CONSTEXPR iterator begin() const FMT_NOEXCEPT {
894  return format_str_.begin();
895  }
896 
897  // Returns an iterator past the end of the format string range being parsed.
898  FMT_CONSTEXPR iterator end() const FMT_NOEXCEPT { return format_str_.end(); }
899 
900  // Advances the begin iterator to ``it``.
901  FMT_CONSTEXPR void advance_to(iterator it) {
902  format_str_.remove_prefix(internal::to_unsigned(it - begin()));
903  }
904 
905  // Returns the next argument index.
906  FMT_CONSTEXPR unsigned next_arg_id();
907 
908  FMT_CONSTEXPR bool check_arg_id(unsigned) {
909  if (next_arg_id_ > 0) {
910  on_error("cannot switch from automatic to manual argument indexing");
911  return false;
912  }
913  next_arg_id_ = -1;
914  return true;
915  }
917 
918  FMT_CONSTEXPR void on_error(const char *message) {
919  ErrorHandler::on_error(message);
920  }
921 
922  FMT_CONSTEXPR ErrorHandler error_handler() const { return *this; }
923 };
924 
927 
928 // DEPRECATED!
931 
932 namespace internal {
933 // A map from argument names to their values for named arguments.
934 template <typename Context>
935 class arg_map {
936  private:
937  arg_map(const arg_map &) = delete;
938  void operator=(const arg_map &) = delete;
939 
940  typedef typename Context::char_type char_type;
941 
942  struct entry {
945  };
946 
947  entry *map_;
948  unsigned size_;
949 
950  void push_back(value<Context> val) {
951  const internal::named_arg_base<char_type> &named = val.as_named_arg();
952  map_[size_] = entry{named.name, named.template deserialize<Context>()};
953  ++size_;
954  }
955 
956  public:
957  arg_map() : map_(FMT_NULL), size_(0) {}
958  void init(const basic_format_args<Context> &args);
959  ~arg_map() { delete [] map_; }
960 
962  // The list is unsorted, so just return the first matching name.
963  for (entry *it = map_, *end = map_ + size_; it != end; ++it) {
964  if (it->name == name)
965  return it->arg;
966  }
967  return {};
968  }
969 };
970 
971 // A type-erased reference to an std::locale to avoid heavy <locale> include.
972 class locale_ref {
973  private:
974  const void *locale_; // A type-erased pointer to std::locale.
975  friend class locale;
976 
977  public:
978  locale_ref() : locale_(FMT_NULL) {}
979 
980  template <typename Locale>
981  explicit locale_ref(const Locale &loc);
982 
983  template <typename Locale>
984  Locale get() const;
985 };
986 
987 template <typename OutputIt, typename Context, typename Char>
989  public:
990  typedef OutputIt iterator;
991 
992  private:
993  basic_parse_context<Char> parse_context_;
994  iterator out_;
996  locale_ref loc_;
997 
998  protected:
999  typedef Char char_type;
1001 
1002  context_base(OutputIt out, basic_string_view<char_type> format_str,
1003  basic_format_args<Context> ctx_args,
1004  locale_ref loc = locale_ref())
1005  : parse_context_(format_str), out_(out), args_(ctx_args), loc_(loc) {}
1006 
1007  // Returns the argument with specified index.
1008  format_arg do_get_arg(unsigned arg_id) {
1009  format_arg arg = args_.get(arg_id);
1010  if (!arg)
1011  parse_context_.on_error("argument index out of range");
1012  return arg;
1013  }
1014 
1015  // Checks if manual indexing is used and returns the argument with
1016  // specified index.
1017  format_arg get_arg(unsigned arg_id) {
1018  return this->parse_context().check_arg_id(arg_id) ?
1019  this->do_get_arg(arg_id) : format_arg();
1020  }
1021 
1022  public:
1023  basic_parse_context<char_type> &parse_context() { return parse_context_; }
1024  basic_format_args<Context> args() const { return args_; } // DEPRECATED!
1025  basic_format_arg<Context> arg(unsigned id) const { return args_.get(id); }
1026 
1028  return parse_context_.error_handler();
1029  }
1030 
1031  void on_error(const char *message) { parse_context_.on_error(message); }
1032 
1033  // Returns an iterator to the beginning of the output range.
1034  iterator out() { return out_; }
1035  iterator begin() { return out_; } // deprecated
1036 
1037  // Advances the begin iterator to ``it``.
1038  void advance_to(iterator it) { out_ = it; }
1039 
1040  locale_ref locale() { return loc_; }
1041 };
1042 
1043 template <typename Context, typename T>
1044 struct get_type {
1045  typedef decltype(make_value<Context>(
1046  declval<typename std::decay<T>::type&>())) value_type;
1047  static const type value = value_type::type_tag;
1048 };
1049 
1050 template <typename Context>
1051 FMT_CONSTEXPR11 unsigned long long get_types() { return 0; }
1052 
1053 template <typename Context, typename Arg, typename... Args>
1054 FMT_CONSTEXPR11 unsigned long long get_types() {
1055  return get_type<Context, Arg>::value | (get_types<Context, Args...>() << 4);
1056 }
1057 
1058 template <typename Context, typename T>
1061  arg.type_ = get_type<Context, T>::value;
1062  arg.value_ = make_value<Context>(value);
1063  return arg;
1064 }
1065 
1066 template <bool IS_PACKED, typename Context, typename T>
1067 inline typename std::enable_if<IS_PACKED, value<Context>>::type
1068  make_arg(const T &value) {
1069  return make_value<Context>(value);
1070 }
1071 
1072 template <bool IS_PACKED, typename Context, typename T>
1073 inline typename std::enable_if<!IS_PACKED, basic_format_arg<Context>>::type
1074  make_arg(const T &value) {
1075  return make_arg<Context>(value);
1076 }
1077 } // namespace internal
1078 
1079 // Formatting context.
1080 template <typename OutputIt, typename Char>
1082  public internal::context_base<
1083  OutputIt, basic_format_context<OutputIt, Char>, Char> {
1084  public:
1086  typedef Char char_type;
1087 
1088  // using formatter_type = formatter<T, char_type>;
1089  template <typename T>
1091 
1092  private:
1094 
1095  basic_format_context(const basic_format_context &) = delete;
1096  void operator=(const basic_format_context &) = delete;
1097 
1099  typedef typename base::format_arg format_arg;
1100  using base::get_arg;
1101 
1102  public:
1103  using typename base::iterator;
1104 
1112  : base(out, format_str, ctx_args, loc) {}
1113 
1114  format_arg next_arg() {
1115  return this->do_get_arg(this->parse_context().next_arg_id());
1116  }
1117  format_arg get_arg(unsigned arg_id) { return this->do_get_arg(arg_id); }
1118 
1119  // Checks if manual indexing is used and returns the argument with the
1120  // specified name.
1121  format_arg get_arg(basic_string_view<char_type> name);
1122 };
1123 
1124 template <typename Char>
1126  typedef basic_format_context<
1127  std::back_insert_iterator<internal::basic_buffer<Char>>, Char> type;
1128 };
1131 
1139 template <typename Context, typename ...Args>
1141  private:
1142  static const size_t NUM_ARGS = sizeof...(Args);
1143 
1144  // Packed is a macro on MinGW so use IS_PACKED instead.
1145  static const bool IS_PACKED = NUM_ARGS < internal::max_packed_args;
1146 
1147  typedef typename std::conditional<IS_PACKED,
1149 
1150  // If the arguments are not packed, add one more element to mark the end.
1151  static const size_t DATA_SIZE =
1152  NUM_ARGS + (IS_PACKED && NUM_ARGS != 0 ? 0 : 1);
1153  value_type data_[DATA_SIZE];
1154 
1155  friend class basic_format_args<Context>;
1156 
1157  static FMT_CONSTEXPR11 unsigned long long get_types() {
1158  return IS_PACKED ?
1159  internal::get_types<Context, Args...>() :
1160  internal::is_unpacked_bit | NUM_ARGS;
1161  }
1162 
1163  public:
1164 #if FMT_USE_CONSTEXPR11
1165  static FMT_CONSTEXPR11 unsigned long long TYPES = get_types();
1166 #else
1167  static const unsigned long long TYPES;
1168 #endif
1169 
1170 #if (FMT_GCC_VERSION && FMT_GCC_VERSION <= 405) || \
1171  (FMT_MSC_VER && FMT_MSC_VER <= 1800)
1172  // Workaround array initialization issues in gcc <= 4.5 and MSVC <= 2013.
1173  format_arg_store(const Args &... args) {
1174  value_type init[DATA_SIZE] =
1175  {internal::make_arg<IS_PACKED, Context>(args)...};
1176  std::memcpy(data_, init, sizeof(init));
1177  }
1178 #else
1179  format_arg_store(const Args &... args)
1180  : data_{internal::make_arg<IS_PACKED, Context>(args)...} {}
1181 #endif
1182 };
1183 
1184 #if !FMT_USE_CONSTEXPR11
1185 template <typename Context, typename ...Args>
1186 const unsigned long long format_arg_store<Context, Args...>::TYPES =
1187  get_types();
1188 #endif
1189 
1197 template <typename Context = format_context, typename ...Args>
1198 inline format_arg_store<Context, Args...>
1199  make_format_args(const Args &... args) { return {args...}; }
1200 
1202 template <typename Context>
1203 class basic_format_args {
1204  public:
1205  typedef unsigned size_type;
1207 
1208  private:
1209  // To reduce compiled code size per formatting function call, types of first
1210  // max_packed_args arguments are passed in the types_ field.
1211  unsigned long long types_;
1212  union {
1213  // If the number of arguments is less than max_packed_args, the argument
1214  // values are stored in values_, otherwise they are stored in args_.
1215  // This is done to reduce compiled code size as storing larger objects
1216  // may require more code (at least on x86-64) even if the same amount of
1217  // data is actually copied to stack. It saves ~10% on the bloat test.
1219  const format_arg *args_;
1220  };
1221 
1222  bool is_packed() const { return (types_ & internal::is_unpacked_bit) == 0; }
1223 
1224  typename internal::type type(unsigned index) const {
1225  unsigned shift = index * 4;
1226  return static_cast<typename internal::type>(
1227  (types_ & (0xfull << shift)) >> shift);
1228  }
1229 
1230  friend class internal::arg_map<Context>;
1231 
1232  void set_data(const internal::value<Context> *values) { values_ = values; }
1233  void set_data(const format_arg *args) { args_ = args; }
1234 
1235  format_arg do_get(size_type index) const {
1236  format_arg arg;
1237  if (!is_packed()) {
1238  auto num_args = max_size();
1239  if (index < num_args)
1240  arg = args_[index];
1241  return arg;
1242  }
1243  if (index > internal::max_packed_args)
1244  return arg;
1245  arg.type_ = type(index);
1246  if (arg.type_ == internal::none_type)
1247  return arg;
1248  internal::value<Context> &val = arg.value_;
1249  val = values_[index];
1250  return arg;
1251  }
1252 
1253  public:
1254  basic_format_args() : types_(0) {}
1255 
1261  template <typename... Args>
1263  : types_(static_cast<unsigned long long>(store.TYPES)) {
1264  set_data(store.data_);
1265  }
1266 
1272  basic_format_args(const format_arg *args, size_type count)
1273  : types_(internal::is_unpacked_bit | count) {
1274  set_data(args);
1275  }
1276 
1278  format_arg get(size_type index) const {
1279  format_arg arg = do_get(index);
1280  if (arg.type_ == internal::named_arg_type)
1281  arg = arg.value_.as_named_arg().template deserialize<Context>();
1282  return arg;
1283  }
1284 
1285  size_type max_size() const {
1286  unsigned long long max_packed = internal::max_packed_args;
1287  return static_cast<size_type>(
1288  is_packed() ? max_packed : types_ & ~internal::is_unpacked_bit);
1289  }
1290 };
1291 
1293 // It is a separate type rather than a typedef to make symbols readable.
1294 struct format_args : basic_format_args<format_context> {
1295  template <typename ...Args>
1296  format_args(Args &&... arg)
1297  : basic_format_args<format_context>(std::forward<Args>(arg)...) {}
1298 };
1299 struct wformat_args : basic_format_args<wformat_context> {
1300  template <typename ...Args>
1301  wformat_args(Args &&... arg)
1302  : basic_format_args<wformat_context>(std::forward<Args>(arg)...) {}
1303 };
1304 
1305 #define FMT_ENABLE_IF_T(B, T) typename std::enable_if<B, T>::type
1306 
1307 #ifndef FMT_USE_ALIAS_TEMPLATES
1308 # define FMT_USE_ALIAS_TEMPLATES FMT_HAS_FEATURE(cxx_alias_templates)
1309 #endif
1310 #if FMT_USE_ALIAS_TEMPLATES
1311 
1312 template <typename S>
1313 using char_t = FMT_ENABLE_IF_T(
1314  internal::is_string<S>::value, typename internal::char_t<S>::type);
1315 #define FMT_CHAR(S) fmt::char_t<S>
1316 #else
1317 template <typename S>
1318 struct char_t : std::enable_if<
1319  internal::is_string<S>::value, typename internal::char_t<S>::type> {};
1320 #define FMT_CHAR(S) typename char_t<S>::type
1321 #endif
1322 
1323 namespace internal {
1324 template <typename Char>
1325 struct named_arg_base {
1327 
1328  // Serialized value<context>.
1329  mutable char data[
1331 
1333 
1334  template <typename Context>
1337  std::memcpy(&arg, data, sizeof(basic_format_arg<Context>));
1338  return arg;
1339  }
1340 };
1341 
1342 template <typename T, typename Char>
1343 struct named_arg : named_arg_base<Char> {
1344  const T &value;
1345 
1347  : named_arg_base<Char>(name), value(val) {}
1348 };
1349 
1350 template <typename... Args, typename S>
1351 inline typename std::enable_if<!is_compile_string<S>::value>::type
1352  check_format_string(const S &) {}
1353 template <typename... Args, typename S>
1354 typename std::enable_if<is_compile_string<S>::value>::type
1356 
1357 template <typename S, typename... Args>
1359  typename buffer_context<FMT_CHAR(S)>::type, Args...> {
1361 
1362  checked_args(const S &format_str, const Args &... args):
1363  format_arg_store<context, Args...>(args...) {
1364  internal::check_format_string<Args...>(format_str);
1365  }
1366 
1367  basic_format_args<context> operator*() const { return *this; }
1368 };
1369 
1370 template <typename Char>
1371 std::basic_string<Char> vformat(
1372  basic_string_view<Char> format_str,
1374 
1375 template <typename Char>
1379 }
1380 
1390 template <typename T>
1391 inline internal::named_arg<T, char> arg(string_view name, const T &arg) {
1392  return {name, arg};
1393 }
1394 
1395 template <typename T>
1396 inline internal::named_arg<T, wchar_t> arg(wstring_view name, const T &arg) {
1397  return {name, arg};
1398 }
1399 
1400 // Disable nested named arguments, e.g. ``arg("a", arg("b", 42))``.
1401 template <typename S, typename T, typename Char>
1402 void arg(S, internal::named_arg<T, Char>) = delete;
1403 
1404 template <typename Container>
1405 struct is_contiguous: std::false_type {};
1406 
1407 template <typename Char>
1408 struct is_contiguous<std::basic_string<Char> >: std::true_type {};
1409 
1410 template <typename Char>
1411 struct is_contiguous<internal::basic_buffer<Char> >: std::true_type {};
1412 
1414 template <typename Container, typename S>
1415 typename std::enable_if<
1416  is_contiguous<Container>::value, std::back_insert_iterator<Container>>::type
1418  std::back_insert_iterator<Container> out,
1419  const S &format_str,
1420  basic_format_args<typename buffer_context<FMT_CHAR(S)>::type> args) {
1422  internal::vformat_to(buf, to_string_view(format_str), args);
1423  return out;
1424 }
1425 
1426 template <typename Container, typename S, typename... Args>
1427 inline typename std::enable_if<
1428  is_contiguous<Container>::value && internal::is_string<S>::value,
1429  std::back_insert_iterator<Container>>::type
1430  format_to(std::back_insert_iterator<Container> out, const S &format_str,
1431  const Args &... args) {
1432  internal::checked_args<S, Args...> ca(format_str, args...);
1433  return vformat_to(out, to_string_view(format_str), *ca);
1434 }
1435 
1436 template <typename S, typename Char = FMT_CHAR(S)>
1437 inline std::basic_string<Char> vformat(
1438  const S &format_str,
1440  return internal::vformat(to_string_view(format_str), args);
1441 }
1442 
1453 template <typename S, typename... Args>
1454 inline std::basic_string<FMT_CHAR(S)> format(
1455  const S &format_str, const Args &... args) {
1456  return internal::vformat(
1457  to_string_view(format_str),
1458  *internal::checked_args<S, Args...>(format_str, args...));
1459 }
1460 
1461 FMT_API void vprint(std::FILE *f, string_view format_str, format_args args);
1462 FMT_API void vprint(std::FILE *f, wstring_view format_str, wformat_args args);
1463 
1475 template <typename S, typename... Args>
1476 inline FMT_ENABLE_IF_T(internal::is_string<S>::value, void)
1477  print(std::FILE *f, const S &format_str, const Args &... args) {
1478  vprint(f, to_string_view(format_str),
1479  internal::checked_args<S, Args...>(format_str, args...));
1480 }
1481 
1482 FMT_API void vprint(string_view format_str, format_args args);
1483 FMT_API void vprint(wstring_view format_str, wformat_args args);
1484 
1494 template <typename S, typename... Args>
1496  print(const S &format_str, const Args &... args) {
1497  vprint(to_string_view(format_str),
1498  internal::checked_args<S, Args...>(format_str, args...));
1499 }
1501 
1502 #endif // FMT_CORE_H_
dummy_string_view to_string_view(...)
+
basic_format_arg< Context > find(basic_string_view< char_type > name) const
Definition: core.h:961
+ +
result::char_type type
Definition: core.h:521
+
auto begin(const C &c) -> decltype(c.begin())
Definition: format.h:251
+
const format_arg * args_
Definition: core.h:1219
+
container_buffer(Container &c)
Definition: core.h:307
+
value(const unsigned char *val)
Definition: core.h:594
+
void arg(S, internal::named_arg< T, Char >)=delete
+ + + +
void advance_to(iterator it)
Definition: core.h:901
+ + +
format_arg get_arg(unsigned arg_id)
Definition: core.h:1017
+
std::size_t capacity() const
Definition: core.h:253
+
friend bool operator!=(basic_string_view lhs, basic_string_view rhs)
Definition: core.h:411
+ +
std::enable_if< is_contiguous< Container >::value, std::back_insert_iterator< Container > >::type vformat_to(std::back_insert_iterator< Container > out, const S &format_str, basic_format_args< typename buffer_context< typename char_t< S >::type >::type > args)
Definition: core.h:1417
+
format_arg get_arg(unsigned arg_id)
Definition: core.h:1117
+
bool is_integral() const
Definition: core.h:816
+
friend bool operator>(basic_string_view lhs, basic_string_view rhs)
Definition: core.h:420
+
unsigned long long get_types()
Definition: core.h:1054
+
format_arg get(size_type index) const
Definition: core.h:1278
+
bool is_integral(type t)
Definition: core.h:540
+ +
custom_value< Context > custom
Definition: core.h:579
+ + +
basic_format_args< Context > args() const
Definition: core.h:1024
+
void remove_prefix(size_t n)
Definition: core.h:394
+
long long long_long_value
Definition: core.h:571
+
value(unsigned long long val)
Definition: core.h:585
+ +
friend bool operator>=(basic_string_view lhs, basic_string_view rhs)
Definition: core.h:423
+ +
void on_error(const char *message)
Definition: core.h:1031
+ + +
basic_string_view(const Char *s)
Definition: core.h:371
+
Context::char_type char_type
Definition: core.h:566
+
void on_error(const char *message)
Definition: core.h:918
+
value(const char_type *val)
Definition: core.h:588
+
std::enable_if< internal::is_string< S >::value, init< C, basic_string_view< typename C::char_type >, string_type > >::type make_value(const S &val)
Definition: core.h:760
+ + +
void check_arg_id(basic_string_view< Char >)
Definition: core.h:916
+ + +
init(const T &v)
Definition: core.h:635
+ +
#define FMT_CONSTEXPR11
Definition: core.h:80
+
unsigned uint_value
Definition: core.h:570
+
friend bool operator<=(basic_string_view lhs, basic_string_view rhs)
Definition: core.h:417
+
char data[sizeof(basic_format_arg< typename buffer_context< Char >::type >)]
Definition: core.h:1330
+
buffer_context< char >::type format_context
Definition: core.h:1129
+
value(const signed char *val)
Definition: core.h:589
+
checked_args(const S &format_str, const Args &...args)
Definition: core.h:1362
+
Definition: format.h:297
+ + +
basic_parse_context< wchar_t > wparse_context
Definition: core.h:930
+ + +
friend bool operator==(basic_string_view lhs, basic_string_view rhs)
Definition: core.h:408
+
value(long double val)
Definition: core.h:587
+
#define FMT_MAKE_VALUE_SAME(TAG, Type)
Definition: core.h:648
+
basic_format_context(OutputIt out, basic_string_view< char_type > format_str, basic_format_args< basic_format_context > ctx_args, internal::locale_ref loc=internal::locale_ref())
Definition: core.h:1109
+
basic_format_arg< Context > format_arg
Definition: core.h:1206
+
Container & get_container(std::back_insert_iterator< Container > it)
Definition: core.h:313
+
ErrorHandler error_handler() const
Definition: core.h:922
+ +
error_handler(const error_handler &)
Definition: core.h:324
+
basic_format_args(const format_arg_store< Context, Args... > &store)
Definition: core.h:1262
+ +
#define FMT_END_NAMESPACE
Definition: core.h:153
+
basic_format_arg< Context > deserialize() const
Definition: core.h:1335
+
internal::type type() const
Definition: core.h:814
+
std::size_t size() const
Definition: core.h:250
+
string_value< unsigned char > ustring
Definition: core.h:578
+
const named_arg_base< char_type > & as_named_arg()
Definition: core.h:611
+ + + + + + +
format_arg_store(const Args &...args)
Definition: core.h:1179
+
basic_format_args(const format_arg *args, size_type count)
Definition: core.h:1272
+
std::conditional< sizeof(unsigned long)==sizeof(unsigned), unsigned, unsigned long long >::type ulong_type
Definition: core.h:665
+ +
basic_string_view< wchar_t > wstring_view
Definition: core.h:429
+ +
const Char * iterator
Definition: core.h:357
+
void grow(std::size_t capacity)
Definition: core.h:301
+
internal::error_handler error_handler()
Definition: core.h:1027
+
std::enable_if< is_contiguous< Container >::value, typename checked< typename Container::value_type >::type >::type reserve(std::back_insert_iterator< Container > &it, std::size_t n)
Definition: format.h:596
+
value(unsigned val)
Definition: core.h:583
+
internal::result_of< Visitor(int)>::type visit_format_arg(Visitor &&vis, const basic_format_arg< Context > &arg)
Definition: core.h:831
+
int compare(basic_string_view other) const
Definition: core.h:400
+ +
size_t size() const
Definition: core.h:389
+
std::conditional< sizeof(long)==sizeof(int), int, long long >::type long_type
Definition: core.h:661
+
formatter< T, char_type > type
Definition: core.h:1090
+ +
basic_buffer< char > buffer
Definition: core.h:291
+ + + +
void resize(std::size_t new_size)
Definition: core.h:264
+
handle(internal::custom_value< Context > custom)
Definition: core.h:800
+ + +
named_arg(basic_string_view< Char > name, const T &val)
Definition: core.h:1346
+ +
value(int val=0)
Definition: core.h:582
+
basic_buffer(T *p=NULL, std::size_t sz=0, std::size_t cap=0)
Definition: core.h:228
+ +
std::basic_string< Char > vformat(const S &format_str, basic_format_args< typename buffer_context< Char >::type > args)
Definition: core.h:1437
+
const T & operator[](std::size_t index) const
Definition: core.h:288
+
basic_parse_context(basic_string_view< Char > format_str, ErrorHandler eh=ErrorHandler())
Definition: core.h:887
+
void vprint(wstring_view format_str, wformat_args args)
Definition: format-inl.h:962
+
#define FMT_API
Definition: core.h:166
+
format_arg_store< Context, Args... > make_format_args(const Args &...args)
Definition: core.h:1199
+ + +
bool check_arg_id(unsigned)
Definition: core.h:908
+ +
void push_back(const T &value)
Definition: core.h:278
+ +
std::make_unsigned< Int >::type to_unsigned(Int value)
Definition: core.h:208
+ +
std::basic_string< typename char_t< S >::type > format(const S &format_str, const Args &...args)
Definition: core.h:1454
+ +
basic_parse_context< char_type > & parse_context()
Definition: core.h:1023
+ +
std::enable_if<!IS_PACKED, basic_format_arg< Context > >::type make_arg(const T &value)
Definition: core.h:1074
+
named_arg_base(basic_string_view< Char > nm)
Definition: core.h:1332
+
format_arg do_get_arg(unsigned arg_id)
Definition: core.h:1008
+ +
value(basic_string_view< char_type > val)
Definition: core.h:599
+ +
basic_string_view(const std::basic_string< Char, Alloc > &s)
Definition: core.h:376
+
long double long_double_value
Definition: core.h:574
+ +
T & operator[](std::size_t index)
Definition: core.h:287
+ +
#define FMT_CHAR(S)
Definition: core.h:1320
+
buffer_context< wchar_t >::type wformat_context
Definition: core.h:1130
+
basic_format_args< context > operator*() const
Definition: core.h:1367
+
value(const void *val)
Definition: core.h:603
+
basic_buffer(std::size_t sz)
Definition: core.h:226
+
void reserve(std::size_t new_capacity)
Definition: core.h:273
+
basic_string_view< Char >::iterator iterator
Definition: core.h:885
+
void format(Context &ctx) const
Definition: core.h:802
+ +
#define FMT_NULL
Definition: core.h:107
+
#define FMT_MAKE_VALUE(TAG, ArgType, ValueType)
Definition: core.h:642
+
value(double val)
Definition: core.h:586
+ +
wformat_args(Args &&...arg)
Definition: core.h:1301
+ +
bool is_arithmetic() const
Definition: core.h:817
+ + +
#define FMT_CONSTEXPR
Definition: core.h:69
+ +
const T * data() const
Definition: core.h:259
+
const internal::value< Context > * values_
Definition: core.h:1218
+
basic_parse_context< char > format_parse_context
Definition: core.h:925
+ + +
const void * pointer
Definition: core.h:575
+
basic_parse_context< char > parse_context
Definition: core.h:929
+
std::add_rvalue_reference< T >::type declval()
+
#define FMT_EXPLICIT
Definition: core.h:98
+
format_args(Args &&...arg)
Definition: core.h:1296
+
basic_buffer< wchar_t > wbuffer
Definition: core.h:292
+
basic_format_arg< Context > arg(unsigned id) const
Definition: core.h:1025
+
friend bool operator<(basic_string_view lhs, basic_string_view rhs)
Definition: core.h:414
+
basic_string_view< Char > name
Definition: core.h:1326
+ + +
std::enable_if< is_compile_string< S >::value >::type check_format_string(S)
Definition: format.h:2119
+
buffer_context< typename char_t< S >::type >::type context
Definition: core.h:1360
+ + +
std::result_of< typename std::remove_reference< F >::type(Args...)>::type type
Definition: core.h:203
+
static const unsigned long long TYPES
Definition: core.h:1167
+
context_base(OutputIt out, basic_string_view< char_type > format_str, basic_format_args< Context > ctx_args, locale_ref loc=locale_ref())
Definition: core.h:1002
+
bool is_arithmetic(type t)
Definition: core.h:545
+ +
basic_parse_context< wchar_t > wformat_parse_context
Definition: core.h:926
+ +
value(const T &val)
Definition: core.h:606
+
void advance_to(iterator it)
Definition: core.h:1038
+ +
std::enable_if< is_contiguous< Container >::value &&internal::is_string< S >::value, std::back_insert_iterator< Container > >::type format_to(std::back_insert_iterator< Container > out, const S &format_str, const Args &...args)
Definition: core.h:1430
+
iterator begin() const
Definition: core.h:893
+ +
#define FMT_NOEXCEPT
Definition: core.h:140
+ +
#define FMT_ENABLE_IF_T(B, T)
Definition: core.h:1305
+ + +
std::enable_if< internal::is_string< S >::value, void >::type print(const S &format_str, const Args &...args)
Definition: core.h:1496
+ + + +
#define FMT_ASSERT(condition, message)
Definition: core.h:170
+ +
const Char * data() const
Definition: core.h:386
+
#define FMT_BEGIN_NAMESPACE
Definition: core.h:155
+
basic_format_arg< Context > format_arg
Definition: core.h:1000
+ + +
#define FMT_OVERRIDE
Definition: core.h:88
+
basic_format_context< std::back_insert_iterator< internal::basic_buffer< Char > >, Char > type
Definition: core.h:1127
+ +
size_type max_size() const
Definition: core.h:1285
+ + +
basic_string_view< Char > to_string_view(basic_string_view< Char > s)
Definition: core.h:455
+ +
iterator begin() const
Definition: core.h:391
+ + +
iterator end() const
Definition: core.h:898
+
value(long long val)
Definition: core.h:584
+
basic_string_view< char > string_view
Definition: core.h:428
+ + +
string_value< char_type > string
Definition: core.h:576
+
string_value< signed char > sstring
Definition: core.h:577
+ +
internal::result_of< Visitor(int)>::type visit(Visitor &&vis, const basic_format_arg< Context > &arg)
Definition: core.h:871
+ +
auto end(const C &c) -> decltype(c.end())
Definition: format.h:257
+
unsigned long long ulong_long_value
Definition: core.h:572
+ + +
iterator end() const
Definition: core.h:392
+
basic_string_view(const Char *s, size_t count)
Definition: core.h:362
+
-
std::enable_if< is_contiguous< Container >::value &&internal::is_string< S >::value, std::back_insert_iterator< Container > >::type format_to(std::back_insert_iterator< Container > out, const S &format_str, const Args &... args)
Definition: core.h:1430
- - -
basic_format_context(OutputIt out, basic_string_view< char_type > format_str, basic_format_args< basic_format_context > ctx_args, internal::locale_ref loc=internal::locale_ref())
Definition: core.h:1109
-
unsigned uint_value
Definition: core.h:570
-
basic_parse_context< wchar_t > wparse_context
Definition: core.h:930
- - -
void on_error(const char *message)
Definition: core.h:918
-
format_arg_store(const Args &... args)
Definition: core.h:1179
-
const typedef Char * iterator
Definition: core.h:357
-
const T * data() const
Definition: core.h:259
-
result::char_type type
Definition: core.h:521
- - - - -
value(unsigned val)
Definition: core.h:583
-
named_arg(basic_string_view< Char > name, const T &val)
Definition: core.h:1346
- - -
#define FMT_MAKE_VALUE_SAME(TAG, Type)
Definition: core.h:648
-
buffer_context< char >::type format_context
Definition: core.h:1129
- -
std::result_of< typename std::remove_reference< F >::type(Args...)>::type type
Definition: core.h:203
- - -
value(double val)
Definition: core.h:586
- - -
named_arg_base(basic_string_view< Char > nm)
Definition: core.h:1332
- -
internal::result_of< Visitor(int)>::type visit_format_arg(Visitor &&vis, const basic_format_arg< Context > &arg)
Definition: core.h:831
-
void advance_to(iterator it)
Definition: core.h:901
-
basic_format_context< std::back_insert_iterator< internal::basic_buffer< Char > >, Char > type
Definition: core.h:1127
-
std::enable_if< is_contiguous< Container >::value, std::back_insert_iterator< Container > >::type vformat_to(std::back_insert_iterator< Container > out, const S &format_str, basic_format_args< typename buffer_context< typename char_t< S >::type >::type > args)
Definition: core.h:1417
-
#define FMT_API
Definition: core.h:166
- -
std::size_t size() const
Definition: core.h:250
-
long long long_long_value
Definition: core.h:571
- -
iterator end() const
Definition: core.h:898
-
iterator end() const
Definition: core.h:392
-
std::size_t capacity() const
Definition: core.h:253
-
std::add_rvalue_reference< T >::type declval()
- -
const format_arg * args_
Definition: core.h:1219
-
format_arg do_get_arg(unsigned arg_id)
Definition: core.h:1008
- - -
long double long_double_value
Definition: core.h:574
-
auto end(const C &c) -> decltype(c.end())
Definition: format.h:257
- -
context_base(OutputIt out, basic_string_view< char_type > format_str, basic_format_args< Context > ctx_args, locale_ref loc=locale_ref())
Definition: core.h:1002
-
format_arg get_arg(unsigned arg_id)
Definition: core.h:1017
-
const void * pointer
Definition: core.h:575
-
std::enable_if< internal::is_string< S >::value, init< C, basic_string_view< typename C::char_type >, string_type > >::type make_value(const S &val)
Definition: core.h:760
-
dummy_string_view to_string_view(...)
-
std::conditional< sizeof(long)==sizeof(int), int, long long >::type long_type
Definition: core.h:661
-
basic_string_view(const std::basic_string< Char, Alloc > &s)
Definition: core.h:376
-
#define FMT_EXPLICIT
Definition: core.h:98
-
value(const signed char *val)
Definition: core.h:589
-
format_args(Args &&... arg)
Definition: core.h:1296
-
container_buffer(Container &c)
Definition: core.h:307
-
void remove_prefix(size_t n)
Definition: core.h:394
-
Container & get_container(std::back_insert_iterator< Container > it)
Definition: core.h:313
-
void check_arg_id(basic_string_view< Char >)
Definition: core.h:916
-
T & operator[](std::size_t index)
Definition: core.h:287
-
#define FMT_MAKE_VALUE(TAG, ArgType, ValueType)
Definition: core.h:642
-
string_value< unsigned char > ustring
Definition: core.h:578
-
void advance_to(iterator it)
Definition: core.h:1038
- - -
basic_buffer(std::size_t sz)
Definition: core.h:226
-
checked_args(const S &format_str, const Args &... args)
Definition: core.h:1362
- -
format_arg get_arg(unsigned arg_id)
Definition: core.h:1117
- -
ErrorHandler error_handler() const
Definition: core.h:922
- -
std::make_unsigned< Int >::type to_unsigned(Int value)
Definition: core.h:208
-
basic_format_args< Context > args() const
Definition: core.h:1024
-
value(const T &val)
Definition: core.h:606
-
unsigned long long ulong_long_value
Definition: core.h:572
- - - - -
void push_back(const T &value)
Definition: core.h:278
-
string_value< char_type > string
Definition: core.h:576
- -
basic_format_arg< Context > arg(unsigned id) const
Definition: core.h:1025
-
#define FMT_OVERRIDE
Definition: core.h:88
-
#define FMT_NULL
Definition: core.h:107
- -
value(const unsigned char *val)
Definition: core.h:594
-
error_handler(const error_handler &)
Definition: core.h:324
-
const internal::value< Context > * values_
Definition: core.h:1218
- - - - -
std::basic_string< Char > vformat(const S &format_str, basic_format_args< typename buffer_context< Char >::type > args)
Definition: core.h:1437
- - -
void on_error(const char *message)
Definition: core.h:1031
-
int compare(basic_string_view other) const
Definition: core.h:400
- - -
#define FMT_NOEXCEPT
Definition: core.h:140
-
friend bool operator<(basic_string_view lhs, basic_string_view rhs)
Definition: core.h:414
-
basic_string_view< wchar_t > wstring_view
Definition: core.h:429
-
basic_string_view(const Char *s, size_t count)
Definition: core.h:362
-
Context::char_type char_type
Definition: core.h:566
- - -
basic_string_view< Char > name
Definition: core.h:1326
- -
void set(T *buf_data, std::size_t buf_capacity)
Definition: core.h:232
-
value(const char_type *val)
Definition: core.h:588
- -
void vprint(wstring_view format_str, wformat_args args)
Definition: format-inl.h:962
- -
value(int val=0)
Definition: core.h:582
-
#define FMT_CONSTEXPR11
Definition: core.h:80
-
#define FMT_END_NAMESPACE
Definition: core.h:153
-
basic_buffer< char > buffer
Definition: core.h:291
-
friend bool operator==(basic_string_view lhs, basic_string_view rhs)
Definition: core.h:408
-
bool is_integral(type t)
Definition: core.h:540
-
basic_buffer< wchar_t > wbuffer
Definition: core.h:292
-
size_type max_size() const
Definition: core.h:1285
-
void arg(S, internal::named_arg< T, Char >)=delete
-
string_value< signed char > sstring
Definition: core.h:577
-
formatter< T, char_type > type
Definition: core.h:1090
- -
basic_format_arg< Context > format_arg
Definition: core.h:1206
-
format_arg_store< Context, Args... > make_format_args(const Args &... args)
Definition: core.h:1199
- -
std::enable_if< is_compile_string< S >::value >::type check_format_string(S)
Definition: format.h:2119
- - -
size_t size() const
Definition: core.h:389
-
value(long long val)
Definition: core.h:584
- -
friend bool operator>=(basic_string_view lhs, basic_string_view rhs)
Definition: core.h:423
-
buffer_context< typename char_t< S >::type >::type context
Definition: core.h:1360
-
value(basic_string_view< char_type > val)
Definition: core.h:599
-
static const unsigned long long TYPES
Definition: core.h:1167
-
void format(Context &ctx) const
Definition: core.h:802
- -
basic_format_args(const format_arg *args, size_type count)
Definition: core.h:1272
-
basic_string_view< Char >::iterator iterator
Definition: core.h:885
-
basic_string_view< Char > to_string_view(basic_string_view< Char > s)
Definition: core.h:455
-
handle(internal::custom_value< Context > custom)
Definition: core.h:800
-
value(long double val)
Definition: core.h:587
-
std::enable_if< is_contiguous< Container >::value, typename checked< typename Container::value_type >::type >::type reserve(std::back_insert_iterator< Container > &it, std::size_t n)
Definition: format.h:596
- -
basic_format_arg< Context > deserialize() const
Definition: core.h:1335
- -
basic_string_view< char > string_view
Definition: core.h:428
- -
value(unsigned long long val)
Definition: core.h:585
-
basic_string_view(const Char *s)
Definition: core.h:371
-
wformat_args(Args &&... arg)
Definition: core.h:1301
- -
void resize(std::size_t new_size)
Definition: core.h:264
- -
init(const T &v)
Definition: core.h:635
-
friend bool operator!=(basic_string_view lhs, basic_string_view rhs)
Definition: core.h:411
- -
std::enable_if< internal::is_string< S >::value, void >::type print(const S &format_str, const Args &... args)
Definition: core.h:1496
-
#define FMT_CHAR(S)
Definition: core.h:1320
- -
unsigned long long get_types()
Definition: core.h:1054
-
#define FMT_ASSERT(condition, message)
Definition: core.h:170
-
basic_parse_context(basic_string_view< Char > format_str, ErrorHandler eh=ErrorHandler())
Definition: core.h:887
-
bool is_arithmetic() const
Definition: core.h:817
-
char data[sizeof(basic_format_arg< typename buffer_context< Char >::type >)]
Definition: core.h:1330
- -
const Char * data() const
Definition: core.h:386
-
bool check_arg_id(unsigned)
Definition: core.h:908
- -
void grow(std::size_t capacity)
Definition: core.h:301
-
basic_format_arg< Context > format_arg
Definition: core.h:1000
- - -
Definition: format.h:297
-
iterator begin() const
Definition: core.h:391
-
const T & operator[](std::size_t index) const
Definition: core.h:288
- -
friend bool operator>(basic_string_view lhs, basic_string_view rhs)
Definition: core.h:420
-
bool is_arithmetic(type t)
Definition: core.h:545
-
iterator begin() const
Definition: core.h:893
- - -
buffer_context< wchar_t >::type wformat_context
Definition: core.h:1130
- -
internal::error_handler error_handler()
Definition: core.h:1027
- -
internal::result_of< Visitor(int)>::type visit(Visitor &&vis, const basic_format_arg< Context > &arg)
Definition: core.h:871
-
#define FMT_BEGIN_NAMESPACE
Definition: core.h:155
- - - - - - - - - -
basic_format_args(const format_arg_store< Context, Args... > &store)
Definition: core.h:1262
- -
basic_parse_context< char > format_parse_context
Definition: core.h:925
-
void reserve(std::size_t new_capacity)
Definition: core.h:273
- - -
format_arg get(size_type index) const
Definition: core.h:1278
-
auto begin(const C &c) -> decltype(c.begin())
Definition: format.h:251
-
basic_buffer(T *p=NULL, std::size_t sz=0, std::size_t cap=0)
Definition: core.h:228
-
bool is_integral() const
Definition: core.h:816
- - -
basic_format_args< context > operator*() const
Definition: core.h:1367
- -
const typedef T & const_reference
Definition: core.h:242
-
std::shared_ptr< logger > get(const std::string &name)
Definition: spdlog.h:53
- -
basic_format_arg< Context > find(basic_string_view< char_type > name) const
Definition: core.h:961
- - -
custom_value< Context > custom
Definition: core.h:579
-
std::basic_string< typename char_t< S >::type > format(const S &format_str, const Args &... args)
Definition: core.h:1454
- -
internal::type type() const
Definition: core.h:814
- -
friend bool operator<=(basic_string_view lhs, basic_string_view rhs)
Definition: core.h:417
-
basic_parse_context< char_type > & parse_context()
Definition: core.h:1023
- -
basic_parse_context< wchar_t > wformat_parse_context
Definition: core.h:926
-
#define FMT_CONSTEXPR
Definition: core.h:69
-
basic_parse_context< char > parse_context
Definition: core.h:929
-
std::enable_if<!IS_PACKED, basic_format_arg< Context > >::type make_arg(const T &value)
Definition: core.h:1074
-
const named_arg_base< char_type > & as_named_arg()
Definition: core.h:611
-
#define FMT_ENABLE_IF_T(B, T)
Definition: core.h:1305
- -
value(const void *val)
Definition: core.h:603
-
std::conditional< sizeof(unsigned long)==sizeof(unsigned), unsigned, unsigned long long >::type ulong_type
Definition: core.h:665
diff --git a/docs/daily__file__sink_8h.html b/docs/daily__file__sink_8h.html index 7f953ba..368448d 100644 --- a/docs/daily__file__sink_8h.html +++ b/docs/daily__file__sink_8h.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: sdk_core/include/third_party/spdlog/spdlog/sinks/daily_file_sink.h File Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,40 @@ - + - - - - + +
@@ -147,7 +165,7 @@ Functions + doxygen 1.8.11
diff --git a/docs/daily__file__sink_8h_source.html b/docs/daily__file__sink_8h_source.html index 4bb81ee..7a93da3 100644 --- a/docs/daily__file__sink_8h_source.html +++ b/docs/daily__file__sink_8h_source.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: sdk_core/include/third_party/spdlog/spdlog/sinks/daily_file_sink.h Source File @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,40 @@ - + - - - - + +
@@ -91,191 +109,47 @@ $(document).ready(function(){initNavTree('daily__file__sink_8h_source.html','');
daily_file_sink.h
-Go to the documentation of this file.
1 //
-
2 // Copyright(c) 2015 Gabi Melman.
-
3 // Distributed under the MIT License (http://opensource.org/licenses/MIT)
-
4 //
-
5 
-
6 #pragma once
-
7 
-
8 #ifndef SPDLOG_H
-
9 #include "spdlog/spdlog.h"
-
10 #endif
-
11 
- - -
14 #include "spdlog/fmt/fmt.h"
-
15 #include "spdlog/sinks/base_sink.h"
-
16 
-
17 #include <chrono>
-
18 #include <cstdio>
-
19 #include <ctime>
-
20 #include <mutex>
-
21 #include <string>
-
22 
-
23 namespace spdlog {
-
24 namespace sinks {
-
25 
-
26 /*
-
27  * Generator of daily log file names in format basename.YYYY-MM-DD.ext
-
28  */
- -
30 {
-
31  // Create filename for the form basename.YYYY-MM-DD
-
32  static filename_t calc_filename(const filename_t &filename, const tm &now_tm)
-
33  {
-
34  filename_t basename, ext;
-
35  std::tie(basename, ext) = details::file_helper::split_by_extension(filename);
-
36  std::conditional<std::is_same<filename_t::value_type, char>::value, fmt::memory_buffer, fmt::wmemory_buffer>::type w;
- -
38  w, SPDLOG_FILENAME_T("{}_{:04d}-{:02d}-{:02d}{}"), basename, now_tm.tm_year + 1900, now_tm.tm_mon + 1, now_tm.tm_mday, ext);
-
39  return fmt::to_string(w);
-
40  }
-
41 };
-
42 
-
43 /*
-
44  * Rotating file sink based on date. rotates at midnight
-
45  */
-
46 template<typename Mutex, typename FileNameCalc = daily_filename_calculator>
-
47 class daily_file_sink final : public base_sink<Mutex>
-
48 {
-
49 public:
-
50  // create daily file sink which rotates on given time
-
51  daily_file_sink(filename_t base_filename, int rotation_hour, int rotation_minute, bool truncate = false)
-
52  : base_filename_(std::move(base_filename))
-
53  , rotation_h_(rotation_hour)
-
54  , rotation_m_(rotation_minute)
-
55  , truncate_(truncate)
-
56  {
-
57  if (rotation_hour < 0 || rotation_hour > 23 || rotation_minute < 0 || rotation_minute > 59)
-
58  {
-
59  throw spdlog_ex("daily_file_sink: Invalid rotation time in ctor");
-
60  }
-
61  auto now = log_clock::now();
-
62  file_helper_.open(FileNameCalc::calc_filename(base_filename_, now_tm(now)), truncate_);
-
63  rotation_tp_ = next_rotation_tp_();
-
64  }
-
65 
-
66  const filename_t &filename() const
-
67  {
-
68  return file_helper_.filename();
-
69  }
-
70 
-
71 protected:
-
72  void sink_it_(const details::log_msg &msg) override
-
73  {
-
74 
-
75  if (msg.time >= rotation_tp_)
-
76  {
-
77  file_helper_.open(FileNameCalc::calc_filename(base_filename_, now_tm(msg.time)), truncate_);
-
78  rotation_tp_ = next_rotation_tp_();
-
79  }
-
80  fmt::memory_buffer formatted;
-
81  sink::formatter_->format(msg, formatted);
-
82  file_helper_.write(formatted);
-
83  }
-
84 
-
85  void flush_() override
-
86  {
-
87  file_helper_.flush();
-
88  }
-
89 
-
90 private:
-
91  tm now_tm(log_clock::time_point tp)
-
92  {
-
93  time_t tnow = log_clock::to_time_t(tp);
-
94  return spdlog::details::os::localtime(tnow);
-
95  }
-
96 
-
97  log_clock::time_point next_rotation_tp_()
-
98  {
-
99  auto now = log_clock::now();
-
100  tm date = now_tm(now);
-
101  date.tm_hour = rotation_h_;
-
102  date.tm_min = rotation_m_;
-
103  date.tm_sec = 0;
-
104  auto rotation_time = log_clock::from_time_t(std::mktime(&date));
-
105  if (rotation_time > now)
-
106  {
-
107  return rotation_time;
-
108  }
-
109  return {rotation_time + std::chrono::hours(24)};
-
110  }
-
111 
-
112  filename_t base_filename_;
-
113  int rotation_h_;
-
114  int rotation_m_;
-
115  log_clock::time_point rotation_tp_;
-
116  details::file_helper file_helper_;
-
117  bool truncate_;
-
118 };
-
119 
- - -
122 
-
123 } // namespace sinks
-
124 
-
125 //
-
126 // factory functions
-
127 //
-
128 template<typename Factory = default_factory>
-
129 inline std::shared_ptr<logger> daily_logger_mt(
-
130  const std::string &logger_name, const filename_t &filename, int hour = 0, int minute = 0, bool truncate = false)
-
131 {
-
132  return Factory::template create<sinks::daily_file_sink_mt>(logger_name, filename, hour, minute, truncate);
-
133 }
-
134 
-
135 template<typename Factory = default_factory>
-
136 inline std::shared_ptr<logger> daily_logger_st(
-
137  const std::string &logger_name, const filename_t &filename, int hour = 0, int minute = 0, bool truncate = false)
-
138 {
-
139  return Factory::template create<sinks::daily_file_sink_st>(logger_name, filename, hour, minute, truncate);
-
140 }
-
141 } // namespace spdlog
+Go to the documentation of this file.
1 //
2 // Copyright(c) 2015 Gabi Melman.
3 // Distributed under the MIT License (http://opensource.org/licenses/MIT)
4 //
5 
6 #pragma once
7 
8 #ifndef SPDLOG_H
9 #include "spdlog/spdlog.h"
10 #endif
11 
14 #include "spdlog/fmt/fmt.h"
15 #include "spdlog/sinks/base_sink.h"
16 
17 #include <chrono>
18 #include <cstdio>
19 #include <ctime>
20 #include <mutex>
21 #include <string>
22 
23 namespace spdlog {
24 namespace sinks {
25 
26 /*
27  * Generator of daily log file names in format basename.YYYY-MM-DD.ext
28  */
30 {
31  // Create filename for the form basename.YYYY-MM-DD
32  static filename_t calc_filename(const filename_t &filename, const tm &now_tm)
33  {
34  filename_t basename, ext;
35  std::tie(basename, ext) = details::file_helper::split_by_extension(filename);
36  std::conditional<std::is_same<filename_t::value_type, char>::value, fmt::memory_buffer, fmt::wmemory_buffer>::type w;
38  w, SPDLOG_FILENAME_T("{}_{:04d}-{:02d}-{:02d}{}"), basename, now_tm.tm_year + 1900, now_tm.tm_mon + 1, now_tm.tm_mday, ext);
39  return fmt::to_string(w);
40  }
41 };
42 
43 /*
44  * Rotating file sink based on date. rotates at midnight
45  */
46 template<typename Mutex, typename FileNameCalc = daily_filename_calculator>
47 class daily_file_sink final : public base_sink<Mutex>
48 {
49 public:
50  // create daily file sink which rotates on given time
51  daily_file_sink(filename_t base_filename, int rotation_hour, int rotation_minute, bool truncate = false)
52  : base_filename_(std::move(base_filename))
53  , rotation_h_(rotation_hour)
54  , rotation_m_(rotation_minute)
55  , truncate_(truncate)
56  {
57  if (rotation_hour < 0 || rotation_hour > 23 || rotation_minute < 0 || rotation_minute > 59)
58  {
59  throw spdlog_ex("daily_file_sink: Invalid rotation time in ctor");
60  }
61  auto now = log_clock::now();
62  file_helper_.open(FileNameCalc::calc_filename(base_filename_, now_tm(now)), truncate_);
63  rotation_tp_ = next_rotation_tp_();
64  }
65 
66  const filename_t &filename() const
67  {
68  return file_helper_.filename();
69  }
70 
71 protected:
72  void sink_it_(const details::log_msg &msg) override
73  {
74 
75  if (msg.time >= rotation_tp_)
76  {
77  file_helper_.open(FileNameCalc::calc_filename(base_filename_, now_tm(msg.time)), truncate_);
78  rotation_tp_ = next_rotation_tp_();
79  }
80  fmt::memory_buffer formatted;
81  sink::formatter_->format(msg, formatted);
82  file_helper_.write(formatted);
83  }
84 
85  void flush_() override
86  {
87  file_helper_.flush();
88  }
89 
90 private:
91  tm now_tm(log_clock::time_point tp)
92  {
93  time_t tnow = log_clock::to_time_t(tp);
94  return spdlog::details::os::localtime(tnow);
95  }
96 
97  log_clock::time_point next_rotation_tp_()
98  {
99  auto now = log_clock::now();
100  tm date = now_tm(now);
101  date.tm_hour = rotation_h_;
102  date.tm_min = rotation_m_;
103  date.tm_sec = 0;
104  auto rotation_time = log_clock::from_time_t(std::mktime(&date));
105  if (rotation_time > now)
106  {
107  return rotation_time;
108  }
109  return {rotation_time + std::chrono::hours(24)};
110  }
111 
112  filename_t base_filename_;
113  int rotation_h_;
114  int rotation_m_;
115  log_clock::time_point rotation_tp_;
116  details::file_helper file_helper_;
117  bool truncate_;
118 };
119 
122 
123 } // namespace sinks
124 
125 //
126 // factory functions
127 //
128 template<typename Factory = default_factory>
129 inline std::shared_ptr<logger> daily_logger_mt(
130  const std::string &logger_name, const filename_t &filename, int hour = 0, int minute = 0, bool truncate = false)
131 {
132  return Factory::template create<sinks::daily_file_sink_mt>(logger_name, filename, hour, minute, truncate);
133 }
134 
135 template<typename Factory = default_factory>
136 inline std::shared_ptr<logger> daily_logger_st(
137  const std::string &logger_name, const filename_t &filename, int hour = 0, int minute = 0, bool truncate = false)
138 {
139  return Factory::template create<sinks::daily_file_sink_st>(logger_name, filename, hour, minute, truncate);
140 }
141 } // namespace spdlog
+ +
spdlog::log_clock::time_point now() noexcept
Definition: os.h:60
+ + +
std::unique_ptr< spdlog::formatter > formatter_
Definition: sink.h:50
+
std::tm localtime(const std::time_t &time_tt) noexcept
Definition: os.h:73
+
Definition: format.h:297
+ +
static filename_t calc_filename(const filename_t &filename, const tm &now_tm)
+ +
Definition: async.h:27
+
static std::tuple< filename_t, filename_t > split_by_extension(const spdlog::filename_t &fname)
Definition: file_helper.h:125
+
basic_memory_buffer< char > memory_buffer
Definition: format.h:553
+ + + + +
std::string filename_t
Definition: common.h:205
+ + + +
std::shared_ptr< logger > daily_logger_mt(const std::string &logger_name, const filename_t &filename, int hour=0, int minute=0, bool truncate=false)
+
const filename_t & filename() const
+
std::shared_ptr< logger > daily_logger_st(const std::string &logger_name, const filename_t &filename, int hour=0, int minute=0, bool truncate=false)
+
#define SPDLOG_FILENAME_T(s)
Definition: os.h:369
+
void sink_it_(const details::log_msg &msg) override
+
std::enable_if< is_contiguous< Container >::value &&internal::is_string< S >::value, std::back_insert_iterator< Container > >::type format_to(std::back_insert_iterator< Container > out, const S &format_str, const Args &...args)
Definition: core.h:1430
+
std::string to_string(const T &value)
Definition: format.h:3209
+
daily_file_sink(filename_t base_filename, int rotation_hour, int rotation_minute, bool truncate=false)
+
log_clock::time_point time
Definition: log_msg.h:43
+
-
std::enable_if< is_contiguous< Container >::value &&internal::is_string< S >::value, std::back_insert_iterator< Container > >::type format_to(std::back_insert_iterator< Container > out, const S &format_str, const Args &... args)
Definition: core.h:1430
- - -
std::unique_ptr< spdlog::formatter > formatter_
Definition: sink.h:50
- -
std::tm localtime(const std::time_t &time_tt) noexcept
Definition: os.h:73
-
const filename_t & filename() const
Definition: file_helper.h:102
- -
void open(const filename_t &fname, bool truncate=false)
Definition: file_helper.h:42
-
static filename_t calc_filename(const filename_t &filename, const tm &now_tm)
-
std::string to_string(const T &value)
Definition: format.h:3209
- -
Definition: async.h:27
- -
static std::tuple< filename_t, filename_t > split_by_extension(const spdlog::filename_t &fname)
Definition: file_helper.h:125
- -
#define SPDLOG_FILENAME_T(s)
Definition: os.h:369
- - - -
void write(const fmt::memory_buffer &buf)
Definition: file_helper.h:83
-
void sink_it_(const details::log_msg &msg) override
- -
daily_file_sink(filename_t base_filename, int rotation_hour, int rotation_minute, bool truncate=false)
-
Definition: format.h:297
- -
std::string filename_t
Definition: common.h:205
-
const filename_t & filename() const
- - -
basic_memory_buffer< char > memory_buffer
Definition: format.h:553
-
std::shared_ptr< logger > daily_logger_mt(const std::string &logger_name, const filename_t &filename, int hour=0, int minute=0, bool truncate=false)
-
log_clock::time_point time
Definition: log_msg.h:43
-
spdlog::log_clock::time_point now() noexcept
Definition: os.h:60
-
std::shared_ptr< logger > daily_logger_st(const std::string &logger_name, const filename_t &filename, int hour=0, int minute=0, bool truncate=false)
diff --git a/docs/dir_0c3a0641627b76fd80f03d211e44dc98.html b/docs/dir_0c3a0641627b76fd80f03d211e44dc98.html index b7d3b4e..d597f3c 100644 --- a/docs/dir_0c3a0641627b76fd80f03d211e44dc98.html +++ b/docs/dir_0c3a0641627b76fd80f03d211e44dc98.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: sdk_core/include/third_party/spdlog/spdlog/fmt Directory Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,40 @@ - + - - - - + +
@@ -114,7 +132,7 @@ Files + doxygen 1.8.11
diff --git a/docs/dir_0edbe3cf21aa1980d331aee71a413a85.html b/docs/dir_0edbe3cf21aa1980d331aee71a413a85.html index e7c8aba..44bfd67 100644 --- a/docs/dir_0edbe3cf21aa1980d331aee71a413a85.html +++ b/docs/dir_0edbe3cf21aa1980d331aee71a413a85.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: sdk_core/include/third_party/FastCRC Directory Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,40 @@ - + - - - - + +
@@ -105,7 +123,7 @@ Files + doxygen 1.8.11
diff --git a/docs/dir_148a221396087d65c55fa0ea541856de.html b/docs/dir_148a221396087d65c55fa0ea541856de.html index 7f8d839..060a5d0 100644 --- a/docs/dir_148a221396087d65c55fa0ea541856de.html +++ b/docs/dir_148a221396087d65c55fa0ea541856de.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: sdk_core/include/third_party/spdlog/spdlog/fmt/bundled Directory Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,40 @@ - + - - - - + +
@@ -125,7 +143,7 @@ Files + doxygen 1.8.11
diff --git a/docs/dir_239a77e39c0fcb2f1e08881bb007ba07.html b/docs/dir_239a77e39c0fcb2f1e08881bb007ba07.html index 82dcb82..18fd30c 100644 --- a/docs/dir_239a77e39c0fcb2f1e08881bb007ba07.html +++ b/docs/dir_239a77e39c0fcb2f1e08881bb007ba07.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: sdk_core/include/comm Directory Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,40 @@ - + - - - - + +
@@ -107,7 +125,7 @@ Files + doxygen 1.8.11
diff --git a/docs/dir_248a80cf6760c7a1ab13394a1c16f7b2.html b/docs/dir_248a80cf6760c7a1ab13394a1c16f7b2.html index 800a87c..cf56bc2 100644 --- a/docs/dir_248a80cf6760c7a1ab13394a1c16f7b2.html +++ b/docs/dir_248a80cf6760c7a1ab13394a1c16f7b2.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: sdk_core/include/third_party/spdlog/spdlog Directory Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,40 @@ - + - - - - + +
@@ -128,7 +146,7 @@ Files + doxygen 1.8.11
diff --git a/docs/dir_5f1136fe404e0a548faf586fae339a6a.html b/docs/dir_5f1136fe404e0a548faf586fae339a6a.html index 89e9c0b..d65a2b1 100644 --- a/docs/dir_5f1136fe404e0a548faf586fae339a6a.html +++ b/docs/dir_5f1136fe404e0a548faf586fae339a6a.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: sdk_core Directory Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,40 @@ - + - - - - + +
@@ -105,7 +123,7 @@ Directories + doxygen 1.8.11
diff --git a/docs/dir_7bb3e31efd6b819bbb0704cee4a66d41.html b/docs/dir_7bb3e31efd6b819bbb0704cee4a66d41.html index 6d2d26f..9fe2094 100644 --- a/docs/dir_7bb3e31efd6b819bbb0704cee4a66d41.html +++ b/docs/dir_7bb3e31efd6b819bbb0704cee4a66d41.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: sdk_core/include/third_party Directory Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,40 @@ - + - - - - + +
@@ -107,7 +125,7 @@ Directories + doxygen 1.8.11
diff --git a/docs/dir_7d093cd833acfccb787639923feedd9d.html b/docs/dir_7d093cd833acfccb787639923feedd9d.html index 224f48e..9c7dd4f 100644 --- a/docs/dir_7d093cd833acfccb787639923feedd9d.html +++ b/docs/dir_7d093cd833acfccb787639923feedd9d.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: sdk_core/include/third_party/spdlog/spdlog/details Directory Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,40 @@ - + - - - - + +
@@ -131,7 +149,7 @@ Files + doxygen 1.8.11
diff --git a/docs/dir_92a4bcc0ca1142b221c58a95a60bf3b6.html b/docs/dir_92a4bcc0ca1142b221c58a95a60bf3b6.html index 961f3f4..83885b7 100644 --- a/docs/dir_92a4bcc0ca1142b221c58a95a60bf3b6.html +++ b/docs/dir_92a4bcc0ca1142b221c58a95a60bf3b6.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: sdk_core/include/third_party/spdlog/spdlog/sinks Directory Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,40 @@ - + - - - - + +
@@ -133,7 +151,7 @@ Files + doxygen 1.8.11
diff --git a/docs/dir_cf58c3a45797022668a1e269b5315a33.html b/docs/dir_cf58c3a45797022668a1e269b5315a33.html index da5f478..5a54fc5 100644 --- a/docs/dir_cf58c3a45797022668a1e269b5315a33.html +++ b/docs/dir_cf58c3a45797022668a1e269b5315a33.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: sdk_core/include/third_party/spdlog Directory Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,40 @@ - + - - - - + +
@@ -105,7 +123,7 @@ Directories + doxygen 1.8.11
diff --git a/docs/dir_fef6b6f1028f30fedf17225feaaa02fe.html b/docs/dir_fef6b6f1028f30fedf17225feaaa02fe.html index 7429c33..fa0cd81 100644 --- a/docs/dir_fef6b6f1028f30fedf17225feaaa02fe.html +++ b/docs/dir_fef6b6f1028f30fedf17225feaaa02fe.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: sdk_core/include Directory Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,40 @@ - + - - - - + +
@@ -114,7 +132,7 @@ Files + doxygen 1.8.11
diff --git a/docs/dist__sink_8h.html b/docs/dist__sink_8h.html index 0f10305..03af7cb 100644 --- a/docs/dist__sink_8h.html +++ b/docs/dist__sink_8h.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: sdk_core/include/third_party/spdlog/spdlog/sinks/dist_sink.h File Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,40 @@ - + - - - - + +
@@ -133,7 +151,7 @@ Typedefs + doxygen 1.8.11
diff --git a/docs/dist__sink_8h_source.html b/docs/dist__sink_8h_source.html index 2dbd98d..17a83d1 100644 --- a/docs/dist__sink_8h_source.html +++ b/docs/dist__sink_8h_source.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: sdk_core/include/third_party/spdlog/spdlog/sinks/dist_sink.h Source File @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,40 @@ - + - - - - + +
@@ -91,135 +109,41 @@ $(document).ready(function(){initNavTree('dist__sink_8h_source.html','');});
dist_sink.h
-Go to the documentation of this file.
1 //
-
2 // Copyright (c) 2015 David Schury, Gabi Melman
-
3 // Distributed under the MIT License (http://opensource.org/licenses/MIT)
-
4 //
-
5 
-
6 #pragma once
-
7 
-
8 #ifndef SPDLOG_H
-
9 #include "spdlog/spdlog.h"
-
10 #endif
-
11 
-
12 #include "base_sink.h"
-
13 #include "spdlog/details/log_msg.h"
- -
15 
-
16 #include <algorithm>
-
17 #include <memory>
-
18 #include <mutex>
-
19 #include <vector>
-
20 
-
21 // Distribution sink (mux). Stores a vector of sinks which get called when log
-
22 // is called
-
23 
-
24 namespace spdlog {
-
25 namespace sinks {
-
26 
-
27 template<typename Mutex>
-
28 class dist_sink : public base_sink<Mutex>
-
29 {
-
30 public:
-
31  dist_sink() = default;
-
32  dist_sink(const dist_sink &) = delete;
-
33  dist_sink &operator=(const dist_sink &) = delete;
-
34 
-
35  void add_sink(std::shared_ptr<sink> sink)
-
36  {
-
37  std::lock_guard<Mutex> lock(base_sink<Mutex>::mutex_);
-
38  sinks_.push_back(sink);
-
39  }
-
40 
-
41  void remove_sink(std::shared_ptr<sink> sink)
-
42  {
-
43  std::lock_guard<Mutex> lock(base_sink<Mutex>::mutex_);
-
44  sinks_.erase(std::remove(sinks_.begin(), sinks_.end(), sink), sinks_.end());
-
45  }
-
46 
-
47  void set_sinks(std::vector<std::shared_ptr<sink>> sinks)
-
48  {
-
49  std::lock_guard<Mutex> lock(base_sink<Mutex>::mutex_);
-
50  sinks_ = std::move(sinks);
-
51  }
-
52 
-
53 protected:
-
54  void sink_it_(const details::log_msg &msg) override
-
55  {
-
56 
-
57  for (auto &sink : sinks_)
-
58  {
-
59  if (sink->should_log(msg.level))
-
60  {
-
61  sink->log(msg);
-
62  }
-
63  }
-
64  }
-
65 
-
66  void flush_() override
-
67  {
-
68  for (auto &sink : sinks_)
-
69  {
-
70  sink->flush();
-
71  }
-
72  }
-
73 
-
74  void set_pattern_(const std::string &pattern) override
-
75  {
-
76  set_formatter_(details::make_unique<spdlog::pattern_formatter>(pattern));
-
77  }
-
78 
-
79  void set_formatter_(std::unique_ptr<spdlog::formatter> sink_formatter) override
-
80  {
-
81  base_sink<Mutex>::formatter_ = std::move(sink_formatter);
-
82  for (auto &sink : sinks_)
-
83  {
- -
85  }
-
86  }
-
87  std::vector<std::shared_ptr<sink>> sinks_;
-
88 };
-
89 
- - -
92 
-
93 } // namespace sinks
-
94 } // namespace spdlog
+Go to the documentation of this file.
1 //
2 // Copyright (c) 2015 David Schury, Gabi Melman
3 // Distributed under the MIT License (http://opensource.org/licenses/MIT)
4 //
5 
6 #pragma once
7 
8 #ifndef SPDLOG_H
9 #include "spdlog/spdlog.h"
10 #endif
11 
12 #include "base_sink.h"
13 #include "spdlog/details/log_msg.h"
15 
16 #include <algorithm>
17 #include <memory>
18 #include <mutex>
19 #include <vector>
20 
21 // Distribution sink (mux). Stores a vector of sinks which get called when log
22 // is called
23 
24 namespace spdlog {
25 namespace sinks {
26 
27 template<typename Mutex>
28 class dist_sink : public base_sink<Mutex>
29 {
30 public:
31  dist_sink() = default;
32  dist_sink(const dist_sink &) = delete;
33  dist_sink &operator=(const dist_sink &) = delete;
34 
35  void add_sink(std::shared_ptr<sink> sink)
36  {
37  std::lock_guard<Mutex> lock(base_sink<Mutex>::mutex_);
38  sinks_.push_back(sink);
39  }
40 
41  void remove_sink(std::shared_ptr<sink> sink)
42  {
43  std::lock_guard<Mutex> lock(base_sink<Mutex>::mutex_);
44  sinks_.erase(std::remove(sinks_.begin(), sinks_.end(), sink), sinks_.end());
45  }
46 
47  void set_sinks(std::vector<std::shared_ptr<sink>> sinks)
48  {
49  std::lock_guard<Mutex> lock(base_sink<Mutex>::mutex_);
50  sinks_ = std::move(sinks);
51  }
52 
53 protected:
54  void sink_it_(const details::log_msg &msg) override
55  {
56 
57  for (auto &sink : sinks_)
58  {
59  if (sink->should_log(msg.level))
60  {
61  sink->log(msg);
62  }
63  }
64  }
65 
66  void flush_() override
67  {
68  for (auto &sink : sinks_)
69  {
70  sink->flush();
71  }
72  }
73 
74  void set_pattern_(const std::string &pattern) override
75  {
76  set_formatter_(details::make_unique<spdlog::pattern_formatter>(pattern));
77  }
78 
79  void set_formatter_(std::unique_ptr<spdlog::formatter> sink_formatter) override
80  {
81  base_sink<Mutex>::formatter_ = std::move(sink_formatter);
82  for (auto &sink : sinks_)
83  {
85  }
86  }
87  std::vector<std::shared_ptr<sink>> sinks_;
88 };
89 
92 
93 } // namespace sinks
94 } // namespace spdlog
bool should_log(level::level_enum msg_level) const
Definition: sink.h:30
+ +
void set_formatter_(std::unique_ptr< spdlog::formatter > sink_formatter) override
Definition: dist_sink.h:79
+ +
dist_sink & operator=(const dist_sink &)=delete
+
Definition: async.h:27
+
int remove(const filename_t &filename) noexcept
Definition: os.h:169
+
level::level_enum level
Definition: log_msg.h:42
+ + +
virtual void log(const details::log_msg &msg)=0
+
virtual void flush()=0
+
void add_sink(std::shared_ptr< sink > sink)
Definition: dist_sink.h:35
+ +
void sink_it_(const details::log_msg &msg) override
Definition: dist_sink.h:54
+ +
void flush_() override
Definition: dist_sink.h:66
+
void remove_sink(std::shared_ptr< sink > sink)
Definition: dist_sink.h:41
+ + + +
void set_pattern_(const std::string &pattern) override
Definition: dist_sink.h:74
+
std::vector< std::shared_ptr< sink > > sinks_
Definition: dist_sink.h:87
+
void set_sinks(std::vector< std::shared_ptr< sink >> sinks)
Definition: dist_sink.h:47
+ +
virtual void set_formatter(std::unique_ptr< spdlog::formatter > sink_formatter)=0
- -
int remove(const filename_t &filename) noexcept
Definition: os.h:169
- -
void set_formatter_(std::unique_ptr< spdlog::formatter > sink_formatter) override
Definition: dist_sink.h:79
-
dist_sink & operator=(const dist_sink &)=delete
- - -
void set_sinks(std::vector< std::shared_ptr< sink >> sinks)
Definition: dist_sink.h:47
-
void set_pattern_(const std::string &pattern) override
Definition: dist_sink.h:74
- -
virtual void flush()=0
-
std::vector< std::shared_ptr< sink > > sinks_
Definition: dist_sink.h:87
-
Definition: async.h:27
- - - -
virtual void log(const details::log_msg &msg)=0
-
void flush_() override
Definition: dist_sink.h:66
-
bool should_log(level::level_enum msg_level) const
Definition: sink.h:30
-
void remove_sink(std::shared_ptr< sink > sink)
Definition: dist_sink.h:41
-
level::level_enum level
Definition: log_msg.h:42
- -
void add_sink(std::shared_ptr< sink > sink)
Definition: dist_sink.h:35
-
void sink_it_(const details::log_msg &msg) override
Definition: dist_sink.h:54
-
virtual void set_formatter(std::unique_ptr< spdlog::formatter > sink_formatter)=0
- diff --git a/docs/doxygen.css b/docs/doxygen.css index 5bc13aa..1425ec5 100644 --- a/docs/doxygen.css +++ b/docs/doxygen.css @@ -1,13 +1,9 @@ -/* The standard CSS for doxygen 1.8.16 */ +/* The standard CSS for doxygen 1.8.11 */ body, table, div, p, dl { font: 400 14px/22px Roboto,sans-serif; } -p.reference, p.definition { - font: 400 14px/22px Roboto,sans-serif; -} - /* @group Heading Levels */ h1.groupheader { @@ -53,13 +49,11 @@ dt { font-weight: bold; } -ul.multicol { +div.multicol { -moz-column-gap: 1em; -webkit-column-gap: 1em; - column-gap: 1em; -moz-column-count: 3; -webkit-column-count: 3; - column-count: 3; } p.startli, p.startdd { @@ -82,15 +76,6 @@ p.endtd { margin-bottom: 2px; } -p.interli { -} - -p.interdd { -} - -p.intertd { -} - /* @end */ caption { @@ -145,12 +130,12 @@ a.qindex { a.qindexHL { font-weight: bold; background-color: #9CAFD4; - color: #FFFFFF; + color: #ffffff; border: 1px double #869DCA; } .contents a.qindexHL:visited { - color: #FFFFFF; + color: #ffffff; } a.el { @@ -174,25 +159,6 @@ dl.el { margin-left: -1cm; } -ul { - overflow: hidden; /*Fixed: list item bullets overlap floating elements*/ -} - -#side-nav ul { - overflow: visible; /* reset ul rule for scroll bar in GENERATE_TREEVIEW window */ -} - -#main-nav ul { - overflow: visible; /* reset ul rule for the navigation bar drop down lists */ -} - -.fragment { - text-align: left; - direction: ltr; - overflow-x: auto; /*Fixed: fragment lines overlap floating elements*/ - overflow-y: hidden; -} - pre.fragment { border: 1px solid #C4CFE5; background-color: #FBFCFD; @@ -207,8 +173,8 @@ pre.fragment { } div.fragment { - padding: 0 0 1px 0; /*Fixed: last line underline overlap border*/ - margin: 4px 8px 4px 2px; + padding: 4px 6px; + margin: 4px 8px 4px 2px; background-color: #FBFCFD; border: 1px solid #C4CFE5; } @@ -266,19 +232,10 @@ span.lineno a:hover { background-color: #C8C8C8; } -.lineno { - -webkit-touch-callout: none; - -webkit-user-select: none; - -khtml-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} - div.ah, span.ah { background-color: black; font-weight: bold; - color: #FFFFFF; + color: #ffffff; margin-bottom: 3px; margin-top: 3px; padding: 0.2em; @@ -354,7 +311,7 @@ img.formulaDsp { } -img.formulaInl, img.inline { +img.formulaInl { vertical-align: middle; } @@ -432,13 +389,6 @@ blockquote { padding: 0 12px 0 16px; } -blockquote.DocNodeRTL { - border-left: 0; - border-right: 2px solid #9CAFD4; - margin: 0 4px 0 24px; - padding: 0 16px 0 12px; -} - /* @end */ /* @@ -551,29 +501,6 @@ table.memberdecls { /* Styles for detailed member documentation */ -.memtitle { - padding: 8px; - border-top: 1px solid #A8B8D9; - border-left: 1px solid #A8B8D9; - border-right: 1px solid #A8B8D9; - border-top-right-radius: 4px; - border-top-left-radius: 4px; - margin-bottom: -1px; - background-image: url('nav_f.png'); - background-repeat: repeat-x; - background-color: #E2E8F2; - line-height: 1.25; - font-weight: 300; - float:left; -} - -.permalink -{ - font-size: 65%; - display: inline-block; - vertical-align: middle; -} - .memtemplate { font-size: 80%; color: #4665A2; @@ -612,7 +539,7 @@ table.memberdecls { } .memname { - font-weight: 400; + font-weight: bold; margin-left: 6px; } @@ -628,24 +555,24 @@ table.memberdecls { color: #253555; font-weight: bold; text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); - background-color: #DFE5F1; + background-image:url('nav_f.png'); + background-repeat:repeat-x; + background-color: #E2E8F2; /* opera specific markup */ box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); border-top-right-radius: 4px; + border-top-left-radius: 4px; /* firefox specific markup */ -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; -moz-border-radius-topright: 4px; + -moz-border-radius-topleft: 4px; /* webkit specific markup */ -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); -webkit-border-top-right-radius: 4px; + -webkit-border-top-left-radius: 4px; } -.overload { - font-family: "courier new",courier,monospace; - font-size: 65%; -} - .memdoc, dl.reflist dd { border-bottom: 1px solid #A8B8D9; border-left: 1px solid #A8B8D9; @@ -703,17 +630,17 @@ dl.reflist dd { padding-left: 0px; } -.params .paramname, .retval .paramname, .tparams .paramname, .exception .paramname { +.params .paramname, .retval .paramname { font-weight: bold; vertical-align: top; } -.params .paramtype, .tparams .paramtype { +.params .paramtype { font-style: italic; vertical-align: top; } -.params .paramdir, .tparams .paramdir { +.params .paramdir { font-family: "courier new",courier,monospace; vertical-align: top; } @@ -987,7 +914,6 @@ table.fieldtable { padding-bottom: 4px; padding-top: 5px; text-align:left; - font-weight: 400; -moz-border-radius-topleft: 4px; -moz-border-radius-topright: 4px; -webkit-border-top-left-radius: 4px; @@ -1118,143 +1044,72 @@ div.headertitle padding: 5px 5px 5px 10px; } -.PageDocRTL-title div.headertitle { - text-align: right; - direction: rtl; +dl +{ + padding: 0 0 0 10px; } -dl { - padding: 0 0 0 0; -} - -/* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug, dl.examples */ -dl.section { +/* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug */ +dl.section +{ margin-left: 0px; padding-left: 0px; } -dl.section.DocNodeRTL { - margin-right: 0px; - padding-right: 0px; +dl.note +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #D0C000; } -dl.note { - margin-left: -7px; - padding-left: 3px; - border-left: 4px solid; - border-color: #D0C000; +dl.warning, dl.attention +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #FF0000; } -dl.note.DocNodeRTL { - margin-left: 0; - padding-left: 0; - border-left: 0; - margin-right: -7px; - padding-right: 3px; - border-right: 4px solid; - border-color: #D0C000; +dl.pre, dl.post, dl.invariant +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #00D000; } -dl.warning, dl.attention { - margin-left: -7px; - padding-left: 3px; - border-left: 4px solid; - border-color: #FF0000; +dl.deprecated +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #505050; } -dl.warning.DocNodeRTL, dl.attention.DocNodeRTL { - margin-left: 0; - padding-left: 0; - border-left: 0; - margin-right: -7px; - padding-right: 3px; - border-right: 4px solid; - border-color: #FF0000; +dl.todo +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #00C0E0; } -dl.pre, dl.post, dl.invariant { - margin-left: -7px; - padding-left: 3px; - border-left: 4px solid; - border-color: #00D000; +dl.test +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #3030E0; } -dl.pre.DocNodeRTL, dl.post.DocNodeRTL, dl.invariant.DocNodeRTL { - margin-left: 0; - padding-left: 0; - border-left: 0; - margin-right: -7px; - padding-right: 3px; - border-right: 4px solid; - border-color: #00D000; -} - -dl.deprecated { - margin-left: -7px; - padding-left: 3px; - border-left: 4px solid; - border-color: #505050; -} - -dl.deprecated.DocNodeRTL { - margin-left: 0; - padding-left: 0; - border-left: 0; - margin-right: -7px; - padding-right: 3px; - border-right: 4px solid; - border-color: #505050; -} - -dl.todo { - margin-left: -7px; - padding-left: 3px; - border-left: 4px solid; - border-color: #00C0E0; -} - -dl.todo.DocNodeRTL { - margin-left: 0; - padding-left: 0; - border-left: 0; - margin-right: -7px; - padding-right: 3px; - border-right: 4px solid; - border-color: #00C0E0; -} - -dl.test { - margin-left: -7px; - padding-left: 3px; - border-left: 4px solid; - border-color: #3030E0; -} - -dl.test.DocNodeRTL { - margin-left: 0; - padding-left: 0; - border-left: 0; - margin-right: -7px; - padding-right: 3px; - border-right: 4px solid; - border-color: #3030E0; -} - -dl.bug { - margin-left: -7px; - padding-left: 3px; - border-left: 4px solid; - border-color: #C08050; -} - -dl.bug.DocNodeRTL { - margin-left: 0; - padding-left: 0; - border-left: 0; - margin-right: -7px; - padding-right: 3px; - border-right: 4px solid; - border-color: #C08050; +dl.bug +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #C08050; } dl.section dd { @@ -1323,11 +1178,6 @@ dl.section dd { text-align: center; } -.plantumlgraph -{ - text-align: center; -} - .diagraph { text-align: center; @@ -1371,11 +1221,6 @@ div.toc { width: 200px; } -.PageDocRTL-title div.toc { - float: left !important; - text-align: right; -} - div.toc li { background: url("bdwn.png") no-repeat scroll 0 5px transparent; font: 10px/1.2 Verdana,DejaVu Sans,Geneva,sans-serif; @@ -1384,12 +1229,6 @@ div.toc li { padding-top: 2px; } -.PageDocRTL-title div.toc li { - background-position-x: right !important; - padding-left: 0 !important; - padding-right: 10px; -} - div.toc h3 { font: bold 12px/1.2 Arial,FreeSans,sans-serif; color: #4665A2; @@ -1419,26 +1258,6 @@ div.toc li.level4 { margin-left: 45px; } -.PageDocRTL-title div.toc li.level1 { - margin-left: 0 !important; - margin-right: 0; -} - -.PageDocRTL-title div.toc li.level2 { - margin-left: 0 !important; - margin-right: 15px; -} - -.PageDocRTL-title div.toc li.level3 { - margin-left: 0 !important; - margin-right: 30px; -} - -.PageDocRTL-title div.toc li.level4 { - margin-left: 0 !important; - margin-right: 45px; -} - .inherit_header { font-weight: bold; color: gray; @@ -1552,7 +1371,7 @@ tr.heading h2 { } #powerTip.n:after, #powerTip.ne:after, #powerTip.nw:after { - border-top-color: #FFFFFF; + border-top-color: #ffffff; border-width: 10px; margin: 0px -10px; } @@ -1580,7 +1399,7 @@ tr.heading h2 { } #powerTip.s:after, #powerTip.se:after, #powerTip.sw:after { - border-bottom-color: #FFFFFF; + border-bottom-color: #ffffff; border-width: 10px; margin: 0px -10px; } @@ -1607,7 +1426,7 @@ tr.heading h2 { left: 100%; } #powerTip.e:after { - border-left-color: #FFFFFF; + border-left-color: #ffffff; border-width: 10px; top: 50%; margin-top: -10px; @@ -1623,7 +1442,7 @@ tr.heading h2 { right: 100%; } #powerTip.w:after { - border-right-color: #FFFFFF; + border-right-color: #ffffff; border-width: 10px; top: 50%; margin-top: -10px; @@ -1654,113 +1473,3 @@ tr.heading h2 { } } -/* @group Markdown */ - -/* -table.markdownTable { - border-collapse:collapse; - margin-top: 4px; - margin-bottom: 4px; -} - -table.markdownTable td, table.markdownTable th { - border: 1px solid #2D4068; - padding: 3px 7px 2px; -} - -table.markdownTableHead tr { -} - -table.markdownTableBodyLeft td, table.markdownTable th { - border: 1px solid #2D4068; - padding: 3px 7px 2px; -} - -th.markdownTableHeadLeft th.markdownTableHeadRight th.markdownTableHeadCenter th.markdownTableHeadNone { - background-color: #374F7F; - color: #FFFFFF; - font-size: 110%; - padding-bottom: 4px; - padding-top: 5px; -} - -th.markdownTableHeadLeft { - text-align: left -} - -th.markdownTableHeadRight { - text-align: right -} - -th.markdownTableHeadCenter { - text-align: center -} -*/ - -table.markdownTable { - border-collapse:collapse; - margin-top: 4px; - margin-bottom: 4px; -} - -table.markdownTable td, table.markdownTable th { - border: 1px solid #2D4068; - padding: 3px 7px 2px; -} - -table.markdownTable tr { -} - -th.markdownTableHeadLeft, th.markdownTableHeadRight, th.markdownTableHeadCenter, th.markdownTableHeadNone { - background-color: #374F7F; - color: #FFFFFF; - font-size: 110%; - padding-bottom: 4px; - padding-top: 5px; -} - -th.markdownTableHeadLeft, td.markdownTableBodyLeft { - text-align: left -} - -th.markdownTableHeadRight, td.markdownTableBodyRight { - text-align: right -} - -th.markdownTableHeadCenter, td.markdownTableBodyCenter { - text-align: center -} - -.DocNodeRTL { - text-align: right; - direction: rtl; -} - -.DocNodeLTR { - text-align: left; - direction: ltr; -} - -table.DocNodeRTL { - width: auto; - margin-right: 0; - margin-left: auto; -} - -table.DocNodeLTR { - width: auto; - margin-right: auto; - margin-left: 0; -} - -tt, code, kbd, samp -{ - display: inline-block; - direction:ltr; -} -/* @end */ - -u { - text-decoration: underline; -} - diff --git a/docs/dynsections.js b/docs/dynsections.js index c8e84aa..1e6bf07 100644 --- a/docs/dynsections.js +++ b/docs/dynsections.js @@ -1,26 +1,3 @@ -/* - @licstart The following is the entire license notice for the - JavaScript code in this file. - - Copyright (C) 1997-2017 by Dimitri van Heesch - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along - with this program; if not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - - @licend The above is the entire license notice - for the JavaScript code in this file - */ function toggleVisibility(linkObj) { var base = $(linkObj).attr('id'); @@ -38,7 +15,7 @@ function toggleVisibility(linkObj) summary.hide(); $(linkObj).removeClass('closed').addClass('opened'); $(trigger).attr('src',src.substring(0,src.length-10)+'open.png'); - } + } return false; } @@ -117,11 +94,11 @@ function toggleInherit(id) $(img).attr('src',src.substring(0,src.length-10)+'open.png'); } } -/* @license-end */ + $(document).ready(function() { $('.code,.codeRef').each(function() { - $(this).data('powertip',$('#a'+$(this).attr('href').replace(/.*\//,'').replace(/[^a-z_A-Z0-9]/g,'_')).html()); + $(this).data('powertip',$('#'+$(this).attr('href').replace(/.*\//,'').replace(/[^a-z_A-Z0-9]/g,'_')).html()); $(this).powerTip({ placement: 's', smartPlacement: true, mouseOnToPopup: true }); }); }); diff --git a/docs/file__helper_8h.html b/docs/file__helper_8h.html index a0bd363..e18f272 100644 --- a/docs/file__helper_8h.html +++ b/docs/file__helper_8h.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: sdk_core/include/third_party/spdlog/spdlog/details/file_helper.h File Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,40 @@ - + - - - - + +
@@ -125,7 +143,7 @@ Namespaces + doxygen 1.8.11
diff --git a/docs/file__helper_8h_source.html b/docs/file__helper_8h_source.html index 7d4566c..487e87d 100644 --- a/docs/file__helper_8h_source.html +++ b/docs/file__helper_8h_source.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: sdk_core/include/third_party/spdlog/spdlog/details/file_helper.h Source File @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,40 @@ - + - - - - + +
@@ -91,198 +109,46 @@ $(document).ready(function(){initNavTree('file__helper_8h_source.html','');});
file_helper.h
-Go to the documentation of this file.
1 //
-
2 // Copyright(c) 2015 Gabi Melman.
-
3 // Distributed under the MIT License (http://opensource.org/licenses/MIT)
-
4 //
-
5 
-
6 #pragma once
-
7 
-
8 // Helper class for file sinks.
-
9 // When failing to open a file, retry several times(5) with a delay interval(10 ms).
-
10 // Throw spdlog_ex exception on errors.
-
11 
-
12 #include "spdlog/details/log_msg.h"
-
13 #include "spdlog/details/os.h"
-
14 
-
15 #include <cerrno>
-
16 #include <chrono>
-
17 #include <cstdio>
-
18 #include <string>
-
19 #include <thread>
-
20 #include <tuple>
-
21 
-
22 namespace spdlog {
-
23 namespace details {
-
24 
- -
26 {
-
27 
-
28 public:
-
29  const int open_tries = 5;
-
30  const int open_interval = 10;
-
31 
-
32  explicit file_helper() = default;
-
33 
-
34  file_helper(const file_helper &) = delete;
-
35  file_helper &operator=(const file_helper &) = delete;
-
36 
- -
38  {
-
39  close();
-
40  }
-
41 
-
42  void open(const filename_t &fname, bool truncate = false)
-
43  {
-
44  close();
-
45  auto *mode = truncate ? SPDLOG_FILENAME_T("wb") : SPDLOG_FILENAME_T("ab");
-
46  _filename = fname;
-
47  for (int tries = 0; tries < open_tries; ++tries)
-
48  {
-
49  if (!os::fopen_s(&fd_, fname, mode))
-
50  {
-
51  return;
-
52  }
-
53 
- -
55  }
-
56 
-
57  throw spdlog_ex("Failed opening file " + os::filename_to_str(_filename) + " for writing", errno);
-
58  }
-
59 
-
60  void reopen(bool truncate)
-
61  {
-
62  if (_filename.empty())
-
63  {
-
64  throw spdlog_ex("Failed re opening file - was not opened before");
-
65  }
-
66  open(_filename, truncate);
-
67  }
-
68 
-
69  void flush()
-
70  {
-
71  std::fflush(fd_);
-
72  }
-
73 
-
74  void close()
-
75  {
-
76  if (fd_ != nullptr)
-
77  {
-
78  std::fclose(fd_);
-
79  fd_ = nullptr;
-
80  }
-
81  }
-
82 
-
83  void write(const fmt::memory_buffer &buf)
-
84  {
-
85  size_t msg_size = buf.size();
-
86  auto data = buf.data();
-
87  if (std::fwrite(data, 1, msg_size, fd_) != msg_size)
-
88  {
-
89  throw spdlog_ex("Failed writing to file " + os::filename_to_str(_filename), errno);
-
90  }
-
91  }
-
92 
-
93  size_t size() const
-
94  {
-
95  if (fd_ == nullptr)
-
96  {
-
97  throw spdlog_ex("Cannot use size() on closed file " + os::filename_to_str(_filename));
-
98  }
-
99  return os::filesize(fd_);
-
100  }
-
101 
-
102  const filename_t &filename() const
-
103  {
-
104  return _filename;
-
105  }
-
106 
-
107  static bool file_exists(const filename_t &fname)
-
108  {
-
109  return os::file_exists(fname);
-
110  }
-
111 
-
112  //
-
113  // return file path and its extension:
-
114  //
-
115  // "mylog.txt" => ("mylog", ".txt")
-
116  // "mylog" => ("mylog", "")
-
117  // "mylog." => ("mylog.", "")
-
118  // "/dir1/dir2/mylog.txt" => ("/dir1/dir2/mylog", ".txt")
-
119  //
-
120  // the starting dot in filenames is ignored (hidden files):
-
121  //
-
122  // ".mylog" => (".mylog". "")
-
123  // "my_folder/.mylog" => ("my_folder/.mylog", "")
-
124  // "my_folder/.mylog.txt" => ("my_folder/.mylog", ".txt")
-
125  static std::tuple<filename_t, filename_t> split_by_extension(const spdlog::filename_t &fname)
-
126  {
-
127  auto ext_index = fname.rfind('.');
-
128 
-
129  // no valid extension found - return whole path and empty string as
-
130  // extension
-
131  if (ext_index == filename_t::npos || ext_index == 0 || ext_index == fname.size() - 1)
-
132  {
-
133  return std::make_tuple(fname, spdlog::filename_t());
-
134  }
-
135 
-
136  // treat casese like "/etc/rc.d/somelogfile or "/abc/.hiddenfile"
-
137  auto folder_index = fname.rfind(details::os::folder_sep);
-
138  if (folder_index != filename_t::npos && folder_index >= ext_index - 1)
-
139  {
-
140  return std::make_tuple(fname, spdlog::filename_t());
-
141  }
-
142 
-
143  // finally - return a valid base and extension tuple
-
144  return std::make_tuple(fname.substr(0, ext_index), fname.substr(ext_index));
-
145  }
-
146 
-
147 private:
-
148  std::FILE *fd_{nullptr};
-
149  filename_t _filename;
-
150 };
-
151 } // namespace details
-
152 } // namespace spdlog
+Go to the documentation of this file.
1 //
2 // Copyright(c) 2015 Gabi Melman.
3 // Distributed under the MIT License (http://opensource.org/licenses/MIT)
4 //
5 
6 #pragma once
7 
8 // Helper class for file sinks.
9 // When failing to open a file, retry several times(5) with a delay interval(10 ms).
10 // Throw spdlog_ex exception on errors.
11 
12 #include "spdlog/details/log_msg.h"
13 #include "spdlog/details/os.h"
14 
15 #include <cerrno>
16 #include <chrono>
17 #include <cstdio>
18 #include <string>
19 #include <thread>
20 #include <tuple>
21 
22 namespace spdlog {
23 namespace details {
24 
26 {
27 
28 public:
29  const int open_tries = 5;
30  const int open_interval = 10;
31 
32  explicit file_helper() = default;
33 
34  file_helper(const file_helper &) = delete;
35  file_helper &operator=(const file_helper &) = delete;
36 
38  {
39  close();
40  }
41 
42  void open(const filename_t &fname, bool truncate = false)
43  {
44  close();
45  auto *mode = truncate ? SPDLOG_FILENAME_T("wb") : SPDLOG_FILENAME_T("ab");
46  _filename = fname;
47  for (int tries = 0; tries < open_tries; ++tries)
48  {
49  if (!os::fopen_s(&fd_, fname, mode))
50  {
51  return;
52  }
53 
54  details::os::sleep_for_millis(open_interval);
55  }
56 
57  throw spdlog_ex("Failed opening file " + os::filename_to_str(_filename) + " for writing", errno);
58  }
59 
60  void reopen(bool truncate)
61  {
62  if (_filename.empty())
63  {
64  throw spdlog_ex("Failed re opening file - was not opened before");
65  }
66  open(_filename, truncate);
67  }
68 
69  void flush()
70  {
71  std::fflush(fd_);
72  }
73 
74  void close()
75  {
76  if (fd_ != nullptr)
77  {
78  std::fclose(fd_);
79  fd_ = nullptr;
80  }
81  }
82 
83  void write(const fmt::memory_buffer &buf)
84  {
85  size_t msg_size = buf.size();
86  auto data = buf.data();
87  if (std::fwrite(data, 1, msg_size, fd_) != msg_size)
88  {
89  throw spdlog_ex("Failed writing to file " + os::filename_to_str(_filename), errno);
90  }
91  }
92 
93  size_t size() const
94  {
95  if (fd_ == nullptr)
96  {
97  throw spdlog_ex("Cannot use size() on closed file " + os::filename_to_str(_filename));
98  }
99  return os::filesize(fd_);
100  }
101 
102  const filename_t &filename() const
103  {
104  return _filename;
105  }
106 
107  static bool file_exists(const filename_t &fname)
108  {
109  return os::file_exists(fname);
110  }
111 
112  //
113  // return file path and its extension:
114  //
115  // "mylog.txt" => ("mylog", ".txt")
116  // "mylog" => ("mylog", "")
117  // "mylog." => ("mylog.", "")
118  // "/dir1/dir2/mylog.txt" => ("/dir1/dir2/mylog", ".txt")
119  //
120  // the starting dot in filenames is ignored (hidden files):
121  //
122  // ".mylog" => (".mylog". "")
123  // "my_folder/.mylog" => ("my_folder/.mylog", "")
124  // "my_folder/.mylog.txt" => ("my_folder/.mylog", ".txt")
125  static std::tuple<filename_t, filename_t> split_by_extension(const spdlog::filename_t &fname)
126  {
127  auto ext_index = fname.rfind('.');
128 
129  // no valid extension found - return whole path and empty string as
130  // extension
131  if (ext_index == filename_t::npos || ext_index == 0 || ext_index == fname.size() - 1)
132  {
133  return std::make_tuple(fname, spdlog::filename_t());
134  }
135 
136  // treat casese like "/etc/rc.d/somelogfile or "/abc/.hiddenfile"
137  auto folder_index = fname.rfind(details::os::folder_sep);
138  if (folder_index != filename_t::npos && folder_index >= ext_index - 1)
139  {
140  return std::make_tuple(fname, spdlog::filename_t());
141  }
142 
143  // finally - return a valid base and extension tuple
144  return std::make_tuple(fname.substr(0, ext_index), fname.substr(ext_index));
145  }
146 
147 private:
148  std::FILE *fd_{nullptr};
149  filename_t _filename;
150 };
151 } // namespace details
152 } // namespace spdlog
+ + +
void sleep_for_millis(int milliseconds) noexcept
Definition: os.h:351
+ +
void open(const filename_t &fname, bool truncate=false)
Definition: file_helper.h:42
+ +
size_t filesize(FILE *f)
Definition: os.h:204
+
void reopen(bool truncate)
Definition: file_helper.h:60
+
std::size_t size() const
Definition: core.h:250
+ +
Definition: async.h:27
+
static std::tuple< filename_t, filename_t > split_by_extension(const spdlog::filename_t &fname)
Definition: file_helper.h:125
+
void write(const fmt::memory_buffer &buf)
Definition: file_helper.h:83
+
bool fopen_s(FILE **fp, const filename_t &filename, const filename_t &mode)
Definition: os.h:148
+
basic_data data
Definition: format.h:764
+
std::string filename_t
Definition: common.h:205
+
const filename_t & filename() const
Definition: file_helper.h:102
+ +
file_helper & operator=(const file_helper &)=delete
+ + + + +
static bool file_exists(const filename_t &fname)
Definition: file_helper.h:107
+
#define SPDLOG_FILENAME_T(s)
Definition: os.h:369
+
bool file_exists(const filename_t &filename) noexcept
Definition: os.h:188
+ +
static constexpr const char folder_sep
Definition: os.h:126
+
std::string filename_to_str(const filename_t &filename)
Definition: os.h:370
+
- - -
basic_data data
Definition: format.h:764
- -
bool fopen_s(FILE **fp, const filename_t &filename, const filename_t &mode)
Definition: os.h:148
-
void sleep_for_millis(int milliseconds) noexcept
Definition: os.h:351
-
const filename_t & filename() const
Definition: file_helper.h:102
-
std::size_t size() const
Definition: core.h:250
-
file_helper & operator=(const file_helper &)=delete
-
void reopen(bool truncate)
Definition: file_helper.h:60
- -
void open(const filename_t &fname, bool truncate=false)
Definition: file_helper.h:42
- -
std::string filename_to_str(const filename_t &filename)
Definition: os.h:370
- - -
size_t filesize(FILE *f)
Definition: os.h:204
-
Definition: async.h:27
-
bool file_exists(const filename_t &filename) noexcept
Definition: os.h:188
-
static std::tuple< filename_t, filename_t > split_by_extension(const spdlog::filename_t &fname)
Definition: file_helper.h:125
-
#define SPDLOG_FILENAME_T(s)
Definition: os.h:369
- - -
void write(const fmt::memory_buffer &buf)
Definition: file_helper.h:83
- - - -
static bool file_exists(const filename_t &fname)
Definition: file_helper.h:107
-
std::string filename_t
Definition: common.h:205
- -
constexpr static const char folder_sep
Definition: os.h:126
diff --git a/docs/files.html b/docs/files.html index 9d41bc8..fa9656d 100644 --- a/docs/files.html +++ b/docs/files.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: File List @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,40 @@ - + - - - - + +
@@ -169,7 +187,7 @@ $(document).ready(function(){initNavTree('files.html','');});
    + doxygen 1.8.11
diff --git a/docs/files.js b/docs/files.js new file mode 100644 index 0000000..8fd9407 --- /dev/null +++ b/docs/files.js @@ -0,0 +1,4 @@ +var files = +[ + [ "sdk_core", "dir_5f1136fe404e0a548faf586fae339a6a.html", "dir_5f1136fe404e0a548faf586fae339a6a" ] +]; \ No newline at end of file diff --git a/docs/fmt_8h.html b/docs/fmt_8h.html index 2004083..9bd08d8 100644 --- a/docs/fmt_8h.html +++ b/docs/fmt_8h.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: sdk_core/include/third_party/spdlog/spdlog/fmt/fmt.h File Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,40 @@ - + - - - - + +
@@ -106,9 +124,7 @@ Macros  

Macro Definition Documentation

- -

◆ FMT_HEADER_ONLY

- +
@@ -118,13 +134,11 @@ Macros
-

Definition at line 15 of file fmt.h.

+

Definition at line 15 of file fmt.h.

- -

◆ FMT_USE_WINDOWS_H

- +
@@ -134,7 +148,7 @@ Macros
-

Definition at line 18 of file fmt.h.

+

Definition at line 18 of file fmt.h.

@@ -146,7 +160,7 @@ Macros + doxygen 1.8.11
diff --git a/docs/fmt_8h_source.html b/docs/fmt_8h_source.html index 1bbf93b..4d80fdd 100644 --- a/docs/fmt_8h_source.html +++ b/docs/fmt_8h_source.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: sdk_core/include/third_party/spdlog/spdlog/fmt/fmt.h Source File @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,40 @@ - + - - - - + +
@@ -91,42 +109,17 @@ $(document).ready(function(){initNavTree('fmt_8h_source.html','');});
fmt.h
-Go to the documentation of this file.
1 //
-
2 // Copyright(c) 2016-2018 Gabi Melman.
-
3 // Distributed under the MIT License (http://opensource.org/licenses/MIT)
-
4 //
-
5 
-
6 #pragma once
-
7 
-
8 //
-
9 // Include a bundled header-only copy of fmtlib or an external one.
-
10 // By default spdlog include its own copy.
-
11 //
-
12 
-
13 #if !defined(SPDLOG_FMT_EXTERNAL)
-
14 #ifndef FMT_HEADER_ONLY
-
15 #define FMT_HEADER_ONLY
-
16 #endif
-
17 #ifndef FMT_USE_WINDOWS_H
-
18 #define FMT_USE_WINDOWS_H 0
-
19 #endif
-
20 #include "bundled/core.h"
-
21 #include "bundled/format.h"
-
22 #else // external fmtlib
-
23 #include <fmt/core.h>
-
24 #include <fmt/format.h>
-
25 #endif
+Go to the documentation of this file.
1 //
2 // Copyright(c) 2016-2018 Gabi Melman.
3 // Distributed under the MIT License (http://opensource.org/licenses/MIT)
4 //
5 
6 #pragma once
7 
8 //
9 // Include a bundled header-only copy of fmtlib or an external one.
10 // By default spdlog include its own copy.
11 //
12 
13 #if !defined(SPDLOG_FMT_EXTERNAL)
14 #ifndef FMT_HEADER_ONLY
15 #define FMT_HEADER_ONLY
16 #endif
17 #ifndef FMT_USE_WINDOWS_H
18 #define FMT_USE_WINDOWS_H 0
19 #endif
20 #include "bundled/core.h"
21 #include "bundled/format.h"
22 #else // external fmtlib
23 #include <fmt/core.h>
24 #include <fmt/format.h>
25 #endif
+
- - diff --git a/docs/fmt__helper_8h.html b/docs/fmt__helper_8h.html index 7deb55d..4bb7c5e 100644 --- a/docs/fmt__helper_8h.html +++ b/docs/fmt__helper_8h.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: sdk_core/include/third_party/spdlog/spdlog/details/fmt_helper.h File Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,40 @@ - + - - - - + +
@@ -153,7 +171,7 @@ Functions + doxygen 1.8.11
diff --git a/docs/fmt__helper_8h_source.html b/docs/fmt__helper_8h_source.html index a84eb29..50f6085 100644 --- a/docs/fmt__helper_8h_source.html +++ b/docs/fmt__helper_8h_source.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: sdk_core/include/third_party/spdlog/spdlog/details/fmt_helper.h Source File @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,40 @@ - + - - - - + +
@@ -91,165 +109,43 @@ $(document).ready(function(){initNavTree('fmt__helper_8h_source.html','');});
fmt_helper.h
-Go to the documentation of this file.
1 //
-
2 // Created by gabi on 6/15/18.
-
3 //
-
4 
-
5 #pragma once
-
6 
-
7 #include <chrono>
-
8 #include <type_traits>
-
9 #include "spdlog/fmt/fmt.h"
-
10 
-
11 // Some fmt helpers to efficiently format and pad ints and strings
-
12 namespace spdlog {
-
13 namespace details {
-
14 namespace fmt_helper {
-
15 
-
16 template<size_t Buffer_Size>
- -
18 {
-
19  return spdlog::string_view_t(buf.data(), buf.size());
-
20 }
-
21 
-
22 template<size_t Buffer_Size1, size_t Buffer_Size2>
- -
24 {
-
25  auto *buf_ptr = buf.data();
-
26  dest.append(buf_ptr, buf_ptr + buf.size());
-
27 }
-
28 
-
29 template<size_t Buffer_Size>
- -
31 {
-
32  auto *buf_ptr = view.data();
-
33  if (buf_ptr != nullptr)
-
34  {
-
35  dest.append(buf_ptr, buf_ptr + view.size());
-
36  }
-
37 }
-
38 
-
39 template<typename T, size_t Buffer_Size>
- -
41 {
-
42  fmt::format_int i(n);
-
43  dest.append(i.data(), i.data() + i.size());
-
44 }
-
45 
-
46 template<typename T>
-
47 inline unsigned count_digits(T n)
-
48 {
-
49  using count_type = typename std::conditional<(sizeof(T) > sizeof(uint32_t)), uint64_t, uint32_t>::type;
-
50  return static_cast<unsigned>(fmt::internal::count_digits(static_cast<count_type>(n)));
-
51 }
-
52 
-
53 template<size_t Buffer_Size>
- -
55 {
-
56  if (n > 99)
-
57  {
-
58  append_int(n, dest);
-
59  }
-
60  else if (n > 9) // 10-99
-
61  {
-
62  dest.push_back(static_cast<char>('0' + n / 10));
-
63  dest.push_back(static_cast<char>('0' + n % 10));
-
64  }
-
65  else if (n >= 0) // 0-9
-
66  {
-
67  dest.push_back('0');
-
68  dest.push_back(static_cast<char>('0' + n));
-
69  }
-
70  else // negatives (unlikely, but just in case, let fmt deal with it)
-
71  {
-
72  fmt::format_to(dest, "{:02}", n);
-
73  }
-
74 }
-
75 
-
76 template<typename T, size_t Buffer_Size>
-
77 inline void pad_uint(T n, unsigned int width, fmt::basic_memory_buffer<char, Buffer_Size> &dest)
-
78 {
-
79  static_assert(std::is_unsigned<T>::value, "pad_uint must get unsigned T");
-
80  auto digits = count_digits(n);
-
81  if (width > digits)
-
82  {
-
83  const char *zeroes = "0000000000000000000";
-
84  dest.append(zeroes, zeroes + width - digits);
-
85  }
-
86  append_int(n, dest);
-
87 }
-
88 
-
89 template<typename T, size_t Buffer_Size>
- -
91 {
-
92  pad_uint(n, 3, dest);
-
93 }
-
94 
-
95 template<typename T, size_t Buffer_Size>
- -
97 {
-
98  pad_uint(n, 6, dest);
-
99 }
-
100 
-
101 template<typename T, size_t Buffer_Size>
- -
103 {
-
104  pad_uint(n, 9, dest);
-
105 }
-
106 
-
107 // return fraction of a second of the given time_point.
-
108 // e.g.
-
109 // fraction<std::milliseconds>(tp) -> will return the millis part of the second
-
110 template<typename ToDuration>
-
111 inline ToDuration time_fraction(const log_clock::time_point &tp)
-
112 {
-
113  using std::chrono::duration_cast;
-
114  using std::chrono::seconds;
-
115  auto duration = tp.time_since_epoch();
-
116  auto secs = duration_cast<seconds>(duration);
-
117  return duration_cast<ToDuration>(duration) - duration_cast<ToDuration>(secs);
-
118 }
-
119 
-
120 } // namespace fmt_helper
-
121 } // namespace details
-
122 } // namespace spdlog
+Go to the documentation of this file.
1 //
2 // Created by gabi on 6/15/18.
3 //
4 
5 #pragma once
6 
7 #include <chrono>
8 #include <type_traits>
9 #include "spdlog/fmt/fmt.h"
10 
11 // Some fmt helpers to efficiently format and pad ints and strings
12 namespace spdlog {
13 namespace details {
14 namespace fmt_helper {
15 
16 template<size_t Buffer_Size>
18 {
19  return spdlog::string_view_t(buf.data(), buf.size());
20 }
21 
22 template<size_t Buffer_Size1, size_t Buffer_Size2>
24 {
25  auto *buf_ptr = buf.data();
26  dest.append(buf_ptr, buf_ptr + buf.size());
27 }
28 
29 template<size_t Buffer_Size>
31 {
32  auto *buf_ptr = view.data();
33  if (buf_ptr != nullptr)
34  {
35  dest.append(buf_ptr, buf_ptr + view.size());
36  }
37 }
38 
39 template<typename T, size_t Buffer_Size>
41 {
42  fmt::format_int i(n);
43  dest.append(i.data(), i.data() + i.size());
44 }
45 
46 template<typename T>
47 inline unsigned count_digits(T n)
48 {
49  using count_type = typename std::conditional<(sizeof(T) > sizeof(uint32_t)), uint64_t, uint32_t>::type;
50  return static_cast<unsigned>(fmt::internal::count_digits(static_cast<count_type>(n)));
51 }
52 
53 template<size_t Buffer_Size>
55 {
56  if (n > 99)
57  {
58  append_int(n, dest);
59  }
60  else if (n > 9) // 10-99
61  {
62  dest.push_back(static_cast<char>('0' + n / 10));
63  dest.push_back(static_cast<char>('0' + n % 10));
64  }
65  else if (n >= 0) // 0-9
66  {
67  dest.push_back('0');
68  dest.push_back(static_cast<char>('0' + n));
69  }
70  else // negatives (unlikely, but just in case, let fmt deal with it)
71  {
72  fmt::format_to(dest, "{:02}", n);
73  }
74 }
75 
76 template<typename T, size_t Buffer_Size>
77 inline void pad_uint(T n, unsigned int width, fmt::basic_memory_buffer<char, Buffer_Size> &dest)
78 {
79  static_assert(std::is_unsigned<T>::value, "pad_uint must get unsigned T");
80  auto digits = count_digits(n);
81  if (width > digits)
82  {
83  const char *zeroes = "0000000000000000000";
84  dest.append(zeroes, zeroes + width - digits);
85  }
86  append_int(n, dest);
87 }
88 
89 template<typename T, size_t Buffer_Size>
91 {
92  pad_uint(n, 3, dest);
93 }
94 
95 template<typename T, size_t Buffer_Size>
97 {
98  pad_uint(n, 6, dest);
99 }
100 
101 template<typename T, size_t Buffer_Size>
103 {
104  pad_uint(n, 9, dest);
105 }
106 
107 // return fraction of a second of the given time_point.
108 // e.g.
109 // fraction<std::milliseconds>(tp) -> will return the millis part of the second
110 template<typename ToDuration>
111 inline ToDuration time_fraction(const log_clock::time_point &tp)
112 {
113  using std::chrono::duration_cast;
114  using std::chrono::seconds;
115  auto duration = tp.time_since_epoch();
116  auto secs = duration_cast<seconds>(duration);
117  return duration_cast<ToDuration>(duration) - duration_cast<ToDuration>(secs);
118 }
119 
120 } // namespace fmt_helper
121 } // namespace details
122 } // namespace spdlog
+ +
void append_int(T n, fmt::basic_memory_buffer< char, Buffer_Size > &dest)
Definition: fmt_helper.h:40
+
void pad3(T n, fmt::basic_memory_buffer< char, Buffer_Size > &dest)
Definition: fmt_helper.h:90
+
void append_buf(const fmt::basic_memory_buffer< char, Buffer_Size1 > &buf, fmt::basic_memory_buffer< char, Buffer_Size2 > &dest)
Definition: fmt_helper.h:23
+
void pad6(T n, fmt::basic_memory_buffer< char, Buffer_Size > &dest)
Definition: fmt_helper.h:96
+
std::size_t size() const
Definition: core.h:250
+ +
Definition: async.h:27
+ + +
size_t size() const
Definition: core.h:389
+
void append_string_view(spdlog::string_view_t view, fmt::basic_memory_buffer< char, Buffer_Size > &dest)
Definition: fmt_helper.h:30
+
void pad9(T n, fmt::basic_memory_buffer< char, Buffer_Size > &dest)
Definition: fmt_helper.h:102
+
void push_back(const T &value)
Definition: core.h:278
+
void pad_uint(T n, unsigned int width, fmt::basic_memory_buffer< char, Buffer_Size > &dest)
Definition: fmt_helper.h:77
+
fmt::string_view string_view_t
Definition: common.h:88
+
std::size_t size() const
Definition: format.h:2862
+
std::enable_if< is_contiguous< Container >::value &&internal::is_string< S >::value, std::back_insert_iterator< Container > >::type format_to(std::back_insert_iterator< Container > out, const S &format_str, const Args &...args)
Definition: core.h:1430
+
#define SPDLOG_NOEXCEPT
Definition: common.h:35
+
const Char * data() const
Definition: core.h:386
+
void pad2(int n, fmt::basic_memory_buffer< char, Buffer_Size > &dest)
Definition: fmt_helper.h:54
+
ToDuration time_fraction(const log_clock::time_point &tp)
Definition: fmt_helper.h:111
+
spdlog::string_view_t to_string_view(const fmt::basic_memory_buffer< char, Buffer_Size > &buf) SPDLOG_NOEXCEPT
Definition: fmt_helper.h:17
+
unsigned count_digits(T n)
Definition: fmt_helper.h:47
+
const char * data() const
Definition: format.h:2870
+ +
void append(const U *begin, const U *end)
Definition: format.h:394
-
std::enable_if< is_contiguous< Container >::value &&internal::is_string< S >::value, std::back_insert_iterator< Container > >::type format_to(std::back_insert_iterator< Container > out, const S &format_str, const Args &... args)
Definition: core.h:1430
- - -
#define SPDLOG_NOEXCEPT
Definition: common.h:35
-
void append_string_view(spdlog::string_view_t view, fmt::basic_memory_buffer< char, Buffer_Size > &dest)
Definition: fmt_helper.h:30
-
std::size_t size() const
Definition: core.h:250
-
void append(const U *begin, const U *end)
Definition: format.h:394
-
void pad_uint(T n, unsigned int width, fmt::basic_memory_buffer< char, Buffer_Size > &dest)
Definition: fmt_helper.h:77
-
void pad9(T n, fmt::basic_memory_buffer< char, Buffer_Size > &dest)
Definition: fmt_helper.h:102
-
ToDuration time_fraction(const log_clock::time_point &tp)
Definition: fmt_helper.h:111
- -
void push_back(const T &value)
Definition: core.h:278
-
fmt::string_view string_view_t
Definition: common.h:88
-
Definition: async.h:27
-
size_t size() const
Definition: core.h:389
-
void append_int(T n, fmt::basic_memory_buffer< char, Buffer_Size > &dest)
Definition: fmt_helper.h:40
-
void pad2(int n, fmt::basic_memory_buffer< char, Buffer_Size > &dest)
Definition: fmt_helper.h:54
-
const char * data() const
Definition: format.h:2870
-
void append_buf(const fmt::basic_memory_buffer< char, Buffer_Size1 > &buf, fmt::basic_memory_buffer< char, Buffer_Size2 > &dest)
Definition: fmt_helper.h:23
-
const Char * data() const
Definition: core.h:386
-
std::size_t size() const
Definition: format.h:2862
- -
unsigned count_digits(T n)
Definition: fmt_helper.h:47
- -
void pad3(T n, fmt::basic_memory_buffer< char, Buffer_Size > &dest)
Definition: fmt_helper.h:90
-
void pad6(T n, fmt::basic_memory_buffer< char, Buffer_Size > &dest)
Definition: fmt_helper.h:96
-
spdlog::string_view_t to_string_view(const fmt::basic_memory_buffer< char, Buffer_Size > &buf) SPDLOG_NOEXCEPT
Definition: fmt_helper.h:17
- diff --git a/docs/format-inl_8h.html b/docs/format-inl_8h.html index 3e461b9..9a6bfce 100644 --- a/docs/format-inl_8h.html +++ b/docs/format-inl_8h.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: sdk_core/include/third_party/spdlog/spdlog/fmt/bundled/format-inl.h File Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,40 @@ - + - - - - + +
@@ -193,9 +211,7 @@ Functions  

Macro Definition Documentation

- -

◆ FMT_CATCH

- +
@@ -209,13 +225,11 @@ Functions
-

Definition at line 41 of file format-inl.h.

+

Definition at line 41 of file format-inl.h.

- -

◆ FMT_FALLTHROUGH

- +
@@ -225,13 +239,11 @@ Functions
-

Definition at line 538 of file format-inl.h.

+

Definition at line 538 of file format-inl.h.

- -

◆ FMT_POWERS_OF_10

- +
@@ -244,23 +256,12 @@ Functions
-Value:
factor * 10, \
-
factor * 100, \
-
factor * 1000, \
-
factor * 10000, \
-
factor * 100000, \
-
factor * 1000000, \
-
factor * 10000000, \
-
factor * 100000000, \
-
factor * 1000000000
-
-

Definition at line 269 of file format-inl.h.

+Value:
factor * 10, \
factor * 100, \
factor * 1000, \
factor * 10000, \
factor * 100000, \
factor * 1000000, \
factor * 10000000, \
factor * 100000000, \
factor * 1000000000
+

Definition at line 269 of file format-inl.h.

- -

◆ FMT_SNPRINTF

- +
@@ -270,13 +271,11 @@ Functions
-

Definition at line 70 of file format-inl.h.

+

Definition at line 70 of file format-inl.h.

- -

◆ FMT_SWPRINTF

- +
@@ -286,13 +285,11 @@ Functions
-

Definition at line 85 of file format-inl.h.

+

Definition at line 85 of file format-inl.h.

- -

◆ FMT_TRY

- +
@@ -302,14 +299,12 @@ Functions
-

Definition at line 40 of file format-inl.h.

+

Definition at line 40 of file format-inl.h.

Function Documentation

- -

◆ strerror_r()

- +
@@ -347,13 +342,11 @@ Functions
-

Definition at line 58 of file format-inl.h.

+

Definition at line 58 of file format-inl.h.

- -

◆ strerror_s()

- +
@@ -391,7 +384,7 @@ Functions
-

Definition at line 61 of file format-inl.h.

+

Definition at line 61 of file format-inl.h.

@@ -403,7 +396,7 @@ Functions + doxygen 1.8.11
diff --git a/docs/format-inl_8h_source.html b/docs/format-inl_8h_source.html index 4a3abf3..bc3843e 100644 --- a/docs/format-inl_8h_source.html +++ b/docs/format-inl_8h_source.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: sdk_core/include/third_party/spdlog/spdlog/fmt/bundled/format-inl.h Source File @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,40 @@ - + - - - - + +
@@ -91,1114 +109,140 @@ $(document).ready(function(){initNavTree('format-inl_8h_source.html','');});
format-inl.h
-Go to the documentation of this file.
1 // Formatting library for C++
-
2 //
-
3 // Copyright (c) 2012 - 2016, Victor Zverovich
-
4 // All rights reserved.
-
5 //
-
6 // For the license information refer to format.h.
-
7 
-
8 #ifndef FMT_FORMAT_INL_H_
-
9 #define FMT_FORMAT_INL_H_
-
10 
-
11 #include "format.h"
-
12 
-
13 #include <string.h>
-
14 
-
15 #include <cctype>
-
16 #include <cerrno>
-
17 #include <climits>
-
18 #include <cmath>
-
19 #include <cstdarg>
-
20 #include <cstddef> // for std::ptrdiff_t
-
21 #include <cstring> // for std::memmove
-
22 #if !defined(FMT_STATIC_THOUSANDS_SEPARATOR)
-
23 # include <locale>
-
24 #endif
-
25 
-
26 #if FMT_USE_WINDOWS_H
-
27 # if !defined(FMT_HEADER_ONLY) && !defined(WIN32_LEAN_AND_MEAN)
-
28 # define WIN32_LEAN_AND_MEAN
-
29 # endif
-
30 # if defined(NOMINMAX) || defined(FMT_WIN_MINMAX)
-
31 # include <windows.h>
-
32 # else
-
33 # define NOMINMAX
-
34 # include <windows.h>
-
35 # undef NOMINMAX
-
36 # endif
-
37 #endif
-
38 
-
39 #if FMT_EXCEPTIONS
-
40 # define FMT_TRY try
-
41 # define FMT_CATCH(x) catch (x)
-
42 #else
-
43 # define FMT_TRY if (true)
-
44 # define FMT_CATCH(x) if (false)
-
45 #endif
-
46 
-
47 #ifdef _MSC_VER
-
48 # pragma warning(push)
-
49 # pragma warning(disable: 4127) // conditional expression is constant
-
50 # pragma warning(disable: 4702) // unreachable code
-
51 // Disable deprecation warning for strerror. The latter is not called but
-
52 // MSVC fails to detect it.
-
53 # pragma warning(disable: 4996)
-
54 #endif
-
55 
-
56 // Dummy implementations of strerror_r and strerror_s called if corresponding
-
57 // system functions are not available.
-
58 inline fmt::internal::null<> strerror_r(int, char *, ...) {
-
59  return fmt::internal::null<>();
-
60 }
-
61 inline fmt::internal::null<> strerror_s(char *, std::size_t, ...) {
-
62  return fmt::internal::null<>();
-
63 }
-
64 
- -
66 
-
67 namespace {
-
68 
-
69 #ifndef _MSC_VER
-
70 # define FMT_SNPRINTF snprintf
-
71 #else // _MSC_VER
-
72 inline int fmt_snprintf(char *buffer, size_t size, const char *format, ...) {
-
73  va_list args;
-
74  va_start(args, format);
-
75  int result = vsnprintf_s(buffer, size, _TRUNCATE, format, args);
-
76  va_end(args);
-
77  return result;
-
78 }
-
79 # define FMT_SNPRINTF fmt_snprintf
-
80 #endif // _MSC_VER
-
81 
-
82 #if defined(_WIN32) && defined(__MINGW32__) && !defined(__NO_ISOCEXT)
-
83 # define FMT_SWPRINTF snwprintf
-
84 #else
-
85 # define FMT_SWPRINTF swprintf
-
86 #endif // defined(_WIN32) && defined(__MINGW32__) && !defined(__NO_ISOCEXT)
-
87 
-
88 typedef void (*FormatFunc)(internal::buffer &, int, string_view);
-
89 
-
90 // Portable thread-safe version of strerror.
-
91 // Sets buffer to point to a string describing the error code.
-
92 // This can be either a pointer to a string stored in buffer,
-
93 // or a pointer to some static immutable string.
-
94 // Returns one of the following values:
-
95 // 0 - success
-
96 // ERANGE - buffer is not large enough to store the error message
-
97 // other - failure
-
98 // Buffer should be at least of size 1.
-
99 int safe_strerror(
-
100  int error_code, char *&buffer, std::size_t buffer_size) FMT_NOEXCEPT {
-
101  FMT_ASSERT(buffer != FMT_NULL && buffer_size != 0, "invalid buffer");
-
102 
-
103  class dispatcher {
-
104  private:
-
105  int error_code_;
-
106  char *&buffer_;
-
107  std::size_t buffer_size_;
-
108 
-
109  // A noop assignment operator to avoid bogus warnings.
-
110  void operator=(const dispatcher &) {}
-
111 
-
112  // Handle the result of XSI-compliant version of strerror_r.
-
113  int handle(int result) {
-
114  // glibc versions before 2.13 return result in errno.
-
115  return result == -1 ? errno : result;
-
116  }
-
117 
-
118  // Handle the result of GNU-specific version of strerror_r.
-
119  int handle(char *message) {
-
120  // If the buffer is full then the message is probably truncated.
-
121  if (message == buffer_ && strlen(buffer_) == buffer_size_ - 1)
-
122  return ERANGE;
-
123  buffer_ = message;
-
124  return 0;
-
125  }
-
126 
-
127  // Handle the case when strerror_r is not available.
-
128  int handle(internal::null<>) {
-
129  return fallback(strerror_s(buffer_, buffer_size_, error_code_));
-
130  }
-
131 
-
132  // Fallback to strerror_s when strerror_r is not available.
-
133  int fallback(int result) {
-
134  // If the buffer is full then the message is probably truncated.
-
135  return result == 0 && strlen(buffer_) == buffer_size_ - 1 ?
-
136  ERANGE : result;
-
137  }
-
138 
-
139 #if !FMT_MSC_VER
-
140  // Fallback to strerror if strerror_r and strerror_s are not available.
-
141  int fallback(internal::null<>) {
-
142  errno = 0;
-
143  buffer_ = strerror(error_code_);
-
144  return errno;
-
145  }
-
146 #endif
-
147 
-
148  public:
-
149  dispatcher(int err_code, char *&buf, std::size_t buf_size)
-
150  : error_code_(err_code), buffer_(buf), buffer_size_(buf_size) {}
-
151 
-
152  int run() {
-
153  return handle(strerror_r(error_code_, buffer_, buffer_size_));
-
154  }
-
155  };
-
156  return dispatcher(error_code, buffer, buffer_size).run();
-
157 }
-
158 
-
159 void format_error_code(internal::buffer &out, int error_code,
-
160  string_view message) FMT_NOEXCEPT {
-
161  // Report error code making sure that the output fits into
-
162  // inline_buffer_size to avoid dynamic memory allocation and potential
-
163  // bad_alloc.
-
164  out.resize(0);
-
165  static const char SEP[] = ": ";
-
166  static const char ERROR_STR[] = "error ";
-
167  // Subtract 2 to account for terminating null characters in SEP and ERROR_STR.
-
168  std::size_t error_code_size = sizeof(SEP) + sizeof(ERROR_STR) - 2;
-
169  typedef internal::int_traits<int>::main_type main_type;
-
170  main_type abs_value = static_cast<main_type>(error_code);
-
171  if (internal::is_negative(error_code)) {
-
172  abs_value = 0 - abs_value;
-
173  ++error_code_size;
-
174  }
-
175  error_code_size += internal::to_unsigned(internal::count_digits(abs_value));
-
176  writer w(out);
-
177  if (message.size() <= inline_buffer_size - error_code_size) {
-
178  w.write(message);
-
179  w.write(SEP);
-
180  }
-
181  w.write(ERROR_STR);
-
182  w.write(error_code);
-
183  assert(out.size() <= inline_buffer_size);
-
184 }
-
185 
-
186 void report_error(FormatFunc func, int error_code,
-
187  string_view message) FMT_NOEXCEPT {
-
188  memory_buffer full_message;
-
189  func(full_message, error_code, message);
-
190  // Use Writer::data instead of Writer::c_str to avoid potential memory
-
191  // allocation.
-
192  std::fwrite(full_message.data(), full_message.size(), 1, stderr);
-
193  std::fputc('\n', stderr);
-
194 }
-
195 } // namespace
-
196 
- -
198  const char8_t *data = s.data();
-
199  size_t num_code_points = 0;
-
200  for (size_t i = 0, size = s.size(); i != size; ++i) {
-
201  if ((data[i] & 0xc0) != 0x80)
-
202  ++num_code_points;
-
203  }
-
204  return num_code_points;
-
205 }
-
206 
-
207 #if !defined(FMT_STATIC_THOUSANDS_SEPARATOR)
-
208 namespace internal {
-
209 
-
210 template <typename Locale>
-
211 locale_ref::locale_ref(const Locale &loc) : locale_(&loc) {
-
212  static_assert(std::is_same<Locale, std::locale>::value, "");
-
213 }
-
214 
-
215 template <typename Locale>
-
216 Locale locale_ref::get() const {
-
217  static_assert(std::is_same<Locale, std::locale>::value, "");
-
218  return locale_ ? *static_cast<const std::locale*>(locale_) : std::locale();
-
219 }
-
220 
-
221 template <typename Char>
- -
223  return std::use_facet<std::numpunct<Char> >(
-
224  loc.get<std::locale>()).thousands_sep();
-
225 }
-
226 }
-
227 #else
-
228 template <typename Char>
-
229 FMT_FUNC Char internal::thousands_sep_impl(locale_ref) {
-
230  return FMT_STATIC_THOUSANDS_SEPARATOR;
-
231 }
-
232 #endif
-
233 
-
234 FMT_FUNC void system_error::init(
-
235  int err_code, string_view format_str, format_args args) {
-
236  error_code_ = err_code;
- -
238  format_system_error(buffer, err_code, vformat(format_str, args));
-
239  std::runtime_error &base = *this;
-
240  base = std::runtime_error(to_string(buffer));
-
241 }
-
242 
-
243 namespace internal {
-
244 template <typename T>
- -
246  char *buf, std::size_t size, const char *format, int precision, T value) {
-
247  return precision < 0 ?
-
248  FMT_SNPRINTF(buf, size, format, value) :
-
249  FMT_SNPRINTF(buf, size, format, precision, value);
-
250 }
-
251 
-
252 template <typename T>
- -
254  wchar_t *buf, std::size_t size, const wchar_t *format, int precision,
-
255  T value) {
-
256  return precision < 0 ?
-
257  FMT_SWPRINTF(buf, size, format, value) :
-
258  FMT_SWPRINTF(buf, size, format, precision, value);
-
259 }
-
260 
-
261 template <typename T>
-
262 const char basic_data<T>::DIGITS[] =
-
263  "0001020304050607080910111213141516171819"
-
264  "2021222324252627282930313233343536373839"
-
265  "4041424344454647484950515253545556575859"
-
266  "6061626364656667686970717273747576777879"
-
267  "8081828384858687888990919293949596979899";
-
268 
-
269 #define FMT_POWERS_OF_10(factor) \
-
270  factor * 10, \
-
271  factor * 100, \
-
272  factor * 1000, \
-
273  factor * 10000, \
-
274  factor * 100000, \
-
275  factor * 1000000, \
-
276  factor * 10000000, \
-
277  factor * 100000000, \
-
278  factor * 1000000000
-
279 
-
280 template <typename T>
-
281 const uint32_t basic_data<T>::POWERS_OF_10_32[] = {
-
282  1, FMT_POWERS_OF_10(1)
-
283 };
-
284 
-
285 template <typename T>
-
286 const uint32_t basic_data<T>::ZERO_OR_POWERS_OF_10_32[] = {
-
287  0, FMT_POWERS_OF_10(1)
-
288 };
-
289 
-
290 template <typename T>
-
291 const uint64_t basic_data<T>::ZERO_OR_POWERS_OF_10_64[] = {
-
292  0,
-
293  FMT_POWERS_OF_10(1),
-
294  FMT_POWERS_OF_10(1000000000ull),
-
295  10000000000000000000ull
-
296 };
-
297 
-
298 // Normalized 64-bit significands of pow(10, k), for k = -348, -340, ..., 340.
-
299 // These are generated by support/compute-powers.py.
-
300 template <typename T>
-
301 const uint64_t basic_data<T>::POW10_SIGNIFICANDS[] = {
-
302  0xfa8fd5a0081c0288, 0xbaaee17fa23ebf76, 0x8b16fb203055ac76,
-
303  0xcf42894a5dce35ea, 0x9a6bb0aa55653b2d, 0xe61acf033d1a45df,
-
304  0xab70fe17c79ac6ca, 0xff77b1fcbebcdc4f, 0xbe5691ef416bd60c,
-
305  0x8dd01fad907ffc3c, 0xd3515c2831559a83, 0x9d71ac8fada6c9b5,
-
306  0xea9c227723ee8bcb, 0xaecc49914078536d, 0x823c12795db6ce57,
-
307  0xc21094364dfb5637, 0x9096ea6f3848984f, 0xd77485cb25823ac7,
-
308  0xa086cfcd97bf97f4, 0xef340a98172aace5, 0xb23867fb2a35b28e,
-
309  0x84c8d4dfd2c63f3b, 0xc5dd44271ad3cdba, 0x936b9fcebb25c996,
-
310  0xdbac6c247d62a584, 0xa3ab66580d5fdaf6, 0xf3e2f893dec3f126,
-
311  0xb5b5ada8aaff80b8, 0x87625f056c7c4a8b, 0xc9bcff6034c13053,
-
312  0x964e858c91ba2655, 0xdff9772470297ebd, 0xa6dfbd9fb8e5b88f,
-
313  0xf8a95fcf88747d94, 0xb94470938fa89bcf, 0x8a08f0f8bf0f156b,
-
314  0xcdb02555653131b6, 0x993fe2c6d07b7fac, 0xe45c10c42a2b3b06,
-
315  0xaa242499697392d3, 0xfd87b5f28300ca0e, 0xbce5086492111aeb,
-
316  0x8cbccc096f5088cc, 0xd1b71758e219652c, 0x9c40000000000000,
-
317  0xe8d4a51000000000, 0xad78ebc5ac620000, 0x813f3978f8940984,
-
318  0xc097ce7bc90715b3, 0x8f7e32ce7bea5c70, 0xd5d238a4abe98068,
-
319  0x9f4f2726179a2245, 0xed63a231d4c4fb27, 0xb0de65388cc8ada8,
-
320  0x83c7088e1aab65db, 0xc45d1df942711d9a, 0x924d692ca61be758,
-
321  0xda01ee641a708dea, 0xa26da3999aef774a, 0xf209787bb47d6b85,
-
322  0xb454e4a179dd1877, 0x865b86925b9bc5c2, 0xc83553c5c8965d3d,
-
323  0x952ab45cfa97a0b3, 0xde469fbd99a05fe3, 0xa59bc234db398c25,
-
324  0xf6c69a72a3989f5c, 0xb7dcbf5354e9bece, 0x88fcf317f22241e2,
-
325  0xcc20ce9bd35c78a5, 0x98165af37b2153df, 0xe2a0b5dc971f303a,
-
326  0xa8d9d1535ce3b396, 0xfb9b7cd9a4a7443c, 0xbb764c4ca7a44410,
-
327  0x8bab8eefb6409c1a, 0xd01fef10a657842c, 0x9b10a4e5e9913129,
-
328  0xe7109bfba19c0c9d, 0xac2820d9623bf429, 0x80444b5e7aa7cf85,
-
329  0xbf21e44003acdd2d, 0x8e679c2f5e44ff8f, 0xd433179d9c8cb841,
-
330  0x9e19db92b4e31ba9, 0xeb96bf6ebadf77d9, 0xaf87023b9bf0ee6b,
-
331 };
-
332 
-
333 // Binary exponents of pow(10, k), for k = -348, -340, ..., 340, corresponding
-
334 // to significands above.
-
335 template <typename T>
-
336 const int16_t basic_data<T>::POW10_EXPONENTS[] = {
-
337  -1220, -1193, -1166, -1140, -1113, -1087, -1060, -1034, -1007, -980, -954,
-
338  -927, -901, -874, -847, -821, -794, -768, -741, -715, -688, -661,
-
339  -635, -608, -582, -555, -529, -502, -475, -449, -422, -396, -369,
-
340  -343, -316, -289, -263, -236, -210, -183, -157, -130, -103, -77,
-
341  -50, -24, 3, 30, 56, 83, 109, 136, 162, 189, 216,
-
342  242, 269, 295, 322, 348, 375, 402, 428, 455, 481, 508,
-
343  534, 561, 588, 614, 641, 667, 694, 720, 747, 774, 800,
-
344  827, 853, 880, 907, 933, 960, 986, 1013, 1039, 1066
-
345 };
-
346 
-
347 template <typename T> const char basic_data<T>::FOREGROUND_COLOR[] = "\x1b[38;2;";
-
348 template <typename T> const char basic_data<T>::BACKGROUND_COLOR[] = "\x1b[48;2;";
-
349 template <typename T> const char basic_data<T>::RESET_COLOR[] = "\x1b[0m";
-
350 template <typename T> const wchar_t basic_data<T>::WRESET_COLOR[] = L"\x1b[0m";
-
351 
-
352 // A handmade floating-point number f * pow(2, e).
-
353 class fp {
-
354  private:
-
355  typedef uint64_t significand_type;
-
356 
-
357  // All sizes are in bits.
-
358  static FMT_CONSTEXPR_DECL const int char_size =
-
359  std::numeric_limits<unsigned char>::digits;
-
360  // Subtract 1 to account for an implicit most significant bit in the
-
361  // normalized form.
-
362  static FMT_CONSTEXPR_DECL const int double_significand_size =
-
363  std::numeric_limits<double>::digits - 1;
-
364  static FMT_CONSTEXPR_DECL const uint64_t implicit_bit =
-
365  1ull << double_significand_size;
-
366 
-
367  public:
-
368  significand_type f;
-
369  int e;
-
370 
- -
372  sizeof(significand_type) * char_size;
-
373 
-
374  fp(): f(0), e(0) {}
-
375  fp(uint64_t f_val, int e_val): f(f_val), e(e_val) {}
-
376 
-
377  // Constructs fp from an IEEE754 double. It is a template to prevent compile
-
378  // errors on platforms where double is not IEEE754.
-
379  template <typename Double>
-
380  explicit fp(Double d) {
-
381  // Assume double is in the format [sign][exponent][significand].
-
382  typedef std::numeric_limits<Double> limits;
-
383  const int double_size = static_cast<int>(sizeof(Double) * char_size);
-
384  const int exponent_size =
-
385  double_size - double_significand_size - 1; // -1 for sign
-
386  const uint64_t significand_mask = implicit_bit - 1;
-
387  const uint64_t exponent_mask = (~0ull >> 1) & ~significand_mask;
-
388  const int exponent_bias = (1 << exponent_size) - limits::max_exponent - 1;
-
389  auto u = bit_cast<uint64_t>(d);
-
390  auto biased_e = (u & exponent_mask) >> double_significand_size;
-
391  f = u & significand_mask;
-
392  if (biased_e != 0)
-
393  f += implicit_bit;
-
394  else
-
395  biased_e = 1; // Subnormals use biased exponent 1 (min exponent).
-
396  e = static_cast<int>(biased_e - exponent_bias - double_significand_size);
-
397  }
-
398 
-
399  // Normalizes the value converted from double and multiplied by (1 << SHIFT).
-
400  template <int SHIFT = 0>
-
401  void normalize() {
-
402  // Handle subnormals.
-
403  auto shifted_implicit_bit = implicit_bit << SHIFT;
-
404  while ((f & shifted_implicit_bit) == 0) {
-
405  f <<= 1;
-
406  --e;
-
407  }
-
408  // Subtract 1 to account for hidden bit.
-
409  auto offset = significand_size - double_significand_size - SHIFT - 1;
-
410  f <<= offset;
-
411  e -= offset;
-
412  }
-
413 
-
414  // Compute lower and upper boundaries (m^- and m^+ in the Grisu paper), where
-
415  // a boundary is a value half way between the number and its predecessor
-
416  // (lower) or successor (upper). The upper boundary is normalized and lower
-
417  // has the same exponent but may be not normalized.
-
418  void compute_boundaries(fp &lower, fp &upper) const {
-
419  lower = f == implicit_bit ?
-
420  fp((f << 2) - 1, e - 2) : fp((f << 1) - 1, e - 1);
-
421  upper = fp((f << 1) + 1, e - 1);
-
422  upper.normalize<1>(); // 1 is to account for the exponent shift above.
-
423  lower.f <<= lower.e - upper.e;
-
424  lower.e = upper.e;
-
425  }
-
426 };
-
427 
-
428 // Returns an fp number representing x - y. Result may not be normalized.
-
429 inline fp operator-(fp x, fp y) {
-
430  FMT_ASSERT(x.f >= y.f && x.e == y.e, "invalid operands");
-
431  return fp(x.f - y.f, x.e);
-
432 }
-
433 
-
434 // Computes an fp number r with r.f = x.f * y.f / pow(2, 64) rounded to nearest
-
435 // with half-up tie breaking, r.e = x.e + y.e + 64. Result may not be normalized.
-
436 FMT_API fp operator*(fp x, fp y);
-
437 
-
438 // Returns cached power (of 10) c_k = c_k.f * pow(2, c_k.e) such that its
-
439 // (binary) exponent satisfies min_exponent <= c_k.e <= min_exponent + 3.
-
440 FMT_API fp get_cached_power(int min_exponent, int &pow10_exponent);
-
441 
- -
443  // Multiply 32-bit parts of significands.
-
444  uint64_t mask = (1ULL << 32) - 1;
-
445  uint64_t a = x.f >> 32, b = x.f & mask;
-
446  uint64_t c = y.f >> 32, d = y.f & mask;
-
447  uint64_t ac = a * c, bc = b * c, ad = a * d, bd = b * d;
-
448  // Compute mid 64-bit of result and round.
-
449  uint64_t mid = (bd >> 32) + (ad & mask) + (bc & mask) + (1U << 31);
-
450  return fp(ac + (ad >> 32) + (bc >> 32) + (mid >> 32), x.e + y.e + 64);
-
451 }
-
452 
-
453 FMT_FUNC fp get_cached_power(int min_exponent, int &pow10_exponent) {
-
454  const double one_over_log2_10 = 0.30102999566398114; // 1 / log2(10)
-
455  int index = static_cast<int>(std::ceil(
-
456  (min_exponent + fp::significand_size - 1) * one_over_log2_10));
-
457  // Decimal exponent of the first (smallest) cached power of 10.
-
458  const int first_dec_exp = -348;
-
459  // Difference between 2 consecutive decimal exponents in cached powers of 10.
-
460  const int dec_exp_step = 8;
-
461  index = (index - first_dec_exp - 1) / dec_exp_step + 1;
-
462  pow10_exponent = first_dec_exp + index * dec_exp_step;
-
463  return fp(data::POW10_SIGNIFICANDS[index], data::POW10_EXPONENTS[index]);
-
464 }
-
465 
- -
467  char *buf, int &size, int max_digits, uint64_t delta,
-
468  uint64_t remainder, uint64_t exp, uint64_t diff, int &exp10) {
-
469  while (remainder < diff && delta - remainder >= exp &&
-
470  (remainder + exp < diff || diff - remainder > remainder + exp - diff)) {
-
471  --buf[size - 1];
-
472  remainder += exp;
-
473  }
-
474  if (size > max_digits) {
-
475  --size;
-
476  ++exp10;
-
477  if (buf[size] >= '5')
-
478  return false;
-
479  }
-
480  return true;
-
481 }
-
482 
-
483 // Generates output using Grisu2 digit-gen algorithm.
- -
485  char *buf, int &size, uint32_t hi, uint64_t lo, int &exp,
-
486  uint64_t delta, const fp &one, const fp &diff, int max_digits) {
-
487  // Generate digits for the most significant part (hi).
-
488  while (exp > 0) {
-
489  uint32_t digit = 0;
-
490  // This optimization by miloyip reduces the number of integer divisions by
-
491  // one per iteration.
-
492  switch (exp) {
-
493  case 10: digit = hi / 1000000000; hi %= 1000000000; break;
-
494  case 9: digit = hi / 100000000; hi %= 100000000; break;
-
495  case 8: digit = hi / 10000000; hi %= 10000000; break;
-
496  case 7: digit = hi / 1000000; hi %= 1000000; break;
-
497  case 6: digit = hi / 100000; hi %= 100000; break;
-
498  case 5: digit = hi / 10000; hi %= 10000; break;
-
499  case 4: digit = hi / 1000; hi %= 1000; break;
-
500  case 3: digit = hi / 100; hi %= 100; break;
-
501  case 2: digit = hi / 10; hi %= 10; break;
-
502  case 1: digit = hi; hi = 0; break;
-
503  default:
-
504  FMT_ASSERT(false, "invalid number of digits");
-
505  }
-
506  if (digit != 0 || size != 0)
-
507  buf[size++] = static_cast<char>('0' + digit);
-
508  --exp;
-
509  uint64_t remainder = (static_cast<uint64_t>(hi) << -one.e) + lo;
-
510  if (remainder <= delta || size > max_digits) {
-
511  return grisu2_round(
-
512  buf, size, max_digits, delta, remainder,
-
513  static_cast<uint64_t>(data::POWERS_OF_10_32[exp]) << -one.e,
-
514  diff.f, exp);
-
515  }
-
516  }
-
517  // Generate digits for the least significant part (lo).
-
518  for (;;) {
-
519  lo *= 10;
-
520  delta *= 10;
-
521  char digit = static_cast<char>(lo >> -one.e);
-
522  if (digit != 0 || size != 0)
-
523  buf[size++] = static_cast<char>('0' + digit);
-
524  lo &= one.f - 1;
-
525  --exp;
-
526  if (lo < delta || size > max_digits) {
-
527  return grisu2_round(buf, size, max_digits, delta, lo, one.f,
-
528  diff.f * data::POWERS_OF_10_32[-exp], exp);
-
529  }
-
530  }
-
531 }
-
532 
-
533 #if FMT_CLANG_VERSION
-
534 # define FMT_FALLTHROUGH [[clang::fallthrough]];
-
535 #elif FMT_GCC_VERSION >= 700
-
536 # define FMT_FALLTHROUGH [[gnu::fallthrough]];
-
537 #else
-
538 # define FMT_FALLTHROUGH
-
539 #endif
-
540 
- - -
543  bool fixed;
-
544  bool upper;
- -
546 };
-
547 
- -
549  char *data;
-
550  ptrdiff_t size;
- -
552 
-
553  explicit prettify_handler(buffer &b, ptrdiff_t n)
-
554  : data(b.data()), size(n), buf(b) {}
- -
556  assert(buf.size() >= to_unsigned(size));
- -
558  }
-
559 
-
560  template <typename F>
-
561  void insert(ptrdiff_t pos, ptrdiff_t n, F f) {
-
562  std::memmove(data + pos + n, data + pos, to_unsigned(size - pos));
-
563  f(data + pos);
-
564  size += n;
-
565  }
-
566 
-
567  void insert(ptrdiff_t pos, char c) {
-
568  std::memmove(data + pos + 1, data + pos, to_unsigned(size - pos));
-
569  data[pos] = c;
-
570  ++size;
-
571  }
-
572 
-
573  void append(ptrdiff_t n, char c) {
-
574  std::uninitialized_fill_n(data + size, n, c);
-
575  size += n;
-
576  }
-
577 
-
578  void append(char c) { data[size++] = c; }
-
579 
-
580  void remove_trailing(char c) {
-
581  while (data[size - 1] == c) --size;
-
582  }
-
583 };
-
584 
-
585 // Writes the exponent exp in the form "[+-]d{2,3}" to buffer.
-
586 template <typename Handler>
-
587 FMT_FUNC void write_exponent(int exp, Handler &&h) {
-
588  FMT_ASSERT(-1000 < exp && exp < 1000, "exponent out of range");
-
589  if (exp < 0) {
-
590  h.append('-');
-
591  exp = -exp;
-
592  } else {
-
593  h.append('+');
-
594  }
-
595  if (exp >= 100) {
-
596  h.append(static_cast<char>('0' + exp / 100));
-
597  exp %= 100;
-
598  const char *d = data::DIGITS + exp * 2;
-
599  h.append(d[0]);
-
600  h.append(d[1]);
-
601  } else {
-
602  const char *d = data::DIGITS + exp * 2;
-
603  h.append(d[0]);
-
604  h.append(d[1]);
-
605  }
-
606 }
-
607 
-
608 struct fill {
-
609  size_t n;
-
610  void operator()(char *buf) const {
-
611  buf[0] = '0';
-
612  buf[1] = '.';
-
613  std::uninitialized_fill_n(buf + 2, n, '0');
-
614  }
-
615 };
-
616 
-
617 // The number is given as v = f * pow(10, exp), where f has size digits.
-
618 template <typename Handler>
- -
620  int size, int exp, Handler &&handler) {
-
621  if (!params.fixed) {
-
622  // Insert a decimal point after the first digit and add an exponent.
-
623  handler.insert(1, '.');
-
624  exp += size - 1;
-
625  if (size < params.num_digits)
-
626  handler.append(params.num_digits - size, '0');
-
627  handler.append(params.upper ? 'E' : 'e');
-
628  write_exponent(exp, handler);
-
629  return;
-
630  }
-
631  // pow(10, full_exp - 1) <= v <= pow(10, full_exp).
-
632  int full_exp = size + exp;
-
633  const int exp_threshold = 21;
-
634  if (size <= full_exp && full_exp <= exp_threshold) {
-
635  // 1234e7 -> 12340000000[.0+]
-
636  handler.append(full_exp - size, '0');
-
637  int num_zeros = params.num_digits - full_exp;
-
638  if (num_zeros > 0 && params.trailing_zeros) {
-
639  handler.append('.');
-
640  handler.append(num_zeros, '0');
-
641  }
-
642  } else if (full_exp > 0) {
-
643  // 1234e-2 -> 12.34[0+]
-
644  handler.insert(full_exp, '.');
-
645  if (!params.trailing_zeros) {
-
646  // Remove trailing zeros.
-
647  handler.remove_trailing('0');
-
648  } else if (params.num_digits > size) {
-
649  // Add trailing zeros.
-
650  ptrdiff_t num_zeros = params.num_digits - size;
-
651  handler.append(num_zeros, '0');
-
652  }
-
653  } else {
-
654  // 1234e-6 -> 0.001234
-
655  handler.insert(0, 2 - full_exp, fill{to_unsigned(-full_exp)});
-
656  }
-
657 }
-
658 
-
659 struct char_counter {
-
660  ptrdiff_t size;
-
661 
-
662  template <typename F>
-
663  void insert(ptrdiff_t, ptrdiff_t n, F) { size += n; }
-
664  void insert(ptrdiff_t, char) { ++size; }
-
665  void append(ptrdiff_t n, char) { size += n; }
-
666  void append(char) { ++size; }
-
667  void remove_trailing(char) {}
-
668 };
-
669 
-
670 // Converts format specifiers into parameters for digit generation and computes
-
671 // output buffer size for a number in the range [pow(10, exp - 1), pow(10, exp)
-
672 // or 0 if exp == 1.
- -
674  int exp, buffer &buf) {
-
675  auto params = gen_digits_params();
-
676  int num_digits = specs.precision >= 0 ? specs.precision : 6;
-
677  switch (specs.type) {
-
678  case 'G':
-
679  params.upper = true;
- -
681  case '\0': case 'g':
-
682  params.trailing_zeros = (specs.flags & HASH_FLAG) != 0;
-
683  if (-4 <= exp && exp < num_digits + 1) {
-
684  params.fixed = true;
-
685  if (!specs.type && params.trailing_zeros && exp >= 0)
-
686  num_digits = exp + 1;
-
687  }
-
688  break;
-
689  case 'F':
-
690  params.upper = true;
- -
692  case 'f': {
-
693  params.fixed = true;
-
694  params.trailing_zeros = true;
-
695  int adjusted_min_digits = num_digits + exp;
-
696  if (adjusted_min_digits > 0)
-
697  num_digits = adjusted_min_digits;
-
698  break;
-
699  }
-
700  case 'E':
-
701  params.upper = true;
- -
703  case 'e':
-
704  ++num_digits;
-
705  break;
-
706  }
-
707  params.num_digits = num_digits;
-
708  char_counter counter{num_digits};
-
709  grisu2_prettify(params, params.num_digits, exp - num_digits, counter);
-
710  buf.resize(to_unsigned(counter.size));
-
711  return params;
-
712 }
-
713 
-
714 template <typename Double>
-
715 FMT_FUNC typename std::enable_if<sizeof(Double) == sizeof(uint64_t), bool>::type
- -
717  FMT_ASSERT(value >= 0, "value is negative");
-
718  if (value == 0) {
-
719  gen_digits_params params = process_specs(specs, 1, buf);
-
720  const size_t size = 1;
-
721  buf[0] = '0';
-
722  grisu2_prettify(params, size, 0, prettify_handler(buf, size));
-
723  return true;
-
724  }
-
725 
-
726  fp fp_value(value);
-
727  fp lower, upper; // w^- and w^+ in the Grisu paper.
-
728  fp_value.compute_boundaries(lower, upper);
-
729 
-
730  // Find a cached power of 10 close to 1 / upper and use it to scale upper.
-
731  const int min_exp = -60; // alpha in Grisu.
-
732  int cached_exp = 0; // K in Grisu.
-
733  auto cached_pow = get_cached_power( // \tilde{c}_{-k} in Grisu.
-
734  min_exp - (upper.e + fp::significand_size), cached_exp);
-
735  cached_exp = -cached_exp;
-
736  upper = upper * cached_pow; // \tilde{M}^+ in Grisu.
-
737  --upper.f; // \tilde{M}^+ - 1 ulp -> M^+_{\downarrow}.
-
738  fp one(1ull << -upper.e, upper.e);
-
739  // hi (p1 in Grisu) contains the most significant digits of scaled_upper.
-
740  // hi = floor(upper / one).
-
741  uint32_t hi = static_cast<uint32_t>(upper.f >> -one.e);
-
742  int exp = count_digits(hi); // kappa in Grisu.
-
743  gen_digits_params params = process_specs(specs, cached_exp + exp, buf);
-
744  fp_value.normalize();
-
745  fp scaled_value = fp_value * cached_pow;
-
746  lower = lower * cached_pow; // \tilde{M}^- in Grisu.
-
747  ++lower.f; // \tilde{M}^- + 1 ulp -> M^-_{\uparrow}.
-
748  uint64_t delta = upper.f - lower.f;
-
749  fp diff = upper - scaled_value; // wp_w in Grisu.
-
750  // lo (p2 in Grisu) contains the least significants digits of scaled_upper.
-
751  // lo = supper % one.
-
752  uint64_t lo = upper.f & (one.f - 1);
-
753  int size = 0;
-
754  if (!grisu2_gen_digits(buf.data(), size, hi, lo, exp, delta, one, diff,
-
755  params.num_digits)) {
-
756  buf.clear();
-
757  return false;
-
758  }
-
759  grisu2_prettify(params, size, cached_exp + exp, prettify_handler(buf, size));
-
760  return true;
-
761 }
-
762 
-
763 template <typename Double>
- -
765  core_format_specs spec) {
-
766  // Buffer capacity must be non-zero, otherwise MSVC's vsnprintf_s will fail.
-
767  FMT_ASSERT(buf.capacity() != 0, "empty buffer");
-
768 
-
769  // Build format string.
-
770  enum { MAX_FORMAT_SIZE = 10}; // longest format: %#-*.*Lg
-
771  char format[MAX_FORMAT_SIZE];
-
772  char *format_ptr = format;
-
773  *format_ptr++ = '%';
-
774  if (spec.has(HASH_FLAG))
-
775  *format_ptr++ = '#';
-
776  if (spec.precision >= 0) {
-
777  *format_ptr++ = '.';
-
778  *format_ptr++ = '*';
-
779  }
-
780  if (std::is_same<Double, long double>::value)
-
781  *format_ptr++ = 'L';
-
782  *format_ptr++ = spec.type;
-
783  *format_ptr = '\0';
-
784 
-
785  // Format using snprintf.
-
786  char *start = FMT_NULL;
-
787  for (;;) {
-
788  std::size_t buffer_size = buf.capacity();
-
789  start = &buf[0];
- -
791  start, buffer_size, format, spec.precision, value);
-
792  if (result >= 0) {
-
793  unsigned n = internal::to_unsigned(result);
-
794  if (n < buf.capacity()) {
-
795  buf.resize(n);
-
796  break; // The buffer is large enough - continue with formatting.
-
797  }
-
798  buf.reserve(n + 1);
-
799  } else {
-
800  // If result is negative we ask to increase the capacity by at least 1,
-
801  // but as std::vector, the buffer grows exponentially.
-
802  buf.reserve(buf.capacity() + 1);
-
803  }
-
804  }
-
805 }
-
806 } // namespace internal
-
807 
-
808 #if FMT_USE_WINDOWS_H
-
809 
-
810 FMT_FUNC internal::utf8_to_utf16::utf8_to_utf16(string_view s) {
-
811  static const char ERROR_MSG[] = "cannot convert string from UTF-8 to UTF-16";
-
812  if (s.size() > INT_MAX)
-
813  FMT_THROW(windows_error(ERROR_INVALID_PARAMETER, ERROR_MSG));
-
814  int s_size = static_cast<int>(s.size());
-
815  if (s_size == 0) {
-
816  // MultiByteToWideChar does not support zero length, handle separately.
-
817  buffer_.resize(1);
-
818  buffer_[0] = 0;
-
819  return;
-
820  }
-
821 
-
822  int length = MultiByteToWideChar(
-
823  CP_UTF8, MB_ERR_INVALID_CHARS, s.data(), s_size, FMT_NULL, 0);
-
824  if (length == 0)
-
825  FMT_THROW(windows_error(GetLastError(), ERROR_MSG));
-
826  buffer_.resize(length + 1);
-
827  length = MultiByteToWideChar(
-
828  CP_UTF8, MB_ERR_INVALID_CHARS, s.data(), s_size, &buffer_[0], length);
-
829  if (length == 0)
-
830  FMT_THROW(windows_error(GetLastError(), ERROR_MSG));
-
831  buffer_[length] = 0;
-
832 }
-
833 
-
834 FMT_FUNC internal::utf16_to_utf8::utf16_to_utf8(wstring_view s) {
-
835  if (int error_code = convert(s)) {
-
836  FMT_THROW(windows_error(error_code,
-
837  "cannot convert string from UTF-16 to UTF-8"));
-
838  }
-
839 }
-
840 
-
841 FMT_FUNC int internal::utf16_to_utf8::convert(wstring_view s) {
-
842  if (s.size() > INT_MAX)
-
843  return ERROR_INVALID_PARAMETER;
-
844  int s_size = static_cast<int>(s.size());
-
845  if (s_size == 0) {
-
846  // WideCharToMultiByte does not support zero length, handle separately.
-
847  buffer_.resize(1);
-
848  buffer_[0] = 0;
-
849  return 0;
-
850  }
-
851 
-
852  int length = WideCharToMultiByte(
-
853  CP_UTF8, 0, s.data(), s_size, FMT_NULL, 0, FMT_NULL, FMT_NULL);
-
854  if (length == 0)
-
855  return GetLastError();
-
856  buffer_.resize(length + 1);
-
857  length = WideCharToMultiByte(
-
858  CP_UTF8, 0, s.data(), s_size, &buffer_[0], length, FMT_NULL, FMT_NULL);
-
859  if (length == 0)
-
860  return GetLastError();
-
861  buffer_[length] = 0;
-
862  return 0;
-
863 }
-
864 
-
865 FMT_FUNC void windows_error::init(
-
866  int err_code, string_view format_str, format_args args) {
-
867  error_code_ = err_code;
- -
869  internal::format_windows_error(buffer, err_code, vformat(format_str, args));
-
870  std::runtime_error &base = *this;
-
871  base = std::runtime_error(to_string(buffer));
-
872 }
-
873 
-
874 FMT_FUNC void internal::format_windows_error(
-
875  internal::buffer &out, int error_code, string_view message) FMT_NOEXCEPT {
-
876  FMT_TRY {
-
877  wmemory_buffer buf;
-
878  buf.resize(inline_buffer_size);
-
879  for (;;) {
-
880  wchar_t *system_message = &buf[0];
-
881  int result = FormatMessageW(
-
882  FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
-
883  FMT_NULL, error_code, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
-
884  system_message, static_cast<uint32_t>(buf.size()), FMT_NULL);
-
885  if (result != 0) {
-
886  utf16_to_utf8 utf8_message;
-
887  if (utf8_message.convert(system_message) == ERROR_SUCCESS) {
-
888  writer w(out);
-
889  w.write(message);
-
890  w.write(": ");
-
891  w.write(utf8_message);
-
892  return;
-
893  }
-
894  break;
-
895  }
-
896  if (GetLastError() != ERROR_INSUFFICIENT_BUFFER)
-
897  break; // Can't get error message, report error code instead.
-
898  buf.resize(buf.size() * 2);
-
899  }
-
900  } FMT_CATCH(...) {}
-
901  format_error_code(out, error_code, message);
-
902 }
-
903 
-
904 #endif // FMT_USE_WINDOWS_H
-
905 
- - -
908  FMT_TRY {
-
909  memory_buffer buf;
- -
911  for (;;) {
-
912  char *system_message = &buf[0];
-
913  int result = safe_strerror(error_code, system_message, buf.size());
-
914  if (result == 0) {
-
915  writer w(out);
-
916  w.write(message);
-
917  w.write(": ");
-
918  w.write(system_message);
-
919  return;
-
920  }
-
921  if (result != ERANGE)
-
922  break; // Can't get error message, report error code instead.
-
923  buf.resize(buf.size() * 2);
-
924  }
-
925  } FMT_CATCH(...) {}
-
926  format_error_code(out, error_code, message);
-
927 }
-
928 
-
929 FMT_FUNC void internal::error_handler::on_error(const char *message) {
-
930  FMT_THROW(format_error(message));
-
931 }
-
932 
- - -
935  report_error(format_system_error, error_code, message);
-
936 }
-
937 
-
938 #if FMT_USE_WINDOWS_H
-
939 FMT_FUNC void report_windows_error(
- -
941  report_error(internal::format_windows_error, error_code, message);
-
942 }
-
943 #endif
-
944 
-
945 FMT_FUNC void vprint(std::FILE *f, string_view format_str, format_args args) {
- -
947  internal::vformat_to(buffer, format_str,
- -
949  std::fwrite(buffer.data(), 1, buffer.size(), f);
-
950 }
-
951 
-
952 FMT_FUNC void vprint(std::FILE *f, wstring_view format_str, wformat_args args) {
- -
954  internal::vformat_to(buffer, format_str, args);
-
955  std::fwrite(buffer.data(), sizeof(wchar_t), buffer.size(), f);
-
956 }
-
957 
-
958 FMT_FUNC void vprint(string_view format_str, format_args args) {
-
959  vprint(stdout, format_str, args);
-
960 }
-
961 
-
962 FMT_FUNC void vprint(wstring_view format_str, wformat_args args) {
-
963  vprint(stdout, format_str, args);
-
964 }
-
965 
- -
967 
-
968 #ifdef _MSC_VER
-
969 # pragma warning(pop)
-
970 #endif
-
971 
-
972 #endif // FMT_FORMAT_INL_H_
+Go to the documentation of this file.
1 // Formatting library for C++
2 //
3 // Copyright (c) 2012 - 2016, Victor Zverovich
4 // All rights reserved.
5 //
6 // For the license information refer to format.h.
7 
8 #ifndef FMT_FORMAT_INL_H_
9 #define FMT_FORMAT_INL_H_
10 
11 #include "format.h"
12 
13 #include <string.h>
14 
15 #include <cctype>
16 #include <cerrno>
17 #include <climits>
18 #include <cmath>
19 #include <cstdarg>
20 #include <cstddef> // for std::ptrdiff_t
21 #include <cstring> // for std::memmove
22 #if !defined(FMT_STATIC_THOUSANDS_SEPARATOR)
23 # include <locale>
24 #endif
25 
26 #if FMT_USE_WINDOWS_H
27 # if !defined(FMT_HEADER_ONLY) && !defined(WIN32_LEAN_AND_MEAN)
28 # define WIN32_LEAN_AND_MEAN
29 # endif
30 # if defined(NOMINMAX) || defined(FMT_WIN_MINMAX)
31 # include <windows.h>
32 # else
33 # define NOMINMAX
34 # include <windows.h>
35 # undef NOMINMAX
36 # endif
37 #endif
38 
39 #if FMT_EXCEPTIONS
40 # define FMT_TRY try
41 # define FMT_CATCH(x) catch (x)
42 #else
43 # define FMT_TRY if (true)
44 # define FMT_CATCH(x) if (false)
45 #endif
46 
47 #ifdef _MSC_VER
48 # pragma warning(push)
49 # pragma warning(disable: 4127) // conditional expression is constant
50 # pragma warning(disable: 4702) // unreachable code
51 // Disable deprecation warning for strerror. The latter is not called but
52 // MSVC fails to detect it.
53 # pragma warning(disable: 4996)
54 #endif
55 
56 // Dummy implementations of strerror_r and strerror_s called if corresponding
57 // system functions are not available.
58 inline fmt::internal::null<> strerror_r(int, char *, ...) {
59  return fmt::internal::null<>();
60 }
61 inline fmt::internal::null<> strerror_s(char *, std::size_t, ...) {
62  return fmt::internal::null<>();
63 }
64 
66 
67 namespace {
68 
69 #ifndef _MSC_VER
70 # define FMT_SNPRINTF snprintf
71 #else // _MSC_VER
72 inline int fmt_snprintf(char *buffer, size_t size, const char *format, ...) {
73  va_list args;
74  va_start(args, format);
75  int result = vsnprintf_s(buffer, size, _TRUNCATE, format, args);
76  va_end(args);
77  return result;
78 }
79 # define FMT_SNPRINTF fmt_snprintf
80 #endif // _MSC_VER
81 
82 #if defined(_WIN32) && defined(__MINGW32__) && !defined(__NO_ISOCEXT)
83 # define FMT_SWPRINTF snwprintf
84 #else
85 # define FMT_SWPRINTF swprintf
86 #endif // defined(_WIN32) && defined(__MINGW32__) && !defined(__NO_ISOCEXT)
87 
88 typedef void (*FormatFunc)(internal::buffer &, int, string_view);
89 
90 // Portable thread-safe version of strerror.
91 // Sets buffer to point to a string describing the error code.
92 // This can be either a pointer to a string stored in buffer,
93 // or a pointer to some static immutable string.
94 // Returns one of the following values:
95 // 0 - success
96 // ERANGE - buffer is not large enough to store the error message
97 // other - failure
98 // Buffer should be at least of size 1.
99 int safe_strerror(
100  int error_code, char *&buffer, std::size_t buffer_size) FMT_NOEXCEPT {
101  FMT_ASSERT(buffer != FMT_NULL && buffer_size != 0, "invalid buffer");
102 
103  class dispatcher {
104  private:
105  int error_code_;
106  char *&buffer_;
107  std::size_t buffer_size_;
108 
109  // A noop assignment operator to avoid bogus warnings.
110  void operator=(const dispatcher &) {}
111 
112  // Handle the result of XSI-compliant version of strerror_r.
113  int handle(int result) {
114  // glibc versions before 2.13 return result in errno.
115  return result == -1 ? errno : result;
116  }
117 
118  // Handle the result of GNU-specific version of strerror_r.
119  int handle(char *message) {
120  // If the buffer is full then the message is probably truncated.
121  if (message == buffer_ && strlen(buffer_) == buffer_size_ - 1)
122  return ERANGE;
123  buffer_ = message;
124  return 0;
125  }
126 
127  // Handle the case when strerror_r is not available.
128  int handle(internal::null<>) {
129  return fallback(strerror_s(buffer_, buffer_size_, error_code_));
130  }
131 
132  // Fallback to strerror_s when strerror_r is not available.
133  int fallback(int result) {
134  // If the buffer is full then the message is probably truncated.
135  return result == 0 && strlen(buffer_) == buffer_size_ - 1 ?
136  ERANGE : result;
137  }
138 
139 #if !FMT_MSC_VER
140  // Fallback to strerror if strerror_r and strerror_s are not available.
141  int fallback(internal::null<>) {
142  errno = 0;
143  buffer_ = strerror(error_code_);
144  return errno;
145  }
146 #endif
147 
148  public:
149  dispatcher(int err_code, char *&buf, std::size_t buf_size)
150  : error_code_(err_code), buffer_(buf), buffer_size_(buf_size) {}
151 
152  int run() {
153  return handle(strerror_r(error_code_, buffer_, buffer_size_));
154  }
155  };
156  return dispatcher(error_code, buffer, buffer_size).run();
157 }
158 
159 void format_error_code(internal::buffer &out, int error_code,
160  string_view message) FMT_NOEXCEPT {
161  // Report error code making sure that the output fits into
162  // inline_buffer_size to avoid dynamic memory allocation and potential
163  // bad_alloc.
164  out.resize(0);
165  static const char SEP[] = ": ";
166  static const char ERROR_STR[] = "error ";
167  // Subtract 2 to account for terminating null characters in SEP and ERROR_STR.
168  std::size_t error_code_size = sizeof(SEP) + sizeof(ERROR_STR) - 2;
169  typedef internal::int_traits<int>::main_type main_type;
170  main_type abs_value = static_cast<main_type>(error_code);
171  if (internal::is_negative(error_code)) {
172  abs_value = 0 - abs_value;
173  ++error_code_size;
174  }
175  error_code_size += internal::to_unsigned(internal::count_digits(abs_value));
176  writer w(out);
177  if (message.size() <= inline_buffer_size - error_code_size) {
178  w.write(message);
179  w.write(SEP);
180  }
181  w.write(ERROR_STR);
182  w.write(error_code);
183  assert(out.size() <= inline_buffer_size);
184 }
185 
186 void report_error(FormatFunc func, int error_code,
187  string_view message) FMT_NOEXCEPT {
188  memory_buffer full_message;
189  func(full_message, error_code, message);
190  // Use Writer::data instead of Writer::c_str to avoid potential memory
191  // allocation.
192  std::fwrite(full_message.data(), full_message.size(), 1, stderr);
193  std::fputc('\n', stderr);
194 }
195 } // namespace
196 
198  const char8_t *data = s.data();
199  size_t num_code_points = 0;
200  for (size_t i = 0, size = s.size(); i != size; ++i) {
201  if ((data[i] & 0xc0) != 0x80)
202  ++num_code_points;
203  }
204  return num_code_points;
205 }
206 
207 #if !defined(FMT_STATIC_THOUSANDS_SEPARATOR)
208 namespace internal {
209 
210 template <typename Locale>
211 locale_ref::locale_ref(const Locale &loc) : locale_(&loc) {
212  static_assert(std::is_same<Locale, std::locale>::value, "");
213 }
214 
215 template <typename Locale>
216 Locale locale_ref::get() const {
217  static_assert(std::is_same<Locale, std::locale>::value, "");
218  return locale_ ? *static_cast<const std::locale*>(locale_) : std::locale();
219 }
220 
221 template <typename Char>
223  return std::use_facet<std::numpunct<Char> >(
224  loc.get<std::locale>()).thousands_sep();
225 }
226 }
227 #else
228 template <typename Char>
230  return FMT_STATIC_THOUSANDS_SEPARATOR;
231 }
232 #endif
233 
234 FMT_FUNC void system_error::init(
235  int err_code, string_view format_str, format_args args) {
236  error_code_ = err_code;
238  format_system_error(buffer, err_code, vformat(format_str, args));
239  std::runtime_error &base = *this;
240  base = std::runtime_error(to_string(buffer));
241 }
242 
243 namespace internal {
244 template <typename T>
246  char *buf, std::size_t size, const char *format, int precision, T value) {
247  return precision < 0 ?
248  FMT_SNPRINTF(buf, size, format, value) :
249  FMT_SNPRINTF(buf, size, format, precision, value);
250 }
251 
252 template <typename T>
254  wchar_t *buf, std::size_t size, const wchar_t *format, int precision,
255  T value) {
256  return precision < 0 ?
257  FMT_SWPRINTF(buf, size, format, value) :
258  FMT_SWPRINTF(buf, size, format, precision, value);
259 }
260 
261 template <typename T>
262 const char basic_data<T>::DIGITS[] =
263  "0001020304050607080910111213141516171819"
264  "2021222324252627282930313233343536373839"
265  "4041424344454647484950515253545556575859"
266  "6061626364656667686970717273747576777879"
267  "8081828384858687888990919293949596979899";
268 
269 #define FMT_POWERS_OF_10(factor) \
270  factor * 10, \
271  factor * 100, \
272  factor * 1000, \
273  factor * 10000, \
274  factor * 100000, \
275  factor * 1000000, \
276  factor * 10000000, \
277  factor * 100000000, \
278  factor * 1000000000
279 
280 template <typename T>
281 const uint32_t basic_data<T>::POWERS_OF_10_32[] = {
282  1, FMT_POWERS_OF_10(1)
283 };
284 
285 template <typename T>
286 const uint32_t basic_data<T>::ZERO_OR_POWERS_OF_10_32[] = {
287  0, FMT_POWERS_OF_10(1)
288 };
289 
290 template <typename T>
291 const uint64_t basic_data<T>::ZERO_OR_POWERS_OF_10_64[] = {
292  0,
293  FMT_POWERS_OF_10(1),
294  FMT_POWERS_OF_10(1000000000ull),
295  10000000000000000000ull
296 };
297 
298 // Normalized 64-bit significands of pow(10, k), for k = -348, -340, ..., 340.
299 // These are generated by support/compute-powers.py.
300 template <typename T>
301 const uint64_t basic_data<T>::POW10_SIGNIFICANDS[] = {
302  0xfa8fd5a0081c0288, 0xbaaee17fa23ebf76, 0x8b16fb203055ac76,
303  0xcf42894a5dce35ea, 0x9a6bb0aa55653b2d, 0xe61acf033d1a45df,
304  0xab70fe17c79ac6ca, 0xff77b1fcbebcdc4f, 0xbe5691ef416bd60c,
305  0x8dd01fad907ffc3c, 0xd3515c2831559a83, 0x9d71ac8fada6c9b5,
306  0xea9c227723ee8bcb, 0xaecc49914078536d, 0x823c12795db6ce57,
307  0xc21094364dfb5637, 0x9096ea6f3848984f, 0xd77485cb25823ac7,
308  0xa086cfcd97bf97f4, 0xef340a98172aace5, 0xb23867fb2a35b28e,
309  0x84c8d4dfd2c63f3b, 0xc5dd44271ad3cdba, 0x936b9fcebb25c996,
310  0xdbac6c247d62a584, 0xa3ab66580d5fdaf6, 0xf3e2f893dec3f126,
311  0xb5b5ada8aaff80b8, 0x87625f056c7c4a8b, 0xc9bcff6034c13053,
312  0x964e858c91ba2655, 0xdff9772470297ebd, 0xa6dfbd9fb8e5b88f,
313  0xf8a95fcf88747d94, 0xb94470938fa89bcf, 0x8a08f0f8bf0f156b,
314  0xcdb02555653131b6, 0x993fe2c6d07b7fac, 0xe45c10c42a2b3b06,
315  0xaa242499697392d3, 0xfd87b5f28300ca0e, 0xbce5086492111aeb,
316  0x8cbccc096f5088cc, 0xd1b71758e219652c, 0x9c40000000000000,
317  0xe8d4a51000000000, 0xad78ebc5ac620000, 0x813f3978f8940984,
318  0xc097ce7bc90715b3, 0x8f7e32ce7bea5c70, 0xd5d238a4abe98068,
319  0x9f4f2726179a2245, 0xed63a231d4c4fb27, 0xb0de65388cc8ada8,
320  0x83c7088e1aab65db, 0xc45d1df942711d9a, 0x924d692ca61be758,
321  0xda01ee641a708dea, 0xa26da3999aef774a, 0xf209787bb47d6b85,
322  0xb454e4a179dd1877, 0x865b86925b9bc5c2, 0xc83553c5c8965d3d,
323  0x952ab45cfa97a0b3, 0xde469fbd99a05fe3, 0xa59bc234db398c25,
324  0xf6c69a72a3989f5c, 0xb7dcbf5354e9bece, 0x88fcf317f22241e2,
325  0xcc20ce9bd35c78a5, 0x98165af37b2153df, 0xe2a0b5dc971f303a,
326  0xa8d9d1535ce3b396, 0xfb9b7cd9a4a7443c, 0xbb764c4ca7a44410,
327  0x8bab8eefb6409c1a, 0xd01fef10a657842c, 0x9b10a4e5e9913129,
328  0xe7109bfba19c0c9d, 0xac2820d9623bf429, 0x80444b5e7aa7cf85,
329  0xbf21e44003acdd2d, 0x8e679c2f5e44ff8f, 0xd433179d9c8cb841,
330  0x9e19db92b4e31ba9, 0xeb96bf6ebadf77d9, 0xaf87023b9bf0ee6b,
331 };
332 
333 // Binary exponents of pow(10, k), for k = -348, -340, ..., 340, corresponding
334 // to significands above.
335 template <typename T>
336 const int16_t basic_data<T>::POW10_EXPONENTS[] = {
337  -1220, -1193, -1166, -1140, -1113, -1087, -1060, -1034, -1007, -980, -954,
338  -927, -901, -874, -847, -821, -794, -768, -741, -715, -688, -661,
339  -635, -608, -582, -555, -529, -502, -475, -449, -422, -396, -369,
340  -343, -316, -289, -263, -236, -210, -183, -157, -130, -103, -77,
341  -50, -24, 3, 30, 56, 83, 109, 136, 162, 189, 216,
342  242, 269, 295, 322, 348, 375, 402, 428, 455, 481, 508,
343  534, 561, 588, 614, 641, 667, 694, 720, 747, 774, 800,
344  827, 853, 880, 907, 933, 960, 986, 1013, 1039, 1066
345 };
346 
347 template <typename T> const char basic_data<T>::FOREGROUND_COLOR[] = "\x1b[38;2;";
348 template <typename T> const char basic_data<T>::BACKGROUND_COLOR[] = "\x1b[48;2;";
349 template <typename T> const char basic_data<T>::RESET_COLOR[] = "\x1b[0m";
350 template <typename T> const wchar_t basic_data<T>::WRESET_COLOR[] = L"\x1b[0m";
351 
352 // A handmade floating-point number f * pow(2, e).
353 class fp {
354  private:
355  typedef uint64_t significand_type;
356 
357  // All sizes are in bits.
358  static FMT_CONSTEXPR_DECL const int char_size =
359  std::numeric_limits<unsigned char>::digits;
360  // Subtract 1 to account for an implicit most significant bit in the
361  // normalized form.
362  static FMT_CONSTEXPR_DECL const int double_significand_size =
363  std::numeric_limits<double>::digits - 1;
364  static FMT_CONSTEXPR_DECL const uint64_t implicit_bit =
365  1ull << double_significand_size;
366 
367  public:
368  significand_type f;
369  int e;
370 
371  static FMT_CONSTEXPR_DECL const int significand_size =
372  sizeof(significand_type) * char_size;
373 
374  fp(): f(0), e(0) {}
375  fp(uint64_t f_val, int e_val): f(f_val), e(e_val) {}
376 
377  // Constructs fp from an IEEE754 double. It is a template to prevent compile
378  // errors on platforms where double is not IEEE754.
379  template <typename Double>
380  explicit fp(Double d) {
381  // Assume double is in the format [sign][exponent][significand].
382  typedef std::numeric_limits<Double> limits;
383  const int double_size = static_cast<int>(sizeof(Double) * char_size);
384  const int exponent_size =
385  double_size - double_significand_size - 1; // -1 for sign
386  const uint64_t significand_mask = implicit_bit - 1;
387  const uint64_t exponent_mask = (~0ull >> 1) & ~significand_mask;
388  const int exponent_bias = (1 << exponent_size) - limits::max_exponent - 1;
389  auto u = bit_cast<uint64_t>(d);
390  auto biased_e = (u & exponent_mask) >> double_significand_size;
391  f = u & significand_mask;
392  if (biased_e != 0)
393  f += implicit_bit;
394  else
395  biased_e = 1; // Subnormals use biased exponent 1 (min exponent).
396  e = static_cast<int>(biased_e - exponent_bias - double_significand_size);
397  }
398 
399  // Normalizes the value converted from double and multiplied by (1 << SHIFT).
400  template <int SHIFT = 0>
401  void normalize() {
402  // Handle subnormals.
403  auto shifted_implicit_bit = implicit_bit << SHIFT;
404  while ((f & shifted_implicit_bit) == 0) {
405  f <<= 1;
406  --e;
407  }
408  // Subtract 1 to account for hidden bit.
409  auto offset = significand_size - double_significand_size - SHIFT - 1;
410  f <<= offset;
411  e -= offset;
412  }
413 
414  // Compute lower and upper boundaries (m^- and m^+ in the Grisu paper), where
415  // a boundary is a value half way between the number and its predecessor
416  // (lower) or successor (upper). The upper boundary is normalized and lower
417  // has the same exponent but may be not normalized.
418  void compute_boundaries(fp &lower, fp &upper) const {
419  lower = f == implicit_bit ?
420  fp((f << 2) - 1, e - 2) : fp((f << 1) - 1, e - 1);
421  upper = fp((f << 1) + 1, e - 1);
422  upper.normalize<1>(); // 1 is to account for the exponent shift above.
423  lower.f <<= lower.e - upper.e;
424  lower.e = upper.e;
425  }
426 };
427 
428 // Returns an fp number representing x - y. Result may not be normalized.
429 inline fp operator-(fp x, fp y) {
430  FMT_ASSERT(x.f >= y.f && x.e == y.e, "invalid operands");
431  return fp(x.f - y.f, x.e);
432 }
433 
434 // Computes an fp number r with r.f = x.f * y.f / pow(2, 64) rounded to nearest
435 // with half-up tie breaking, r.e = x.e + y.e + 64. Result may not be normalized.
436 FMT_API fp operator*(fp x, fp y);
437 
438 // Returns cached power (of 10) c_k = c_k.f * pow(2, c_k.e) such that its
439 // (binary) exponent satisfies min_exponent <= c_k.e <= min_exponent + 3.
440 FMT_API fp get_cached_power(int min_exponent, int &pow10_exponent);
441 
443  // Multiply 32-bit parts of significands.
444  uint64_t mask = (1ULL << 32) - 1;
445  uint64_t a = x.f >> 32, b = x.f & mask;
446  uint64_t c = y.f >> 32, d = y.f & mask;
447  uint64_t ac = a * c, bc = b * c, ad = a * d, bd = b * d;
448  // Compute mid 64-bit of result and round.
449  uint64_t mid = (bd >> 32) + (ad & mask) + (bc & mask) + (1U << 31);
450  return fp(ac + (ad >> 32) + (bc >> 32) + (mid >> 32), x.e + y.e + 64);
451 }
452 
453 FMT_FUNC fp get_cached_power(int min_exponent, int &pow10_exponent) {
454  const double one_over_log2_10 = 0.30102999566398114; // 1 / log2(10)
455  int index = static_cast<int>(std::ceil(
456  (min_exponent + fp::significand_size - 1) * one_over_log2_10));
457  // Decimal exponent of the first (smallest) cached power of 10.
458  const int first_dec_exp = -348;
459  // Difference between 2 consecutive decimal exponents in cached powers of 10.
460  const int dec_exp_step = 8;
461  index = (index - first_dec_exp - 1) / dec_exp_step + 1;
462  pow10_exponent = first_dec_exp + index * dec_exp_step;
463  return fp(data::POW10_SIGNIFICANDS[index], data::POW10_EXPONENTS[index]);
464 }
465 
467  char *buf, int &size, int max_digits, uint64_t delta,
468  uint64_t remainder, uint64_t exp, uint64_t diff, int &exp10) {
469  while (remainder < diff && delta - remainder >= exp &&
470  (remainder + exp < diff || diff - remainder > remainder + exp - diff)) {
471  --buf[size - 1];
472  remainder += exp;
473  }
474  if (size > max_digits) {
475  --size;
476  ++exp10;
477  if (buf[size] >= '5')
478  return false;
479  }
480  return true;
481 }
482 
483 // Generates output using Grisu2 digit-gen algorithm.
485  char *buf, int &size, uint32_t hi, uint64_t lo, int &exp,
486  uint64_t delta, const fp &one, const fp &diff, int max_digits) {
487  // Generate digits for the most significant part (hi).
488  while (exp > 0) {
489  uint32_t digit = 0;
490  // This optimization by miloyip reduces the number of integer divisions by
491  // one per iteration.
492  switch (exp) {
493  case 10: digit = hi / 1000000000; hi %= 1000000000; break;
494  case 9: digit = hi / 100000000; hi %= 100000000; break;
495  case 8: digit = hi / 10000000; hi %= 10000000; break;
496  case 7: digit = hi / 1000000; hi %= 1000000; break;
497  case 6: digit = hi / 100000; hi %= 100000; break;
498  case 5: digit = hi / 10000; hi %= 10000; break;
499  case 4: digit = hi / 1000; hi %= 1000; break;
500  case 3: digit = hi / 100; hi %= 100; break;
501  case 2: digit = hi / 10; hi %= 10; break;
502  case 1: digit = hi; hi = 0; break;
503  default:
504  FMT_ASSERT(false, "invalid number of digits");
505  }
506  if (digit != 0 || size != 0)
507  buf[size++] = static_cast<char>('0' + digit);
508  --exp;
509  uint64_t remainder = (static_cast<uint64_t>(hi) << -one.e) + lo;
510  if (remainder <= delta || size > max_digits) {
511  return grisu2_round(
512  buf, size, max_digits, delta, remainder,
513  static_cast<uint64_t>(data::POWERS_OF_10_32[exp]) << -one.e,
514  diff.f, exp);
515  }
516  }
517  // Generate digits for the least significant part (lo).
518  for (;;) {
519  lo *= 10;
520  delta *= 10;
521  char digit = static_cast<char>(lo >> -one.e);
522  if (digit != 0 || size != 0)
523  buf[size++] = static_cast<char>('0' + digit);
524  lo &= one.f - 1;
525  --exp;
526  if (lo < delta || size > max_digits) {
527  return grisu2_round(buf, size, max_digits, delta, lo, one.f,
528  diff.f * data::POWERS_OF_10_32[-exp], exp);
529  }
530  }
531 }
532 
533 #if FMT_CLANG_VERSION
534 # define FMT_FALLTHROUGH [[clang::fallthrough]];
535 #elif FMT_GCC_VERSION >= 700
536 # define FMT_FALLTHROUGH [[gnu::fallthrough]];
537 #else
538 # define FMT_FALLTHROUGH
539 #endif
540 
543  bool fixed;
544  bool upper;
546 };
547 
549  char *data;
550  ptrdiff_t size;
552 
553  explicit prettify_handler(buffer &b, ptrdiff_t n)
554  : data(b.data()), size(n), buf(b) {}
556  assert(buf.size() >= to_unsigned(size));
557  buf.resize(to_unsigned(size));
558  }
559 
560  template <typename F>
561  void insert(ptrdiff_t pos, ptrdiff_t n, F f) {
562  std::memmove(data + pos + n, data + pos, to_unsigned(size - pos));
563  f(data + pos);
564  size += n;
565  }
566 
567  void insert(ptrdiff_t pos, char c) {
568  std::memmove(data + pos + 1, data + pos, to_unsigned(size - pos));
569  data[pos] = c;
570  ++size;
571  }
572 
573  void append(ptrdiff_t n, char c) {
574  std::uninitialized_fill_n(data + size, n, c);
575  size += n;
576  }
577 
578  void append(char c) { data[size++] = c; }
579 
580  void remove_trailing(char c) {
581  while (data[size - 1] == c) --size;
582  }
583 };
584 
585 // Writes the exponent exp in the form "[+-]d{2,3}" to buffer.
586 template <typename Handler>
587 FMT_FUNC void write_exponent(int exp, Handler &&h) {
588  FMT_ASSERT(-1000 < exp && exp < 1000, "exponent out of range");
589  if (exp < 0) {
590  h.append('-');
591  exp = -exp;
592  } else {
593  h.append('+');
594  }
595  if (exp >= 100) {
596  h.append(static_cast<char>('0' + exp / 100));
597  exp %= 100;
598  const char *d = data::DIGITS + exp * 2;
599  h.append(d[0]);
600  h.append(d[1]);
601  } else {
602  const char *d = data::DIGITS + exp * 2;
603  h.append(d[0]);
604  h.append(d[1]);
605  }
606 }
607 
608 struct fill {
609  size_t n;
610  void operator()(char *buf) const {
611  buf[0] = '0';
612  buf[1] = '.';
613  std::uninitialized_fill_n(buf + 2, n, '0');
614  }
615 };
616 
617 // The number is given as v = f * pow(10, exp), where f has size digits.
618 template <typename Handler>
620  int size, int exp, Handler &&handler) {
621  if (!params.fixed) {
622  // Insert a decimal point after the first digit and add an exponent.
623  handler.insert(1, '.');
624  exp += size - 1;
625  if (size < params.num_digits)
626  handler.append(params.num_digits - size, '0');
627  handler.append(params.upper ? 'E' : 'e');
628  write_exponent(exp, handler);
629  return;
630  }
631  // pow(10, full_exp - 1) <= v <= pow(10, full_exp).
632  int full_exp = size + exp;
633  const int exp_threshold = 21;
634  if (size <= full_exp && full_exp <= exp_threshold) {
635  // 1234e7 -> 12340000000[.0+]
636  handler.append(full_exp - size, '0');
637  int num_zeros = params.num_digits - full_exp;
638  if (num_zeros > 0 && params.trailing_zeros) {
639  handler.append('.');
640  handler.append(num_zeros, '0');
641  }
642  } else if (full_exp > 0) {
643  // 1234e-2 -> 12.34[0+]
644  handler.insert(full_exp, '.');
645  if (!params.trailing_zeros) {
646  // Remove trailing zeros.
647  handler.remove_trailing('0');
648  } else if (params.num_digits > size) {
649  // Add trailing zeros.
650  ptrdiff_t num_zeros = params.num_digits - size;
651  handler.append(num_zeros, '0');
652  }
653  } else {
654  // 1234e-6 -> 0.001234
655  handler.insert(0, 2 - full_exp, fill{to_unsigned(-full_exp)});
656  }
657 }
658 
659 struct char_counter {
660  ptrdiff_t size;
661 
662  template <typename F>
663  void insert(ptrdiff_t, ptrdiff_t n, F) { size += n; }
664  void insert(ptrdiff_t, char) { ++size; }
665  void append(ptrdiff_t n, char) { size += n; }
666  void append(char) { ++size; }
667  void remove_trailing(char) {}
668 };
669 
670 // Converts format specifiers into parameters for digit generation and computes
671 // output buffer size for a number in the range [pow(10, exp - 1), pow(10, exp)
672 // or 0 if exp == 1.
674  int exp, buffer &buf) {
675  auto params = gen_digits_params();
676  int num_digits = specs.precision >= 0 ? specs.precision : 6;
677  switch (specs.type) {
678  case 'G':
679  params.upper = true;
681  case '\0': case 'g':
682  params.trailing_zeros = (specs.flags & HASH_FLAG) != 0;
683  if (-4 <= exp && exp < num_digits + 1) {
684  params.fixed = true;
685  if (!specs.type && params.trailing_zeros && exp >= 0)
686  num_digits = exp + 1;
687  }
688  break;
689  case 'F':
690  params.upper = true;
692  case 'f': {
693  params.fixed = true;
694  params.trailing_zeros = true;
695  int adjusted_min_digits = num_digits + exp;
696  if (adjusted_min_digits > 0)
697  num_digits = adjusted_min_digits;
698  break;
699  }
700  case 'E':
701  params.upper = true;
703  case 'e':
704  ++num_digits;
705  break;
706  }
707  params.num_digits = num_digits;
708  char_counter counter{num_digits};
709  grisu2_prettify(params, params.num_digits, exp - num_digits, counter);
710  buf.resize(to_unsigned(counter.size));
711  return params;
712 }
713 
714 template <typename Double>
717  FMT_ASSERT(value >= 0, "value is negative");
718  if (value == 0) {
719  gen_digits_params params = process_specs(specs, 1, buf);
720  const size_t size = 1;
721  buf[0] = '0';
722  grisu2_prettify(params, size, 0, prettify_handler(buf, size));
723  return true;
724  }
725 
726  fp fp_value(value);
727  fp lower, upper; // w^- and w^+ in the Grisu paper.
728  fp_value.compute_boundaries(lower, upper);
729 
730  // Find a cached power of 10 close to 1 / upper and use it to scale upper.
731  const int min_exp = -60; // alpha in Grisu.
732  int cached_exp = 0; // K in Grisu.
733  auto cached_pow = get_cached_power( // \tilde{c}_{-k} in Grisu.
734  min_exp - (upper.e + fp::significand_size), cached_exp);
735  cached_exp = -cached_exp;
736  upper = upper * cached_pow; // \tilde{M}^+ in Grisu.
737  --upper.f; // \tilde{M}^+ - 1 ulp -> M^+_{\downarrow}.
738  fp one(1ull << -upper.e, upper.e);
739  // hi (p1 in Grisu) contains the most significant digits of scaled_upper.
740  // hi = floor(upper / one).
741  uint32_t hi = static_cast<uint32_t>(upper.f >> -one.e);
742  int exp = count_digits(hi); // kappa in Grisu.
743  gen_digits_params params = process_specs(specs, cached_exp + exp, buf);
744  fp_value.normalize();
745  fp scaled_value = fp_value * cached_pow;
746  lower = lower * cached_pow; // \tilde{M}^- in Grisu.
747  ++lower.f; // \tilde{M}^- + 1 ulp -> M^-_{\uparrow}.
748  uint64_t delta = upper.f - lower.f;
749  fp diff = upper - scaled_value; // wp_w in Grisu.
750  // lo (p2 in Grisu) contains the least significants digits of scaled_upper.
751  // lo = supper % one.
752  uint64_t lo = upper.f & (one.f - 1);
753  int size = 0;
754  if (!grisu2_gen_digits(buf.data(), size, hi, lo, exp, delta, one, diff,
755  params.num_digits)) {
756  buf.clear();
757  return false;
758  }
759  grisu2_prettify(params, size, cached_exp + exp, prettify_handler(buf, size));
760  return true;
761 }
762 
763 template <typename Double>
765  core_format_specs spec) {
766  // Buffer capacity must be non-zero, otherwise MSVC's vsnprintf_s will fail.
767  FMT_ASSERT(buf.capacity() != 0, "empty buffer");
768 
769  // Build format string.
770  enum { MAX_FORMAT_SIZE = 10}; // longest format: %#-*.*Lg
771  char format[MAX_FORMAT_SIZE];
772  char *format_ptr = format;
773  *format_ptr++ = '%';
774  if (spec.has(HASH_FLAG))
775  *format_ptr++ = '#';
776  if (spec.precision >= 0) {
777  *format_ptr++ = '.';
778  *format_ptr++ = '*';
779  }
780  if (std::is_same<Double, long double>::value)
781  *format_ptr++ = 'L';
782  *format_ptr++ = spec.type;
783  *format_ptr = '\0';
784 
785  // Format using snprintf.
786  char *start = FMT_NULL;
787  for (;;) {
788  std::size_t buffer_size = buf.capacity();
789  start = &buf[0];
791  start, buffer_size, format, spec.precision, value);
792  if (result >= 0) {
793  unsigned n = internal::to_unsigned(result);
794  if (n < buf.capacity()) {
795  buf.resize(n);
796  break; // The buffer is large enough - continue with formatting.
797  }
798  buf.reserve(n + 1);
799  } else {
800  // If result is negative we ask to increase the capacity by at least 1,
801  // but as std::vector, the buffer grows exponentially.
802  buf.reserve(buf.capacity() + 1);
803  }
804  }
805 }
806 } // namespace internal
807 
808 #if FMT_USE_WINDOWS_H
809 
810 FMT_FUNC internal::utf8_to_utf16::utf8_to_utf16(string_view s) {
811  static const char ERROR_MSG[] = "cannot convert string from UTF-8 to UTF-16";
812  if (s.size() > INT_MAX)
813  FMT_THROW(windows_error(ERROR_INVALID_PARAMETER, ERROR_MSG));
814  int s_size = static_cast<int>(s.size());
815  if (s_size == 0) {
816  // MultiByteToWideChar does not support zero length, handle separately.
817  buffer_.resize(1);
818  buffer_[0] = 0;
819  return;
820  }
821 
822  int length = MultiByteToWideChar(
823  CP_UTF8, MB_ERR_INVALID_CHARS, s.data(), s_size, FMT_NULL, 0);
824  if (length == 0)
825  FMT_THROW(windows_error(GetLastError(), ERROR_MSG));
826  buffer_.resize(length + 1);
827  length = MultiByteToWideChar(
828  CP_UTF8, MB_ERR_INVALID_CHARS, s.data(), s_size, &buffer_[0], length);
829  if (length == 0)
830  FMT_THROW(windows_error(GetLastError(), ERROR_MSG));
831  buffer_[length] = 0;
832 }
833 
834 FMT_FUNC internal::utf16_to_utf8::utf16_to_utf8(wstring_view s) {
835  if (int error_code = convert(s)) {
836  FMT_THROW(windows_error(error_code,
837  "cannot convert string from UTF-16 to UTF-8"));
838  }
839 }
840 
841 FMT_FUNC int internal::utf16_to_utf8::convert(wstring_view s) {
842  if (s.size() > INT_MAX)
843  return ERROR_INVALID_PARAMETER;
844  int s_size = static_cast<int>(s.size());
845  if (s_size == 0) {
846  // WideCharToMultiByte does not support zero length, handle separately.
847  buffer_.resize(1);
848  buffer_[0] = 0;
849  return 0;
850  }
851 
852  int length = WideCharToMultiByte(
853  CP_UTF8, 0, s.data(), s_size, FMT_NULL, 0, FMT_NULL, FMT_NULL);
854  if (length == 0)
855  return GetLastError();
856  buffer_.resize(length + 1);
857  length = WideCharToMultiByte(
858  CP_UTF8, 0, s.data(), s_size, &buffer_[0], length, FMT_NULL, FMT_NULL);
859  if (length == 0)
860  return GetLastError();
861  buffer_[length] = 0;
862  return 0;
863 }
864 
865 FMT_FUNC void windows_error::init(
866  int err_code, string_view format_str, format_args args) {
867  error_code_ = err_code;
869  internal::format_windows_error(buffer, err_code, vformat(format_str, args));
870  std::runtime_error &base = *this;
871  base = std::runtime_error(to_string(buffer));
872 }
873 
874 FMT_FUNC void internal::format_windows_error(
876  FMT_TRY {
877  wmemory_buffer buf;
879  for (;;) {
880  wchar_t *system_message = &buf[0];
881  int result = FormatMessageW(
882  FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
883  FMT_NULL, error_code, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
884  system_message, static_cast<uint32_t>(buf.size()), FMT_NULL);
885  if (result != 0) {
886  utf16_to_utf8 utf8_message;
887  if (utf8_message.convert(system_message) == ERROR_SUCCESS) {
888  writer w(out);
889  w.write(message);
890  w.write(": ");
891  w.write(utf8_message);
892  return;
893  }
894  break;
895  }
896  if (GetLastError() != ERROR_INSUFFICIENT_BUFFER)
897  break; // Can't get error message, report error code instead.
898  buf.resize(buf.size() * 2);
899  }
900  } FMT_CATCH(...) {}
901  format_error_code(out, error_code, message);
902 }
903 
904 #endif // FMT_USE_WINDOWS_H
905 
908  FMT_TRY {
909  memory_buffer buf;
911  for (;;) {
912  char *system_message = &buf[0];
913  int result = safe_strerror(error_code, system_message, buf.size());
914  if (result == 0) {
915  writer w(out);
916  w.write(message);
917  w.write(": ");
918  w.write(system_message);
919  return;
920  }
921  if (result != ERANGE)
922  break; // Can't get error message, report error code instead.
923  buf.resize(buf.size() * 2);
924  }
925  } FMT_CATCH(...) {}
926  format_error_code(out, error_code, message);
927 }
928 
929 FMT_FUNC void internal::error_handler::on_error(const char *message) {
930  FMT_THROW(format_error(message));
931 }
932 
935  report_error(format_system_error, error_code, message);
936 }
937 
938 #if FMT_USE_WINDOWS_H
939 FMT_FUNC void report_windows_error(
941  report_error(internal::format_windows_error, error_code, message);
942 }
943 #endif
944 
945 FMT_FUNC void vprint(std::FILE *f, string_view format_str, format_args args) {
947  internal::vformat_to(buffer, format_str,
949  std::fwrite(buffer.data(), 1, buffer.size(), f);
950 }
951 
952 FMT_FUNC void vprint(std::FILE *f, wstring_view format_str, wformat_args args) {
954  internal::vformat_to(buffer, format_str, args);
955  std::fwrite(buffer.data(), sizeof(wchar_t), buffer.size(), f);
956 }
957 
958 FMT_FUNC void vprint(string_view format_str, format_args args) {
959  vprint(stdout, format_str, args);
960 }
961 
962 FMT_FUNC void vprint(wstring_view format_str, wformat_args args) {
963  vprint(stdout, format_str, args);
964 }
965 
967 
968 #ifdef _MSC_VER
969 # pragma warning(pop)
970 #endif
971 
972 #endif // FMT_FORMAT_INL_H_
void append(ptrdiff_t n, char)
Definition: format-inl.h:665
+ +
#define FMT_TRY
Definition: format-inl.h:40
+ +
std::size_t capacity() const
Definition: core.h:253
+ +
void insert(ptrdiff_t, ptrdiff_t n, F)
Definition: format-inl.h:663
+ +
void vprint(std::FILE *f, const text_style &ts, const S &format, basic_format_args< typename buffer_context< Char >::type > args)
Definition: color.h:517
+ +
Dest bit_cast(const Source &source)
Definition: format.h:242
+
static const char RESET_COLOR[]
Definition: format.h:756
+
bool grisu2_round(char *buf, int &size, int max_digits, uint64_t delta, uint64_t remainder, uint64_t exp, uint64_t diff, int &exp10)
Definition: format-inl.h:466
+
void insert(ptrdiff_t pos, char c)
Definition: format-inl.h:567
+
fmt::internal::null strerror_s(char *, std::size_t,...)
Definition: format-inl.h:61
+ + + +
prettify_handler(buffer &b, ptrdiff_t n)
Definition: format-inl.h:553
+
std::enable_if< sizeof(Double)==sizeof(uint64_t), bool >::type grisu2_format(Double value, buffer &buf, core_format_specs specs)
Definition: format-inl.h:716
+
#define FMT_CONSTEXPR_DECL
Definition: core.h:70
+
gen_digits_params process_specs(const core_format_specs &specs, int exp, buffer &buf)
Definition: format-inl.h:673
+
void compute_boundaries(fp &lower, fp &upper) const
Definition: format-inl.h:418
+
void operator()(char *buf) const
Definition: format-inl.h:610
+
void report_system_error(int error_code, fmt::string_view message)
Definition: format-inl.h:933
+
fp operator-(fp x, fp y)
Definition: format-inl.h:429
+
fp get_cached_power(int min_exponent, int &pow10_exponent)
Definition: format-inl.h:453
+
#define FMT_END_NAMESPACE
Definition: core.h:153
+
#define FMT_THROW(x)
Definition: format.h:115
+ + + +
std::size_t size() const
Definition: core.h:250
+ + + +
int count_digits(uint64_t n)
Definition: format.h:777
+ + + + +
void write_exponent(int exp, Handler &&h)
Definition: format-inl.h:587
+ +
buffer_context< Char >::type::iterator vformat_to(internal::basic_buffer< Char > &buf, basic_string_view< Char > format_str, basic_format_args< typename buffer_context< Char >::type > args)
Definition: format.h:3233
+ +
basic_memory_buffer< char > memory_buffer
Definition: format.h:553
+ + +
size_t size() const
Definition: core.h:389
+
static const wchar_t WRESET_COLOR[]
Definition: format.h:757
+
fp(uint64_t f_val, int e_val)
Definition: format-inl.h:375
+
basic_buffer< char > buffer
Definition: core.h:291
+
#define FMT_FUNC
Definition: format.h:3547
+
static const char FOREGROUND_COLOR[]
Definition: format.h:754
+ + +
void resize(std::size_t new_size)
Definition: core.h:264
+
#define FMT_SNPRINTF
Definition: format-inl.h:70
+ + + + +
void on_error(const char *message)
Definition: format-inl.h:929
+
#define FMT_API
Definition: core.h:166
+ +
fmt::internal::null strerror_r(int, char *,...)
Definition: format-inl.h:58
+
static const uint32_t ZERO_OR_POWERS_OF_10_32[]
Definition: format.h:749
+
significand_type f
Definition: format-inl.h:368
+ +
std::make_unsigned< Int >::type to_unsigned(Int value)
Definition: core.h:208
+
std::basic_string< typename char_t< S >::type > format(const S &format_str, const Args &...args)
Definition: core.h:1454
+ +
basic_writer< back_insert_range< internal::buffer > > writer
Definition: format.h:361
+
fp operator*(fp x, fp y)
Definition: format-inl.h:442
+
#define FMT_CATCH(x)
Definition: format-inl.h:41
+ +
static const uint64_t ZERO_OR_POWERS_OF_10_64[]
Definition: format.h:750
+ +
#define FMT_SWPRINTF
Definition: format-inl.h:85
+ +
Char thousands_sep_impl(locale_ref loc)
Definition: format-inl.h:222
+
std::enable_if< std::numeric_limits< T >::is_signed, bool >::type is_negative(T value)
Definition: format.h:727
+
bool grisu2_gen_digits(char *buf, int &size, uint32_t hi, uint64_t lo, int &exp, uint64_t delta, const fp &one, const fp &diff, int max_digits)
Definition: format-inl.h:484
+
static const int16_t POW10_EXPONENTS[]
Definition: format.h:752
+
void reserve(std::size_t new_capacity)
Definition: core.h:273
+
#define FMT_NULL
Definition: core.h:107
+ +
void sprintf_format(Double value, internal::buffer &buf, core_format_specs spec)
Definition: format-inl.h:764
+
size_t count_code_points(basic_string_view< Char > s)
Definition: format.h:794
+
static const uint64_t POW10_SIGNIFICANDS[]
Definition: format.h:751
+
std::basic_string< Char > vformat(basic_string_view< Char > format_str, basic_format_args< typename buffer_context< Char >::type > args)
Definition: format.h:3410
+
static const char BACKGROUND_COLOR[]
Definition: format.h:755
+
char8_t
Definition: format.h:407
+
static const uint32_t POWERS_OF_10_32[]
Definition: format.h:748
+ + + +
#define FMT_FALLTHROUGH
Definition: format-inl.h:538
+
uint_least8_t flags
Definition: format.h:1102
+
#define FMT_NOEXCEPT
Definition: core.h:140
+ +
static const char DIGITS[]
Definition: format.h:753
+
std::string to_string(const T &value)
Definition: format.h:3209
+
#define FMT_ASSERT(condition, message)
Definition: core.h:170
+ + +
const Char * data() const
Definition: core.h:386
+ +
#define FMT_BEGIN_NAMESPACE
Definition: core.h:155
+ +
void grisu2_prettify(const gen_digits_params &params, int size, int exp, Handler &&handler)
Definition: format-inl.h:619
+ +
void format_system_error(internal::buffer &out, int error_code, string_view message)
Definition: format-inl.h:906
+
void write(int value)
Definition: format.h:2573
+
static const int significand_size
Definition: format-inl.h:371
+
unsigned count_digits(T n)
Definition: fmt_helper.h:47
+
void append(ptrdiff_t n, char c)
Definition: format-inl.h:573
+
basic_string_view< char > string_view
Definition: core.h:428
+ +
#define FMT_POWERS_OF_10(factor)
Definition: format-inl.h:269
+
void insert(ptrdiff_t, char)
Definition: format-inl.h:664
+
bool has(unsigned f) const
Definition: format.h:1106
+
void insert(ptrdiff_t pos, ptrdiff_t n, F f)
Definition: format-inl.h:561
+ +
- -
gen_digits_params process_specs(const core_format_specs &specs, int exp, buffer &buf)
Definition: format-inl.h:673
- -
void write(int value)
Definition: format.h:2573
- - -
void report_system_error(int error_code, fmt::string_view message)
Definition: format-inl.h:933
-
void insert(ptrdiff_t pos, char c)
Definition: format-inl.h:567
-
significand_type f
Definition: format-inl.h:368
- - -
void grisu2_prettify(const gen_digits_params &params, int size, int exp, Handler &&handler)
Definition: format-inl.h:619
- -
static const char BACKGROUND_COLOR[]
Definition: format.h:755
- -
#define FMT_API
Definition: core.h:166
- -
std::size_t size() const
Definition: core.h:250
-
std::size_t capacity() const
Definition: core.h:253
- - -
void format_system_error(internal::buffer &out, int error_code, string_view message)
Definition: format-inl.h:906
-
#define FMT_SNPRINTF
Definition: format-inl.h:70
-
fp(uint64_t f_val, int e_val)
Definition: format-inl.h:375
-
bool grisu2_round(char *buf, int &size, int max_digits, uint64_t delta, uint64_t remainder, uint64_t exp, uint64_t diff, int &exp10)
Definition: format-inl.h:466
-
Char thousands_sep_impl(locale_ref loc)
Definition: format-inl.h:222
-
void insert(ptrdiff_t, ptrdiff_t n, F)
Definition: format-inl.h:663
-
void compute_boundaries(fp &lower, fp &upper) const
Definition: format-inl.h:418
-
static const char DIGITS[]
Definition: format.h:753
-
bool grisu2_gen_digits(char *buf, int &size, uint32_t hi, uint64_t lo, int &exp, uint64_t delta, const fp &one, const fp &diff, int max_digits)
Definition: format-inl.h:484
-
static const char FOREGROUND_COLOR[]
Definition: format.h:754
-
void insert(ptrdiff_t, char)
Definition: format-inl.h:664
-
std::string to_string(const T &value)
Definition: format.h:3209
- - - - -
static const uint64_t POW10_SIGNIFICANDS[]
Definition: format.h:751
-
std::make_unsigned< Int >::type to_unsigned(Int value)
Definition: core.h:208
- -
#define FMT_TRY
Definition: format-inl.h:40
-
#define FMT_POWERS_OF_10(factor)
Definition: format-inl.h:269
- - -
#define FMT_NULL
Definition: core.h:107
-
void operator()(char *buf) const
Definition: format-inl.h:610
- - -
std::basic_string< Char > vformat(const S &format_str, basic_format_args< typename buffer_context< Char >::type > args)
Definition: core.h:1437
-
#define FMT_FALLTHROUGH
Definition: format-inl.h:538
- -
void vprint(std::FILE *f, const text_style &ts, const S &format, basic_format_args< typename buffer_context< Char >::type > args)
Definition: color.h:517
- -
std::enable_if< std::numeric_limits< T >::is_signed, bool >::type is_negative(T value)
Definition: format.h:727
-
#define FMT_NOEXCEPT
Definition: core.h:140
-
basic_string_view< wchar_t > wstring_view
Definition: core.h:429
-
bool has(unsigned f) const
Definition: format.h:1106
- -
void on_error(const char *message)
Definition: format-inl.h:929
- - -
#define FMT_END_NAMESPACE
Definition: core.h:153
-
basic_buffer< char > buffer
Definition: core.h:291
-
basic_memory_buffer< wchar_t > wmemory_buffer
Definition: format.h:554
- - - - -
fp operator*(fp x, fp y)
Definition: format-inl.h:442
-
size_t size() const
Definition: core.h:389
- - -
int count_digits(uint64_t n)
Definition: format.h:777
- - -
static const char RESET_COLOR[]
Definition: format.h:756
-
basic_string_view< char > string_view
Definition: core.h:428
-
static const int significand_size
Definition: format-inl.h:371
-
buffer_context< Char >::type::iterator vformat_to(internal::basic_buffer< Char > &buf, basic_string_view< Char > format_str, basic_format_args< typename buffer_context< Char >::type > args)
Definition: format.h:3233
- -
void insert(ptrdiff_t pos, ptrdiff_t n, F f)
Definition: format-inl.h:561
- -
void sprintf_format(Double value, internal::buffer &buf, core_format_specs spec)
Definition: format-inl.h:764
- -
void resize(std::size_t new_size)
Definition: core.h:264
-
size_t count_code_points(basic_string_view< Char > s)
Definition: format.h:794
-
#define FMT_ASSERT(condition, message)
Definition: core.h:170
-
static const uint32_t ZERO_OR_POWERS_OF_10_32[]
Definition: format.h:749
- -
const Char * data() const
Definition: core.h:386
- -
#define FMT_FUNC
Definition: format.h:3547
- - - -
static const uint64_t ZERO_OR_POWERS_OF_10_64[]
Definition: format.h:750
-
#define FMT_CATCH(x)
Definition: format-inl.h:41
- -
char8_t
Definition: format.h:407
- - -
static const wchar_t WRESET_COLOR[]
Definition: format.h:757
-
fmt::internal::null strerror_s(char *, std::size_t,...)
Definition: format-inl.h:61
-
#define FMT_BEGIN_NAMESPACE
Definition: core.h:155
-
void append(ptrdiff_t n, char c)
Definition: format-inl.h:573
-
unsigned count_digits(T n)
Definition: fmt_helper.h:47
-
basic_writer< back_insert_range< internal::buffer > > writer
Definition: format.h:361
-
std::enable_if< sizeof(Double)==sizeof(uint64_t), bool >::type grisu2_format(Double value, buffer &buf, core_format_specs specs)
Definition: format-inl.h:716
-
void write_exponent(int exp, Handler &&h)
Definition: format-inl.h:587
- -
fmt::internal::null strerror_r(int, char *,...)
Definition: format-inl.h:58
- -
void reserve(std::size_t new_capacity)
Definition: core.h:273
-
#define FMT_SWPRINTF
Definition: format-inl.h:85
-
fp operator-(fp x, fp y)
Definition: format-inl.h:429
-
void append(ptrdiff_t n, char)
Definition: format-inl.h:665
- -
prettify_handler(buffer &b, ptrdiff_t n)
Definition: format-inl.h:553
-
uint_least8_t flags
Definition: format.h:1102
-
fp get_cached_power(int min_exponent, int &pow10_exponent)
Definition: format-inl.h:453
-
basic_memory_buffer< char > memory_buffer
Definition: format.h:553
-
std::basic_string< typename char_t< S >::type > format(const S &format_str, const Args &... args)
Definition: core.h:1454
- -
static const int16_t POW10_EXPONENTS[]
Definition: format.h:752
-
#define FMT_THROW(x)
Definition: format.h:115
-
static const uint32_t POWERS_OF_10_32[]
Definition: format.h:748
-
#define FMT_CONSTEXPR_DECL
Definition: core.h:70
diff --git a/docs/format_8h.html b/docs/format_8h.html index 813a411..b59088a 100644 --- a/docs/format_8h.html +++ b/docs/format_8h.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: sdk_core/include/third_party/spdlog/spdlog/fmt/bundled/format.h File Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,40 @@ - + - - - - + +
@@ -449,7 +467,7 @@ Functions std::enable_if< sizeof(Double)==sizeof(uint64_t), bool >::type fmt::v5::internal::grisu2_format (Double value, buffer &buf, core_format_specs specs)   template<typename Double > -std::enable_if< sizeof(Double) !=sizeof(uint64_t), bool >::type fmt::v5::internal::grisu2_format (Double, buffer &, core_format_specs) +std::enable_if< sizeof(Double)!=sizeof(uint64_t), bool >::type fmt::v5::internal::grisu2_format (Double, buffer &, core_format_specs)   template<typename Double > void fmt::v5::internal::sprintf_format (Double value, internal::buffer &buf, core_format_specs spec) @@ -545,32 +563,30 @@ Functions template<typename S , typename Char = typename char_t< S >::type> buffer_context< Char >::type::iterator fmt::v5::vformat_to (internal::basic_buffer< Char > &buf, const S &format_str, basic_format_args< typename buffer_context< Char >::type > args)   -template<typename S , typename... Args, std::size_t SIZE = inline_buffer_size, typename Char = typename internal::char_t<S>::type> -buffer_context< Char >::type::iterator fmt::v5::format_to (basic_memory_buffer< Char, SIZE > &buf, const S &format_str, const Args &... args) -  +template<typename S , typename... Args, std::size_t SIZE = inline_buffer_size, typename Char = typename internal::char_t<S>::type> +buffer_context< Char >::type::iterator fmt::v5::format_to (basic_memory_buffer< Char, SIZE > &buf, const S &format_str, const Args &...args) +  template<typename String , typename OutputIt , typename... Args> std::enable_if< internal::is_output_iterator< OutputIt >::value, OutputIt >::type fmt::v5::vformat_to (OutputIt out, const String &format_str, typename format_args_t< OutputIt, typename char_t< String >::type >::type args)   -template<typename OutputIt , typename S , typename... Args> -std::enable_if< internal::is_string< S >::value &&internal::is_output_iterator< OutputIt >::value, OutputIt >::type fmt::v5::format_to (OutputIt out, const S &format_str, const Args &... args) -  -template<typename OutputIt , typename Char , typename ... Args> -format_arg_store< typename format_to_n_context< OutputIt, Char >::type, Args... > fmt::v5::make_format_to_n_args (const Args &... args) -  +template<typename OutputIt , typename S , typename... Args> +std::enable_if< internal::is_string< S >::value &&internal::is_output_iterator< OutputIt >::value, OutputIt >::type fmt::v5::format_to (OutputIt out, const S &format_str, const Args &...args) +  +template<typename OutputIt , typename Char , typename... Args> +format_arg_store< typename format_to_n_context< OutputIt, Char >::type, Args... > fmt::v5::make_format_to_n_args (const Args &...args) +  template<typename OutputIt , typename Char , typename... Args> std::enable_if< internal::is_output_iterator< OutputIt >::value, format_to_n_result< OutputIt > >::type fmt::v5::vformat_to_n (OutputIt out, std::size_t n, basic_string_view< Char > format_str, typename format_to_n_args< OutputIt, Char >::type args)   -template<typename OutputIt , typename S , typename... Args> -std::enable_if< internal::is_string< S >::value &&internal::is_output_iterator< OutputIt >::value, format_to_n_result< OutputIt > >::type fmt::v5::format_to_n (OutputIt out, std::size_t n, const S &format_str, const Args &... args) -  -template<typename... Args> -std::size_t fmt::v5::formatted_size (string_view format_str, const Args &... args) -  +template<typename OutputIt , typename S , typename... Args> +std::enable_if< internal::is_string< S >::value &&internal::is_output_iterator< OutputIt >::value, format_to_n_result< OutputIt > >::type fmt::v5::format_to_n (OutputIt out, std::size_t n, const S &format_str, const Args &...args) +  +template<typename... Args> +std::size_t fmt::v5::formatted_size (string_view format_str, const Args &...args) + 

Macro Definition Documentation

- -

◆ FMT_ALWAYS_INLINE

- +
@@ -580,13 +596,11 @@ Functions
-

Definition at line 824 of file format.h.

+

Definition at line 824 of file format.h.

- -

◆ FMT_CLANG_VERSION

- +
@@ -596,13 +610,11 @@ Functions
-

Definition at line 43 of file format.h.

+

Definition at line 43 of file format.h.

- -

◆ FMT_CUDA_VERSION

- +
@@ -612,13 +624,11 @@ Functions
-

Definition at line 57 of file format.h.

+

Definition at line 57 of file format.h.

- -

◆ FMT_FUNC

- +
@@ -628,13 +638,11 @@ Functions
-

Definition at line 3547 of file format.h.

+

Definition at line 3547 of file format.h.

- -

◆ FMT_HAS_BUILTIN

- +
@@ -648,13 +656,11 @@ Functions
-

Definition at line 91 of file format.h.

+

Definition at line 91 of file format.h.

- -

◆ FMT_ICC_VERSION

- +
@@ -664,13 +670,11 @@ Functions
-

Definition at line 51 of file format.h.

+

Definition at line 51 of file format.h.

- -

◆ FMT_SECURE_SCL

- +
@@ -680,13 +684,11 @@ Functions
-

Definition at line 81 of file format.h.

+

Definition at line 81 of file format.h.

- -

◆ FMT_STRING

- +
@@ -699,25 +701,17 @@ Functions
-Value:
[] { \
-
typedef typename std::remove_cv<std::remove_pointer< \
-
typename std::decay<decltype(s)>::type>::type>::type ct; \
-
struct str : fmt::compile_string { \
-
typedef ct char_type; \
-
FMT_CONSTEXPR operator fmt::basic_string_view<ct>() const { \
-
return {s, sizeof(s) / sizeof(ct) - 1}; \
-
} \
-
}; \
-
return str{}; \
-
}()
+Value:
[] { \
typedef typename std::remove_cv<std::remove_pointer< \
struct str : fmt::compile_string { \
typedef ct char_type; \
return {s, sizeof(s) / sizeof(ct) - 1}; \
} \
}; \
return str{}; \
}()
+ + +
#define FMT_CONSTEXPR
Definition: core.h:69
+
-

Definition at line 3513 of file format.h.

+

Definition at line 3513 of file format.h.

- -

◆ FMT_THROW

- +
@@ -731,13 +725,11 @@ Functions
-

Definition at line 115 of file format.h.

+

Definition at line 115 of file format.h.

- -

◆ FMT_UDL_TEMPLATE

- +
@@ -747,13 +739,11 @@ Functions
-

Definition at line 144 of file format.h.

+

Definition at line 144 of file format.h.

- -

◆ FMT_USE_EXTERN_TEMPLATES

- +
@@ -762,16 +752,15 @@ Functions
-Value:
((FMT_CLANG_VERSION >= 209 && __cplusplus >= 201103L) || \
- +Value:
((FMT_CLANG_VERSION >= 209 && __cplusplus >= 201103L) || \
#define FMT_CLANG_VERSION
Definition: format.h:43
+
#define FMT_GCC_VERSION
Definition: core.h:43
+
#define FMT_HAS_GXX_CXX11
Definition: core.h:49
-

Definition at line 149 of file format.h.

+

Definition at line 149 of file format.h.

- -

◆ FMT_USE_GRISU

- +
@@ -781,13 +770,11 @@ Functions
-

Definition at line 165 of file format.h.

+

Definition at line 165 of file format.h.

- -

◆ FMT_USE_TRAILING_RETURN

- +
@@ -797,13 +784,11 @@ Functions
-

Definition at line 161 of file format.h.

+

Definition at line 161 of file format.h.

- -

◆ FMT_USE_USER_DEFINED_LITERALS

- +
@@ -813,13 +798,11 @@ Functions
-

Definition at line 131 of file format.h.

+

Definition at line 131 of file format.h.

- -

◆ FMT_USE_WINDOWS_H

- +
@@ -829,26 +812,19 @@ Functions
-

Definition at line 1029 of file format.h.

+

Definition at line 1029 of file format.h.

- -
#define FMT_GCC_VERSION
Definition: core.h:43
-
#define FMT_CLANG_VERSION
Definition: format.h:43
-
#define FMT_HAS_GXX_CXX11
Definition: core.h:49
- - - diff --git a/docs/format_8h.js b/docs/format_8h.js index 6dffcac..5c11c6d 100644 --- a/docs/format_8h.js +++ b/docs/format_8h.js @@ -135,17 +135,17 @@ var format_8h = [ "end", "format_8h.html#a6d2eb5ad9f38abcc532e048b92070942", null ], [ "find", "format_8h.html#aaa8ec781ec26a204da9f38e66a8ede8f", null ], [ "find< false, char >", "format_8h.html#a5b9fc2504a981744ae35cf292930b4a6", null ], - [ "format_decimal", "format_8h.html#aebdab4a99bb740c29b106ac79bf9f158", null ], [ "format_decimal", "format_8h.html#af72d17ab37b4a11119c73b71200a7669", null ], - [ "format_decimal", "format_8h.html#ad284b384d0648be5afed9658e6d17da0", null ], [ "format_decimal", "format_8h.html#adae39d916b44943f034ed1d8f832c7e1", null ], + [ "format_decimal", "format_8h.html#ad284b384d0648be5afed9658e6d17da0", null ], + [ "format_decimal", "format_8h.html#aebdab4a99bb740c29b106ac79bf9f158", null ], [ "format_system_error", "format_8h.html#a7f211f565c9879fafad806b788dde60d", null ], - [ "format_to", "format_8h.html#a7b4b0ed85f1aff706d9c244031532b7d", null ], - [ "format_to", "format_8h.html#a7b65c56bc50b45bf62b20546b5a9d306", null ], - [ "format_to_n", "format_8h.html#aecb6cdf1f4e13bd0173f16ecc5946df5", null ], + [ "format_to", "format_8h.html#a313d461ccfeb46a474269b39d6157210", null ], + [ "format_to", "format_8h.html#a8a20d279f251620dbb1d59aaeb3f7fbd", null ], + [ "format_to_n", "format_8h.html#afd2370b282e0a28b3e4981adb2cd723e", null ], [ "format_uint", "format_8h.html#af5eb4df647fec81a1398d10f2e27da49", null ], [ "format_uint", "format_8h.html#a7c6be57189424e80f260e571b9804d68", null ], - [ "formatted_size", "format_8h.html#abb96e7271b2790a480399319747dd5b1", null ], + [ "formatted_size", "format_8h.html#aa9bd093b16b2a8d6e0e833a5db959631", null ], [ "grisu2_format", "format_8h.html#a270efa9d1d49796e04a96f764a68c8b5", null ], [ "grisu2_format", "format_8h.html#a48d02275b9e72a672b92ea3e7acfd656", null ], [ "handle_char_specs", "format_8h.html#ad26cf75c1e4ab48a7d4d2254a44001f0", null ], @@ -162,7 +162,7 @@ var format_8h = [ "join", "format_8h.html#ad376a5124e6d05579d3360db349aec39", null ], [ "lg", "format_8h.html#a53dd0b9003b32d9c4c07d008b8a1bebf", null ], [ "make_checked", "format_8h.html#a0fb9344a00e79ad8826591da20548963", null ], - [ "make_format_to_n_args", "format_8h.html#a01817fdc23bf5758e9466f02e29c0bc8", null ], + [ "make_format_to_n_args", "format_8h.html#ad3b4a0f750f29748c08ff9882f05a832", null ], [ "parse_align", "format_8h.html#aaee1761c014bc6a5ca7be7fcb48f6a1e", null ], [ "parse_arg_id", "format_8h.html#a2c52eadabf215a00fdc216702dbf0df6", null ], [ "parse_format_specs", "format_8h.html#ac584bbf50f1e0e44628a7a53c4ec9149", null ], @@ -173,19 +173,19 @@ var format_8h = [ "pointer_from", "format_8h.html#a91182ac859ac969e4f719d61cad002e1", null ], [ "ptr", "format_8h.html#a19f551b1c3abec2c3d40d85ab3ccee03", null ], [ "report_system_error", "format_8h.html#aede03e1a36d834c65a48c9349a085fc8", null ], - [ "reserve", "format_8h.html#a5f7253ee05af521286206b1ab24ad368", null ], [ "reserve", "format_8h.html#a9eee3495bac20bffa3ab73cedf950d75", null ], + [ "reserve", "format_8h.html#a5f7253ee05af521286206b1ab24ad368", null ], [ "set_dynamic_spec", "format_8h.html#aa59e73ee062ec382675c0e65d9123b5c", null ], [ "sprintf_format", "format_8h.html#a37f320718a8fbb4cf326d075f6332e93", null ], [ "thousands_sep", "format_8h.html#a22384733f113ad46c4b287aee4d19719", null ], [ "thousands_sep", "format_8h.html#a3e0d5b65fb0f03b9d75a8210ff3ffcd1", null ], [ "thousands_sep_impl", "format_8h.html#a80875403133fef6385e50480459b1136", null ], [ "to_char8_t", "format_8h.html#adc534aad72fd5f9db229cc9edf622771", null ], - [ "to_string", "format_8h.html#a07522969fe4d2aefef29e120aee66257", null ], [ "to_string", "format_8h.html#af7906102d07e0d93b609aef6c05fc27a", null ], + [ "to_string", "format_8h.html#a07522969fe4d2aefef29e120aee66257", null ], [ "to_wstring", "format_8h.html#aab6607dc16d02c9f81d025f93a15caa4", null ], + [ "vformat_to", "format_8h.html#a8634a26fe8408d673308c0fcdea0c6b2", null ], [ "vformat_to", "format_8h.html#a98b8a6fbc7cd86c22d8e2cb0c700665e", null ], [ "vformat_to", "format_8h.html#ac849a4087b1f888c968321696bf114ca", null ], - [ "vformat_to", "format_8h.html#a8634a26fe8408d673308c0fcdea0c6b2", null ], [ "vformat_to_n", "format_8h.html#a8df5e9fe475de8e789a43b8a40d60541", null ] ]; \ No newline at end of file diff --git a/docs/format_8h_source.html b/docs/format_8h_source.html index aa524da..ba12aff 100644 --- a/docs/format_8h_source.html +++ b/docs/format_8h_source.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: sdk_core/include/third_party/spdlog/spdlog/fmt/bundled/format.h Source File @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,40 @@
- + - - - - + +
@@ -91,3858 +109,530 @@ $(document).ready(function(){initNavTree('format_8h_source.html','');});
format.h
-Go to the documentation of this file.
1 /*
-
2  Formatting library for C++
-
3 
-
4  Copyright (c) 2012 - present, Victor Zverovich
-
5  All rights reserved.
-
6 
-
7  Redistribution and use in source and binary forms, with or without
-
8  modification, are permitted provided that the following conditions are met:
-
9 
-
10  1. Redistributions of source code must retain the above copyright notice, this
-
11  list of conditions and the following disclaimer.
-
12  2. Redistributions in binary form must reproduce the above copyright notice,
-
13  this list of conditions and the following disclaimer in the documentation
-
14  and/or other materials provided with the distribution.
-
15 
-
16  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
-
17  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-
18  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-
19  DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
-
20  ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-
21  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-
22  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
-
23  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-
24  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-
25  SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
26  */
-
27 
-
28 #ifndef FMT_FORMAT_H_
-
29 #define FMT_FORMAT_H_
-
30 
-
31 #include <algorithm>
-
32 #include <cassert>
-
33 #include <cmath>
-
34 #include <cstring>
-
35 #include <limits>
-
36 #include <memory>
-
37 #include <stdexcept>
-
38 #include <stdint.h>
-
39 
-
40 #ifdef __clang__
-
41 # define FMT_CLANG_VERSION (__clang_major__ * 100 + __clang_minor__)
-
42 #else
-
43 # define FMT_CLANG_VERSION 0
-
44 #endif
-
45 
-
46 #ifdef __INTEL_COMPILER
-
47 # define FMT_ICC_VERSION __INTEL_COMPILER
-
48 #elif defined(__ICL)
-
49 # define FMT_ICC_VERSION __ICL
-
50 #else
-
51 # define FMT_ICC_VERSION 0
-
52 #endif
-
53 
-
54 #ifdef __NVCC__
-
55 # define FMT_CUDA_VERSION (__CUDACC_VER_MAJOR__ * 100 + __CUDACC_VER_MINOR__)
-
56 #else
-
57 # define FMT_CUDA_VERSION 0
-
58 #endif
-
59 
-
60 #include "core.h"
-
61 
-
62 #if FMT_GCC_VERSION >= 406 || FMT_CLANG_VERSION
-
63 # pragma GCC diagnostic push
-
64 
-
65 // Disable the warning about declaration shadowing because it affects too
-
66 // many valid cases.
-
67 # pragma GCC diagnostic ignored "-Wshadow"
-
68 
-
69 // Disable the warning about nonliteral format strings because we construct
-
70 // them dynamically when falling back to snprintf for FP formatting.
-
71 # pragma GCC diagnostic ignored "-Wformat-nonliteral"
-
72 #endif
-
73 
-
74 # if FMT_CLANG_VERSION
-
75 # pragma GCC diagnostic ignored "-Wgnu-string-literal-operator-template"
-
76 # endif
-
77 
-
78 #ifdef _SECURE_SCL
-
79 # define FMT_SECURE_SCL _SECURE_SCL
-
80 #else
-
81 # define FMT_SECURE_SCL 0
-
82 #endif
-
83 
-
84 #if FMT_SECURE_SCL
-
85 # include <iterator>
-
86 #endif
-
87 
-
88 #ifdef __has_builtin
-
89 # define FMT_HAS_BUILTIN(x) __has_builtin(x)
-
90 #else
-
91 # define FMT_HAS_BUILTIN(x) 0
-
92 #endif
-
93 
-
94 #ifdef __GNUC_LIBSTD__
-
95 # define FMT_GNUC_LIBSTD_VERSION (__GNUC_LIBSTD__ * 100 + __GNUC_LIBSTD_MINOR__)
-
96 #endif
-
97 
-
98 #ifndef FMT_THROW
-
99 # if FMT_EXCEPTIONS
-
100 # if FMT_MSC_VER
- -
102 namespace internal {
-
103 template <typename Exception>
-
104 inline void do_throw(const Exception &x) {
-
105  // Silence unreachable code warnings in MSVC because these are nearly
-
106  // impossible to fix in a generic code.
-
107  volatile bool b = true;
-
108  if (b)
-
109  throw x;
-
110 }
-
111 }
- -
113 # define FMT_THROW(x) fmt::internal::do_throw(x)
-
114 # else
-
115 # define FMT_THROW(x) throw x
-
116 # endif
-
117 # else
-
118 # define FMT_THROW(x) do { static_cast<void>(sizeof(x)); assert(false); } while(false);
-
119 # endif
-
120 #endif
-
121 
-
122 #ifndef FMT_USE_USER_DEFINED_LITERALS
-
123 // For Intel's compiler and NVIDIA's compiler both it and the system gcc/msc
-
124 // must support UDLs.
-
125 # if (FMT_HAS_FEATURE(cxx_user_literals) || \
-
126  FMT_GCC_VERSION >= 407 || FMT_MSC_VER >= 1900) && \
-
127  (!(FMT_ICC_VERSION || FMT_CUDA_VERSION) || \
-
128  FMT_ICC_VERSION >= 1500 || FMT_CUDA_VERSION >= 700)
-
129 # define FMT_USE_USER_DEFINED_LITERALS 1
-
130 # else
-
131 # define FMT_USE_USER_DEFINED_LITERALS 0
-
132 # endif
-
133 #endif
-
134 
-
135 // EDG C++ Front End based compilers (icc, nvcc) do not currently support UDL
-
136 // templates.
-
137 #if FMT_USE_USER_DEFINED_LITERALS && \
-
138  FMT_ICC_VERSION == 0 && \
-
139  FMT_CUDA_VERSION == 0 && \
-
140  ((FMT_GCC_VERSION >= 600 && __cplusplus >= 201402L) || \
-
141  (defined(FMT_CLANG_VERSION) && FMT_CLANG_VERSION >= 304))
-
142 # define FMT_UDL_TEMPLATE 1
-
143 #else
-
144 # define FMT_UDL_TEMPLATE 0
-
145 #endif
-
146 
-
147 #ifndef FMT_USE_EXTERN_TEMPLATES
-
148 # ifndef FMT_HEADER_ONLY
-
149 # define FMT_USE_EXTERN_TEMPLATES \
-
150  ((FMT_CLANG_VERSION >= 209 && __cplusplus >= 201103L) || \
-
151  (FMT_GCC_VERSION >= 303 && FMT_HAS_GXX_CXX11))
-
152 # else
-
153 # define FMT_USE_EXTERN_TEMPLATES 0
-
154 # endif
-
155 #endif
-
156 
-
157 #if FMT_HAS_GXX_CXX11 || FMT_HAS_FEATURE(cxx_trailing_return) || \
-
158  FMT_MSC_VER >= 1600
-
159 # define FMT_USE_TRAILING_RETURN 1
-
160 #else
-
161 # define FMT_USE_TRAILING_RETURN 0
-
162 #endif
-
163 
-
164 #ifndef FMT_USE_GRISU
-
165 # define FMT_USE_GRISU 0
-
166 //# define FMT_USE_GRISU std::numeric_limits<double>::is_iec559
-
167 #endif
-
168 
-
169 // __builtin_clz is broken in clang with Microsoft CodeGen:
-
170 // https://github.com/fmtlib/fmt/issues/519
-
171 #ifndef _MSC_VER
-
172 # if FMT_GCC_VERSION >= 400 || FMT_HAS_BUILTIN(__builtin_clz)
-
173 # define FMT_BUILTIN_CLZ(n) __builtin_clz(n)
-
174 # endif
-
175 
-
176 # if FMT_GCC_VERSION >= 400 || FMT_HAS_BUILTIN(__builtin_clzll)
-
177 # define FMT_BUILTIN_CLZLL(n) __builtin_clzll(n)
-
178 # endif
-
179 #endif
-
180 
-
181 // Some compilers masquerade as both MSVC and GCC-likes or otherwise support
-
182 // __builtin_clz and __builtin_clzll, so only define FMT_BUILTIN_CLZ using the
-
183 // MSVC intrinsics if the clz and clzll builtins are not available.
-
184 #if FMT_MSC_VER && !defined(FMT_BUILTIN_CLZLL) && !defined(_MANAGED)
-
185 # include <intrin.h> // _BitScanReverse, _BitScanReverse64
-
186 
- -
188 namespace internal {
-
189 // Avoid Clang with Microsoft CodeGen's -Wunknown-pragmas warning.
-
190 # ifndef __clang__
-
191 # pragma intrinsic(_BitScanReverse)
-
192 # endif
-
193 inline uint32_t clz(uint32_t x) {
-
194  unsigned long r = 0;
-
195  _BitScanReverse(&r, x);
-
196 
-
197  assert(x != 0);
-
198  // Static analysis complains about using uninitialized data
-
199  // "r", but the only way that can happen is if "x" is 0,
-
200  // which the callers guarantee to not happen.
-
201 # pragma warning(suppress: 6102)
-
202  return 31 - r;
-
203 }
-
204 # define FMT_BUILTIN_CLZ(n) fmt::internal::clz(n)
-
205 
-
206 # if defined(_WIN64) && !defined(__clang__)
-
207 # pragma intrinsic(_BitScanReverse64)
-
208 # endif
-
209 
-
210 inline uint32_t clzll(uint64_t x) {
-
211  unsigned long r = 0;
-
212 # ifdef _WIN64
-
213  _BitScanReverse64(&r, x);
-
214 # else
-
215  // Scan the high 32 bits.
-
216  if (_BitScanReverse(&r, static_cast<uint32_t>(x >> 32)))
-
217  return 63 - (r + 32);
-
218 
-
219  // Scan the low 32 bits.
-
220  _BitScanReverse(&r, static_cast<uint32_t>(x));
-
221 # endif
-
222 
-
223  assert(x != 0);
-
224  // Static analysis complains about using uninitialized data
-
225  // "r", but the only way that can happen is if "x" is 0,
-
226  // which the callers guarantee to not happen.
-
227 # pragma warning(suppress: 6102)
-
228  return 63 - r;
-
229 }
-
230 # define FMT_BUILTIN_CLZLL(n) fmt::internal::clzll(n)
-
231 }
- -
233 #endif
-
234 
- -
236 namespace internal {
-
237 
-
238 // An equivalent of `*reinterpret_cast<Dest*>(&source)` that doesn't produce
-
239 // undefined behavior (e.g. due to type aliasing).
-
240 // Example: uint64_t d = bit_cast<uint64_t>(2.718);
-
241 template <typename Dest, typename Source>
-
242 inline Dest bit_cast(const Source& source) {
-
243  static_assert(sizeof(Dest) == sizeof(Source), "size mismatch");
-
244  Dest dest;
-
245  std::memcpy(&dest, &source, sizeof(dest));
-
246  return dest;
-
247 }
-
248 
-
249 // An implementation of begin and end for pre-C++11 compilers such as gcc 4.
-
250 template <typename C>
-
251 FMT_CONSTEXPR auto begin(const C &c) -> decltype(c.begin()) {
-
252  return c.begin();
-
253 }
-
254 template <typename T, std::size_t N>
-
255 FMT_CONSTEXPR T *begin(T (&array)[N]) FMT_NOEXCEPT { return array; }
-
256 template <typename C>
-
257 FMT_CONSTEXPR auto end(const C &c) -> decltype(c.end()) { return c.end(); }
-
258 template <typename T, std::size_t N>
-
259 FMT_CONSTEXPR T *end(T (&array)[N]) FMT_NOEXCEPT { return array + N; }
-
260 
-
261 // For std::result_of in gcc 4.4.
-
262 template <typename Result>
-
263 struct function {
-
264  template <typename T>
-
265  struct result { typedef Result type; };
-
266 };
-
267 
-
268 struct dummy_int {
-
269  int data[2];
-
270  operator int() const { return 0; }
-
271 };
-
272 typedef std::numeric_limits<internal::dummy_int> fputil;
-
273 
-
274 // Dummy implementations of system functions called if the latter are not
-
275 // available.
-
276 inline dummy_int isinf(...) { return dummy_int(); }
-
277 inline dummy_int _finite(...) { return dummy_int(); }
-
278 inline dummy_int isnan(...) { return dummy_int(); }
-
279 inline dummy_int _isnan(...) { return dummy_int(); }
-
280 
-
281 template <typename Allocator>
-
282 typename Allocator::value_type *allocate(Allocator& alloc, std::size_t n) {
-
283 #if __cplusplus >= 201103L || FMT_MSC_VER >= 1700
- -
285 #else
-
286  return alloc.allocate(n);
-
287 #endif
-
288 }
-
289 
-
290 // A helper function to suppress bogus "conditional expression is constant"
-
291 // warnings.
-
292 template <typename T>
-
293 inline T const_check(T value) { return value; }
-
294 } // namespace internal
- -
296 
-
297 namespace std {
-
298 // Standard permits specialization of std::numeric_limits. This specialization
-
299 // is used to resolve ambiguity between isinf and std::isinf in glibc:
-
300 // https://gcc.gnu.org/bugzilla/show_bug.cgi?id=48891
-
301 // and the same for isnan.
-
302 template <>
-
303 class numeric_limits<fmt::internal::dummy_int> :
-
304  public std::numeric_limits<int> {
-
305  public:
-
306  // Portable version of isinf.
-
307  template <typename T>
-
308  static bool isinfinity(T x) {
-
309  using namespace fmt::internal;
-
310  // The resolution "priority" is:
-
311  // isinf macro > std::isinf > ::isinf > fmt::internal::isinf
-
312  if (const_check(sizeof(isinf(x)) != sizeof(fmt::internal::dummy_int)))
-
313  return isinf(x) != 0;
-
314  return !_finite(static_cast<double>(x));
-
315  }
-
316 
-
317  // Portable version of isnan.
-
318  template <typename T>
-
319  static bool isnotanumber(T x) {
-
320  using namespace fmt::internal;
-
321  if (const_check(sizeof(isnan(x)) != sizeof(fmt::internal::dummy_int)))
-
322  return isnan(x) != 0;
-
323  return _isnan(static_cast<double>(x)) != 0;
-
324  }
-
325 };
-
326 } // namespace std
-
327 
- -
329 template <typename Range>
- -
331 
-
332 template <typename OutputIt, typename T = typename OutputIt::value_type>
- -
334  private:
-
335  OutputIt it_;
-
336 
-
337  // Unused yet.
-
338  typedef void sentinel;
-
339  sentinel end() const;
-
340 
-
341  public:
-
342  typedef OutputIt iterator;
-
343  typedef T value_type;
-
344 
-
345  explicit output_range(OutputIt it): it_(it) {}
-
346  OutputIt begin() const { return it_; }
-
347 };
-
348 
-
349 // A range where begin() returns back_insert_iterator.
-
350 template <typename Container>
- -
352  public output_range<std::back_insert_iterator<Container>> {
- -
354  public:
-
355  typedef typename Container::value_type value_type;
-
356 
-
357  back_insert_range(Container &c): base(std::back_inserter(c)) {}
-
358  back_insert_range(typename base::iterator it): base(it) {}
-
359 };
-
360 
- - -
363 
-
365 class format_error : public std::runtime_error {
-
366  public:
-
367  explicit format_error(const char *message)
-
368  : std::runtime_error(message) {}
-
369 
-
370  explicit format_error(const std::string &message)
-
371  : std::runtime_error(message) {}
-
372 };
-
373 
-
374 namespace internal {
-
375 
-
376 #if FMT_SECURE_SCL
-
377 template <typename T>
-
378 struct checked { typedef stdext::checked_array_iterator<T*> type; };
-
379 
-
380 // Make a checked iterator to avoid warnings on MSVC.
-
381 template <typename T>
-
382 inline stdext::checked_array_iterator<T*> make_checked(T *p, std::size_t size) {
-
383  return {p, size};
-
384 }
-
385 #else
-
386 template <typename T>
-
387 struct checked { typedef T *type; };
-
388 template <typename T>
-
389 inline T *make_checked(T *p, std::size_t) { return p; }
-
390 #endif
-
391 
-
392 template <typename T>
-
393 template <typename U>
-
394 void basic_buffer<T>::append(const U *begin, const U *end) {
-
395  std::size_t new_size = size_ + internal::to_unsigned(end - begin);
-
396  reserve(new_size);
-
397  std::uninitialized_copy(begin, end,
-
398  internal::make_checked(ptr_, capacity_) + size_);
-
399  size_ = new_size;
-
400 }
-
401 } // namespace internal
-
402 
-
403 // C++20 feature test, since r346892 Clang considers char8_t a fundamental
-
404 // type in this mode. If this is the case __cpp_char8_t will be defined.
-
405 #if !defined(__cpp_char8_t)
-
406 // A UTF-8 code unit type.
-
407 enum char8_t: unsigned char {};
-
408 #endif
-
409 
-
410 // A UTF-8 string view.
-
411 class u8string_view : public basic_string_view<char8_t> {
-
412  public:
- -
414 
-
415  u8string_view(const char *s):
-
416  basic_string_view<char8_t>(reinterpret_cast<const char8_t*>(s)) {}
-
417  u8string_view(const char *s, size_t count) FMT_NOEXCEPT:
-
418  basic_string_view<char8_t>(reinterpret_cast<const char8_t*>(s), count) {}
-
419 };
-
420 
-
421 #if FMT_USE_USER_DEFINED_LITERALS
-
422 inline namespace literals {
-
423 inline u8string_view operator"" _u(const char *s, std::size_t n) {
-
424  return {s, n};
-
425 }
-
426 }
-
427 #endif
-
428 
-
429 // The number of characters to store in the basic_memory_buffer object itself
-
430 // to avoid dynamic memory allocation.
-
431 enum { inline_buffer_size = 500 };
-
432 
-
462 template <typename T, std::size_t SIZE = inline_buffer_size,
-
463  typename Allocator = std::allocator<T> >
-
464 class basic_memory_buffer: private Allocator, public internal::basic_buffer<T> {
-
465  private:
-
466  T store_[SIZE];
-
467 
-
468  // Deallocate memory allocated by the buffer.
-
469  void deallocate() {
-
470  T* data = this->data();
-
471  if (data != store_) Allocator::deallocate(data, this->capacity());
-
472  }
-
473 
-
474  protected:
-
475  void grow(std::size_t size) FMT_OVERRIDE;
-
476 
-
477  public:
-
478  typedef T value_type;
-
479  typedef const T &const_reference;
-
480 
-
481  explicit basic_memory_buffer(const Allocator &alloc = Allocator())
-
482  : Allocator(alloc) {
-
483  this->set(store_, SIZE);
-
484  }
-
485  ~basic_memory_buffer() { deallocate(); }
-
486 
-
487  private:
-
488  // Move data from other to this buffer.
-
489  void move(basic_memory_buffer &other) {
-
490  Allocator &this_alloc = *this, &other_alloc = other;
-
491  this_alloc = std::move(other_alloc);
-
492  T* data = other.data();
-
493  std::size_t size = other.size(), capacity = other.capacity();
-
494  if (data == other.store_) {
-
495  this->set(store_, capacity);
-
496  std::uninitialized_copy(other.store_, other.store_ + size,
-
497  internal::make_checked(store_, capacity));
-
498  } else {
-
499  this->set(data, capacity);
-
500  // Set pointer to the inline array so that delete is not called
-
501  // when deallocating.
-
502  other.set(other.store_, 0);
-
503  }
-
504  this->resize(size);
-
505  }
-
506 
-
507  public:
- -
515  move(other);
-
516  }
-
517 
- -
524  assert(this != &other);
-
525  deallocate();
-
526  move(other);
-
527  return *this;
-
528  }
-
529 
-
530  // Returns a copy of the allocator associated with this buffer.
-
531  Allocator get_allocator() const { return *this; }
-
532 };
-
533 
-
534 template <typename T, std::size_t SIZE, typename Allocator>
- -
536  std::size_t old_capacity = this->capacity();
-
537  std::size_t new_capacity = old_capacity + old_capacity / 2;
-
538  if (size > new_capacity)
-
539  new_capacity = size;
-
540  T *old_data = this->data();
-
541  T *new_data = internal::allocate<Allocator>(*this, new_capacity);
-
542  // The following code doesn't throw, so the raw pointer above doesn't leak.
-
543  std::uninitialized_copy(old_data, old_data + this->size(),
-
544  internal::make_checked(new_data, new_capacity));
-
545  this->set(new_data, new_capacity);
-
546  // deallocate must not throw according to the standard, but even if it does,
-
547  // the buffer already uses the new storage and will deallocate it in
-
548  // destructor.
-
549  if (old_data != store_)
-
550  Allocator::deallocate(old_data, old_capacity);
-
551 }
-
552 
- - -
555 
-
556 namespace internal {
-
557 
-
558 template <typename Char>
-
559 struct char_traits;
-
560 
-
561 template <>
-
562 struct char_traits<char> {
-
563  // Formats a floating-point number.
-
564  template <typename T>
-
565  FMT_API static int format_float(char *buffer, std::size_t size,
-
566  const char *format, int precision, T value);
-
567 };
-
568 
-
569 template <>
-
570 struct char_traits<wchar_t> {
-
571  template <typename T>
-
572  FMT_API static int format_float(wchar_t *buffer, std::size_t size,
-
573  const wchar_t *format, int precision, T value);
-
574 };
-
575 
-
576 #if FMT_USE_EXTERN_TEMPLATES
-
577 extern template int char_traits<char>::format_float<double>(
-
578  char *buffer, std::size_t size, const char* format, int precision,
-
579  double value);
- -
581  char *buffer, std::size_t size, const char* format, int precision,
-
582  long double value);
-
583 
- -
585  wchar_t *buffer, std::size_t size, const wchar_t* format, int precision,
-
586  double value);
- -
588  wchar_t *buffer, std::size_t size, const wchar_t* format, int precision,
-
589  long double value);
-
590 #endif
-
591 
-
592 template <typename Container>
-
593 inline typename std::enable_if<
- - -
596  reserve(std::back_insert_iterator<Container> &it, std::size_t n) {
-
597  Container &c = internal::get_container(it);
-
598  std::size_t size = c.size();
-
599  c.resize(size + n);
-
600  return make_checked(&c[size], n);
-
601 }
-
602 
-
603 template <typename Iterator>
-
604 inline Iterator &reserve(Iterator &it, std::size_t) { return it; }
-
605 
-
606 template <typename Char>
- -
608 
-
609 template <typename Char>
- -
611 
-
612 // An output iterator that counts the number of objects written to it and
-
613 // discards them.
-
614 template <typename T>
- -
616  private:
-
617  std::size_t count_;
-
618  mutable T blackhole_;
-
619 
-
620  public:
-
621  typedef std::output_iterator_tag iterator_category;
-
622  typedef T value_type;
-
623  typedef std::ptrdiff_t difference_type;
-
624  typedef T* pointer;
-
625  typedef T& reference;
-
626  typedef counting_iterator _Unchecked_type; // Mark iterator as checked.
-
627 
-
628  counting_iterator(): count_(0) {}
-
629 
-
630  std::size_t count() const { return count_; }
-
631 
- -
633  ++count_;
-
634  return *this;
-
635  }
-
636 
- -
638  auto it = *this;
-
639  ++*this;
-
640  return it;
-
641  }
-
642 
-
643  T &operator*() const { return blackhole_; }
-
644 };
-
645 
-
646 template <typename OutputIt>
- -
648  protected:
-
649  OutputIt out_;
-
650  std::size_t limit_;
-
651  std::size_t count_;
-
652 
-
653  truncating_iterator_base(OutputIt out, std::size_t limit)
-
654  : out_(out), limit_(limit), count_(0) {}
-
655 
-
656  public:
-
657  typedef std::output_iterator_tag iterator_category;
-
658  typedef void difference_type;
-
659  typedef void pointer;
-
660  typedef void reference;
-
661  typedef truncating_iterator_base _Unchecked_type; // Mark iterator as checked.
-
662 
-
663  OutputIt base() const { return out_; }
-
664  std::size_t count() const { return count_; }
-
665 };
-
666 
-
667 // An output iterator that truncates the output and counts the number of objects
-
668 // written to it.
-
669 template <typename OutputIt, typename Enable = typename std::is_void<
-
670  typename std::iterator_traits<OutputIt>::value_type>::type>
- -
672 
-
673 template <typename OutputIt>
-
674 class truncating_iterator<OutputIt, std::false_type>:
-
675  public truncating_iterator_base<OutputIt> {
-
676  typedef std::iterator_traits<OutputIt> traits;
-
677 
-
678  mutable typename traits::value_type blackhole_;
-
679 
-
680  public:
-
681  typedef typename traits::value_type value_type;
-
682 
-
683  truncating_iterator(OutputIt out, std::size_t limit)
-
684  : truncating_iterator_base<OutputIt>(out, limit) {}
-
685 
- -
687  if (this->count_++ < this->limit_)
-
688  ++this->out_;
-
689  return *this;
-
690  }
-
691 
- -
693  auto it = *this;
-
694  ++*this;
-
695  return it;
-
696  }
-
697 
- -
699  return this->count_ < this->limit_ ? *this->out_ : blackhole_;
-
700  }
-
701 };
-
702 
-
703 template <typename OutputIt>
-
704 class truncating_iterator<OutputIt, std::true_type>:
-
705  public truncating_iterator_base<OutputIt> {
-
706  public:
-
707  typedef typename OutputIt::container_type::value_type value_type;
-
708 
-
709  truncating_iterator(OutputIt out, std::size_t limit)
-
710  : truncating_iterator_base<OutputIt>(out, limit) {}
-
711 
- -
713  if (this->count_++ < this->limit_)
-
714  this->out_ = val;
-
715  return *this;
-
716  }
-
717 
-
718  truncating_iterator& operator++() { return *this; }
-
719  truncating_iterator& operator++(int) { return *this; }
-
720  truncating_iterator& operator*() { return *this; }
-
721 };
-
722 
-
723 // Returns true if value is negative, false otherwise.
-
724 // Same as (value < 0) but doesn't produce warnings if T is an unsigned type.
-
725 template <typename T>
-
726 FMT_CONSTEXPR typename std::enable_if<
-
727  std::numeric_limits<T>::is_signed, bool>::type is_negative(T value) {
-
728  return value < 0;
-
729 }
-
730 template <typename T>
-
731 FMT_CONSTEXPR typename std::enable_if<
-
732  !std::numeric_limits<T>::is_signed, bool>::type is_negative(T) {
-
733  return false;
-
734 }
-
735 
-
736 template <typename T>
-
737 struct int_traits {
-
738  // Smallest of uint32_t and uint64_t that is large enough to represent
-
739  // all values of T.
-
740  typedef typename std::conditional<
-
741  std::numeric_limits<T>::digits <= 32, uint32_t, uint64_t>::type main_type;
-
742 };
-
743 
-
744 // Static data is placed in this class template to allow header-only
-
745 // configuration.
-
746 template <typename T = void>
- -
748  static const uint32_t POWERS_OF_10_32[];
-
749  static const uint32_t ZERO_OR_POWERS_OF_10_32[];
-
750  static const uint64_t ZERO_OR_POWERS_OF_10_64[];
-
751  static const uint64_t POW10_SIGNIFICANDS[];
-
752  static const int16_t POW10_EXPONENTS[];
-
753  static const char DIGITS[];
-
754  static const char FOREGROUND_COLOR[];
-
755  static const char BACKGROUND_COLOR[];
-
756  static const char RESET_COLOR[];
-
757  static const wchar_t WRESET_COLOR[];
-
758 };
-
759 
-
760 #if FMT_USE_EXTERN_TEMPLATES
-
761 extern template struct basic_data<void>;
-
762 #endif
-
763 
- -
765 
-
766 #ifdef FMT_BUILTIN_CLZLL
-
767 // Returns the number of decimal digits in n. Leading zeros are not counted
-
768 // except for n == 0 in which case count_digits returns 1.
-
769 inline int count_digits(uint64_t n) {
-
770  // Based on http://graphics.stanford.edu/~seander/bithacks.html#IntegerLog10
-
771  // and the benchmark https://github.com/localvoid/cxx-benchmark-count-digits.
-
772  int t = (64 - FMT_BUILTIN_CLZLL(n | 1)) * 1233 >> 12;
-
773  return t - (n < data::ZERO_OR_POWERS_OF_10_64[t]) + 1;
-
774 }
-
775 #else
-
776 // Fallback version of count_digits used when __builtin_clz is not available.
-
777 inline int count_digits(uint64_t n) {
-
778  int count = 1;
-
779  for (;;) {
-
780  // Integer division is slow so do it for a group of four digits instead
-
781  // of for every digit. The idea comes from the talk by Alexandrescu
-
782  // "Three Optimization Tips for C++". See speed-test for a comparison.
-
783  if (n < 10) return count;
-
784  if (n < 100) return count + 1;
-
785  if (n < 1000) return count + 2;
-
786  if (n < 10000) return count + 3;
-
787  n /= 10000u;
-
788  count += 4;
-
789  }
-
790 }
-
791 #endif
-
792 
-
793 template <typename Char>
-
794 inline size_t count_code_points(basic_string_view<Char> s) { return s.size(); }
-
795 
-
796 // Counts the number of code points in a UTF-8 string.
- -
798 
-
799 inline char8_t to_char8_t(char c) { return static_cast<char8_t>(c); }
-
800 
-
801 template <typename InputIt, typename OutChar>
-
802 struct needs_conversion: std::integral_constant<bool,
-
803  std::is_same<
-
804  typename std::iterator_traits<InputIt>::value_type, char>::value &&
-
805  std::is_same<OutChar, char8_t>::value> {};
-
806 
-
807 template <typename OutChar, typename InputIt, typename OutputIt>
-
808 typename std::enable_if<
- -
810  copy_str(InputIt begin, InputIt end, OutputIt it) {
-
811  return std::copy(begin, end, it);
-
812 }
-
813 
-
814 template <typename OutChar, typename InputIt, typename OutputIt>
-
815 typename std::enable_if<
-
816  needs_conversion<InputIt, OutChar>::value, OutputIt>::type
-
817  copy_str(InputIt begin, InputIt end, OutputIt it) {
-
818  return std::transform(begin, end, it, to_char8_t);
-
819 }
-
820 
-
821 #if FMT_HAS_CPP_ATTRIBUTE(always_inline)
-
822 # define FMT_ALWAYS_INLINE __attribute__((always_inline))
-
823 #else
-
824 # define FMT_ALWAYS_INLINE
-
825 #endif
-
826 
-
827 template <typename Handler>
-
828 inline char *lg(uint32_t n, Handler h) FMT_ALWAYS_INLINE;
-
829 
-
830 // Computes g = floor(log10(n)) and calls h.on<g>(n);
-
831 template <typename Handler>
-
832 inline char *lg(uint32_t n, Handler h) {
-
833  return n < 100 ? n < 10 ? h.template on<0>(n) : h.template on<1>(n)
-
834  : n < 1000000
-
835  ? n < 10000 ? n < 1000 ? h.template on<2>(n)
-
836  : h.template on<3>(n)
-
837  : n < 100000 ? h.template on<4>(n)
-
838  : h.template on<5>(n)
-
839  : n < 100000000 ? n < 10000000 ? h.template on<6>(n)
-
840  : h.template on<7>(n)
-
841  : n < 1000000000 ? h.template on<8>(n)
-
842  : h.template on<9>(n);
-
843 }
-
844 
-
845 // An lg handler that formats a decimal number.
-
846 // Usage: lg(n, decimal_formatter(buffer));
- -
848  private:
-
849  char *buffer_;
-
850 
-
851  void write_pair(unsigned N, uint32_t index) {
-
852  std::memcpy(buffer_ + N, data::DIGITS + index * 2, 2);
-
853  }
-
854 
-
855  public:
-
856  explicit decimal_formatter(char *buf) : buffer_(buf) {}
-
857 
-
858  template <unsigned N> char *on(uint32_t u) {
-
859  if (N == 0) {
-
860  *buffer_ = static_cast<char>(u) + '0';
-
861  } else if (N == 1) {
-
862  write_pair(0, u);
-
863  } else {
-
864  // The idea of using 4.32 fixed-point numbers is based on
-
865  // https://github.com/jeaiii/itoa
-
866  unsigned n = N - 1;
-
867  unsigned a = n / 5 * n * 53 / 16;
-
868  uint64_t t = ((1ULL << (32 + a)) /
-
869  data::ZERO_OR_POWERS_OF_10_32[n] + 1 - n / 9);
-
870  t = ((t * u) >> a) + n / 5 * 4;
-
871  write_pair(0, t >> 32);
-
872  for (unsigned i = 2; i < N; i += 2) {
-
873  t = 100ULL * static_cast<uint32_t>(t);
-
874  write_pair(i, t >> 32);
-
875  }
-
876  if (N % 2 == 0) {
-
877  buffer_[N] = static_cast<char>(
-
878  (10ULL * static_cast<uint32_t>(t)) >> 32) + '0';
-
879  }
-
880  }
-
881  return buffer_ += N + 1;
-
882  }
-
883 };
-
884 
-
885 // An lg handler that formats a decimal number with a terminating null.
- -
887  public:
-
888  explicit decimal_formatter_null(char *buf) : decimal_formatter(buf) {}
-
889 
-
890  template <unsigned N> char *on(uint32_t u) {
-
891  char *buf = decimal_formatter::on<N>(u);
-
892  *buf = '\0';
-
893  return buf;
-
894  }
-
895 };
-
896 
-
897 #ifdef FMT_BUILTIN_CLZ
-
898 // Optional version of count_digits for better performance on 32-bit platforms.
-
899 inline int count_digits(uint32_t n) {
-
900  int t = (32 - FMT_BUILTIN_CLZ(n | 1)) * 1233 >> 12;
-
901  return t - (n < data::ZERO_OR_POWERS_OF_10_32[t]) + 1;
-
902 }
-
903 #endif
-
904 
-
905 // A functor that doesn't add a thousands separator.
- -
907  typedef char char_type;
-
908 
-
909  template <typename Char>
-
910  void operator()(Char *) {}
-
911 
-
912  enum { size = 0 };
-
913 };
-
914 
-
915 // A functor that adds a thousands separator.
-
916 template <typename Char>
- -
918  private:
- -
920 
-
921  // Index of a decimal digit with the least significant digit having index 0.
-
922  unsigned digit_index_;
-
923 
-
924  public:
-
925  typedef Char char_type;
-
926 
- -
928  : sep_(sep), digit_index_(0) {}
-
929 
-
930  void operator()(Char *&buffer) {
-
931  if (++digit_index_ % 3 != 0)
-
932  return;
-
933  buffer -= sep_.size();
-
934  std::uninitialized_copy(sep_.data(), sep_.data() + sep_.size(),
- -
936  }
-
937 
-
938  enum { size = 1 };
-
939 };
-
940 
-
941 template <typename Char>
-
942 FMT_API Char thousands_sep_impl(locale_ref loc);
-
943 
-
944 template <typename Char>
-
945 inline Char thousands_sep(locale_ref loc) {
-
946  return Char(thousands_sep_impl<char>(loc));
-
947 }
-
948 
-
949 template <>
-
950 inline wchar_t thousands_sep(locale_ref loc) {
-
951  return thousands_sep_impl<wchar_t>(loc);
-
952 }
-
953 
-
954 // Formats a decimal unsigned integer value writing into buffer.
-
955 // thousands_sep is a functor that is called after writing each char to
-
956 // add a thousands separator if necessary.
-
957 template <typename UInt, typename Char, typename ThousandsSep>
-
958 inline Char *format_decimal(Char *buffer, UInt value, int num_digits,
-
959  ThousandsSep thousands_sep) {
-
960  FMT_ASSERT(num_digits >= 0, "invalid digit count");
-
961  buffer += num_digits;
-
962  Char *end = buffer;
-
963  while (value >= 100) {
-
964  // Integer division is slow so do it for a group of two digits instead
-
965  // of for every digit. The idea comes from the talk by Alexandrescu
-
966  // "Three Optimization Tips for C++". See speed-test for a comparison.
-
967  unsigned index = static_cast<unsigned>((value % 100) * 2);
-
968  value /= 100;
-
969  *--buffer = static_cast<Char>(data::DIGITS[index + 1]);
- -
971  *--buffer = static_cast<Char>(data::DIGITS[index]);
- -
973  }
-
974  if (value < 10) {
-
975  *--buffer = static_cast<Char>('0' + value);
-
976  return end;
-
977  }
-
978  unsigned index = static_cast<unsigned>(value * 2);
-
979  *--buffer = static_cast<Char>(data::DIGITS[index + 1]);
- -
981  *--buffer = static_cast<Char>(data::DIGITS[index]);
-
982  return end;
-
983 }
-
984 
-
985 template <typename OutChar, typename UInt, typename Iterator,
-
986  typename ThousandsSep>
-
987 inline Iterator format_decimal(
-
988  Iterator out, UInt value, int num_digits, ThousandsSep sep) {
-
989  FMT_ASSERT(num_digits >= 0, "invalid digit count");
-
990  typedef typename ThousandsSep::char_type char_type;
-
991  // Buffer should be large enough to hold all digits (<= digits10 + 1).
-
992  enum { max_size = std::numeric_limits<UInt>::digits10 + 1 };
-
993  FMT_ASSERT(ThousandsSep::size <= 1, "invalid separator");
-
994  char_type buffer[max_size + max_size / 3];
-
995  auto end = format_decimal(buffer, value, num_digits, sep);
-
996  return internal::copy_str<OutChar>(buffer, end, out);
-
997 }
-
998 
-
999 template <typename OutChar, typename It, typename UInt>
-
1000 inline It format_decimal(It out, UInt value, int num_digits) {
-
1001  return format_decimal<OutChar>(out, value, num_digits, no_thousands_sep());
-
1002 }
-
1003 
-
1004 template <unsigned BASE_BITS, typename Char, typename UInt>
-
1005 inline Char *format_uint(Char *buffer, UInt value, int num_digits,
-
1006  bool upper = false) {
-
1007  buffer += num_digits;
-
1008  Char *end = buffer;
-
1009  do {
-
1010  const char *digits = upper ? "0123456789ABCDEF" : "0123456789abcdef";
-
1011  unsigned digit = (value & ((1 << BASE_BITS) - 1));
-
1012  *--buffer = static_cast<Char>(BASE_BITS < 4 ? static_cast<char>('0' + digit)
-
1013  : digits[digit]);
-
1014  } while ((value >>= BASE_BITS) != 0);
-
1015  return end;
-
1016 }
-
1017 
-
1018 template <unsigned BASE_BITS, typename Char, typename It, typename UInt>
-
1019 inline It format_uint(It out, UInt value, int num_digits,
-
1020  bool upper = false) {
-
1021  // Buffer should be large enough to hold all digits (digits / BASE_BITS + 1)
-
1022  // and null.
-
1023  char buffer[std::numeric_limits<UInt>::digits / BASE_BITS + 2];
-
1024  format_uint<BASE_BITS>(buffer, value, num_digits, upper);
-
1025  return internal::copy_str<Char>(buffer, buffer + num_digits, out);
-
1026 }
-
1027 
-
1028 #ifndef _WIN32
-
1029 # define FMT_USE_WINDOWS_H 0
-
1030 #elif !defined(FMT_USE_WINDOWS_H)
-
1031 # define FMT_USE_WINDOWS_H 1
-
1032 #endif
-
1033 
-
1034 // Define FMT_USE_WINDOWS_H to 0 to disable use of windows.h.
-
1035 // All the functionality that relies on it will be disabled too.
-
1036 #if FMT_USE_WINDOWS_H
-
1037 // A converter from UTF-8 to UTF-16.
-
1038 // It is only provided for Windows since other systems support UTF-8 natively.
-
1039 class utf8_to_utf16 {
-
1040  private:
-
1041  wmemory_buffer buffer_;
-
1042 
-
1043  public:
-
1044  FMT_API explicit utf8_to_utf16(string_view s);
-
1045  operator wstring_view() const { return wstring_view(&buffer_[0], size()); }
-
1046  size_t size() const { return buffer_.size() - 1; }
-
1047  const wchar_t *c_str() const { return &buffer_[0]; }
-
1048  std::wstring str() const { return std::wstring(&buffer_[0], size()); }
-
1049 };
-
1050 
-
1051 // A converter from UTF-16 to UTF-8.
-
1052 // It is only provided for Windows since other systems support UTF-8 natively.
-
1053 class utf16_to_utf8 {
-
1054  private:
-
1055  memory_buffer buffer_;
-
1056 
-
1057  public:
-
1058  utf16_to_utf8() {}
-
1059  FMT_API explicit utf16_to_utf8(wstring_view s);
-
1060  operator string_view() const { return string_view(&buffer_[0], size()); }
-
1061  size_t size() const { return buffer_.size() - 1; }
-
1062  const char *c_str() const { return &buffer_[0]; }
-
1063  std::string str() const { return std::string(&buffer_[0], size()); }
-
1064 
-
1065  // Performs conversion returning a system error code instead of
-
1066  // throwing exception on conversion error. This method may still throw
-
1067  // in case of memory allocation error.
-
1068  FMT_API int convert(wstring_view s);
-
1069 };
-
1070 
-
1071 FMT_API void format_windows_error(fmt::internal::buffer &out, int error_code,
-
1072  fmt::string_view message) FMT_NOEXCEPT;
-
1073 #endif
-
1074 
-
1075 template <typename T = void>
-
1076 struct null {};
-
1077 } // namespace internal
-
1078 
- - -
1081 };
-
1082 
-
1083 // Flags.
-
1084 enum { SIGN_FLAG = 1, PLUS_FLAG = 2, MINUS_FLAG = 4, HASH_FLAG = 8 };
-
1085 
-
1086 // An alignment specifier.
-
1087 struct align_spec {
-
1088  unsigned width_;
-
1089  // Fill is always wchar_t and cast to char if necessary to avoid having
-
1090  // two specialization of AlignSpec and its subclasses.
-
1091  wchar_t fill_;
- -
1093 
-
1094  FMT_CONSTEXPR align_spec() : width_(0), fill_(' '), align_(ALIGN_DEFAULT) {}
-
1095  FMT_CONSTEXPR unsigned width() const { return width_; }
-
1096  FMT_CONSTEXPR wchar_t fill() const { return fill_; }
-
1097  FMT_CONSTEXPR alignment align() const { return align_; }
-
1098 };
-
1099 
- - -
1102  uint_least8_t flags;
-
1103  char type;
-
1104 
-
1105  FMT_CONSTEXPR core_format_specs() : precision(-1), flags(0), type(0) {}
-
1106  FMT_CONSTEXPR bool has(unsigned f) const { return (flags & f) != 0; }
-
1107 };
-
1108 
-
1109 // Format specifiers.
-
1110 template <typename Char>
- - -
1113 };
-
1114 
- -
1116 
-
1117 template <typename Char, typename ErrorHandler>
- -
1119  if (next_arg_id_ >= 0)
-
1120  return internal::to_unsigned(next_arg_id_++);
-
1121  on_error("cannot switch from manual to automatic argument indexing");
-
1122  return 0;
-
1123 }
-
1124 
-
1125 namespace internal {
-
1126 
-
1127 // Formats value using Grisu2 algorithm:
-
1128 // https://www.cs.tufts.edu/~nr/cs257/archive/florian-loitsch/printf.pdf
-
1129 template <typename Double>
-
1130 FMT_API typename std::enable_if<sizeof(Double) == sizeof(uint64_t), bool>::type
-
1131  grisu2_format(Double value, buffer &buf, core_format_specs);
-
1132 template <typename Double>
-
1133 inline typename std::enable_if<sizeof(Double) != sizeof(uint64_t), bool>::type
-
1134  grisu2_format(Double, buffer &, core_format_specs) { return false; }
-
1135 
-
1136 template <typename Double>
- -
1138 
-
1139 template <typename Handler>
-
1140 FMT_CONSTEXPR void handle_int_type_spec(char spec, Handler &&handler) {
-
1141  switch (spec) {
-
1142  case 0: case 'd':
-
1143  handler.on_dec();
-
1144  break;
-
1145  case 'x': case 'X':
-
1146  handler.on_hex();
-
1147  break;
-
1148  case 'b': case 'B':
-
1149  handler.on_bin();
-
1150  break;
-
1151  case 'o':
-
1152  handler.on_oct();
-
1153  break;
-
1154  case 'n':
-
1155  handler.on_num();
-
1156  break;
-
1157  default:
-
1158  handler.on_error();
-
1159  }
-
1160 }
-
1161 
-
1162 template <typename Handler>
-
1163 FMT_CONSTEXPR void handle_float_type_spec(char spec, Handler &&handler) {
-
1164  switch (spec) {
-
1165  case 0: case 'g': case 'G':
-
1166  handler.on_general();
-
1167  break;
-
1168  case 'e': case 'E':
-
1169  handler.on_exp();
-
1170  break;
-
1171  case 'f': case 'F':
-
1172  handler.on_fixed();
-
1173  break;
-
1174  case 'a': case 'A':
-
1175  handler.on_hex();
-
1176  break;
-
1177  default:
-
1178  handler.on_error();
-
1179  break;
-
1180  }
-
1181 }
-
1182 
-
1183 template <typename Char, typename Handler>
- -
1185  const basic_format_specs<Char> *specs, Handler &&handler) {
-
1186  if (!specs) return handler.on_char();
-
1187  if (specs->type && specs->type != 'c') return handler.on_int();
-
1188  if (specs->align() == ALIGN_NUMERIC || specs->flags != 0)
-
1189  handler.on_error("invalid format specifier for char");
-
1190  handler.on_char();
-
1191 }
-
1192 
-
1193 template <typename Char, typename Handler>
-
1194 FMT_CONSTEXPR void handle_cstring_type_spec(Char spec, Handler &&handler) {
-
1195  if (spec == 0 || spec == 's')
-
1196  handler.on_string();
-
1197  else if (spec == 'p')
-
1198  handler.on_pointer();
-
1199  else
-
1200  handler.on_error("invalid type specifier");
-
1201 }
-
1202 
-
1203 template <typename Char, typename ErrorHandler>
-
1204 FMT_CONSTEXPR void check_string_type_spec(Char spec, ErrorHandler &&eh) {
-
1205  if (spec != 0 && spec != 's')
-
1206  eh.on_error("invalid type specifier");
-
1207 }
-
1208 
-
1209 template <typename Char, typename ErrorHandler>
-
1210 FMT_CONSTEXPR void check_pointer_type_spec(Char spec, ErrorHandler &&eh) {
-
1211  if (spec != 0 && spec != 'p')
-
1212  eh.on_error("invalid type specifier");
-
1213 }
-
1214 
-
1215 template <typename ErrorHandler>
-
1216 class int_type_checker : private ErrorHandler {
-
1217  public:
-
1218  FMT_CONSTEXPR explicit int_type_checker(ErrorHandler eh) : ErrorHandler(eh) {}
-
1219 
- - - - - -
1225 
- -
1227  ErrorHandler::on_error("invalid type specifier");
-
1228  }
-
1229 };
-
1230 
-
1231 template <typename ErrorHandler>
-
1232 class float_type_checker : private ErrorHandler {
-
1233  public:
-
1234  FMT_CONSTEXPR explicit float_type_checker(ErrorHandler eh)
-
1235  : ErrorHandler(eh) {}
-
1236 
- - - - -
1241 
- -
1243  ErrorHandler::on_error("invalid type specifier");
-
1244  }
-
1245 };
-
1246 
-
1247 template <typename ErrorHandler>
-
1248 class char_specs_checker : public ErrorHandler {
-
1249  private:
-
1250  char type_;
-
1251 
-
1252  public:
-
1253  FMT_CONSTEXPR char_specs_checker(char type, ErrorHandler eh)
-
1254  : ErrorHandler(eh), type_(type) {}
-
1255 
- - -
1258  }
- -
1260 };
-
1261 
-
1262 template <typename ErrorHandler>
-
1263 class cstring_type_checker : public ErrorHandler {
-
1264  public:
-
1265  FMT_CONSTEXPR explicit cstring_type_checker(ErrorHandler eh)
-
1266  : ErrorHandler(eh) {}
-
1267 
- - -
1270 };
-
1271 
-
1272 template <typename Context>
- -
1274  if (map_)
-
1275  return;
-
1276  map_ = new entry[args.max_size()];
-
1277  if (args.is_packed()) {
-
1278  for (unsigned i = 0;/*nothing*/; ++i) {
-
1279  internal::type arg_type = args.type(i);
-
1280  switch (arg_type) {
-
1281  case internal::none_type:
-
1282  return;
- -
1284  push_back(args.values_[i]);
-
1285  break;
-
1286  default:
-
1287  break; // Do nothing.
-
1288  }
-
1289  }
-
1290  }
-
1291  for (unsigned i = 0; ; ++i) {
-
1292  switch (args.args_[i].type_) {
-
1293  case internal::none_type:
-
1294  return;
- -
1296  push_back(args.args_[i].value_);
-
1297  break;
-
1298  default:
-
1299  break; // Do nothing.
-
1300  }
-
1301  }
-
1302 }
-
1303 
-
1304 template <typename Range>
- -
1306  public:
-
1307  typedef typename Range::value_type char_type;
-
1308  typedef decltype(internal::declval<Range>().begin()) iterator;
- -
1310 
-
1311  private:
-
1312  typedef basic_writer<Range> writer_type;
-
1313  writer_type writer_;
-
1314  format_specs *specs_;
-
1315 
-
1316  struct char_writer {
-
1317  char_type value;
-
1318 
-
1319  size_t size() const { return 1; }
-
1320  size_t width() const { return 1; }
-
1321 
-
1322  template <typename It>
-
1323  void operator()(It &&it) const { *it++ = value; }
-
1324  };
-
1325 
-
1326  void write_char(char_type value) {
-
1327  if (specs_)
-
1328  writer_.write_padded(*specs_, char_writer{value});
-
1329  else
-
1330  writer_.write(value);
-
1331  }
-
1332 
-
1333  void write_pointer(const void *p) {
-
1334  format_specs specs = specs_ ? *specs_ : format_specs();
-
1335  specs.flags = HASH_FLAG;
-
1336  specs.type = 'x';
-
1337  writer_.write_int(reinterpret_cast<uintptr_t>(p), specs);
-
1338  }
-
1339 
-
1340  protected:
-
1341  writer_type &writer() { return writer_; }
-
1342  format_specs *spec() { return specs_; }
-
1343  iterator out() { return writer_.out(); }
-
1344 
-
1345  void write(bool value) {
-
1346  string_view sv(value ? "true" : "false");
-
1347  specs_ ? writer_.write(sv, *specs_) : writer_.write(sv);
-
1348  }
-
1349 
-
1350  void write(const char_type *value) {
-
1351  if (!value)
-
1352  FMT_THROW(format_error("string pointer is null"));
-
1353  auto length = std::char_traits<char_type>::length(value);
-
1354  basic_string_view<char_type> sv(value, length);
-
1355  specs_ ? writer_.write(sv, *specs_) : writer_.write(sv);
-
1356  }
-
1357 
-
1358  public:
- -
1360  : writer_(r, loc), specs_(s) {}
-
1361 
-
1362  iterator operator()(monostate) {
-
1363  FMT_ASSERT(false, "invalid argument type");
-
1364  return out();
-
1365  }
-
1366 
-
1367  template <typename T>
-
1368  typename std::enable_if<
-
1369  std::is_integral<T>::value || std::is_same<T, char_type>::value,
-
1370  iterator>::type operator()(T value) {
-
1371  // MSVC2013 fails to compile separate overloads for bool and char_type so
-
1372  // use std::is_same instead.
-
1373  if (std::is_same<T, bool>::value) {
-
1374  if (specs_ && specs_->type)
-
1375  return (*this)(value ? 1 : 0);
-
1376  write(value != 0);
-
1377  } else if (std::is_same<T, char_type>::value) {
- -
1379  specs_, char_spec_handler(*this, static_cast<char_type>(value)));
-
1380  } else {
-
1381  specs_ ? writer_.write_int(value, *specs_) : writer_.write(value);
-
1382  }
-
1383  return out();
-
1384  }
-
1385 
-
1386  template <typename T>
-
1387  typename std::enable_if<std::is_floating_point<T>::value, iterator>::type
- -
1389  writer_.write_double(value, specs_ ? *specs_ : format_specs());
-
1390  return out();
-
1391  }
-
1392 
- - - -
1396 
- -
1398  : formatter(f), value(val) {}
-
1399 
-
1400  void on_int() {
-
1401  if (formatter.specs_)
-
1402  formatter.writer_.write_int(value, *formatter.specs_);
-
1403  else
-
1404  formatter.writer_.write(value);
-
1405  }
-
1406  void on_char() { formatter.write_char(value); }
-
1407  };
-
1408 
- - - -
1412 
- -
1414  : formatter(f), value(val) {}
-
1415 
-
1416  void on_string() { formatter.write(value); }
-
1417  void on_pointer() { formatter.write_pointer(value); }
-
1418  };
-
1419 
-
1420  iterator operator()(const char_type *value) {
-
1421  if (!specs_) return write(value), out();
- -
1423  specs_->type, cstring_spec_handler(*this, value));
-
1424  return out();
-
1425  }
-
1426 
- -
1428  if (specs_) {
- -
1430  specs_->type, internal::error_handler());
-
1431  writer_.write(value, *specs_);
-
1432  } else {
-
1433  writer_.write(value);
-
1434  }
-
1435  return out();
-
1436  }
-
1437 
-
1438  iterator operator()(const void *value) {
-
1439  if (specs_)
- -
1441  write_pointer(value);
-
1442  return out();
-
1443  }
-
1444 };
-
1445 
-
1446 template <typename Char>
- -
1448  return ('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z') || '_' == c;
-
1449 }
-
1450 
-
1451 // Parses the range [begin, end) as an unsigned integer. This function assumes
-
1452 // that the range is non-empty and the first character is a digit.
-
1453 template <typename Char, typename ErrorHandler>
- -
1455  const Char *&begin, const Char *end, ErrorHandler &&eh) {
-
1456  assert(begin != end && '0' <= *begin && *begin <= '9');
-
1457  if (*begin == '0') {
-
1458  ++begin;
-
1459  return 0;
-
1460  }
-
1461  unsigned value = 0;
-
1462  // Convert to unsigned to prevent a warning.
-
1463  unsigned max_int = (std::numeric_limits<int>::max)();
-
1464  unsigned big = max_int / 10;
-
1465  do {
-
1466  // Check for overflow.
-
1467  if (value > big) {
-
1468  value = max_int + 1;
-
1469  break;
-
1470  }
-
1471  value = value * 10 + unsigned(*begin - '0');
-
1472  ++begin;
-
1473  } while (begin != end && '0' <= *begin && *begin <= '9');
-
1474  if (value > max_int)
-
1475  eh.on_error("number is too big");
-
1476  return value;
-
1477 }
-
1478 
-
1479 template <typename Char, typename Context>
-
1480 class custom_formatter: public function<bool> {
-
1481  private:
-
1482  Context &ctx_;
-
1483 
-
1484  public:
-
1485  explicit custom_formatter(Context &ctx): ctx_(ctx) {}
-
1486 
- -
1488  h.format(ctx_);
-
1489  return true;
-
1490  }
-
1491 
-
1492  template <typename T>
-
1493  bool operator()(T) const { return false; }
-
1494 };
-
1495 
-
1496 template <typename T>
-
1497 struct is_integer {
-
1498  enum {
-
1499  value = std::is_integral<T>::value && !std::is_same<T, bool>::value &&
-
1500  !std::is_same<T, char>::value && !std::is_same<T, wchar_t>::value
-
1501  };
-
1502 };
-
1503 
-
1504 template <typename ErrorHandler>
-
1505 class width_checker: public function<unsigned long long> {
-
1506  public:
-
1507  explicit FMT_CONSTEXPR width_checker(ErrorHandler &eh) : handler_(eh) {}
-
1508 
-
1509  template <typename T>
- -
1511  typename std::enable_if<
-
1512  is_integer<T>::value, unsigned long long>::type operator()(T value) {
-
1513  if (is_negative(value))
-
1514  handler_.on_error("negative width");
-
1515  return static_cast<unsigned long long>(value);
-
1516  }
-
1517 
-
1518  template <typename T>
-
1519  FMT_CONSTEXPR typename std::enable_if<
-
1520  !is_integer<T>::value, unsigned long long>::type operator()(T) {
-
1521  handler_.on_error("width is not integer");
-
1522  return 0;
-
1523  }
-
1524 
-
1525  private:
-
1526  ErrorHandler &handler_;
-
1527 };
-
1528 
-
1529 template <typename ErrorHandler>
-
1530 class precision_checker: public function<unsigned long long> {
-
1531  public:
-
1532  explicit FMT_CONSTEXPR precision_checker(ErrorHandler &eh) : handler_(eh) {}
-
1533 
-
1534  template <typename T>
-
1535  FMT_CONSTEXPR typename std::enable_if<
-
1536  is_integer<T>::value, unsigned long long>::type operator()(T value) {
-
1537  if (is_negative(value))
-
1538  handler_.on_error("negative precision");
-
1539  return static_cast<unsigned long long>(value);
-
1540  }
-
1541 
-
1542  template <typename T>
-
1543  FMT_CONSTEXPR typename std::enable_if<
-
1544  !is_integer<T>::value, unsigned long long>::type operator()(T) {
-
1545  handler_.on_error("precision is not integer");
-
1546  return 0;
-
1547  }
-
1548 
-
1549  private:
-
1550  ErrorHandler &handler_;
-
1551 };
-
1552 
-
1553 // A format specifier handler that sets fields in basic_format_specs.
-
1554 template <typename Char>
- -
1556  public:
- -
1558  specs_(specs) {}
-
1559 
-
1560  FMT_CONSTEXPR specs_setter(const specs_setter &other): specs_(other.specs_) {}
-
1561 
-
1562  FMT_CONSTEXPR void on_align(alignment align) { specs_.align_ = align; }
-
1563  FMT_CONSTEXPR void on_fill(Char fill) { specs_.fill_ = fill; }
-
1564  FMT_CONSTEXPR void on_plus() { specs_.flags |= SIGN_FLAG | PLUS_FLAG; }
-
1565  FMT_CONSTEXPR void on_minus() { specs_.flags |= MINUS_FLAG; }
-
1566  FMT_CONSTEXPR void on_space() { specs_.flags |= SIGN_FLAG; }
-
1567  FMT_CONSTEXPR void on_hash() { specs_.flags |= HASH_FLAG; }
-
1568 
- -
1570  specs_.align_ = ALIGN_NUMERIC;
-
1571  specs_.fill_ = '0';
-
1572  }
-
1573 
-
1574  FMT_CONSTEXPR void on_width(unsigned width) { specs_.width_ = width; }
-
1575  FMT_CONSTEXPR void on_precision(unsigned precision) {
-
1576  specs_.precision = static_cast<int>(precision);
-
1577  }
- -
1579 
- -
1581  specs_.type = static_cast<char>(type);
-
1582  }
-
1583 
-
1584  protected:
- -
1586 };
-
1587 
-
1588 // A format specifier handler that checks if specifiers are consistent with the
-
1589 // argument type.
-
1590 template <typename Handler>
-
1591 class specs_checker : public Handler {
-
1592  public:
-
1593  FMT_CONSTEXPR specs_checker(const Handler& handler, internal::type arg_type)
-
1594  : Handler(handler), arg_type_(arg_type) {}
-
1595 
- -
1597  : Handler(other), arg_type_(other.arg_type_) {}
-
1598 
- -
1600  if (align == ALIGN_NUMERIC)
-
1601  require_numeric_argument();
-
1602  Handler::on_align(align);
-
1603  }
-
1604 
- -
1606  check_sign();
-
1607  Handler::on_plus();
-
1608  }
-
1609 
- -
1611  check_sign();
-
1612  Handler::on_minus();
-
1613  }
-
1614 
- -
1616  check_sign();
-
1617  Handler::on_space();
-
1618  }
-
1619 
- -
1621  require_numeric_argument();
-
1622  Handler::on_hash();
-
1623  }
-
1624 
- -
1626  require_numeric_argument();
-
1627  Handler::on_zero();
-
1628  }
-
1629 
- -
1631  if (is_integral(arg_type_) || arg_type_ == pointer_type)
-
1632  this->on_error("precision not allowed for this argument type");
-
1633  }
-
1634 
-
1635  private:
-
1636  FMT_CONSTEXPR void require_numeric_argument() {
-
1637  if (!is_arithmetic(arg_type_))
-
1638  this->on_error("format specifier requires numeric argument");
-
1639  }
-
1640 
-
1641  FMT_CONSTEXPR void check_sign() {
-
1642  require_numeric_argument();
-
1643  if (is_integral(arg_type_) && arg_type_ != int_type &&
-
1644  arg_type_ != long_long_type && arg_type_ != internal::char_type) {
-
1645  this->on_error("format specifier requires signed argument");
-
1646  }
-
1647  }
-
1648 
-
1649  internal::type arg_type_;
-
1650 };
-
1651 
-
1652 template <template <typename> class Handler, typename T,
-
1653  typename Context, typename ErrorHandler>
- -
1655  T &value, basic_format_arg<Context> arg, ErrorHandler eh) {
-
1656  unsigned long long big_value =
-
1657  visit_format_arg(Handler<ErrorHandler>(eh), arg);
-
1658  if (big_value > to_unsigned((std::numeric_limits<int>::max)()))
-
1659  eh.on_error("number is too big");
-
1660  value = static_cast<T>(big_value);
-
1661 }
-
1662 
-
1663 struct auto_id {};
-
1664 
-
1665 // The standard format specifier handler with checking.
-
1666 template <typename Context>
-
1667 class specs_handler: public specs_setter<typename Context::char_type> {
-
1668  public:
-
1669  typedef typename Context::char_type char_type;
-
1670 
- -
1672  basic_format_specs<char_type> &specs, Context &ctx)
-
1673  : specs_setter<char_type>(specs), context_(ctx) {}
-
1674 
-
1675  template <typename Id>
- -
1677  set_dynamic_spec<width_checker>(
-
1678  this->specs_.width_, get_arg(arg_id), context_.error_handler());
-
1679  }
-
1680 
-
1681  template <typename Id>
- -
1683  set_dynamic_spec<precision_checker>(
-
1684  this->specs_.precision, get_arg(arg_id), context_.error_handler());
-
1685  }
-
1686 
-
1687  void on_error(const char *message) {
-
1688  context_.on_error(message);
-
1689  }
-
1690 
-
1691  private:
- -
1693  return context_.next_arg();
-
1694  }
-
1695 
-
1696  template <typename Id>
-
1697  FMT_CONSTEXPR basic_format_arg<Context> get_arg(Id arg_id) {
-
1698  context_.parse_context().check_arg_id(arg_id);
-
1699  return context_.get_arg(arg_id);
-
1700  }
-
1701 
-
1702  Context &context_;
-
1703 };
-
1704 
-
1705 // An argument reference.
-
1706 template <typename Char>
-
1707 struct arg_ref {
-
1708  enum Kind { NONE, INDEX, NAME };
-
1709 
-
1710  FMT_CONSTEXPR arg_ref() : kind(NONE), index(0) {}
-
1711  FMT_CONSTEXPR explicit arg_ref(unsigned index) : kind(INDEX), index(index) {}
-
1712  explicit arg_ref(basic_string_view<Char> nm) : kind(NAME) {
-
1713  name = {nm.data(), nm.size()};
-
1714  }
-
1715 
- -
1717  kind = INDEX;
-
1718  index = idx;
-
1719  return *this;
-
1720  }
-
1721 
-
1722  Kind kind;
-
1723  union {
-
1724  unsigned index;
-
1725  string_value<Char> name; // This is not string_view because of gcc 4.4.
-
1726  };
-
1727 };
-
1728 
-
1729 // Format specifiers with width and precision resolved at formatting rather
-
1730 // than parsing time to allow re-using the same parsed specifiers with
-
1731 // differents sets of arguments (precompilation of format strings).
-
1732 template <typename Char>
- - - -
1736 };
-
1737 
-
1738 // Format spec handler that saves references to arguments representing dynamic
-
1739 // width and precision to be resolved at formatting time.
-
1740 template <typename ParseContext>
- -
1742  public specs_setter<typename ParseContext::char_type> {
-
1743  public:
- -
1745 
- -
1747  dynamic_format_specs<char_type> &specs, ParseContext &ctx)
-
1748  : specs_setter<char_type>(specs), specs_(specs), context_(ctx) {}
-
1749 
- -
1751  : specs_setter<char_type>(other),
-
1752  specs_(other.specs_), context_(other.context_) {}
-
1753 
-
1754  template <typename Id>
- -
1756  specs_.width_ref = make_arg_ref(arg_id);
-
1757  }
-
1758 
-
1759  template <typename Id>
- -
1761  specs_.precision_ref = make_arg_ref(arg_id);
-
1762  }
-
1763 
-
1764  FMT_CONSTEXPR void on_error(const char *message) {
-
1765  context_.on_error(message);
-
1766  }
-
1767 
-
1768  private:
-
1769  typedef arg_ref<char_type> arg_ref_type;
-
1770 
-
1771  template <typename Id>
-
1772  FMT_CONSTEXPR arg_ref_type make_arg_ref(Id arg_id) {
-
1773  context_.check_arg_id(arg_id);
-
1774  return arg_ref_type(arg_id);
-
1775  }
-
1776 
-
1777  FMT_CONSTEXPR arg_ref_type make_arg_ref(auto_id) {
-
1778  return arg_ref_type(context_.next_arg_id());
-
1779  }
-
1780 
-
1781  dynamic_format_specs<char_type> &specs_;
-
1782  ParseContext &context_;
-
1783 };
-
1784 
-
1785 template <typename Char, typename IDHandler>
- -
1787  const Char *begin, const Char *end, IDHandler &&handler) {
-
1788  assert(begin != end);
-
1789  Char c = *begin;
-
1790  if (c == '}' || c == ':')
-
1791  return handler(), begin;
-
1792  if (c >= '0' && c <= '9') {
-
1793  unsigned index = parse_nonnegative_int(begin, end, handler);
-
1794  if (begin == end || (*begin != '}' && *begin != ':'))
-
1795  return handler.on_error("invalid format string"), begin;
-
1796  handler(index);
-
1797  return begin;
-
1798  }
-
1799  if (!is_name_start(c))
-
1800  return handler.on_error("invalid format string"), begin;
-
1801  auto it = begin;
-
1802  do {
-
1803  ++it;
-
1804  } while (it != end && (is_name_start(c = *it) || ('0' <= c && c <= '9')));
- -
1806  return it;
-
1807 }
-
1808 
-
1809 // Adapts SpecHandler to IDHandler API for dynamic width.
-
1810 template <typename SpecHandler, typename Char>
- -
1812  explicit FMT_CONSTEXPR width_adapter(SpecHandler &h) : handler(h) {}
-
1813 
-
1814  FMT_CONSTEXPR void operator()() { handler.on_dynamic_width(auto_id()); }
-
1815  FMT_CONSTEXPR void operator()(unsigned id) { handler.on_dynamic_width(id); }
- -
1817  handler.on_dynamic_width(id);
-
1818  }
-
1819 
-
1820  FMT_CONSTEXPR void on_error(const char *message) {
-
1821  handler.on_error(message);
-
1822  }
-
1823 
-
1824  SpecHandler &handler;
-
1825 };
-
1826 
-
1827 // Adapts SpecHandler to IDHandler API for dynamic precision.
-
1828 template <typename SpecHandler, typename Char>
- -
1830  explicit FMT_CONSTEXPR precision_adapter(SpecHandler &h) : handler(h) {}
-
1831 
-
1832  FMT_CONSTEXPR void operator()() { handler.on_dynamic_precision(auto_id()); }
-
1833  FMT_CONSTEXPR void operator()(unsigned id) {
-
1834  handler.on_dynamic_precision(id);
-
1835  }
- -
1837  handler.on_dynamic_precision(id);
-
1838  }
-
1839 
-
1840  FMT_CONSTEXPR void on_error(const char *message) { handler.on_error(message); }
-
1841 
-
1842  SpecHandler &handler;
-
1843 };
-
1844 
-
1845 // Parses fill and alignment.
-
1846 template <typename Char, typename Handler>
- -
1848  const Char *begin, const Char *end, Handler &&handler) {
-
1849  FMT_ASSERT(begin != end, "");
-
1850  alignment align = ALIGN_DEFAULT;
-
1851  int i = 0;
-
1852  if (begin + 1 != end) ++i;
-
1853  do {
-
1854  switch (static_cast<char>(begin[i])) {
-
1855  case '<':
-
1856  align = ALIGN_LEFT;
-
1857  break;
-
1858  case '>':
-
1859  align = ALIGN_RIGHT;
-
1860  break;
-
1861  case '=':
-
1862  align = ALIGN_NUMERIC;
-
1863  break;
-
1864  case '^':
-
1865  align = ALIGN_CENTER;
-
1866  break;
-
1867  }
-
1868  if (align != ALIGN_DEFAULT) {
-
1869  if (i > 0) {
-
1870  auto c = *begin;
-
1871  if (c == '{')
-
1872  return handler.on_error("invalid fill character '{'"), begin;
-
1873  begin += 2;
-
1874  handler.on_fill(c);
-
1875  } else ++begin;
-
1876  handler.on_align(align);
-
1877  break;
-
1878  }
-
1879  } while (i-- > 0);
-
1880  return begin;
-
1881 }
-
1882 
-
1883 template <typename Char, typename Handler>
- -
1885  const Char *begin, const Char *end, Handler &&handler) {
-
1886  FMT_ASSERT(begin != end, "");
-
1887  if ('0' <= *begin && *begin <= '9') {
-
1888  handler.on_width(parse_nonnegative_int(begin, end, handler));
-
1889  } else if (*begin == '{') {
-
1890  ++begin;
-
1891  if (begin != end)
- -
1893  if (begin == end || *begin != '}')
-
1894  return handler.on_error("invalid format string"), begin;
-
1895  ++begin;
-
1896  }
-
1897  return begin;
-
1898 }
-
1899 
-
1900 // Parses standard format specifiers and sends notifications about parsed
-
1901 // components to handler.
-
1902 template <typename Char, typename SpecHandler>
- -
1904  const Char *begin, const Char *end, SpecHandler &&handler) {
-
1905  if (begin == end || *begin == '}')
-
1906  return begin;
-
1907 
-
1908  begin = parse_align(begin, end, handler);
-
1909  if (begin == end) return begin;
-
1910 
-
1911  // Parse sign.
-
1912  switch (static_cast<char>(*begin)) {
-
1913  case '+':
-
1914  handler.on_plus();
-
1915  ++begin;
-
1916  break;
-
1917  case '-':
-
1918  handler.on_minus();
-
1919  ++begin;
-
1920  break;
-
1921  case ' ':
-
1922  handler.on_space();
-
1923  ++begin;
-
1924  break;
-
1925  }
-
1926  if (begin == end) return begin;
-
1927 
-
1928  if (*begin == '#') {
-
1929  handler.on_hash();
-
1930  if (++begin == end) return begin;
-
1931  }
-
1932 
-
1933  // Parse zero flag.
-
1934  if (*begin == '0') {
-
1935  handler.on_zero();
-
1936  if (++begin == end) return begin;
-
1937  }
-
1938 
-
1939  begin = parse_width(begin, end, handler);
-
1940  if (begin == end) return begin;
-
1941 
-
1942  // Parse precision.
-
1943  if (*begin == '.') {
-
1944  ++begin;
-
1945  auto c = begin != end ? *begin : 0;
-
1946  if ('0' <= c && c <= '9') {
-
1947  handler.on_precision(parse_nonnegative_int(begin, end, handler));
-
1948  } else if (c == '{') {
-
1949  ++begin;
-
1950  if (begin != end) {
-
1951  begin = parse_arg_id(
- -
1953  }
-
1954  if (begin == end || *begin++ != '}')
-
1955  return handler.on_error("invalid format string"), begin;
-
1956  } else {
-
1957  return handler.on_error("missing precision specifier"), begin;
-
1958  }
-
1959  handler.end_precision();
-
1960  }
-
1961 
-
1962  // Parse type.
-
1963  if (begin != end && *begin != '}')
-
1964  handler.on_type(*begin++);
-
1965  return begin;
-
1966 }
-
1967 
-
1968 // Return the result via the out param to workaround gcc bug 77539.
-
1969 template <bool IS_CONSTEXPR, typename T, typename Ptr = const T*>
-
1970 FMT_CONSTEXPR bool find(Ptr first, Ptr last, T value, Ptr &out) {
-
1971  for (out = first; out != last; ++out) {
-
1972  if (*out == value)
-
1973  return true;
-
1974  }
-
1975  return false;
-
1976 }
-
1977 
-
1978 template <>
-
1979 inline bool find<false, char>(
-
1980  const char *first, const char *last, char value, const char *&out) {
-
1981  out = static_cast<const char*>(std::memchr(first, value, internal::to_unsigned(last - first)));
-
1982  return out != FMT_NULL;
-
1983 }
-
1984 
-
1985 template <typename Handler, typename Char>
-
1986 struct id_adapter {
-
1987  FMT_CONSTEXPR void operator()() { handler.on_arg_id(); }
-
1988  FMT_CONSTEXPR void operator()(unsigned id) { handler.on_arg_id(id); }
- -
1990  handler.on_arg_id(id);
-
1991  }
-
1992  FMT_CONSTEXPR void on_error(const char *message) {
-
1993  handler.on_error(message);
-
1994  }
-
1995  Handler &handler;
-
1996 };
-
1997 
-
1998 template <bool IS_CONSTEXPR, typename Char, typename Handler>
- -
2000  basic_string_view<Char> format_str, Handler &&handler) {
-
2001  struct writer {
-
2002  FMT_CONSTEXPR void operator()(const Char *begin, const Char *end) {
-
2003  if (begin == end) return;
-
2004  for (;;) {
-
2005  const Char *p = FMT_NULL;
-
2006  if (!find<IS_CONSTEXPR>(begin, end, '}', p))
-
2007  return handler_.on_text(begin, end);
-
2008  ++p;
-
2009  if (p == end || *p != '}')
-
2010  return handler_.on_error("unmatched '}' in format string");
-
2011  handler_.on_text(begin, p);
-
2012  begin = p + 1;
-
2013  }
-
2014  }
-
2015  Handler &handler_;
-
2016  } write{handler};
-
2017  auto begin = format_str.data();
-
2018  auto end = begin + format_str.size();
-
2019  while (begin != end) {
-
2020  // Doing two passes with memchr (one for '{' and another for '}') is up to
-
2021  // 2.5x faster than the naive one-pass implementation on big format strings.
-
2022  const Char *p = begin;
-
2023  if (*begin != '{' && !find<IS_CONSTEXPR>(begin, end, '{', p))
-
2024  return write(begin, end);
-
2025  write(begin, p);
-
2026  ++p;
-
2027  if (p == end)
-
2028  return handler.on_error("invalid format string");
-
2029  if (static_cast<char>(*p) == '}') {
-
2030  handler.on_arg_id();
-
2031  handler.on_replacement_field(p);
-
2032  } else if (*p == '{') {
-
2033  handler.on_text(p, p + 1);
-
2034  } else {
-
2035  p = parse_arg_id(p, end, id_adapter<Handler, Char>{handler});
-
2036  Char c = p != end ? *p : Char();
-
2037  if (c == '}') {
-
2038  handler.on_replacement_field(p);
-
2039  } else if (c == ':') {
-
2040  p = handler.on_format_specs(p + 1, end);
-
2041  if (p == end || *p != '}')
-
2042  return handler.on_error("unknown format specifier");
-
2043  } else {
-
2044  return handler.on_error("missing '}' in format string");
-
2045  }
-
2046  }
-
2047  begin = p + 1;
-
2048  }
-
2049 }
-
2050 
-
2051 template <typename T, typename ParseContext>
-
2052 FMT_CONSTEXPR const typename ParseContext::char_type *
-
2053  parse_format_specs(ParseContext &ctx) {
-
2054  // GCC 7.2 requires initializer.
- -
2056  return f.parse(ctx);
-
2057 }
-
2058 
-
2059 template <typename Char, typename ErrorHandler, typename... Args>
- -
2061  public:
- -
2063  basic_string_view<Char> format_str, ErrorHandler eh)
-
2064  : arg_id_((std::numeric_limits<unsigned>::max)()), context_(format_str, eh),
-
2065  parse_funcs_{&parse_format_specs<Args, parse_context_type>...} {}
-
2066 
-
2067  FMT_CONSTEXPR void on_text(const Char *, const Char *) {}
-
2068 
- -
2070  arg_id_ = context_.next_arg_id();
-
2071  check_arg_id();
-
2072  }
-
2073  FMT_CONSTEXPR void on_arg_id(unsigned id) {
-
2074  arg_id_ = id;
-
2075  context_.check_arg_id(id);
-
2076  check_arg_id();
-
2077  }
- -
2079 
-
2080  FMT_CONSTEXPR void on_replacement_field(const Char *) {}
-
2081 
-
2082  FMT_CONSTEXPR const Char *on_format_specs(const Char *begin, const Char *) {
-
2083  context_.advance_to(begin);
-
2084  return arg_id_ < NUM_ARGS ?
-
2085  parse_funcs_[arg_id_](context_) : begin;
-
2086  }
-
2087 
-
2088  FMT_CONSTEXPR void on_error(const char *message) {
-
2089  context_.on_error(message);
-
2090  }
-
2091 
-
2092  private:
-
2093  typedef basic_parse_context<Char, ErrorHandler> parse_context_type;
-
2094  enum { NUM_ARGS = sizeof...(Args) };
-
2095 
-
2096  FMT_CONSTEXPR void check_arg_id() {
-
2097  if (arg_id_ >= NUM_ARGS)
-
2098  context_.on_error("argument index out of range");
-
2099  }
-
2100 
-
2101  // Format specifier parsing function.
-
2102  typedef const Char *(*parse_func)(parse_context_type &);
-
2103 
-
2104  unsigned arg_id_;
-
2105  parse_context_type context_;
-
2106  parse_func parse_funcs_[NUM_ARGS > 0 ? NUM_ARGS : 1];
-
2107 };
-
2108 
-
2109 template <typename Char, typename ErrorHandler, typename... Args>
- -
2111  basic_string_view<Char> s, ErrorHandler eh = ErrorHandler()) {
-
2112  format_string_checker<Char, ErrorHandler, Args...> checker(s, eh);
-
2113  parse_format_string<true>(s, checker);
-
2114  return true;
-
2115 }
-
2116 
-
2117 template <typename... Args, typename S>
-
2118 typename std::enable_if<is_compile_string<S>::value>::type
-
2119  check_format_string(S format_str) {
-
2120  typedef typename S::char_type char_t;
- -
2122  char_t, internal::error_handler, Args...>(to_string_view(format_str));
-
2123  (void)invalid_format;
-
2124 }
-
2125 
-
2126 // Specifies whether to format T using the standard formatter.
-
2127 // It is not possible to use get_type in formatter specialization directly
-
2128 // because of a bug in MSVC.
-
2129 template <typename Context, typename T>
-
2130 struct format_type :
-
2131  std::integral_constant<bool, get_type<Context, T>::value != custom_type> {};
-
2132 
-
2133 template <template <typename> class Handler, typename Spec, typename Context>
- -
2135  Spec &value, arg_ref<typename Context::char_type> ref, Context &ctx) {
-
2136  typedef typename Context::char_type char_type;
-
2137  switch (ref.kind) {
- -
2139  break;
- -
2141  internal::set_dynamic_spec<Handler>(
-
2142  value, ctx.get_arg(ref.index), ctx.error_handler());
-
2143  break;
- -
2145  internal::set_dynamic_spec<Handler>(
-
2146  value, ctx.get_arg({ref.name.value, ref.name.size}),
-
2147  ctx.error_handler());
-
2148  break;
-
2149  }
-
2150 }
-
2151 } // namespace internal
-
2152 
-
2154 template <typename Range>
- -
2156  public internal::function<
-
2157  typename internal::arg_formatter_base<Range>::iterator>,
-
2158  public internal::arg_formatter_base<Range> {
-
2159  private:
-
2160  typedef typename Range::value_type char_type;
- - -
2163 
-
2164  context_type &ctx_;
-
2165 
-
2166  public:
-
2167  typedef Range range;
-
2168  typedef typename base::iterator iterator;
- -
2170 
- -
2179  : base(Range(ctx.out()), spec, ctx.locale()), ctx_(ctx) {}
-
2180 
-
2181  // Deprecated.
- -
2183  : base(Range(ctx.out()), &spec), ctx_(ctx) {}
-
2184 
-
2185  using base::operator();
-
2186 
- -
2189  handle.format(ctx_);
-
2190  return this->out();
-
2191  }
-
2192 };
-
2193 
-
2198 class system_error : public std::runtime_error {
-
2199  private:
-
2200  FMT_API void init(int err_code, string_view format_str, format_args args);
-
2201 
-
2202  protected:
- -
2204 
-
2205  system_error() : std::runtime_error("") {}
-
2206 
-
2207  public:
-
2226  template <typename... Args>
-
2227  system_error(int error_code, string_view message, const Args &... args)
-
2228  : std::runtime_error("") {
-
2229  init(error_code, message, make_format_args(args...));
-
2230  }
-
2231 
-
2232  int error_code() const { return error_code_; }
-
2233 };
-
2234 
- -
2252  fmt::string_view message) FMT_NOEXCEPT;
-
2253 
-
2258 template <typename Range>
-
2259 class basic_writer {
-
2260  public:
-
2261  typedef typename Range::value_type char_type;
-
2262  typedef decltype(internal::declval<Range>().begin()) iterator;
- -
2264 
-
2265  private:
-
2266  iterator out_; // Output iterator.
-
2267  internal::locale_ref locale_;
-
2268 
-
2269  // Attempts to reserve space for n extra characters in the output range.
-
2270  // Returns a pointer to the reserved range or a reference to out_.
-
2271  auto reserve(std::size_t n) -> decltype(internal::reserve(out_, n)) {
-
2272  return internal::reserve(out_, n);
-
2273  }
-
2274 
-
2275  // Writes a value in the format
-
2276  // <left-padding><value><right-padding>
-
2277  // where <value> is written by f(it).
-
2278  template <typename F>
-
2279  void write_padded(const align_spec &spec, F &&f) {
-
2280  unsigned width = spec.width(); // User-perceived width (in code points).
-
2281  size_t size = f.size(); // The number of code units.
-
2282  size_t num_code_points = width != 0 ? f.width() : size;
-
2283  if (width <= num_code_points)
-
2284  return f(reserve(size));
-
2285  auto &&it = reserve(width + (size - num_code_points));
-
2286  char_type fill = static_cast<char_type>(spec.fill());
-
2287  std::size_t padding = width - num_code_points;
-
2288  if (spec.align() == ALIGN_RIGHT) {
-
2289  it = std::fill_n(it, padding, fill);
-
2290  f(it);
-
2291  } else if (spec.align() == ALIGN_CENTER) {
-
2292  std::size_t left_padding = padding / 2;
-
2293  it = std::fill_n(it, left_padding, fill);
-
2294  f(it);
-
2295  it = std::fill_n(it, padding - left_padding, fill);
-
2296  } else {
-
2297  f(it);
-
2298  it = std::fill_n(it, padding, fill);
-
2299  }
-
2300  }
-
2301 
-
2302  template <typename F>
-
2303  struct padded_int_writer {
-
2304  size_t size_;
-
2305  string_view prefix;
-
2306  char_type fill;
-
2307  std::size_t padding;
-
2308  F f;
-
2309 
-
2310  size_t size() const { return size_; }
-
2311  size_t width() const { return size_; }
-
2312 
-
2313  template <typename It>
-
2314  void operator()(It &&it) const {
-
2315  if (prefix.size() != 0)
-
2316  it = internal::copy_str<char_type>(prefix.begin(), prefix.end(), it);
-
2317  it = std::fill_n(it, padding, fill);
-
2318  f(it);
-
2319  }
-
2320  };
-
2321 
-
2322  // Writes an integer in the format
-
2323  // <left-padding><prefix><numeric-padding><digits><right-padding>
-
2324  // where <digits> are written by f(it).
-
2325  template <typename Spec, typename F>
-
2326  void write_int(int num_digits, string_view prefix,
-
2327  const Spec &spec, F f) {
-
2328  std::size_t size = prefix.size() + internal::to_unsigned(num_digits);
-
2329  char_type fill = static_cast<char_type>(spec.fill());
-
2330  std::size_t padding = 0;
-
2331  if (spec.align() == ALIGN_NUMERIC) {
-
2332  if (spec.width() > size) {
-
2333  padding = spec.width() - size;
-
2334  size = spec.width();
-
2335  }
-
2336  } else if (spec.precision > num_digits) {
-
2337  size = prefix.size() + internal::to_unsigned(spec.precision);
-
2338  padding = internal::to_unsigned(spec.precision - num_digits);
-
2339  fill = static_cast<char_type>('0');
-
2340  }
-
2341  align_spec as = spec;
-
2342  if (spec.align() == ALIGN_DEFAULT)
-
2343  as.align_ = ALIGN_RIGHT;
-
2344  write_padded(as, padded_int_writer<F>{size, prefix, fill, padding, f});
-
2345  }
-
2346 
-
2347  // Writes a decimal integer.
-
2348  template <typename Int>
-
2349  void write_decimal(Int value) {
-
2350  typedef typename internal::int_traits<Int>::main_type main_type;
-
2351  main_type abs_value = static_cast<main_type>(value);
-
2352  bool is_negative = internal::is_negative(value);
-
2353  if (is_negative)
-
2354  abs_value = 0 - abs_value;
-
2355  int num_digits = internal::count_digits(abs_value);
-
2356  auto &&it = reserve((is_negative ? 1 : 0) + static_cast<size_t>(num_digits));
-
2357  if (is_negative)
-
2358  *it++ = static_cast<char_type>('-');
-
2359  it = internal::format_decimal<char_type>(it, abs_value, num_digits);
-
2360  }
-
2361 
-
2362  // The handle_int_type_spec handler that writes an integer.
-
2363  template <typename Int, typename Spec>
-
2364  struct int_writer {
-
2365  typedef typename internal::int_traits<Int>::main_type unsigned_type;
-
2366 
-
2367  basic_writer<Range> &writer;
-
2368  const Spec &spec;
-
2369  unsigned_type abs_value;
-
2370  char prefix[4];
-
2371  unsigned prefix_size;
-
2372 
-
2373  string_view get_prefix() const { return string_view(prefix, prefix_size); }
-
2374 
-
2375  // Counts the number of digits in abs_value. BITS = log2(radix).
-
2376  template <unsigned BITS>
-
2377  int count_digits() const {
-
2378  unsigned_type n = abs_value;
-
2379  int num_digits = 0;
-
2380  do {
-
2381  ++num_digits;
-
2382  } while ((n >>= BITS) != 0);
-
2383  return num_digits;
-
2384  }
-
2385 
-
2386  int_writer(basic_writer<Range> &w, Int value, const Spec &s)
-
2387  : writer(w), spec(s), abs_value(static_cast<unsigned_type>(value)),
-
2388  prefix_size(0) {
-
2389  if (internal::is_negative(value)) {
-
2390  prefix[0] = '-';
-
2391  ++prefix_size;
-
2392  abs_value = 0 - abs_value;
-
2393  } else if (spec.has(SIGN_FLAG)) {
-
2394  prefix[0] = spec.has(PLUS_FLAG) ? '+' : ' ';
-
2395  ++prefix_size;
-
2396  }
-
2397  }
-
2398 
-
2399  struct dec_writer {
-
2400  unsigned_type abs_value;
- -
2402 
-
2403  template <typename It>
-
2404  void operator()(It &&it) const {
-
2405  it = internal::format_decimal<char_type>(it, abs_value, num_digits);
-
2406  }
-
2407  };
-
2408 
-
2409  void on_dec() {
-
2410  int num_digits = internal::count_digits(abs_value);
-
2411  writer.write_int(num_digits, get_prefix(), spec,
-
2412  dec_writer{abs_value, num_digits});
-
2413  }
-
2414 
-
2415  struct hex_writer {
-
2416  int_writer &self;
- -
2418 
-
2419  template <typename It>
-
2420  void operator()(It &&it) const {
-
2421  it = internal::format_uint<4, char_type>(
-
2422  it, self.abs_value, num_digits, self.spec.type != 'x');
-
2423  }
-
2424  };
-
2425 
-
2426  void on_hex() {
-
2427  if (spec.has(HASH_FLAG)) {
-
2428  prefix[prefix_size++] = '0';
-
2429  prefix[prefix_size++] = static_cast<char>(spec.type);
-
2430  }
-
2431  int num_digits = count_digits<4>();
-
2432  writer.write_int(num_digits, get_prefix(), spec,
-
2433  hex_writer{*this, num_digits});
-
2434  }
-
2435 
-
2436  template <int BITS>
-
2437  struct bin_writer {
-
2438  unsigned_type abs_value;
- -
2440 
-
2441  template <typename It>
-
2442  void operator()(It &&it) const {
-
2443  it = internal::format_uint<BITS, char_type>(it, abs_value, num_digits);
-
2444  }
-
2445  };
-
2446 
-
2447  void on_bin() {
-
2448  if (spec.has(HASH_FLAG)) {
-
2449  prefix[prefix_size++] = '0';
-
2450  prefix[prefix_size++] = static_cast<char>(spec.type);
-
2451  }
-
2452  int num_digits = count_digits<1>();
-
2453  writer.write_int(num_digits, get_prefix(), spec,
-
2454  bin_writer<1>{abs_value, num_digits});
-
2455  }
-
2456 
-
2457  void on_oct() {
-
2458  int num_digits = count_digits<3>();
-
2459  if (spec.has(HASH_FLAG) &&
-
2460  spec.precision <= num_digits) {
-
2461  // Octal prefix '0' is counted as a digit, so only add it if precision
-
2462  // is not greater than the number of digits.
-
2463  prefix[prefix_size++] = '0';
-
2464  }
-
2465  writer.write_int(num_digits, get_prefix(), spec,
-
2466  bin_writer<3>{abs_value, num_digits});
-
2467  }
-
2468 
-
2469  enum { SEP_SIZE = 1 };
-
2470 
-
2471  struct num_writer {
-
2472  unsigned_type abs_value;
-
2473  int size;
- -
2475 
-
2476  template <typename It>
-
2477  void operator()(It &&it) const {
-
2478  basic_string_view<char_type> s(&sep, SEP_SIZE);
-
2479  it = internal::format_decimal<char_type>(
-
2480  it, abs_value, size, internal::add_thousands_sep<char_type>(s));
-
2481  }
-
2482  };
-
2483 
-
2484  void on_num() {
-
2485  int num_digits = internal::count_digits(abs_value);
-
2486  char_type sep = internal::thousands_sep<char_type>(writer.locale_);
-
2487  int size = num_digits + SEP_SIZE * ((num_digits - 1) / 3);
-
2488  writer.write_int(size, get_prefix(), spec,
-
2489  num_writer{abs_value, size, sep});
-
2490  }
-
2491 
-
2492  void on_error() {
-
2493  FMT_THROW(format_error("invalid type specifier"));
-
2494  }
-
2495  };
-
2496 
-
2497  // Writes a formatted integer.
-
2498  template <typename T, typename Spec>
-
2499  void write_int(T value, const Spec &spec) {
- -
2501  int_writer<T, Spec>(*this, value, spec));
-
2502  }
-
2503 
-
2504  enum {INF_SIZE = 3}; // This is an enum to workaround a bug in MSVC.
-
2505 
-
2506  struct inf_or_nan_writer {
-
2507  char sign;
-
2508  const char *str;
-
2509 
-
2510  size_t size() const {
-
2511  return static_cast<std::size_t>(INF_SIZE + (sign ? 1 : 0));
-
2512  }
-
2513  size_t width() const { return size(); }
-
2514 
-
2515  template <typename It>
-
2516  void operator()(It &&it) const {
-
2517  if (sign)
-
2518  *it++ = static_cast<char_type>(sign);
-
2519  it = internal::copy_str<char_type>(
-
2520  str, str + static_cast<std::size_t>(INF_SIZE), it);
-
2521  }
-
2522  };
-
2523 
-
2524  struct double_writer {
-
2525  size_t n;
-
2526  char sign;
- -
2528 
-
2529  size_t size() const { return buffer.size() + (sign ? 1 : 0); }
-
2530  size_t width() const { return size(); }
-
2531 
-
2532  template <typename It>
-
2533  void operator()(It &&it) {
-
2534  if (sign) {
-
2535  *it++ = static_cast<char_type>(sign);
-
2536  --n;
-
2537  }
-
2538  it = internal::copy_str<char_type>(buffer.begin(), buffer.end(), it);
-
2539  }
-
2540  };
-
2541 
-
2542  // Formats a floating-point number (double or long double).
-
2543  template <typename T>
-
2544  void write_double(T value, const format_specs &spec);
-
2545 
-
2546  template <typename Char>
-
2547  struct str_writer {
-
2548  const Char *s;
-
2549  size_t size_;
-
2550 
-
2551  size_t size() const { return size_; }
-
2552  size_t width() const {
-
2553  return internal::count_code_points(basic_string_view<Char>(s, size_));
-
2554  }
-
2555 
-
2556  template <typename It>
-
2557  void operator()(It &&it) const {
-
2558  it = internal::copy_str<char_type>(s, s + size_, it);
-
2559  }
-
2560  };
-
2561 
-
2562  template <typename Char>
- -
2564 
-
2565  public:
-
2567  explicit basic_writer(
-
2568  Range out, internal::locale_ref loc = internal::locale_ref())
-
2569  : out_(out.begin()), locale_(loc) {}
-
2570 
-
2571  iterator out() const { return out_; }
-
2572 
-
2573  void write(int value) { write_decimal(value); }
-
2574  void write(long value) { write_decimal(value); }
-
2575  void write(long long value) { write_decimal(value); }
-
2576 
-
2577  void write(unsigned value) { write_decimal(value); }
-
2578  void write(unsigned long value) { write_decimal(value); }
-
2579  void write(unsigned long long value) { write_decimal(value); }
-
2580 
-
2586  template <typename T, typename FormatSpec, typename... FormatSpecs>
-
2587  typename std::enable_if<std::is_integral<T>::value, void>::type
-
2588  write(T value, FormatSpec spec, FormatSpecs... specs) {
-
2589  format_specs s(spec, specs...);
-
2590  s.align_ = ALIGN_RIGHT;
-
2591  write_int(value, s);
-
2592  }
-
2593 
-
2594  void write(double value) {
-
2595  write_double(value, format_specs());
-
2596  }
-
2597 
-
2604  void write(long double value) {
-
2605  write_double(value, format_specs());
-
2606  }
-
2607 
-
2609  void write(char value) {
-
2610  *reserve(1) = value;
-
2611  }
-
2612  void write(wchar_t value) {
-
2613  static_assert(std::is_same<char_type, wchar_t>::value, "");
-
2614  *reserve(1) = value;
-
2615  }
-
2616 
-
2622  void write(string_view value) {
-
2623  auto &&it = reserve(value.size());
-
2624  it = internal::copy_str<char_type>(value.begin(), value.end(), it);
-
2625  }
-
2626  void write(wstring_view value) {
-
2627  static_assert(std::is_same<char_type, wchar_t>::value, "");
-
2628  auto &&it = reserve(value.size());
-
2629  it = std::copy(value.begin(), value.end(), it);
-
2630  }
-
2631 
-
2632  // Writes a formatted string.
-
2633  template <typename Char>
-
2634  void write(const Char *s, std::size_t size, const align_spec &spec) {
-
2635  write_padded(spec, str_writer<Char>{s, size});
-
2636  }
-
2637 
-
2638  template <typename Char>
- -
2640  const format_specs &spec = format_specs()) {
-
2641  const Char *data = s.data();
-
2642  std::size_t size = s.size();
-
2643  if (spec.precision >= 0 && internal::to_unsigned(spec.precision) < size)
-
2644  size = internal::to_unsigned(spec.precision);
-
2645  write(data, size, spec);
-
2646  }
-
2647 
-
2648  template <typename T>
-
2649  typename std::enable_if<std::is_same<T, void>::value>::type
-
2650  write(const T *p) {
-
2651  format_specs specs;
-
2652  specs.flags = HASH_FLAG;
-
2653  specs.type = 'x';
-
2654  write_int(reinterpret_cast<uintptr_t>(p), specs);
-
2655  }
-
2656 };
-
2657 
- -
2659  char type;
-
2660  bool upper;
-
2661 
-
2662  explicit float_spec_handler(char t) : type(t), upper(false) {}
-
2663 
-
2664  void on_general() {
-
2665  if (type == 'G')
-
2666  upper = true;
-
2667  else
-
2668  type = 'g';
-
2669  }
-
2670 
-
2671  void on_exp() {
-
2672  if (type == 'E')
-
2673  upper = true;
-
2674  }
-
2675 
-
2676  void on_fixed() {
-
2677  if (type == 'F') {
-
2678  upper = true;
-
2679 #if FMT_MSC_VER
-
2680  // MSVC's printf doesn't support 'F'.
-
2681  type = 'f';
-
2682 #endif
-
2683  }
-
2684  }
-
2685 
-
2686  void on_hex() {
-
2687  if (type == 'A')
-
2688  upper = true;
-
2689  }
-
2690 
-
2691  void on_error() {
-
2692  FMT_THROW(format_error("invalid type specifier"));
-
2693  }
-
2694 };
-
2695 
-
2696 template <typename Range>
-
2697 template <typename T>
-
2698 void basic_writer<Range>::write_double(T value, const format_specs &spec) {
-
2699  // Check type.
-
2700  float_spec_handler handler(static_cast<char>(spec.type));
-
2701  internal::handle_float_type_spec(handler.type, handler);
-
2702 
-
2703  char sign = 0;
-
2704  // Use signbit instead of value < 0 because the latter is always
-
2705  // false for NaN.
-
2706  if (std::signbit(value)) {
-
2707  sign = '-';
-
2708  value = -value;
-
2709  } else if (spec.has(SIGN_FLAG)) {
-
2710  sign = spec.has(PLUS_FLAG) ? '+' : ' ';
-
2711  }
-
2712 
-
2713  struct write_inf_or_nan_t {
-
2714  basic_writer &writer;
-
2715  format_specs spec;
-
2716  char sign;
-
2717  void operator()(const char *str) const {
-
2718  writer.write_padded(spec, inf_or_nan_writer{sign, str});
-
2719  }
-
2720  } write_inf_or_nan = {*this, spec, sign};
-
2721 
-
2722  // Format NaN and ininity ourselves because sprintf's output is not consistent
-
2723  // across platforms.
-
2724  if (internal::fputil::isnotanumber(value))
-
2725  return write_inf_or_nan(handler.upper ? "NAN" : "nan");
-
2726  if (internal::fputil::isinfinity(value))
-
2727  return write_inf_or_nan(handler.upper ? "INF" : "inf");
-
2728 
- -
2730  bool use_grisu = FMT_USE_GRISU && sizeof(T) <= sizeof(double) &&
-
2731  spec.type != 'a' && spec.type != 'A' &&
-
2732  internal::grisu2_format(static_cast<double>(value), buffer, spec);
-
2733  if (!use_grisu) {
-
2734  format_specs normalized_spec(spec);
-
2735  normalized_spec.type = handler.type;
-
2736  internal::sprintf_format(value, buffer, normalized_spec);
-
2737  }
-
2738  size_t n = buffer.size();
-
2739  align_spec as = spec;
-
2740  if (spec.align() == ALIGN_NUMERIC) {
-
2741  if (sign) {
-
2742  auto &&it = reserve(1);
-
2743  *it++ = static_cast<char_type>(sign);
-
2744  sign = 0;
-
2745  if (as.width_)
-
2746  --as.width_;
-
2747  }
-
2748  as.align_ = ALIGN_RIGHT;
-
2749  } else {
-
2750  if (spec.align() == ALIGN_DEFAULT)
-
2751  as.align_ = ALIGN_RIGHT;
-
2752  if (sign)
-
2753  ++n;
-
2754  }
-
2755  write_padded(as, double_writer{n, sign, buffer});
-
2756 }
-
2757 
-
2758 // Reports a system error without throwing an exception.
-
2759 // Can be used to report errors from destructors.
-
2760 FMT_API void report_system_error(int error_code,
-
2761  string_view message) FMT_NOEXCEPT;
-
2762 
-
2763 #if FMT_USE_WINDOWS_H
-
2764 
-
2766 class windows_error : public system_error {
-
2767  private:
-
2768  FMT_API void init(int error_code, string_view format_str, format_args args);
-
2769 
-
2770  public:
-
2799  template <typename... Args>
-
2800  windows_error(int error_code, string_view message, const Args &... args) {
-
2801  init(error_code, message, make_format_args(args...));
-
2802  }
-
2803 };
-
2804 
-
2805 // Reports a Windows error without throwing an exception.
-
2806 // Can be used to report errors from destructors.
-
2807 FMT_API void report_windows_error(int error_code,
-
2808  string_view message) FMT_NOEXCEPT;
-
2809 
-
2810 #endif
-
2811 
-
2813 class format_int {
-
2814  private:
-
2815  // Buffer should be large enough to hold all digits (digits10 + 1),
-
2816  // a sign and a null character.
-
2817  enum {BUFFER_SIZE = std::numeric_limits<unsigned long long>::digits10 + 3};
-
2818  mutable char buffer_[BUFFER_SIZE];
-
2819  char *str_;
-
2820 
-
2821  // Formats value in reverse and returns a pointer to the beginning.
-
2822  char *format_decimal(unsigned long long value) {
-
2823  char *ptr = buffer_ + (BUFFER_SIZE - 1); // Parens to workaround MSVC bug.
-
2824  while (value >= 100) {
-
2825  // Integer division is slow so do it for a group of two digits instead
-
2826  // of for every digit. The idea comes from the talk by Alexandrescu
-
2827  // "Three Optimization Tips for C++". See speed-test for a comparison.
-
2828  unsigned index = static_cast<unsigned>((value % 100) * 2);
-
2829  value /= 100;
-
2830  *--ptr = internal::data::DIGITS[index + 1];
-
2831  *--ptr = internal::data::DIGITS[index];
-
2832  }
-
2833  if (value < 10) {
-
2834  *--ptr = static_cast<char>('0' + value);
-
2835  return ptr;
-
2836  }
-
2837  unsigned index = static_cast<unsigned>(value * 2);
-
2838  *--ptr = internal::data::DIGITS[index + 1];
-
2839  *--ptr = internal::data::DIGITS[index];
-
2840  return ptr;
-
2841  }
-
2842 
-
2843  void format_signed(long long value) {
-
2844  unsigned long long abs_value = static_cast<unsigned long long>(value);
-
2845  bool negative = value < 0;
-
2846  if (negative)
-
2847  abs_value = 0 - abs_value;
-
2848  str_ = format_decimal(abs_value);
-
2849  if (negative)
-
2850  *--str_ = '-';
-
2851  }
-
2852 
-
2853  public:
-
2854  explicit format_int(int value) { format_signed(value); }
-
2855  explicit format_int(long value) { format_signed(value); }
-
2856  explicit format_int(long long value) { format_signed(value); }
-
2857  explicit format_int(unsigned value) : str_(format_decimal(value)) {}
-
2858  explicit format_int(unsigned long value) : str_(format_decimal(value)) {}
-
2859  explicit format_int(unsigned long long value) : str_(format_decimal(value)) {}
-
2860 
-
2862  std::size_t size() const {
-
2863  return internal::to_unsigned(buffer_ - str_ + BUFFER_SIZE - 1);
-
2864  }
-
2865 
-
2870  const char *data() const { return str_; }
-
2871 
-
2876  const char *c_str() const {
-
2877  buffer_[BUFFER_SIZE - 1] = '\0';
-
2878  return str_;
-
2879  }
-
2880 
-
2886  std::string str() const { return std::string(str_, size()); }
-
2887 };
-
2888 
-
2889 // DEPRECATED!
-
2890 // Formats a decimal integer value writing into buffer and returns
-
2891 // a pointer to the end of the formatted string. This function doesn't
-
2892 // write a terminating null character.
-
2893 template <typename T>
-
2894 inline void format_decimal(char *&buffer, T value) {
-
2895  typedef typename internal::int_traits<T>::main_type main_type;
-
2896  main_type abs_value = static_cast<main_type>(value);
-
2897  if (internal::is_negative(value)) {
-
2898  *buffer++ = '-';
-
2899  abs_value = 0 - abs_value;
-
2900  }
-
2901  if (abs_value < 100) {
-
2902  if (abs_value < 10) {
-
2903  *buffer++ = static_cast<char>('0' + abs_value);
-
2904  return;
-
2905  }
-
2906  unsigned index = static_cast<unsigned>(abs_value * 2);
-
2907  *buffer++ = internal::data::DIGITS[index];
-
2908  *buffer++ = internal::data::DIGITS[index + 1];
-
2909  return;
-
2910  }
-
2911  int num_digits = internal::count_digits(abs_value);
-
2912  internal::format_decimal<char>(
-
2913  internal::make_checked(buffer, internal::to_unsigned(num_digits)), abs_value, num_digits);
-
2914  buffer += num_digits;
-
2915 }
-
2916 
-
2917 // Formatter of objects of type T.
-
2918 template <typename T, typename Char>
-
2919 struct formatter<
-
2920  T, Char,
-
2921  typename std::enable_if<internal::format_type<
-
2922  typename buffer_context<Char>::type, T>::value>::type> {
-
2923 
-
2924  // Parses format specifiers stopping either at the end of the range or at the
-
2925  // terminating '}'.
-
2926  template <typename ParseContext>
-
2927  FMT_CONSTEXPR typename ParseContext::iterator parse(ParseContext &ctx) {
-
2928  typedef internal::dynamic_specs_handler<ParseContext> handler_type;
-
2929  auto type = internal::get_type<
-
2930  typename buffer_context<Char>::type, T>::value;
- -
2932  handler(handler_type(specs_, ctx), type);
-
2933  auto it = parse_format_specs(ctx.begin(), ctx.end(), handler);
-
2934  auto type_spec = specs_.type;
-
2935  auto eh = ctx.error_handler();
-
2936  switch (type) {
-
2937  case internal::none_type:
- -
2939  FMT_ASSERT(false, "invalid argument type");
-
2940  break;
-
2941  case internal::int_type:
-
2942  case internal::uint_type:
- - -
2945  case internal::bool_type:
- -
2947  type_spec, internal::int_type_checker<decltype(eh)>(eh));
-
2948  break;
-
2949  case internal::char_type:
- -
2951  &specs_,
-
2952  internal::char_specs_checker<decltype(eh)>(type_spec, eh));
-
2953  break;
-
2954  case internal::double_type:
- - -
2957  type_spec, internal::float_type_checker<decltype(eh)>(eh));
-
2958  break;
- - -
2961  type_spec, internal::cstring_type_checker<decltype(eh)>(eh));
-
2962  break;
-
2963  case internal::string_type:
-
2964  internal::check_string_type_spec(type_spec, eh);
-
2965  break;
- -
2967  internal::check_pointer_type_spec(type_spec, eh);
-
2968  break;
-
2969  case internal::custom_type:
-
2970  // Custom format specifiers should be checked in parse functions of
-
2971  // formatter specializations.
-
2972  break;
-
2973  }
-
2974  return it;
-
2975  }
-
2976 
-
2977  template <typename FormatContext>
-
2978  auto format(const T &val, FormatContext &ctx) -> decltype(ctx.out()) {
-
2979  internal::handle_dynamic_spec<internal::width_checker>(
-
2980  specs_.width_, specs_.width_ref, ctx);
-
2981  internal::handle_dynamic_spec<internal::precision_checker>(
-
2982  specs_.precision, specs_.precision_ref, ctx);
-
2983  typedef output_range<typename FormatContext::iterator,
-
2984  typename FormatContext::char_type> range_type;
-
2985  return visit_format_arg(arg_formatter<range_type>(ctx, &specs_),
-
2986  internal::make_arg<FormatContext>(val));
-
2987  }
-
2988 
-
2989  private:
- -
2991 };
-
2992 
-
2993 // A formatter for types known only at run time such as variant alternatives.
-
2994 //
-
2995 // Usage:
-
2996 // typedef std::variant<int, std::string> variant;
-
2997 // template <>
-
2998 // struct formatter<variant>: dynamic_formatter<> {
-
2999 // void format(buffer &buf, const variant &v, context &ctx) {
-
3000 // visit([&](const auto &val) { format(buf, val, ctx); }, v);
-
3001 // }
-
3002 // };
-
3003 template <typename Char = char>
- -
3005  private:
-
3006  struct null_handler: internal::error_handler {
-
3007  void on_align(alignment) {}
-
3008  void on_plus() {}
-
3009  void on_minus() {}
-
3010  void on_space() {}
-
3011  void on_hash() {}
-
3012  };
-
3013 
-
3014  public:
-
3015  template <typename ParseContext>
-
3016  auto parse(ParseContext &ctx) -> decltype(ctx.begin()) {
-
3017  // Checks are deferred to formatting time when the argument type is known.
-
3018  internal::dynamic_specs_handler<ParseContext> handler(specs_, ctx);
-
3019  return parse_format_specs(ctx.begin(), ctx.end(), handler);
-
3020  }
-
3021 
-
3022  template <typename T, typename FormatContext>
-
3023  auto format(const T &val, FormatContext &ctx) -> decltype(ctx.out()) {
-
3024  handle_specs(ctx);
- -
3026  checker(null_handler(), internal::get_type<FormatContext, T>::value);
-
3027  checker.on_align(specs_.align());
-
3028  if (specs_.flags == 0); // Do nothing.
-
3029  else if (specs_.has(SIGN_FLAG))
-
3030  specs_.has(PLUS_FLAG) ? checker.on_plus() : checker.on_space();
-
3031  else if (specs_.has(MINUS_FLAG))
-
3032  checker.on_minus();
-
3033  else if (specs_.has(HASH_FLAG))
-
3034  checker.on_hash();
-
3035  if (specs_.precision != -1)
-
3036  checker.end_precision();
-
3037  typedef output_range<typename FormatContext::iterator,
-
3038  typename FormatContext::char_type> range;
-
3039  visit_format_arg(arg_formatter<range>(ctx, &specs_),
-
3040  internal::make_arg<FormatContext>(val));
-
3041  return ctx.out();
-
3042  }
-
3043 
-
3044  private:
-
3045  template <typename Context>
-
3046  void handle_specs(Context &ctx) {
-
3047  internal::handle_dynamic_spec<internal::width_checker>(
-
3048  specs_.width_, specs_.width_ref, ctx);
-
3049  internal::handle_dynamic_spec<internal::precision_checker>(
-
3050  specs_.precision, specs_.precision_ref, ctx);
-
3051  }
-
3052 
- -
3054 };
-
3055 
-
3056 template <typename Range, typename Char>
-
3057 typename basic_format_context<Range, Char>::format_arg
- - -
3060  map_.init(this->args());
-
3061  format_arg arg = map_.find(name);
-
3062  if (arg.type() == internal::none_type)
-
3063  this->on_error("argument not found");
-
3064  return arg;
-
3065 }
-
3066 
-
3067 template <typename ArgFormatter, typename Char, typename Context>
- -
3069  typedef typename ArgFormatter::range range;
-
3070 
- - - -
3074  : context(r.begin(), str, format_args, loc) {}
-
3075 
-
3076  void on_text(const Char *begin, const Char *end) {
-
3077  auto size = internal::to_unsigned(end - begin);
-
3078  auto out = context.out();
-
3079  auto &&it = internal::reserve(out, size);
-
3080  it = std::copy_n(begin, size, it);
-
3081  context.advance_to(out);
-
3082  }
-
3083 
-
3084  void on_arg_id() { arg = context.next_arg(); }
-
3085  void on_arg_id(unsigned id) {
-
3086  context.parse_context().check_arg_id(id);
-
3087  arg = context.get_arg(id);
-
3088  }
- -
3090  arg = context.get_arg(id);
-
3091  }
-
3092 
-
3093  void on_replacement_field(const Char *p) {
-
3094  context.parse_context().advance_to(p);
- -
3096  if (!visit_format_arg(f, arg))
-
3097  context.advance_to(visit_format_arg(ArgFormatter(context), arg));
-
3098  }
-
3099 
-
3100  const Char *on_format_specs(const Char *begin, const Char *end) {
-
3101  auto &parse_ctx = context.parse_context();
-
3102  parse_ctx.advance_to(begin);
- -
3104  if (visit_format_arg(f, arg))
-
3105  return parse_ctx.begin();
- - - -
3109  handler(specs_handler<Context>(specs, context), arg.type());
-
3110  begin = parse_format_specs(begin, end, handler);
-
3111  if (begin == end || *begin != '}')
-
3112  on_error("missing '}' in format string");
-
3113  parse_ctx.advance_to(begin);
-
3114  context.advance_to(visit_format_arg(ArgFormatter(context, &specs), arg));
-
3115  return begin;
-
3116  }
-
3117 
-
3118  Context context;
- -
3120 };
-
3121 
-
3123 template <typename ArgFormatter, typename Char, typename Context>
-
3124 typename Context::iterator vformat_to(
-
3125  typename ArgFormatter::range out,
-
3126  basic_string_view<Char> format_str,
- - -
3129  format_handler<ArgFormatter, Char, Context> h(out, format_str, args, loc);
-
3130  internal::parse_format_string<false>(format_str, h);
-
3131  return h.context.out();
-
3132 }
-
3133 
-
3134 // Casts ``p`` to ``const void*`` for pointer formatting.
-
3135 // Example:
-
3136 // auto s = format("{}", ptr(p));
-
3137 template <typename T>
-
3138 inline const void *ptr(const T *p) { return p; }
-
3139 
-
3140 template <typename It, typename Char>
-
3141 struct arg_join {
-
3142  It begin;
-
3143  It end;
- -
3145 
- -
3147  : begin(begin), end(end), sep(sep) {}
-
3148 };
-
3149 
-
3150 template <typename It, typename Char>
-
3151 struct formatter<arg_join<It, Char>, Char>:
-
3152  formatter<typename std::iterator_traits<It>::value_type, Char> {
-
3153  template <typename FormatContext>
-
3154  auto format(const arg_join<It, Char> &value, FormatContext &ctx)
-
3155  -> decltype(ctx.out()) {
- -
3157  auto it = value.begin;
-
3158  auto out = ctx.out();
-
3159  if (it != value.end) {
-
3160  out = base::format(*it++, ctx);
-
3161  while (it != value.end) {
-
3162  out = std::copy(value.sep.begin(), value.sep.end(), out);
-
3163  ctx.advance_to(out);
-
3164  out = base::format(*it++, ctx);
-
3165  }
-
3166  }
-
3167  return out;
-
3168  }
-
3169 };
-
3170 
-
3171 template <typename It>
- -
3173  return arg_join<It, char>(begin, end, sep);
-
3174 }
-
3175 
-
3176 template <typename It>
- -
3178  return arg_join<It, wchar_t>(begin, end, sep);
-
3179 }
-
3180 
-
3181 // The following causes ICE in gcc 4.4.
-
3182 #if FMT_USE_TRAILING_RETURN && (!FMT_GCC_VERSION || FMT_GCC_VERSION >= 405)
-
3183 template <typename Range>
-
3184 auto join(const Range &range, string_view sep)
-
3185  -> arg_join<decltype(internal::begin(range)), char> {
-
3186  return join(internal::begin(range), internal::end(range), sep);
-
3187 }
-
3188 
-
3189 template <typename Range>
-
3190 auto join(const Range &range, wstring_view sep)
-
3191  -> arg_join<decltype(internal::begin(range)), wchar_t> {
-
3192  return join(internal::begin(range), internal::end(range), sep);
-
3193 }
-
3194 #endif
-
3195 
-
3208 template <typename T>
-
3209 std::string to_string(const T &value) {
-
3210  std::string str;
- -
3212  writer(buf).write(value);
-
3213  return str;
-
3214 }
-
3215 
-
3219 template <typename T>
-
3220 std::wstring to_wstring(const T &value) {
-
3221  std::wstring str;
- -
3223  wwriter(buf).write(value);
-
3224  return str;
-
3225 }
-
3226 
-
3227 template <typename Char, std::size_t SIZE>
-
3228 std::basic_string<Char> to_string(const basic_memory_buffer<Char, SIZE> &buf) {
-
3229  return std::basic_string<Char>(buf.data(), buf.size());
-
3230 }
-
3231 
-
3232 template <typename Char>
- - - - -
3237  return vformat_to<arg_formatter<range>>(
-
3238  buf, to_string_view(format_str), args);
-
3239 }
-
3240 
-
3241 template <typename S, typename Char = FMT_CHAR(S)>
- -
3243  internal::basic_buffer<Char> &buf, const S &format_str,
- -
3245  return internal::vformat_to(buf, to_string_view(format_str), args);
-
3246 }
-
3247 
-
3248 template <
-
3249  typename S, typename... Args,
-
3250  std::size_t SIZE = inline_buffer_size,
-
3251  typename Char = typename internal::char_t<S>::type>
- -
3253  basic_memory_buffer<Char, SIZE> &buf, const S &format_str,
-
3254  const Args &... args) {
-
3255  internal::check_format_string<Args...>(format_str);
-
3256  typedef typename buffer_context<Char>::type context;
-
3257  format_arg_store<context, Args...> as{args...};
-
3258  return internal::vformat_to(buf, to_string_view(format_str),
- -
3260 }
-
3261 
-
3262 namespace internal {
-
3263 
-
3264 // Detect the iterator category of *any* given type in a SFINAE-friendly way.
-
3265 // Unfortunately, older implementations of std::iterator_traits are not safe
-
3266 // for use in a SFINAE-context.
-
3267 
-
3268 // the gist of C++17's void_t magic
-
3269 template<typename... Ts>
-
3270 struct void_ { typedef void type; };
-
3271 
-
3272 template <typename T, typename Enable = void>
-
3273 struct it_category : std::false_type {};
-
3274 
-
3275 template <typename T>
-
3276 struct it_category<T*> { typedef std::random_access_iterator_tag type; };
-
3277 
-
3278 template <typename T>
-
3279 struct it_category<T, typename void_<typename T::iterator_category>::type> {
-
3280  typedef typename T::iterator_category type;
-
3281 };
-
3282 
-
3283 // Detect if *any* given type models the OutputIterator concept.
-
3284 template <typename It>
- -
3286  // Check for mutability because all iterator categories derived from
-
3287  // std::input_iterator_tag *may* also meet the requirements of an
-
3288  // OutputIterator, thereby falling into the category of 'mutable iterators'
-
3289  // [iterator.requirements.general] clause 4.
-
3290  // The compiler reveals this property only at the point of *actually
-
3291  // dereferencing* the iterator!
-
3292  template <typename U>
-
3293  static decltype(*(internal::declval<U>())) test(std::input_iterator_tag);
-
3294  template <typename U>
-
3295  static char& test(std::output_iterator_tag);
-
3296  template <typename U>
-
3297  static const char& test(...);
-
3298 
-
3299  typedef decltype(test<It>(typename it_category<It>::type{})) type;
-
3300  typedef typename std::remove_reference<type>::type result;
-
3301  public:
-
3302  static const bool value = !std::is_const<result>::value;
-
3303 };
-
3304 } // internal
-
3305 
-
3306 template <typename OutputIt, typename Char = char>
-
3307 //using format_context_t = basic_format_context<OutputIt, Char>;
- -
3309 
-
3310 template <typename OutputIt, typename Char = char>
-
3311 //using format_args_t = basic_format_args<format_context_t<OutputIt, Char>>;
- -
3313  typedef basic_format_args<
- -
3315 };
-
3316 
-
3317 template <typename String, typename OutputIt, typename... Args>
-
3318 inline typename std::enable_if<internal::is_output_iterator<OutputIt>::value,
-
3319  OutputIt>::type
-
3320  vformat_to(OutputIt out, const String &format_str,
-
3321  typename format_args_t<OutputIt, FMT_CHAR(String)>::type args) {
-
3322  typedef output_range<OutputIt, FMT_CHAR(String)> range;
-
3323  return vformat_to<arg_formatter<range>>(range(out),
-
3324  to_string_view(format_str), args);
-
3325 }
-
3326 
-
3338 template <typename OutputIt, typename S, typename... Args>
-
3339 inline FMT_ENABLE_IF_T(
- - -
3342  format_to(OutputIt out, const S &format_str, const Args &... args) {
-
3343  internal::check_format_string<Args...>(format_str);
-
3344  typedef typename format_context_t<OutputIt, FMT_CHAR(S)>::type context;
-
3345  format_arg_store<context, Args...> as{args...};
-
3346  return vformat_to(out, to_string_view(format_str),
- -
3348 }
-
3349 
-
3350 template <typename OutputIt>
- -
3353  OutputIt out;
-
3355  std::size_t size;
-
3356 };
-
3357 
-
3358 template <typename OutputIt, typename Char = typename OutputIt::value_type>
- -
3360  format_context_t<fmt::internal::truncating_iterator<OutputIt>, Char> {};
-
3361 
-
3362 template <typename OutputIt, typename Char = typename OutputIt::value_type>
- -
3364  typedef basic_format_args<
- -
3366 };
-
3367 
-
3368 template <typename OutputIt, typename Char, typename ...Args>
-
3369 inline format_arg_store<
- -
3371  make_format_to_n_args(const Args &... args) {
-
3372  return format_arg_store<
-
3373  typename format_to_n_context<OutputIt, Char>::type, Args...>(args...);
-
3374 }
-
3375 
-
3376 template <typename OutputIt, typename Char, typename... Args>
-
3377 inline typename std::enable_if<
- - -
3380  OutputIt out, std::size_t n, basic_string_view<Char> format_str,
- - -
3383  auto it = vformat_to(It(out, n), format_str, args);
-
3384  return {it.base(), it.count()};
-
3385 }
-
3386 
-
3394 template <typename OutputIt, typename S, typename... Args>
-
3395 inline FMT_ENABLE_IF_T(
- - - -
3399  format_to_n(OutputIt out, std::size_t n, const S &format_str,
-
3400  const Args &... args) {
-
3401  internal::check_format_string<Args...>(format_str);
-
3402  typedef FMT_CHAR(S) Char;
- -
3404  typename format_to_n_context<OutputIt, Char>::type, Args...> as(args...);
-
3405  return vformat_to_n(out, n, to_string_view(format_str),
- -
3407 }
-
3408 
-
3409 template <typename Char>
-
3410 inline std::basic_string<Char> internal::vformat(
-
3411  basic_string_view<Char> format_str,
- - -
3414  internal::vformat_to(buffer, format_str, args);
-
3415  return fmt::to_string(buffer);
-
3416 }
-
3417 
-
3422 template <typename... Args>
-
3423 inline std::size_t formatted_size(string_view format_str,
-
3424  const Args &... args) {
-
3425  auto it = format_to(internal::counting_iterator<char>(), format_str, args...);
-
3426  return it.count();
-
3427 }
-
3428 
-
3429 #if FMT_USE_USER_DEFINED_LITERALS
-
3430 namespace internal {
-
3431 
-
3432 # if FMT_UDL_TEMPLATE
-
3433 template <typename Char, Char... CHARS>
-
3434 class udl_formatter {
-
3435  public:
-
3436  template <typename... Args>
-
3437  std::basic_string<Char> operator()(const Args &... args) const {
-
3438  FMT_CONSTEXPR_DECL Char s[] = {CHARS..., '\0'};
-
3439  FMT_CONSTEXPR_DECL bool invalid_format =
-
3440  do_check_format_string<Char, error_handler, Args...>(
-
3441  basic_string_view<Char>(s, sizeof...(CHARS)));
-
3442  (void)invalid_format;
-
3443  return format(s, args...);
-
3444  }
-
3445 };
-
3446 # else
-
3447 template <typename Char>
-
3448 struct udl_formatter {
-
3449  const Char *str;
-
3450 
-
3451  template <typename... Args>
-
3452  auto operator()(Args &&... args) const
-
3453  -> decltype(format(str, std::forward<Args>(args)...)) {
-
3454  return format(str, std::forward<Args>(args)...);
-
3455  }
-
3456 };
-
3457 # endif // FMT_UDL_TEMPLATE
-
3458 
-
3459 template <typename Char>
-
3460 struct udl_arg {
-
3461  const Char *str;
-
3462 
-
3463  template <typename T>
-
3464  named_arg<T, Char> operator=(T &&value) const {
-
3465  return {str, std::forward<T>(value)};
-
3466  }
-
3467 };
-
3468 
-
3469 } // namespace internal
-
3470 
-
3471 inline namespace literals {
-
3472 
-
3473 # if FMT_UDL_TEMPLATE
-
3474 template <typename Char, Char... CHARS>
-
3475 FMT_CONSTEXPR internal::udl_formatter<Char, CHARS...> operator""_format() {
-
3476  return {};
-
3477 }
-
3478 # else
-
3479 
-
3489 inline internal::udl_formatter<char>
-
3490 operator"" _format(const char *s, std::size_t) { return {s}; }
-
3491 inline internal::udl_formatter<wchar_t>
-
3492 operator"" _format(const wchar_t *s, std::size_t) { return {s}; }
-
3493 # endif // FMT_UDL_TEMPLATE
-
3494 
-
3505 inline internal::udl_arg<char>
-
3506 operator"" _a(const char *s, std::size_t) { return {s}; }
-
3507 inline internal::udl_arg<wchar_t>
-
3508 operator"" _a(const wchar_t *s, std::size_t) { return {s}; }
-
3509 } // inline namespace literals
-
3510 #endif // FMT_USE_USER_DEFINED_LITERALS
- -
3512 
-
3513 #define FMT_STRING(s) [] { \
-
3514  typedef typename std::remove_cv<std::remove_pointer< \
-
3515  typename std::decay<decltype(s)>::type>::type>::type ct; \
-
3516  struct str : fmt::compile_string { \
-
3517  typedef ct char_type; \
-
3518  FMT_CONSTEXPR operator fmt::basic_string_view<ct>() const { \
-
3519  return {s, sizeof(s) / sizeof(ct) - 1}; \
-
3520  } \
-
3521  }; \
-
3522  return str{}; \
-
3523  }()
-
3524 
-
3525 #if defined(FMT_STRING_ALIAS) && FMT_STRING_ALIAS
-
3526 
-
3540 # define fmt(s) FMT_STRING(s)
-
3541 #endif
-
3542 
-
3543 #ifdef FMT_HEADER_ONLY
-
3544 # define FMT_FUNC inline
-
3545 # include "format-inl.h"
-
3546 #else
-
3547 # define FMT_FUNC
-
3548 #endif
-
3549 
-
3550 // Restore warnings.
-
3551 #if FMT_GCC_VERSION >= 406 || FMT_CLANG_VERSION
-
3552 # pragma GCC diagnostic pop
-
3553 #endif
-
3554 
-
3555 #endif // FMT_FORMAT_H_
+Go to the documentation of this file.
1 /*
2  Formatting library for C++
3 
4  Copyright (c) 2012 - present, Victor Zverovich
5  All rights reserved.
6 
7  Redistribution and use in source and binary forms, with or without
8  modification, are permitted provided that the following conditions are met:
9 
10  1. Redistributions of source code must retain the above copyright notice, this
11  list of conditions and the following disclaimer.
12  2. Redistributions in binary form must reproduce the above copyright notice,
13  this list of conditions and the following disclaimer in the documentation
14  and/or other materials provided with the distribution.
15 
16  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
17  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19  DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
20  ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25  SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26  */
27 
28 #ifndef FMT_FORMAT_H_
29 #define FMT_FORMAT_H_
30 
31 #include <algorithm>
32 #include <cassert>
33 #include <cmath>
34 #include <cstring>
35 #include <limits>
36 #include <memory>
37 #include <stdexcept>
38 #include <stdint.h>
39 
40 #ifdef __clang__
41 # define FMT_CLANG_VERSION (__clang_major__ * 100 + __clang_minor__)
42 #else
43 # define FMT_CLANG_VERSION 0
44 #endif
45 
46 #ifdef __INTEL_COMPILER
47 # define FMT_ICC_VERSION __INTEL_COMPILER
48 #elif defined(__ICL)
49 # define FMT_ICC_VERSION __ICL
50 #else
51 # define FMT_ICC_VERSION 0
52 #endif
53 
54 #ifdef __NVCC__
55 # define FMT_CUDA_VERSION (__CUDACC_VER_MAJOR__ * 100 + __CUDACC_VER_MINOR__)
56 #else
57 # define FMT_CUDA_VERSION 0
58 #endif
59 
60 #include "core.h"
61 
62 #if FMT_GCC_VERSION >= 406 || FMT_CLANG_VERSION
63 # pragma GCC diagnostic push
64 
65 // Disable the warning about declaration shadowing because it affects too
66 // many valid cases.
67 # pragma GCC diagnostic ignored "-Wshadow"
68 
69 // Disable the warning about nonliteral format strings because we construct
70 // them dynamically when falling back to snprintf for FP formatting.
71 # pragma GCC diagnostic ignored "-Wformat-nonliteral"
72 #endif
73 
74 # if FMT_CLANG_VERSION
75 # pragma GCC diagnostic ignored "-Wgnu-string-literal-operator-template"
76 # endif
77 
78 #ifdef _SECURE_SCL
79 # define FMT_SECURE_SCL _SECURE_SCL
80 #else
81 # define FMT_SECURE_SCL 0
82 #endif
83 
84 #if FMT_SECURE_SCL
85 # include <iterator>
86 #endif
87 
88 #ifdef __has_builtin
89 # define FMT_HAS_BUILTIN(x) __has_builtin(x)
90 #else
91 # define FMT_HAS_BUILTIN(x) 0
92 #endif
93 
94 #ifdef __GNUC_LIBSTD__
95 # define FMT_GNUC_LIBSTD_VERSION (__GNUC_LIBSTD__ * 100 + __GNUC_LIBSTD_MINOR__)
96 #endif
97 
98 #ifndef FMT_THROW
99 # if FMT_EXCEPTIONS
100 # if FMT_MSC_VER
102 namespace internal {
103 template <typename Exception>
104 inline void do_throw(const Exception &x) {
105  // Silence unreachable code warnings in MSVC because these are nearly
106  // impossible to fix in a generic code.
107  volatile bool b = true;
108  if (b)
109  throw x;
110 }
111 }
113 # define FMT_THROW(x) fmt::internal::do_throw(x)
114 # else
115 # define FMT_THROW(x) throw x
116 # endif
117 # else
118 # define FMT_THROW(x) do { static_cast<void>(sizeof(x)); assert(false); } while(false);
119 # endif
120 #endif
121 
122 #ifndef FMT_USE_USER_DEFINED_LITERALS
123 // For Intel's compiler and NVIDIA's compiler both it and the system gcc/msc
124 // must support UDLs.
125 # if (FMT_HAS_FEATURE(cxx_user_literals) || \
126  FMT_GCC_VERSION >= 407 || FMT_MSC_VER >= 1900) && \
127  (!(FMT_ICC_VERSION || FMT_CUDA_VERSION) || \
128  FMT_ICC_VERSION >= 1500 || FMT_CUDA_VERSION >= 700)
129 # define FMT_USE_USER_DEFINED_LITERALS 1
130 # else
131 # define FMT_USE_USER_DEFINED_LITERALS 0
132 # endif
133 #endif
134 
135 // EDG C++ Front End based compilers (icc, nvcc) do not currently support UDL
136 // templates.
137 #if FMT_USE_USER_DEFINED_LITERALS && \
138  FMT_ICC_VERSION == 0 && \
139  FMT_CUDA_VERSION == 0 && \
140  ((FMT_GCC_VERSION >= 600 && __cplusplus >= 201402L) || \
141  (defined(FMT_CLANG_VERSION) && FMT_CLANG_VERSION >= 304))
142 # define FMT_UDL_TEMPLATE 1
143 #else
144 # define FMT_UDL_TEMPLATE 0
145 #endif
146 
147 #ifndef FMT_USE_EXTERN_TEMPLATES
148 # ifndef FMT_HEADER_ONLY
149 # define FMT_USE_EXTERN_TEMPLATES \
150  ((FMT_CLANG_VERSION >= 209 && __cplusplus >= 201103L) || \
151  (FMT_GCC_VERSION >= 303 && FMT_HAS_GXX_CXX11))
152 # else
153 # define FMT_USE_EXTERN_TEMPLATES 0
154 # endif
155 #endif
156 
157 #if FMT_HAS_GXX_CXX11 || FMT_HAS_FEATURE(cxx_trailing_return) || \
158  FMT_MSC_VER >= 1600
159 # define FMT_USE_TRAILING_RETURN 1
160 #else
161 # define FMT_USE_TRAILING_RETURN 0
162 #endif
163 
164 #ifndef FMT_USE_GRISU
165 # define FMT_USE_GRISU 0
166 //# define FMT_USE_GRISU std::numeric_limits<double>::is_iec559
167 #endif
168 
169 // __builtin_clz is broken in clang with Microsoft CodeGen:
170 // https://github.com/fmtlib/fmt/issues/519
171 #ifndef _MSC_VER
172 # if FMT_GCC_VERSION >= 400 || FMT_HAS_BUILTIN(__builtin_clz)
173 # define FMT_BUILTIN_CLZ(n) __builtin_clz(n)
174 # endif
175 
176 # if FMT_GCC_VERSION >= 400 || FMT_HAS_BUILTIN(__builtin_clzll)
177 # define FMT_BUILTIN_CLZLL(n) __builtin_clzll(n)
178 # endif
179 #endif
180 
181 // Some compilers masquerade as both MSVC and GCC-likes or otherwise support
182 // __builtin_clz and __builtin_clzll, so only define FMT_BUILTIN_CLZ using the
183 // MSVC intrinsics if the clz and clzll builtins are not available.
184 #if FMT_MSC_VER && !defined(FMT_BUILTIN_CLZLL) && !defined(_MANAGED)
185 # include <intrin.h> // _BitScanReverse, _BitScanReverse64
186 
188 namespace internal {
189 // Avoid Clang with Microsoft CodeGen's -Wunknown-pragmas warning.
190 # ifndef __clang__
191 # pragma intrinsic(_BitScanReverse)
192 # endif
193 inline uint32_t clz(uint32_t x) {
194  unsigned long r = 0;
195  _BitScanReverse(&r, x);
196 
197  assert(x != 0);
198  // Static analysis complains about using uninitialized data
199  // "r", but the only way that can happen is if "x" is 0,
200  // which the callers guarantee to not happen.
201 # pragma warning(suppress: 6102)
202  return 31 - r;
203 }
204 # define FMT_BUILTIN_CLZ(n) fmt::internal::clz(n)
205 
206 # if defined(_WIN64) && !defined(__clang__)
207 # pragma intrinsic(_BitScanReverse64)
208 # endif
209 
210 inline uint32_t clzll(uint64_t x) {
211  unsigned long r = 0;
212 # ifdef _WIN64
213  _BitScanReverse64(&r, x);
214 # else
215  // Scan the high 32 bits.
216  if (_BitScanReverse(&r, static_cast<uint32_t>(x >> 32)))
217  return 63 - (r + 32);
218 
219  // Scan the low 32 bits.
220  _BitScanReverse(&r, static_cast<uint32_t>(x));
221 # endif
222 
223  assert(x != 0);
224  // Static analysis complains about using uninitialized data
225  // "r", but the only way that can happen is if "x" is 0,
226  // which the callers guarantee to not happen.
227 # pragma warning(suppress: 6102)
228  return 63 - r;
229 }
230 # define FMT_BUILTIN_CLZLL(n) fmt::internal::clzll(n)
231 }
233 #endif
234 
236 namespace internal {
237 
238 // An equivalent of `*reinterpret_cast<Dest*>(&source)` that doesn't produce
239 // undefined behavior (e.g. due to type aliasing).
240 // Example: uint64_t d = bit_cast<uint64_t>(2.718);
241 template <typename Dest, typename Source>
242 inline Dest bit_cast(const Source& source) {
243  static_assert(sizeof(Dest) == sizeof(Source), "size mismatch");
244  Dest dest;
245  std::memcpy(&dest, &source, sizeof(dest));
246  return dest;
247 }
248 
249 // An implementation of begin and end for pre-C++11 compilers such as gcc 4.
250 template <typename C>
251 FMT_CONSTEXPR auto begin(const C &c) -> decltype(c.begin()) {
252  return c.begin();
253 }
254 template <typename T, std::size_t N>
255 FMT_CONSTEXPR T *begin(T (&array)[N]) FMT_NOEXCEPT { return array; }
256 template <typename C>
257 FMT_CONSTEXPR auto end(const C &c) -> decltype(c.end()) { return c.end(); }
258 template <typename T, std::size_t N>
259 FMT_CONSTEXPR T *end(T (&array)[N]) FMT_NOEXCEPT { return array + N; }
260 
261 // For std::result_of in gcc 4.4.
262 template <typename Result>
263 struct function {
264  template <typename T>
265  struct result { typedef Result type; };
266 };
267 
268 struct dummy_int {
269  int data[2];
270  operator int() const { return 0; }
271 };
272 typedef std::numeric_limits<internal::dummy_int> fputil;
273 
274 // Dummy implementations of system functions called if the latter are not
275 // available.
276 inline dummy_int isinf(...) { return dummy_int(); }
277 inline dummy_int _finite(...) { return dummy_int(); }
278 inline dummy_int isnan(...) { return dummy_int(); }
279 inline dummy_int _isnan(...) { return dummy_int(); }
280 
281 template <typename Allocator>
282 typename Allocator::value_type *allocate(Allocator& alloc, std::size_t n) {
283 #if __cplusplus >= 201103L || FMT_MSC_VER >= 1700
285 #else
286  return alloc.allocate(n);
287 #endif
288 }
289 
290 // A helper function to suppress bogus "conditional expression is constant"
291 // warnings.
292 template <typename T>
293 inline T const_check(T value) { return value; }
294 } // namespace internal
296 
297 namespace std {
298 // Standard permits specialization of std::numeric_limits. This specialization
299 // is used to resolve ambiguity between isinf and std::isinf in glibc:
300 // https://gcc.gnu.org/bugzilla/show_bug.cgi?id=48891
301 // and the same for isnan.
302 template <>
303 class numeric_limits<fmt::internal::dummy_int> :
304  public std::numeric_limits<int> {
305  public:
306  // Portable version of isinf.
307  template <typename T>
308  static bool isinfinity(T x) {
309  using namespace fmt::internal;
310  // The resolution "priority" is:
311  // isinf macro > std::isinf > ::isinf > fmt::internal::isinf
312  if (const_check(sizeof(isinf(x)) != sizeof(fmt::internal::dummy_int)))
313  return isinf(x) != 0;
314  return !_finite(static_cast<double>(x));
315  }
316 
317  // Portable version of isnan.
318  template <typename T>
319  static bool isnotanumber(T x) {
320  using namespace fmt::internal;
321  if (const_check(sizeof(isnan(x)) != sizeof(fmt::internal::dummy_int)))
322  return isnan(x) != 0;
323  return _isnan(static_cast<double>(x)) != 0;
324  }
325 };
326 } // namespace std
327 
329 template <typename Range>
331 
332 template <typename OutputIt, typename T = typename OutputIt::value_type>
334  private:
335  OutputIt it_;
336 
337  // Unused yet.
338  typedef void sentinel;
339  sentinel end() const;
340 
341  public:
342  typedef OutputIt iterator;
343  typedef T value_type;
344 
345  explicit output_range(OutputIt it): it_(it) {}
346  OutputIt begin() const { return it_; }
347 };
348 
349 // A range where begin() returns back_insert_iterator.
350 template <typename Container>
352  public output_range<std::back_insert_iterator<Container>> {
354  public:
355  typedef typename Container::value_type value_type;
356 
357  back_insert_range(Container &c): base(std::back_inserter(c)) {}
358  back_insert_range(typename base::iterator it): base(it) {}
359 };
360 
363 
365 class format_error : public std::runtime_error {
366  public:
367  explicit format_error(const char *message)
368  : std::runtime_error(message) {}
369 
370  explicit format_error(const std::string &message)
371  : std::runtime_error(message) {}
372 };
373 
374 namespace internal {
375 
376 #if FMT_SECURE_SCL
377 template <typename T>
378 struct checked { typedef stdext::checked_array_iterator<T*> type; };
379 
380 // Make a checked iterator to avoid warnings on MSVC.
381 template <typename T>
382 inline stdext::checked_array_iterator<T*> make_checked(T *p, std::size_t size) {
383  return {p, size};
384 }
385 #else
386 template <typename T>
387 struct checked { typedef T *type; };
388 template <typename T>
389 inline T *make_checked(T *p, std::size_t) { return p; }
390 #endif
391 
392 template <typename T>
393 template <typename U>
394 void basic_buffer<T>::append(const U *begin, const U *end) {
395  std::size_t new_size = size_ + internal::to_unsigned(end - begin);
396  reserve(new_size);
397  std::uninitialized_copy(begin, end,
398  internal::make_checked(ptr_, capacity_) + size_);
399  size_ = new_size;
400 }
401 } // namespace internal
402 
403 // C++20 feature test, since r346892 Clang considers char8_t a fundamental
404 // type in this mode. If this is the case __cpp_char8_t will be defined.
405 #if !defined(__cpp_char8_t)
406 // A UTF-8 code unit type.
407 enum char8_t: unsigned char {};
408 #endif
409 
410 // A UTF-8 string view.
411 class u8string_view : public basic_string_view<char8_t> {
412  public:
414 
415  u8string_view(const char *s):
416  basic_string_view<char8_t>(reinterpret_cast<const char8_t*>(s)) {}
417  u8string_view(const char *s, size_t count) FMT_NOEXCEPT:
418  basic_string_view<char8_t>(reinterpret_cast<const char8_t*>(s), count) {}
419 };
420 
421 #if FMT_USE_USER_DEFINED_LITERALS
422 inline namespace literals {
423 inline u8string_view operator"" _u(const char *s, std::size_t n) {
424  return {s, n};
425 }
426 }
427 #endif
428 
429 // The number of characters to store in the basic_memory_buffer object itself
430 // to avoid dynamic memory allocation.
431 enum { inline_buffer_size = 500 };
432 
462 template <typename T, std::size_t SIZE = inline_buffer_size,
463  typename Allocator = std::allocator<T> >
464 class basic_memory_buffer: private Allocator, public internal::basic_buffer<T> {
465  private:
466  T store_[SIZE];
467 
468  // Deallocate memory allocated by the buffer.
469  void deallocate() {
470  T* data = this->data();
471  if (data != store_) Allocator::deallocate(data, this->capacity());
472  }
473 
474  protected:
475  void grow(std::size_t size) FMT_OVERRIDE;
476 
477  public:
478  typedef T value_type;
479  typedef const T &const_reference;
480 
481  explicit basic_memory_buffer(const Allocator &alloc = Allocator())
482  : Allocator(alloc) {
483  this->set(store_, SIZE);
484  }
485  ~basic_memory_buffer() { deallocate(); }
486 
487  private:
488  // Move data from other to this buffer.
489  void move(basic_memory_buffer &other) {
490  Allocator &this_alloc = *this, &other_alloc = other;
491  this_alloc = std::move(other_alloc);
492  T* data = other.data();
493  std::size_t size = other.size(), capacity = other.capacity();
494  if (data == other.store_) {
495  this->set(store_, capacity);
496  std::uninitialized_copy(other.store_, other.store_ + size,
497  internal::make_checked(store_, capacity));
498  } else {
499  this->set(data, capacity);
500  // Set pointer to the inline array so that delete is not called
501  // when deallocating.
502  other.set(other.store_, 0);
503  }
504  this->resize(size);
505  }
506 
507  public:
515  move(other);
516  }
517 
524  assert(this != &other);
525  deallocate();
526  move(other);
527  return *this;
528  }
529 
530  // Returns a copy of the allocator associated with this buffer.
531  Allocator get_allocator() const { return *this; }
532 };
533 
534 template <typename T, std::size_t SIZE, typename Allocator>
536  std::size_t old_capacity = this->capacity();
537  std::size_t new_capacity = old_capacity + old_capacity / 2;
538  if (size > new_capacity)
539  new_capacity = size;
540  T *old_data = this->data();
541  T *new_data = internal::allocate<Allocator>(*this, new_capacity);
542  // The following code doesn't throw, so the raw pointer above doesn't leak.
543  std::uninitialized_copy(old_data, old_data + this->size(),
544  internal::make_checked(new_data, new_capacity));
545  this->set(new_data, new_capacity);
546  // deallocate must not throw according to the standard, but even if it does,
547  // the buffer already uses the new storage and will deallocate it in
548  // destructor.
549  if (old_data != store_)
550  Allocator::deallocate(old_data, old_capacity);
551 }
552 
555 
556 namespace internal {
557 
558 template <typename Char>
559 struct char_traits;
560 
561 template <>
562 struct char_traits<char> {
563  // Formats a floating-point number.
564  template <typename T>
565  FMT_API static int format_float(char *buffer, std::size_t size,
566  const char *format, int precision, T value);
567 };
568 
569 template <>
570 struct char_traits<wchar_t> {
571  template <typename T>
572  FMT_API static int format_float(wchar_t *buffer, std::size_t size,
573  const wchar_t *format, int precision, T value);
574 };
575 
576 #if FMT_USE_EXTERN_TEMPLATES
577 extern template int char_traits<char>::format_float<double>(
578  char *buffer, std::size_t size, const char* format, int precision,
579  double value);
580 extern template int char_traits<char>::format_float<long double>(
581  char *buffer, std::size_t size, const char* format, int precision,
582  long double value);
583 
584 extern template int char_traits<wchar_t>::format_float<double>(
585  wchar_t *buffer, std::size_t size, const wchar_t* format, int precision,
586  double value);
587 extern template int char_traits<wchar_t>::format_float<long double>(
588  wchar_t *buffer, std::size_t size, const wchar_t* format, int precision,
589  long double value);
590 #endif
591 
592 template <typename Container>
593 inline typename std::enable_if<
596  reserve(std::back_insert_iterator<Container> &it, std::size_t n) {
597  Container &c = internal::get_container(it);
598  std::size_t size = c.size();
599  c.resize(size + n);
600  return make_checked(&c[size], n);
601 }
602 
603 template <typename Iterator>
604 inline Iterator &reserve(Iterator &it, std::size_t) { return it; }
605 
606 template <typename Char>
608 
609 template <typename Char>
611 
612 // An output iterator that counts the number of objects written to it and
613 // discards them.
614 template <typename T>
616  private:
617  std::size_t count_;
618  mutable T blackhole_;
619 
620  public:
621  typedef std::output_iterator_tag iterator_category;
622  typedef T value_type;
623  typedef std::ptrdiff_t difference_type;
624  typedef T* pointer;
625  typedef T& reference;
626  typedef counting_iterator _Unchecked_type; // Mark iterator as checked.
627 
628  counting_iterator(): count_(0) {}
629 
630  std::size_t count() const { return count_; }
631 
633  ++count_;
634  return *this;
635  }
636 
638  auto it = *this;
639  ++*this;
640  return it;
641  }
642 
643  T &operator*() const { return blackhole_; }
644 };
645 
646 template <typename OutputIt>
648  protected:
649  OutputIt out_;
650  std::size_t limit_;
651  std::size_t count_;
652 
653  truncating_iterator_base(OutputIt out, std::size_t limit)
654  : out_(out), limit_(limit), count_(0) {}
655 
656  public:
657  typedef std::output_iterator_tag iterator_category;
658  typedef void difference_type;
659  typedef void pointer;
660  typedef void reference;
661  typedef truncating_iterator_base _Unchecked_type; // Mark iterator as checked.
662 
663  OutputIt base() const { return out_; }
664  std::size_t count() const { return count_; }
665 };
666 
667 // An output iterator that truncates the output and counts the number of objects
668 // written to it.
669 template <typename OutputIt, typename Enable = typename std::is_void<
670  typename std::iterator_traits<OutputIt>::value_type>::type>
672 
673 template <typename OutputIt>
674 class truncating_iterator<OutputIt, std::false_type>:
675  public truncating_iterator_base<OutputIt> {
676  typedef std::iterator_traits<OutputIt> traits;
677 
678  mutable typename traits::value_type blackhole_;
679 
680  public:
681  typedef typename traits::value_type value_type;
682 
683  truncating_iterator(OutputIt out, std::size_t limit)
684  : truncating_iterator_base<OutputIt>(out, limit) {}
685 
687  if (this->count_++ < this->limit_)
688  ++this->out_;
689  return *this;
690  }
691 
693  auto it = *this;
694  ++*this;
695  return it;
696  }
697 
698  value_type& operator*() const {
699  return this->count_ < this->limit_ ? *this->out_ : blackhole_;
700  }
701 };
702 
703 template <typename OutputIt>
704 class truncating_iterator<OutputIt, std::true_type>:
705  public truncating_iterator_base<OutputIt> {
706  public:
707  typedef typename OutputIt::container_type::value_type value_type;
708 
709  truncating_iterator(OutputIt out, std::size_t limit)
710  : truncating_iterator_base<OutputIt>(out, limit) {}
711 
712  truncating_iterator& operator=(value_type val) {
713  if (this->count_++ < this->limit_)
714  this->out_ = val;
715  return *this;
716  }
717 
718  truncating_iterator& operator++() { return *this; }
719  truncating_iterator& operator++(int) { return *this; }
720  truncating_iterator& operator*() { return *this; }
721 };
722 
723 // Returns true if value is negative, false otherwise.
724 // Same as (value < 0) but doesn't produce warnings if T is an unsigned type.
725 template <typename T>
726 FMT_CONSTEXPR typename std::enable_if<
727  std::numeric_limits<T>::is_signed, bool>::type is_negative(T value) {
728  return value < 0;
729 }
730 template <typename T>
731 FMT_CONSTEXPR typename std::enable_if<
732  !std::numeric_limits<T>::is_signed, bool>::type is_negative(T) {
733  return false;
734 }
735 
736 template <typename T>
737 struct int_traits {
738  // Smallest of uint32_t and uint64_t that is large enough to represent
739  // all values of T.
740  typedef typename std::conditional<
741  std::numeric_limits<T>::digits <= 32, uint32_t, uint64_t>::type main_type;
742 };
743 
744 // Static data is placed in this class template to allow header-only
745 // configuration.
746 template <typename T = void>
748  static const uint32_t POWERS_OF_10_32[];
749  static const uint32_t ZERO_OR_POWERS_OF_10_32[];
750  static const uint64_t ZERO_OR_POWERS_OF_10_64[];
751  static const uint64_t POW10_SIGNIFICANDS[];
752  static const int16_t POW10_EXPONENTS[];
753  static const char DIGITS[];
754  static const char FOREGROUND_COLOR[];
755  static const char BACKGROUND_COLOR[];
756  static const char RESET_COLOR[];
757  static const wchar_t WRESET_COLOR[];
758 };
759 
760 #if FMT_USE_EXTERN_TEMPLATES
761 extern template struct basic_data<void>;
762 #endif
763 
765 
766 #ifdef FMT_BUILTIN_CLZLL
767 // Returns the number of decimal digits in n. Leading zeros are not counted
768 // except for n == 0 in which case count_digits returns 1.
769 inline int count_digits(uint64_t n) {
770  // Based on http://graphics.stanford.edu/~seander/bithacks.html#IntegerLog10
771  // and the benchmark https://github.com/localvoid/cxx-benchmark-count-digits.
772  int t = (64 - FMT_BUILTIN_CLZLL(n | 1)) * 1233 >> 12;
773  return t - (n < data::ZERO_OR_POWERS_OF_10_64[t]) + 1;
774 }
775 #else
776 // Fallback version of count_digits used when __builtin_clz is not available.
777 inline int count_digits(uint64_t n) {
778  int count = 1;
779  for (;;) {
780  // Integer division is slow so do it for a group of four digits instead
781  // of for every digit. The idea comes from the talk by Alexandrescu
782  // "Three Optimization Tips for C++". See speed-test for a comparison.
783  if (n < 10) return count;
784  if (n < 100) return count + 1;
785  if (n < 1000) return count + 2;
786  if (n < 10000) return count + 3;
787  n /= 10000u;
788  count += 4;
789  }
790 }
791 #endif
792 
793 template <typename Char>
794 inline size_t count_code_points(basic_string_view<Char> s) { return s.size(); }
795 
796 // Counts the number of code points in a UTF-8 string.
798 
799 inline char8_t to_char8_t(char c) { return static_cast<char8_t>(c); }
800 
801 template <typename InputIt, typename OutChar>
802 struct needs_conversion: std::integral_constant<bool,
803  std::is_same<
804  typename std::iterator_traits<InputIt>::value_type, char>::value &&
805  std::is_same<OutChar, char8_t>::value> {};
806 
807 template <typename OutChar, typename InputIt, typename OutputIt>
808 typename std::enable_if<
810  copy_str(InputIt begin, InputIt end, OutputIt it) {
811  return std::copy(begin, end, it);
812 }
813 
814 template <typename OutChar, typename InputIt, typename OutputIt>
815 typename std::enable_if<
817  copy_str(InputIt begin, InputIt end, OutputIt it) {
818  return std::transform(begin, end, it, to_char8_t);
819 }
820 
821 #if FMT_HAS_CPP_ATTRIBUTE(always_inline)
822 # define FMT_ALWAYS_INLINE __attribute__((always_inline))
823 #else
824 # define FMT_ALWAYS_INLINE
825 #endif
826 
827 template <typename Handler>
828 inline char *lg(uint32_t n, Handler h) FMT_ALWAYS_INLINE;
829 
830 // Computes g = floor(log10(n)) and calls h.on<g>(n);
831 template <typename Handler>
832 inline char *lg(uint32_t n, Handler h) {
833  return n < 100 ? n < 10 ? h.template on<0>(n) : h.template on<1>(n)
834  : n < 1000000
835  ? n < 10000 ? n < 1000 ? h.template on<2>(n)
836  : h.template on<3>(n)
837  : n < 100000 ? h.template on<4>(n)
838  : h.template on<5>(n)
839  : n < 100000000 ? n < 10000000 ? h.template on<6>(n)
840  : h.template on<7>(n)
841  : n < 1000000000 ? h.template on<8>(n)
842  : h.template on<9>(n);
843 }
844 
845 // An lg handler that formats a decimal number.
846 // Usage: lg(n, decimal_formatter(buffer));
848  private:
849  char *buffer_;
850 
851  void write_pair(unsigned N, uint32_t index) {
852  std::memcpy(buffer_ + N, data::DIGITS + index * 2, 2);
853  }
854 
855  public:
856  explicit decimal_formatter(char *buf) : buffer_(buf) {}
857 
858  template <unsigned N> char *on(uint32_t u) {
859  if (N == 0) {
860  *buffer_ = static_cast<char>(u) + '0';
861  } else if (N == 1) {
862  write_pair(0, u);
863  } else {
864  // The idea of using 4.32 fixed-point numbers is based on
865  // https://github.com/jeaiii/itoa
866  unsigned n = N - 1;
867  unsigned a = n / 5 * n * 53 / 16;
868  uint64_t t = ((1ULL << (32 + a)) /
869  data::ZERO_OR_POWERS_OF_10_32[n] + 1 - n / 9);
870  t = ((t * u) >> a) + n / 5 * 4;
871  write_pair(0, t >> 32);
872  for (unsigned i = 2; i < N; i += 2) {
873  t = 100ULL * static_cast<uint32_t>(t);
874  write_pair(i, t >> 32);
875  }
876  if (N % 2 == 0) {
877  buffer_[N] = static_cast<char>(
878  (10ULL * static_cast<uint32_t>(t)) >> 32) + '0';
879  }
880  }
881  return buffer_ += N + 1;
882  }
883 };
884 
885 // An lg handler that formats a decimal number with a terminating null.
887  public:
888  explicit decimal_formatter_null(char *buf) : decimal_formatter(buf) {}
889 
890  template <unsigned N> char *on(uint32_t u) {
891  char *buf = decimal_formatter::on<N>(u);
892  *buf = '\0';
893  return buf;
894  }
895 };
896 
897 #ifdef FMT_BUILTIN_CLZ
898 // Optional version of count_digits for better performance on 32-bit platforms.
899 inline int count_digits(uint32_t n) {
900  int t = (32 - FMT_BUILTIN_CLZ(n | 1)) * 1233 >> 12;
901  return t - (n < data::ZERO_OR_POWERS_OF_10_32[t]) + 1;
902 }
903 #endif
904 
905 // A functor that doesn't add a thousands separator.
907  typedef char char_type;
908 
909  template <typename Char>
910  void operator()(Char *) {}
911 
912  enum { size = 0 };
913 };
914 
915 // A functor that adds a thousands separator.
916 template <typename Char>
918  private:
920 
921  // Index of a decimal digit with the least significant digit having index 0.
922  unsigned digit_index_;
923 
924  public:
925  typedef Char char_type;
926 
928  : sep_(sep), digit_index_(0) {}
929 
930  void operator()(Char *&buffer) {
931  if (++digit_index_ % 3 != 0)
932  return;
933  buffer -= sep_.size();
934  std::uninitialized_copy(sep_.data(), sep_.data() + sep_.size(),
935  internal::make_checked(buffer, sep_.size()));
936  }
937 
938  enum { size = 1 };
939 };
940 
941 template <typename Char>
943 
944 template <typename Char>
945 inline Char thousands_sep(locale_ref loc) {
946  return Char(thousands_sep_impl<char>(loc));
947 }
948 
949 template <>
950 inline wchar_t thousands_sep(locale_ref loc) {
951  return thousands_sep_impl<wchar_t>(loc);
952 }
953 
954 // Formats a decimal unsigned integer value writing into buffer.
955 // thousands_sep is a functor that is called after writing each char to
956 // add a thousands separator if necessary.
957 template <typename UInt, typename Char, typename ThousandsSep>
958 inline Char *format_decimal(Char *buffer, UInt value, int num_digits,
959  ThousandsSep thousands_sep) {
960  FMT_ASSERT(num_digits >= 0, "invalid digit count");
961  buffer += num_digits;
962  Char *end = buffer;
963  while (value >= 100) {
964  // Integer division is slow so do it for a group of two digits instead
965  // of for every digit. The idea comes from the talk by Alexandrescu
966  // "Three Optimization Tips for C++". See speed-test for a comparison.
967  unsigned index = static_cast<unsigned>((value % 100) * 2);
968  value /= 100;
969  *--buffer = static_cast<Char>(data::DIGITS[index + 1]);
970  thousands_sep(buffer);
971  *--buffer = static_cast<Char>(data::DIGITS[index]);
972  thousands_sep(buffer);
973  }
974  if (value < 10) {
975  *--buffer = static_cast<Char>('0' + value);
976  return end;
977  }
978  unsigned index = static_cast<unsigned>(value * 2);
979  *--buffer = static_cast<Char>(data::DIGITS[index + 1]);
980  thousands_sep(buffer);
981  *--buffer = static_cast<Char>(data::DIGITS[index]);
982  return end;
983 }
984 
985 template <typename OutChar, typename UInt, typename Iterator,
986  typename ThousandsSep>
987 inline Iterator format_decimal(
988  Iterator out, UInt value, int num_digits, ThousandsSep sep) {
989  FMT_ASSERT(num_digits >= 0, "invalid digit count");
990  typedef typename ThousandsSep::char_type char_type;
991  // Buffer should be large enough to hold all digits (<= digits10 + 1).
992  enum { max_size = std::numeric_limits<UInt>::digits10 + 1 };
993  FMT_ASSERT(ThousandsSep::size <= 1, "invalid separator");
994  char_type buffer[max_size + max_size / 3];
995  auto end = format_decimal(buffer, value, num_digits, sep);
996  return internal::copy_str<OutChar>(buffer, end, out);
997 }
998 
999 template <typename OutChar, typename It, typename UInt>
1000 inline It format_decimal(It out, UInt value, int num_digits) {
1001  return format_decimal<OutChar>(out, value, num_digits, no_thousands_sep());
1002 }
1003 
1004 template <unsigned BASE_BITS, typename Char, typename UInt>
1005 inline Char *format_uint(Char *buffer, UInt value, int num_digits,
1006  bool upper = false) {
1007  buffer += num_digits;
1008  Char *end = buffer;
1009  do {
1010  const char *digits = upper ? "0123456789ABCDEF" : "0123456789abcdef";
1011  unsigned digit = (value & ((1 << BASE_BITS) - 1));
1012  *--buffer = static_cast<Char>(BASE_BITS < 4 ? static_cast<char>('0' + digit)
1013  : digits[digit]);
1014  } while ((value >>= BASE_BITS) != 0);
1015  return end;
1016 }
1017 
1018 template <unsigned BASE_BITS, typename Char, typename It, typename UInt>
1019 inline It format_uint(It out, UInt value, int num_digits,
1020  bool upper = false) {
1021  // Buffer should be large enough to hold all digits (digits / BASE_BITS + 1)
1022  // and null.
1023  char buffer[std::numeric_limits<UInt>::digits / BASE_BITS + 2];
1024  format_uint<BASE_BITS>(buffer, value, num_digits, upper);
1025  return internal::copy_str<Char>(buffer, buffer + num_digits, out);
1026 }
1027 
1028 #ifndef _WIN32
1029 # define FMT_USE_WINDOWS_H 0
1030 #elif !defined(FMT_USE_WINDOWS_H)
1031 # define FMT_USE_WINDOWS_H 1
1032 #endif
1033 
1034 // Define FMT_USE_WINDOWS_H to 0 to disable use of windows.h.
1035 // All the functionality that relies on it will be disabled too.
1036 #if FMT_USE_WINDOWS_H
1037 // A converter from UTF-8 to UTF-16.
1038 // It is only provided for Windows since other systems support UTF-8 natively.
1039 class utf8_to_utf16 {
1040  private:
1041  wmemory_buffer buffer_;
1042 
1043  public:
1044  FMT_API explicit utf8_to_utf16(string_view s);
1045  operator wstring_view() const { return wstring_view(&buffer_[0], size()); }
1046  size_t size() const { return buffer_.size() - 1; }
1047  const wchar_t *c_str() const { return &buffer_[0]; }
1048  std::wstring str() const { return std::wstring(&buffer_[0], size()); }
1049 };
1050 
1051 // A converter from UTF-16 to UTF-8.
1052 // It is only provided for Windows since other systems support UTF-8 natively.
1053 class utf16_to_utf8 {
1054  private:
1055  memory_buffer buffer_;
1056 
1057  public:
1058  utf16_to_utf8() {}
1059  FMT_API explicit utf16_to_utf8(wstring_view s);
1060  operator string_view() const { return string_view(&buffer_[0], size()); }
1061  size_t size() const { return buffer_.size() - 1; }
1062  const char *c_str() const { return &buffer_[0]; }
1063  std::string str() const { return std::string(&buffer_[0], size()); }
1064 
1065  // Performs conversion returning a system error code instead of
1066  // throwing exception on conversion error. This method may still throw
1067  // in case of memory allocation error.
1068  FMT_API int convert(wstring_view s);
1069 };
1070 
1071 FMT_API void format_windows_error(fmt::internal::buffer &out, int error_code,
1072  fmt::string_view message) FMT_NOEXCEPT;
1073 #endif
1074 
1075 template <typename T = void>
1076 struct null {};
1077 } // namespace internal
1078 
1081 };
1082 
1083 // Flags.
1084 enum { SIGN_FLAG = 1, PLUS_FLAG = 2, MINUS_FLAG = 4, HASH_FLAG = 8 };
1085 
1086 // An alignment specifier.
1087 struct align_spec {
1088  unsigned width_;
1089  // Fill is always wchar_t and cast to char if necessary to avoid having
1090  // two specialization of AlignSpec and its subclasses.
1091  wchar_t fill_;
1093 
1094  FMT_CONSTEXPR align_spec() : width_(0), fill_(' '), align_(ALIGN_DEFAULT) {}
1095  FMT_CONSTEXPR unsigned width() const { return width_; }
1096  FMT_CONSTEXPR wchar_t fill() const { return fill_; }
1097  FMT_CONSTEXPR alignment align() const { return align_; }
1098 };
1099 
1102  uint_least8_t flags;
1103  char type;
1104 
1105  FMT_CONSTEXPR core_format_specs() : precision(-1), flags(0), type(0) {}
1106  FMT_CONSTEXPR bool has(unsigned f) const { return (flags & f) != 0; }
1107 };
1108 
1109 // Format specifiers.
1110 template <typename Char>
1113 };
1114 
1116 
1117 template <typename Char, typename ErrorHandler>
1119  if (next_arg_id_ >= 0)
1120  return internal::to_unsigned(next_arg_id_++);
1121  on_error("cannot switch from manual to automatic argument indexing");
1122  return 0;
1123 }
1124 
1125 namespace internal {
1126 
1127 // Formats value using Grisu2 algorithm:
1128 // https://www.cs.tufts.edu/~nr/cs257/archive/florian-loitsch/printf.pdf
1129 template <typename Double>
1131  grisu2_format(Double value, buffer &buf, core_format_specs);
1132 template <typename Double>
1134  grisu2_format(Double, buffer &, core_format_specs) { return false; }
1135 
1136 template <typename Double>
1138 
1139 template <typename Handler>
1140 FMT_CONSTEXPR void handle_int_type_spec(char spec, Handler &&handler) {
1141  switch (spec) {
1142  case 0: case 'd':
1143  handler.on_dec();
1144  break;
1145  case 'x': case 'X':
1146  handler.on_hex();
1147  break;
1148  case 'b': case 'B':
1149  handler.on_bin();
1150  break;
1151  case 'o':
1152  handler.on_oct();
1153  break;
1154  case 'n':
1155  handler.on_num();
1156  break;
1157  default:
1158  handler.on_error();
1159  }
1160 }
1161 
1162 template <typename Handler>
1163 FMT_CONSTEXPR void handle_float_type_spec(char spec, Handler &&handler) {
1164  switch (spec) {
1165  case 0: case 'g': case 'G':
1166  handler.on_general();
1167  break;
1168  case 'e': case 'E':
1169  handler.on_exp();
1170  break;
1171  case 'f': case 'F':
1172  handler.on_fixed();
1173  break;
1174  case 'a': case 'A':
1175  handler.on_hex();
1176  break;
1177  default:
1178  handler.on_error();
1179  break;
1180  }
1181 }
1182 
1183 template <typename Char, typename Handler>
1185  const basic_format_specs<Char> *specs, Handler &&handler) {
1186  if (!specs) return handler.on_char();
1187  if (specs->type && specs->type != 'c') return handler.on_int();
1188  if (specs->align() == ALIGN_NUMERIC || specs->flags != 0)
1189  handler.on_error("invalid format specifier for char");
1190  handler.on_char();
1191 }
1192 
1193 template <typename Char, typename Handler>
1194 FMT_CONSTEXPR void handle_cstring_type_spec(Char spec, Handler &&handler) {
1195  if (spec == 0 || spec == 's')
1196  handler.on_string();
1197  else if (spec == 'p')
1198  handler.on_pointer();
1199  else
1200  handler.on_error("invalid type specifier");
1201 }
1202 
1203 template <typename Char, typename ErrorHandler>
1204 FMT_CONSTEXPR void check_string_type_spec(Char spec, ErrorHandler &&eh) {
1205  if (spec != 0 && spec != 's')
1206  eh.on_error("invalid type specifier");
1207 }
1208 
1209 template <typename Char, typename ErrorHandler>
1210 FMT_CONSTEXPR void check_pointer_type_spec(Char spec, ErrorHandler &&eh) {
1211  if (spec != 0 && spec != 'p')
1212  eh.on_error("invalid type specifier");
1213 }
1214 
1215 template <typename ErrorHandler>
1216 class int_type_checker : private ErrorHandler {
1217  public:
1218  FMT_CONSTEXPR explicit int_type_checker(ErrorHandler eh) : ErrorHandler(eh) {}
1219 
1225 
1227  ErrorHandler::on_error("invalid type specifier");
1228  }
1229 };
1230 
1231 template <typename ErrorHandler>
1232 class float_type_checker : private ErrorHandler {
1233  public:
1234  FMT_CONSTEXPR explicit float_type_checker(ErrorHandler eh)
1235  : ErrorHandler(eh) {}
1236 
1241 
1243  ErrorHandler::on_error("invalid type specifier");
1244  }
1245 };
1246 
1247 template <typename ErrorHandler>
1248 class char_specs_checker : public ErrorHandler {
1249  private:
1250  char type_;
1251 
1252  public:
1253  FMT_CONSTEXPR char_specs_checker(char type, ErrorHandler eh)
1254  : ErrorHandler(eh), type_(type) {}
1255 
1258  }
1260 };
1261 
1262 template <typename ErrorHandler>
1263 class cstring_type_checker : public ErrorHandler {
1264  public:
1265  FMT_CONSTEXPR explicit cstring_type_checker(ErrorHandler eh)
1266  : ErrorHandler(eh) {}
1267 
1270 };
1271 
1272 template <typename Context>
1274  if (map_)
1275  return;
1276  map_ = new entry[args.max_size()];
1277  if (args.is_packed()) {
1278  for (unsigned i = 0;/*nothing*/; ++i) {
1279  internal::type arg_type = args.type(i);
1280  switch (arg_type) {
1281  case internal::none_type:
1282  return;
1284  push_back(args.values_[i]);
1285  break;
1286  default:
1287  break; // Do nothing.
1288  }
1289  }
1290  }
1291  for (unsigned i = 0; ; ++i) {
1292  switch (args.args_[i].type_) {
1293  case internal::none_type:
1294  return;
1296  push_back(args.args_[i].value_);
1297  break;
1298  default:
1299  break; // Do nothing.
1300  }
1301  }
1302 }
1303 
1304 template <typename Range>
1306  public:
1307  typedef typename Range::value_type char_type;
1308  typedef decltype(internal::declval<Range>().begin()) iterator;
1309  typedef basic_format_specs<char_type> format_specs;
1310 
1311  private:
1312  typedef basic_writer<Range> writer_type;
1313  writer_type writer_;
1314  format_specs *specs_;
1315 
1316  struct char_writer {
1317  char_type value;
1318 
1319  size_t size() const { return 1; }
1320  size_t width() const { return 1; }
1321 
1322  template <typename It>
1323  void operator()(It &&it) const { *it++ = value; }
1324  };
1325 
1326  void write_char(char_type value) {
1327  if (specs_)
1328  writer_.write_padded(*specs_, char_writer{value});
1329  else
1330  writer_.write(value);
1331  }
1332 
1333  void write_pointer(const void *p) {
1334  format_specs specs = specs_ ? *specs_ : format_specs();
1335  specs.flags = HASH_FLAG;
1336  specs.type = 'x';
1337  writer_.write_int(reinterpret_cast<uintptr_t>(p), specs);
1338  }
1339 
1340  protected:
1341  writer_type &writer() { return writer_; }
1342  format_specs *spec() { return specs_; }
1343  iterator out() { return writer_.out(); }
1344 
1345  void write(bool value) {
1346  string_view sv(value ? "true" : "false");
1347  specs_ ? writer_.write(sv, *specs_) : writer_.write(sv);
1348  }
1349 
1350  void write(const char_type *value) {
1351  if (!value)
1352  FMT_THROW(format_error("string pointer is null"));
1353  auto length = std::char_traits<char_type>::length(value);
1354  basic_string_view<char_type> sv(value, length);
1355  specs_ ? writer_.write(sv, *specs_) : writer_.write(sv);
1356  }
1357 
1358  public:
1359  arg_formatter_base(Range r, format_specs *s, locale_ref loc)
1360  : writer_(r, loc), specs_(s) {}
1361 
1362  iterator operator()(monostate) {
1363  FMT_ASSERT(false, "invalid argument type");
1364  return out();
1365  }
1366 
1367  template <typename T>
1368  typename std::enable_if<
1369  std::is_integral<T>::value || std::is_same<T, char_type>::value,
1370  iterator>::type operator()(T value) {
1371  // MSVC2013 fails to compile separate overloads for bool and char_type so
1372  // use std::is_same instead.
1373  if (std::is_same<T, bool>::value) {
1374  if (specs_ && specs_->type)
1375  return (*this)(value ? 1 : 0);
1376  write(value != 0);
1377  } else if (std::is_same<T, char_type>::value) {
1379  specs_, char_spec_handler(*this, static_cast<char_type>(value)));
1380  } else {
1381  specs_ ? writer_.write_int(value, *specs_) : writer_.write(value);
1382  }
1383  return out();
1384  }
1385 
1386  template <typename T>
1387  typename std::enable_if<std::is_floating_point<T>::value, iterator>::type
1388  operator()(T value) {
1389  writer_.write_double(value, specs_ ? *specs_ : format_specs());
1390  return out();
1391  }
1392 
1395  char_type value;
1396 
1398  : formatter(f), value(val) {}
1399 
1400  void on_int() {
1401  if (formatter.specs_)
1402  formatter.writer_.write_int(value, *formatter.specs_);
1403  else
1404  formatter.writer_.write(value);
1405  }
1406  void on_char() { formatter.write_char(value); }
1407  };
1408 
1411  const char_type *value;
1412 
1413  cstring_spec_handler(arg_formatter_base &f, const char_type *val)
1414  : formatter(f), value(val) {}
1415 
1416  void on_string() { formatter.write(value); }
1417  void on_pointer() { formatter.write_pointer(value); }
1418  };
1419 
1420  iterator operator()(const char_type *value) {
1421  if (!specs_) return write(value), out();
1423  specs_->type, cstring_spec_handler(*this, value));
1424  return out();
1425  }
1426 
1428  if (specs_) {
1430  specs_->type, internal::error_handler());
1431  writer_.write(value, *specs_);
1432  } else {
1433  writer_.write(value);
1434  }
1435  return out();
1436  }
1437 
1438  iterator operator()(const void *value) {
1439  if (specs_)
1441  write_pointer(value);
1442  return out();
1443  }
1444 };
1445 
1446 template <typename Char>
1448  return ('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z') || '_' == c;
1449 }
1450 
1451 // Parses the range [begin, end) as an unsigned integer. This function assumes
1452 // that the range is non-empty and the first character is a digit.
1453 template <typename Char, typename ErrorHandler>
1455  const Char *&begin, const Char *end, ErrorHandler &&eh) {
1456  assert(begin != end && '0' <= *begin && *begin <= '9');
1457  if (*begin == '0') {
1458  ++begin;
1459  return 0;
1460  }
1461  unsigned value = 0;
1462  // Convert to unsigned to prevent a warning.
1463  unsigned max_int = (std::numeric_limits<int>::max)();
1464  unsigned big = max_int / 10;
1465  do {
1466  // Check for overflow.
1467  if (value > big) {
1468  value = max_int + 1;
1469  break;
1470  }
1471  value = value * 10 + unsigned(*begin - '0');
1472  ++begin;
1473  } while (begin != end && '0' <= *begin && *begin <= '9');
1474  if (value > max_int)
1475  eh.on_error("number is too big");
1476  return value;
1477 }
1478 
1479 template <typename Char, typename Context>
1480 class custom_formatter: public function<bool> {
1481  private:
1482  Context &ctx_;
1483 
1484  public:
1485  explicit custom_formatter(Context &ctx): ctx_(ctx) {}
1486 
1488  h.format(ctx_);
1489  return true;
1490  }
1491 
1492  template <typename T>
1493  bool operator()(T) const { return false; }
1494 };
1495 
1496 template <typename T>
1497 struct is_integer {
1498  enum {
1499  value = std::is_integral<T>::value && !std::is_same<T, bool>::value &&
1500  !std::is_same<T, char>::value && !std::is_same<T, wchar_t>::value
1501  };
1502 };
1503 
1504 template <typename ErrorHandler>
1505 class width_checker: public function<unsigned long long> {
1506  public:
1507  explicit FMT_CONSTEXPR width_checker(ErrorHandler &eh) : handler_(eh) {}
1508 
1509  template <typename T>
1511  typename std::enable_if<
1512  is_integer<T>::value, unsigned long long>::type operator()(T value) {
1513  if (is_negative(value))
1514  handler_.on_error("negative width");
1515  return static_cast<unsigned long long>(value);
1516  }
1517 
1518  template <typename T>
1519  FMT_CONSTEXPR typename std::enable_if<
1520  !is_integer<T>::value, unsigned long long>::type operator()(T) {
1521  handler_.on_error("width is not integer");
1522  return 0;
1523  }
1524 
1525  private:
1526  ErrorHandler &handler_;
1527 };
1528 
1529 template <typename ErrorHandler>
1530 class precision_checker: public function<unsigned long long> {
1531  public:
1532  explicit FMT_CONSTEXPR precision_checker(ErrorHandler &eh) : handler_(eh) {}
1533 
1534  template <typename T>
1535  FMT_CONSTEXPR typename std::enable_if<
1536  is_integer<T>::value, unsigned long long>::type operator()(T value) {
1537  if (is_negative(value))
1538  handler_.on_error("negative precision");
1539  return static_cast<unsigned long long>(value);
1540  }
1541 
1542  template <typename T>
1543  FMT_CONSTEXPR typename std::enable_if<
1544  !is_integer<T>::value, unsigned long long>::type operator()(T) {
1545  handler_.on_error("precision is not integer");
1546  return 0;
1547  }
1548 
1549  private:
1550  ErrorHandler &handler_;
1551 };
1552 
1553 // A format specifier handler that sets fields in basic_format_specs.
1554 template <typename Char>
1556  public:
1558  specs_(specs) {}
1559 
1560  FMT_CONSTEXPR specs_setter(const specs_setter &other): specs_(other.specs_) {}
1561 
1562  FMT_CONSTEXPR void on_align(alignment align) { specs_.align_ = align; }
1563  FMT_CONSTEXPR void on_fill(Char fill) { specs_.fill_ = fill; }
1564  FMT_CONSTEXPR void on_plus() { specs_.flags |= SIGN_FLAG | PLUS_FLAG; }
1565  FMT_CONSTEXPR void on_minus() { specs_.flags |= MINUS_FLAG; }
1566  FMT_CONSTEXPR void on_space() { specs_.flags |= SIGN_FLAG; }
1567  FMT_CONSTEXPR void on_hash() { specs_.flags |= HASH_FLAG; }
1568 
1570  specs_.align_ = ALIGN_NUMERIC;
1571  specs_.fill_ = '0';
1572  }
1573 
1574  FMT_CONSTEXPR void on_width(unsigned width) { specs_.width_ = width; }
1575  FMT_CONSTEXPR void on_precision(unsigned precision) {
1576  specs_.precision = static_cast<int>(precision);
1577  }
1579 
1581  specs_.type = static_cast<char>(type);
1582  }
1583 
1584  protected:
1586 };
1587 
1588 // A format specifier handler that checks if specifiers are consistent with the
1589 // argument type.
1590 template <typename Handler>
1591 class specs_checker : public Handler {
1592  public:
1593  FMT_CONSTEXPR specs_checker(const Handler& handler, internal::type arg_type)
1594  : Handler(handler), arg_type_(arg_type) {}
1595 
1597  : Handler(other), arg_type_(other.arg_type_) {}
1598 
1600  if (align == ALIGN_NUMERIC)
1601  require_numeric_argument();
1602  Handler::on_align(align);
1603  }
1604 
1606  check_sign();
1607  Handler::on_plus();
1608  }
1609 
1611  check_sign();
1612  Handler::on_minus();
1613  }
1614 
1616  check_sign();
1617  Handler::on_space();
1618  }
1619 
1621  require_numeric_argument();
1622  Handler::on_hash();
1623  }
1624 
1626  require_numeric_argument();
1627  Handler::on_zero();
1628  }
1629 
1631  if (is_integral(arg_type_) || arg_type_ == pointer_type)
1632  this->on_error("precision not allowed for this argument type");
1633  }
1634 
1635  private:
1636  FMT_CONSTEXPR void require_numeric_argument() {
1637  if (!is_arithmetic(arg_type_))
1638  this->on_error("format specifier requires numeric argument");
1639  }
1640 
1641  FMT_CONSTEXPR void check_sign() {
1642  require_numeric_argument();
1643  if (is_integral(arg_type_) && arg_type_ != int_type &&
1644  arg_type_ != long_long_type && arg_type_ != internal::char_type) {
1645  this->on_error("format specifier requires signed argument");
1646  }
1647  }
1648 
1649  internal::type arg_type_;
1650 };
1651 
1652 template <template <typename> class Handler, typename T,
1653  typename Context, typename ErrorHandler>
1655  T &value, basic_format_arg<Context> arg, ErrorHandler eh) {
1656  unsigned long long big_value =
1657  visit_format_arg(Handler<ErrorHandler>(eh), arg);
1658  if (big_value > to_unsigned((std::numeric_limits<int>::max)()))
1659  eh.on_error("number is too big");
1660  value = static_cast<T>(big_value);
1661 }
1662 
1663 struct auto_id {};
1664 
1665 // The standard format specifier handler with checking.
1666 template <typename Context>
1667 class specs_handler: public specs_setter<typename Context::char_type> {
1668  public:
1669  typedef typename Context::char_type char_type;
1670 
1672  basic_format_specs<char_type> &specs, Context &ctx)
1673  : specs_setter<char_type>(specs), context_(ctx) {}
1674 
1675  template <typename Id>
1677  set_dynamic_spec<width_checker>(
1678  this->specs_.width_, get_arg(arg_id), context_.error_handler());
1679  }
1680 
1681  template <typename Id>
1683  set_dynamic_spec<precision_checker>(
1684  this->specs_.precision, get_arg(arg_id), context_.error_handler());
1685  }
1686 
1687  void on_error(const char *message) {
1688  context_.on_error(message);
1689  }
1690 
1691  private:
1693  return context_.next_arg();
1694  }
1695 
1696  template <typename Id>
1697  FMT_CONSTEXPR basic_format_arg<Context> get_arg(Id arg_id) {
1698  context_.parse_context().check_arg_id(arg_id);
1699  return context_.get_arg(arg_id);
1700  }
1701 
1702  Context &context_;
1703 };
1704 
1705 // An argument reference.
1706 template <typename Char>
1707 struct arg_ref {
1708  enum Kind { NONE, INDEX, NAME };
1709 
1710  FMT_CONSTEXPR arg_ref() : kind(NONE), index(0) {}
1711  FMT_CONSTEXPR explicit arg_ref(unsigned index) : kind(INDEX), index(index) {}
1712  explicit arg_ref(basic_string_view<Char> nm) : kind(NAME) {
1713  name = {nm.data(), nm.size()};
1714  }
1715 
1717  kind = INDEX;
1718  index = idx;
1719  return *this;
1720  }
1721 
1722  Kind kind;
1723  union {
1724  unsigned index;
1725  string_value<Char> name; // This is not string_view because of gcc 4.4.
1726  };
1727 };
1728 
1729 // Format specifiers with width and precision resolved at formatting rather
1730 // than parsing time to allow re-using the same parsed specifiers with
1731 // differents sets of arguments (precompilation of format strings).
1732 template <typename Char>
1736 };
1737 
1738 // Format spec handler that saves references to arguments representing dynamic
1739 // width and precision to be resolved at formatting time.
1740 template <typename ParseContext>
1742  public specs_setter<typename ParseContext::char_type> {
1743  public:
1745 
1747  dynamic_format_specs<char_type> &specs, ParseContext &ctx)
1748  : specs_setter<char_type>(specs), specs_(specs), context_(ctx) {}
1749 
1751  : specs_setter<char_type>(other),
1752  specs_(other.specs_), context_(other.context_) {}
1753 
1754  template <typename Id>
1756  specs_.width_ref = make_arg_ref(arg_id);
1757  }
1758 
1759  template <typename Id>
1761  specs_.precision_ref = make_arg_ref(arg_id);
1762  }
1763 
1764  FMT_CONSTEXPR void on_error(const char *message) {
1765  context_.on_error(message);
1766  }
1767 
1768  private:
1770 
1771  template <typename Id>
1772  FMT_CONSTEXPR arg_ref_type make_arg_ref(Id arg_id) {
1773  context_.check_arg_id(arg_id);
1774  return arg_ref_type(arg_id);
1775  }
1776 
1777  FMT_CONSTEXPR arg_ref_type make_arg_ref(auto_id) {
1778  return arg_ref_type(context_.next_arg_id());
1779  }
1780 
1782  ParseContext &context_;
1783 };
1784 
1785 template <typename Char, typename IDHandler>
1787  const Char *begin, const Char *end, IDHandler &&handler) {
1788  assert(begin != end);
1789  Char c = *begin;
1790  if (c == '}' || c == ':')
1791  return handler(), begin;
1792  if (c >= '0' && c <= '9') {
1793  unsigned index = parse_nonnegative_int(begin, end, handler);
1794  if (begin == end || (*begin != '}' && *begin != ':'))
1795  return handler.on_error("invalid format string"), begin;
1796  handler(index);
1797  return begin;
1798  }
1799  if (!is_name_start(c))
1800  return handler.on_error("invalid format string"), begin;
1801  auto it = begin;
1802  do {
1803  ++it;
1804  } while (it != end && (is_name_start(c = *it) || ('0' <= c && c <= '9')));
1805  handler(basic_string_view<Char>(begin, to_unsigned(it - begin)));
1806  return it;
1807 }
1808 
1809 // Adapts SpecHandler to IDHandler API for dynamic width.
1810 template <typename SpecHandler, typename Char>
1812  explicit FMT_CONSTEXPR width_adapter(SpecHandler &h) : handler(h) {}
1813 
1814  FMT_CONSTEXPR void operator()() { handler.on_dynamic_width(auto_id()); }
1815  FMT_CONSTEXPR void operator()(unsigned id) { handler.on_dynamic_width(id); }
1817  handler.on_dynamic_width(id);
1818  }
1819 
1820  FMT_CONSTEXPR void on_error(const char *message) {
1821  handler.on_error(message);
1822  }
1823 
1824  SpecHandler &handler;
1825 };
1826 
1827 // Adapts SpecHandler to IDHandler API for dynamic precision.
1828 template <typename SpecHandler, typename Char>
1830  explicit FMT_CONSTEXPR precision_adapter(SpecHandler &h) : handler(h) {}
1831 
1832  FMT_CONSTEXPR void operator()() { handler.on_dynamic_precision(auto_id()); }
1833  FMT_CONSTEXPR void operator()(unsigned id) {
1834  handler.on_dynamic_precision(id);
1835  }
1837  handler.on_dynamic_precision(id);
1838  }
1839 
1840  FMT_CONSTEXPR void on_error(const char *message) { handler.on_error(message); }
1841 
1842  SpecHandler &handler;
1843 };
1844 
1845 // Parses fill and alignment.
1846 template <typename Char, typename Handler>
1848  const Char *begin, const Char *end, Handler &&handler) {
1849  FMT_ASSERT(begin != end, "");
1850  alignment align = ALIGN_DEFAULT;
1851  int i = 0;
1852  if (begin + 1 != end) ++i;
1853  do {
1854  switch (static_cast<char>(begin[i])) {
1855  case '<':
1856  align = ALIGN_LEFT;
1857  break;
1858  case '>':
1859  align = ALIGN_RIGHT;
1860  break;
1861  case '=':
1862  align = ALIGN_NUMERIC;
1863  break;
1864  case '^':
1865  align = ALIGN_CENTER;
1866  break;
1867  }
1868  if (align != ALIGN_DEFAULT) {
1869  if (i > 0) {
1870  auto c = *begin;
1871  if (c == '{')
1872  return handler.on_error("invalid fill character '{'"), begin;
1873  begin += 2;
1874  handler.on_fill(c);
1875  } else ++begin;
1876  handler.on_align(align);
1877  break;
1878  }
1879  } while (i-- > 0);
1880  return begin;
1881 }
1882 
1883 template <typename Char, typename Handler>
1885  const Char *begin, const Char *end, Handler &&handler) {
1886  FMT_ASSERT(begin != end, "");
1887  if ('0' <= *begin && *begin <= '9') {
1888  handler.on_width(parse_nonnegative_int(begin, end, handler));
1889  } else if (*begin == '{') {
1890  ++begin;
1891  if (begin != end)
1892  begin = parse_arg_id(begin, end, width_adapter<Handler, Char>(handler));
1893  if (begin == end || *begin != '}')
1894  return handler.on_error("invalid format string"), begin;
1895  ++begin;
1896  }
1897  return begin;
1898 }
1899 
1900 // Parses standard format specifiers and sends notifications about parsed
1901 // components to handler.
1902 template <typename Char, typename SpecHandler>
1904  const Char *begin, const Char *end, SpecHandler &&handler) {
1905  if (begin == end || *begin == '}')
1906  return begin;
1907 
1908  begin = parse_align(begin, end, handler);
1909  if (begin == end) return begin;
1910 
1911  // Parse sign.
1912  switch (static_cast<char>(*begin)) {
1913  case '+':
1914  handler.on_plus();
1915  ++begin;
1916  break;
1917  case '-':
1918  handler.on_minus();
1919  ++begin;
1920  break;
1921  case ' ':
1922  handler.on_space();
1923  ++begin;
1924  break;
1925  }
1926  if (begin == end) return begin;
1927 
1928  if (*begin == '#') {
1929  handler.on_hash();
1930  if (++begin == end) return begin;
1931  }
1932 
1933  // Parse zero flag.
1934  if (*begin == '0') {
1935  handler.on_zero();
1936  if (++begin == end) return begin;
1937  }
1938 
1939  begin = parse_width(begin, end, handler);
1940  if (begin == end) return begin;
1941 
1942  // Parse precision.
1943  if (*begin == '.') {
1944  ++begin;
1945  auto c = begin != end ? *begin : 0;
1946  if ('0' <= c && c <= '9') {
1947  handler.on_precision(parse_nonnegative_int(begin, end, handler));
1948  } else if (c == '{') {
1949  ++begin;
1950  if (begin != end) {
1951  begin = parse_arg_id(
1952  begin, end, precision_adapter<SpecHandler, Char>(handler));
1953  }
1954  if (begin == end || *begin++ != '}')
1955  return handler.on_error("invalid format string"), begin;
1956  } else {
1957  return handler.on_error("missing precision specifier"), begin;
1958  }
1959  handler.end_precision();
1960  }
1961 
1962  // Parse type.
1963  if (begin != end && *begin != '}')
1964  handler.on_type(*begin++);
1965  return begin;
1966 }
1967 
1968 // Return the result via the out param to workaround gcc bug 77539.
1969 template <bool IS_CONSTEXPR, typename T, typename Ptr = const T*>
1970 FMT_CONSTEXPR bool find(Ptr first, Ptr last, T value, Ptr &out) {
1971  for (out = first; out != last; ++out) {
1972  if (*out == value)
1973  return true;
1974  }
1975  return false;
1976 }
1977 
1978 template <>
1979 inline bool find<false, char>(
1980  const char *first, const char *last, char value, const char *&out) {
1981  out = static_cast<const char*>(std::memchr(first, value, internal::to_unsigned(last - first)));
1982  return out != FMT_NULL;
1983 }
1984 
1985 template <typename Handler, typename Char>
1986 struct id_adapter {
1987  FMT_CONSTEXPR void operator()() { handler.on_arg_id(); }
1988  FMT_CONSTEXPR void operator()(unsigned id) { handler.on_arg_id(id); }
1990  handler.on_arg_id(id);
1991  }
1992  FMT_CONSTEXPR void on_error(const char *message) {
1993  handler.on_error(message);
1994  }
1995  Handler &handler;
1996 };
1997 
1998 template <bool IS_CONSTEXPR, typename Char, typename Handler>
2000  basic_string_view<Char> format_str, Handler &&handler) {
2001  struct writer {
2002  FMT_CONSTEXPR void operator()(const Char *begin, const Char *end) {
2003  if (begin == end) return;
2004  for (;;) {
2005  const Char *p = FMT_NULL;
2006  if (!find<IS_CONSTEXPR>(begin, end, '}', p))
2007  return handler_.on_text(begin, end);
2008  ++p;
2009  if (p == end || *p != '}')
2010  return handler_.on_error("unmatched '}' in format string");
2011  handler_.on_text(begin, p);
2012  begin = p + 1;
2013  }
2014  }
2015  Handler &handler_;
2016  } write{handler};
2017  auto begin = format_str.data();
2018  auto end = begin + format_str.size();
2019  while (begin != end) {
2020  // Doing two passes with memchr (one for '{' and another for '}') is up to
2021  // 2.5x faster than the naive one-pass implementation on big format strings.
2022  const Char *p = begin;
2023  if (*begin != '{' && !find<IS_CONSTEXPR>(begin, end, '{', p))
2024  return write(begin, end);
2025  write(begin, p);
2026  ++p;
2027  if (p == end)
2028  return handler.on_error("invalid format string");
2029  if (static_cast<char>(*p) == '}') {
2030  handler.on_arg_id();
2031  handler.on_replacement_field(p);
2032  } else if (*p == '{') {
2033  handler.on_text(p, p + 1);
2034  } else {
2035  p = parse_arg_id(p, end, id_adapter<Handler, Char>{handler});
2036  Char c = p != end ? *p : Char();
2037  if (c == '}') {
2038  handler.on_replacement_field(p);
2039  } else if (c == ':') {
2040  p = handler.on_format_specs(p + 1, end);
2041  if (p == end || *p != '}')
2042  return handler.on_error("unknown format specifier");
2043  } else {
2044  return handler.on_error("missing '}' in format string");
2045  }
2046  }
2047  begin = p + 1;
2048  }
2049 }
2050 
2051 template <typename T, typename ParseContext>
2052 FMT_CONSTEXPR const typename ParseContext::char_type *
2053  parse_format_specs(ParseContext &ctx) {
2054  // GCC 7.2 requires initializer.
2056  return f.parse(ctx);
2057 }
2058 
2059 template <typename Char, typename ErrorHandler, typename... Args>
2061  public:
2063  basic_string_view<Char> format_str, ErrorHandler eh)
2064  : arg_id_((std::numeric_limits<unsigned>::max)()), context_(format_str, eh),
2065  parse_funcs_{&parse_format_specs<Args, parse_context_type>...} {}
2066 
2067  FMT_CONSTEXPR void on_text(const Char *, const Char *) {}
2068 
2070  arg_id_ = context_.next_arg_id();
2071  check_arg_id();
2072  }
2073  FMT_CONSTEXPR void on_arg_id(unsigned id) {
2074  arg_id_ = id;
2075  context_.check_arg_id(id);
2076  check_arg_id();
2077  }
2079 
2080  FMT_CONSTEXPR void on_replacement_field(const Char *) {}
2081 
2082  FMT_CONSTEXPR const Char *on_format_specs(const Char *begin, const Char *) {
2083  context_.advance_to(begin);
2084  return arg_id_ < NUM_ARGS ?
2085  parse_funcs_[arg_id_](context_) : begin;
2086  }
2087 
2088  FMT_CONSTEXPR void on_error(const char *message) {
2089  context_.on_error(message);
2090  }
2091 
2092  private:
2094  enum { NUM_ARGS = sizeof...(Args) };
2095 
2096  FMT_CONSTEXPR void check_arg_id() {
2097  if (arg_id_ >= NUM_ARGS)
2098  context_.on_error("argument index out of range");
2099  }
2100 
2101  // Format specifier parsing function.
2102  typedef const Char *(*parse_func)(parse_context_type &);
2103 
2104  unsigned arg_id_;
2105  parse_context_type context_;
2106  parse_func parse_funcs_[NUM_ARGS > 0 ? NUM_ARGS : 1];
2107 };
2108 
2109 template <typename Char, typename ErrorHandler, typename... Args>
2111  basic_string_view<Char> s, ErrorHandler eh = ErrorHandler()) {
2112  format_string_checker<Char, ErrorHandler, Args...> checker(s, eh);
2113  parse_format_string<true>(s, checker);
2114  return true;
2115 }
2116 
2117 template <typename... Args, typename S>
2118 typename std::enable_if<is_compile_string<S>::value>::type
2119  check_format_string(S format_str) {
2120  typedef typename S::char_type char_t;
2122  char_t, internal::error_handler, Args...>(to_string_view(format_str));
2123  (void)invalid_format;
2124 }
2125 
2126 // Specifies whether to format T using the standard formatter.
2127 // It is not possible to use get_type in formatter specialization directly
2128 // because of a bug in MSVC.
2129 template <typename Context, typename T>
2130 struct format_type :
2131  std::integral_constant<bool, get_type<Context, T>::value != custom_type> {};
2132 
2133 template <template <typename> class Handler, typename Spec, typename Context>
2135  Spec &value, arg_ref<typename Context::char_type> ref, Context &ctx) {
2136  typedef typename Context::char_type char_type;
2137  switch (ref.kind) {
2139  break;
2141  internal::set_dynamic_spec<Handler>(
2142  value, ctx.get_arg(ref.index), ctx.error_handler());
2143  break;
2145  internal::set_dynamic_spec<Handler>(
2146  value, ctx.get_arg({ref.name.value, ref.name.size}),
2147  ctx.error_handler());
2148  break;
2149  }
2150 }
2151 } // namespace internal
2152 
2154 template <typename Range>
2156  public internal::function<
2157  typename internal::arg_formatter_base<Range>::iterator>,
2158  public internal::arg_formatter_base<Range> {
2159  private:
2160  typedef typename Range::value_type char_type;
2163 
2164  context_type &ctx_;
2165 
2166  public:
2167  typedef Range range;
2168  typedef typename base::iterator iterator;
2170 
2178  explicit arg_formatter(context_type &ctx, format_specs *spec = FMT_NULL)
2179  : base(Range(ctx.out()), spec, ctx.locale()), ctx_(ctx) {}
2180 
2181  // Deprecated.
2182  arg_formatter(context_type &ctx, format_specs &spec)
2183  : base(Range(ctx.out()), &spec), ctx_(ctx) {}
2184 
2185  using base::operator();
2186 
2189  handle.format(ctx_);
2190  return this->out();
2191  }
2192 };
2193 
2198 class system_error : public std::runtime_error {
2199  private:
2200  FMT_API void init(int err_code, string_view format_str, format_args args);
2201 
2202  protected:
2204 
2205  system_error() : std::runtime_error("") {}
2206 
2207  public:
2226  template <typename... Args>
2227  system_error(int error_code, string_view message, const Args &... args)
2228  : std::runtime_error("") {
2229  init(error_code, message, make_format_args(args...));
2230  }
2231 
2232  int error_code() const { return error_code_; }
2233 };
2234 
2252  fmt::string_view message) FMT_NOEXCEPT;
2253 
2258 template <typename Range>
2259 class basic_writer {
2260  public:
2261  typedef typename Range::value_type char_type;
2262  typedef decltype(internal::declval<Range>().begin()) iterator;
2263  typedef basic_format_specs<char_type> format_specs;
2264 
2265  private:
2266  iterator out_; // Output iterator.
2267  internal::locale_ref locale_;
2268 
2269  // Attempts to reserve space for n extra characters in the output range.
2270  // Returns a pointer to the reserved range or a reference to out_.
2271  auto reserve(std::size_t n) -> decltype(internal::reserve(out_, n)) {
2272  return internal::reserve(out_, n);
2273  }
2274 
2275  // Writes a value in the format
2276  // <left-padding><value><right-padding>
2277  // where <value> is written by f(it).
2278  template <typename F>
2279  void write_padded(const align_spec &spec, F &&f) {
2280  unsigned width = spec.width(); // User-perceived width (in code points).
2281  size_t size = f.size(); // The number of code units.
2282  size_t num_code_points = width != 0 ? f.width() : size;
2283  if (width <= num_code_points)
2284  return f(reserve(size));
2285  auto &&it = reserve(width + (size - num_code_points));
2286  char_type fill = static_cast<char_type>(spec.fill());
2287  std::size_t padding = width - num_code_points;
2288  if (spec.align() == ALIGN_RIGHT) {
2289  it = std::fill_n(it, padding, fill);
2290  f(it);
2291  } else if (spec.align() == ALIGN_CENTER) {
2292  std::size_t left_padding = padding / 2;
2293  it = std::fill_n(it, left_padding, fill);
2294  f(it);
2295  it = std::fill_n(it, padding - left_padding, fill);
2296  } else {
2297  f(it);
2298  it = std::fill_n(it, padding, fill);
2299  }
2300  }
2301 
2302  template <typename F>
2303  struct padded_int_writer {
2304  size_t size_;
2305  string_view prefix;
2306  char_type fill;
2307  std::size_t padding;
2308  F f;
2309 
2310  size_t size() const { return size_; }
2311  size_t width() const { return size_; }
2312 
2313  template <typename It>
2314  void operator()(It &&it) const {
2315  if (prefix.size() != 0)
2316  it = internal::copy_str<char_type>(prefix.begin(), prefix.end(), it);
2317  it = std::fill_n(it, padding, fill);
2318  f(it);
2319  }
2320  };
2321 
2322  // Writes an integer in the format
2323  // <left-padding><prefix><numeric-padding><digits><right-padding>
2324  // where <digits> are written by f(it).
2325  template <typename Spec, typename F>
2326  void write_int(int num_digits, string_view prefix,
2327  const Spec &spec, F f) {
2328  std::size_t size = prefix.size() + internal::to_unsigned(num_digits);
2329  char_type fill = static_cast<char_type>(spec.fill());
2330  std::size_t padding = 0;
2331  if (spec.align() == ALIGN_NUMERIC) {
2332  if (spec.width() > size) {
2333  padding = spec.width() - size;
2334  size = spec.width();
2335  }
2336  } else if (spec.precision > num_digits) {
2337  size = prefix.size() + internal::to_unsigned(spec.precision);
2338  padding = internal::to_unsigned(spec.precision - num_digits);
2339  fill = static_cast<char_type>('0');
2340  }
2341  align_spec as = spec;
2342  if (spec.align() == ALIGN_DEFAULT)
2343  as.align_ = ALIGN_RIGHT;
2344  write_padded(as, padded_int_writer<F>{size, prefix, fill, padding, f});
2345  }
2346 
2347  // Writes a decimal integer.
2348  template <typename Int>
2349  void write_decimal(Int value) {
2350  typedef typename internal::int_traits<Int>::main_type main_type;
2351  main_type abs_value = static_cast<main_type>(value);
2352  bool is_negative = internal::is_negative(value);
2353  if (is_negative)
2354  abs_value = 0 - abs_value;
2355  int num_digits = internal::count_digits(abs_value);
2356  auto &&it = reserve((is_negative ? 1 : 0) + static_cast<size_t>(num_digits));
2357  if (is_negative)
2358  *it++ = static_cast<char_type>('-');
2359  it = internal::format_decimal<char_type>(it, abs_value, num_digits);
2360  }
2361 
2362  // The handle_int_type_spec handler that writes an integer.
2363  template <typename Int, typename Spec>
2364  struct int_writer {
2365  typedef typename internal::int_traits<Int>::main_type unsigned_type;
2366 
2368  const Spec &spec;
2369  unsigned_type abs_value;
2370  char prefix[4];
2371  unsigned prefix_size;
2372 
2373  string_view get_prefix() const { return string_view(prefix, prefix_size); }
2374 
2375  // Counts the number of digits in abs_value. BITS = log2(radix).
2376  template <unsigned BITS>
2377  int count_digits() const {
2378  unsigned_type n = abs_value;
2379  int num_digits = 0;
2380  do {
2381  ++num_digits;
2382  } while ((n >>= BITS) != 0);
2383  return num_digits;
2384  }
2385 
2386  int_writer(basic_writer<Range> &w, Int value, const Spec &s)
2387  : writer(w), spec(s), abs_value(static_cast<unsigned_type>(value)),
2388  prefix_size(0) {
2389  if (internal::is_negative(value)) {
2390  prefix[0] = '-';
2391  ++prefix_size;
2392  abs_value = 0 - abs_value;
2393  } else if (spec.has(SIGN_FLAG)) {
2394  prefix[0] = spec.has(PLUS_FLAG) ? '+' : ' ';
2395  ++prefix_size;
2396  }
2397  }
2398 
2399  struct dec_writer {
2400  unsigned_type abs_value;
2402 
2403  template <typename It>
2404  void operator()(It &&it) const {
2405  it = internal::format_decimal<char_type>(it, abs_value, num_digits);
2406  }
2407  };
2408 
2409  void on_dec() {
2410  int num_digits = internal::count_digits(abs_value);
2411  writer.write_int(num_digits, get_prefix(), spec,
2412  dec_writer{abs_value, num_digits});
2413  }
2414 
2415  struct hex_writer {
2416  int_writer &self;
2418 
2419  template <typename It>
2420  void operator()(It &&it) const {
2421  it = internal::format_uint<4, char_type>(
2422  it, self.abs_value, num_digits, self.spec.type != 'x');
2423  }
2424  };
2425 
2426  void on_hex() {
2427  if (spec.has(HASH_FLAG)) {
2428  prefix[prefix_size++] = '0';
2429  prefix[prefix_size++] = static_cast<char>(spec.type);
2430  }
2431  int num_digits = count_digits<4>();
2432  writer.write_int(num_digits, get_prefix(), spec,
2433  hex_writer{*this, num_digits});
2434  }
2435 
2436  template <int BITS>
2437  struct bin_writer {
2438  unsigned_type abs_value;
2440 
2441  template <typename It>
2442  void operator()(It &&it) const {
2443  it = internal::format_uint<BITS, char_type>(it, abs_value, num_digits);
2444  }
2445  };
2446 
2447  void on_bin() {
2448  if (spec.has(HASH_FLAG)) {
2449  prefix[prefix_size++] = '0';
2450  prefix[prefix_size++] = static_cast<char>(spec.type);
2451  }
2452  int num_digits = count_digits<1>();
2453  writer.write_int(num_digits, get_prefix(), spec,
2454  bin_writer<1>{abs_value, num_digits});
2455  }
2456 
2457  void on_oct() {
2458  int num_digits = count_digits<3>();
2459  if (spec.has(HASH_FLAG) &&
2460  spec.precision <= num_digits) {
2461  // Octal prefix '0' is counted as a digit, so only add it if precision
2462  // is not greater than the number of digits.
2463  prefix[prefix_size++] = '0';
2464  }
2465  writer.write_int(num_digits, get_prefix(), spec,
2466  bin_writer<3>{abs_value, num_digits});
2467  }
2468 
2469  enum { SEP_SIZE = 1 };
2470 
2471  struct num_writer {
2472  unsigned_type abs_value;
2473  int size;
2474  char_type sep;
2475 
2476  template <typename It>
2477  void operator()(It &&it) const {
2478  basic_string_view<char_type> s(&sep, SEP_SIZE);
2479  it = internal::format_decimal<char_type>(
2480  it, abs_value, size, internal::add_thousands_sep<char_type>(s));
2481  }
2482  };
2483 
2484  void on_num() {
2485  int num_digits = internal::count_digits(abs_value);
2486  char_type sep = internal::thousands_sep<char_type>(writer.locale_);
2487  int size = num_digits + SEP_SIZE * ((num_digits - 1) / 3);
2488  writer.write_int(size, get_prefix(), spec,
2489  num_writer{abs_value, size, sep});
2490  }
2491 
2492  void on_error() {
2493  FMT_THROW(format_error("invalid type specifier"));
2494  }
2495  };
2496 
2497  // Writes a formatted integer.
2498  template <typename T, typename Spec>
2499  void write_int(T value, const Spec &spec) {
2501  int_writer<T, Spec>(*this, value, spec));
2502  }
2503 
2504  enum {INF_SIZE = 3}; // This is an enum to workaround a bug in MSVC.
2505 
2506  struct inf_or_nan_writer {
2507  char sign;
2508  const char *str;
2509 
2510  size_t size() const {
2511  return static_cast<std::size_t>(INF_SIZE + (sign ? 1 : 0));
2512  }
2513  size_t width() const { return size(); }
2514 
2515  template <typename It>
2516  void operator()(It &&it) const {
2517  if (sign)
2518  *it++ = static_cast<char_type>(sign);
2519  it = internal::copy_str<char_type>(
2520  str, str + static_cast<std::size_t>(INF_SIZE), it);
2521  }
2522  };
2523 
2524  struct double_writer {
2525  size_t n;
2526  char sign;
2528 
2529  size_t size() const { return buffer.size() + (sign ? 1 : 0); }
2530  size_t width() const { return size(); }
2531 
2532  template <typename It>
2533  void operator()(It &&it) {
2534  if (sign) {
2535  *it++ = static_cast<char_type>(sign);
2536  --n;
2537  }
2538  it = internal::copy_str<char_type>(buffer.begin(), buffer.end(), it);
2539  }
2540  };
2541 
2542  // Formats a floating-point number (double or long double).
2543  template <typename T>
2544  void write_double(T value, const format_specs &spec);
2545 
2546  template <typename Char>
2547  struct str_writer {
2548  const Char *s;
2549  size_t size_;
2550 
2551  size_t size() const { return size_; }
2552  size_t width() const {
2554  }
2555 
2556  template <typename It>
2557  void operator()(It &&it) const {
2558  it = internal::copy_str<char_type>(s, s + size_, it);
2559  }
2560  };
2561 
2562  template <typename Char>
2564 
2565  public:
2567  explicit basic_writer(
2568  Range out, internal::locale_ref loc = internal::locale_ref())
2569  : out_(out.begin()), locale_(loc) {}
2570 
2571  iterator out() const { return out_; }
2572 
2573  void write(int value) { write_decimal(value); }
2574  void write(long value) { write_decimal(value); }
2575  void write(long long value) { write_decimal(value); }
2576 
2577  void write(unsigned value) { write_decimal(value); }
2578  void write(unsigned long value) { write_decimal(value); }
2579  void write(unsigned long long value) { write_decimal(value); }
2580 
2586  template <typename T, typename FormatSpec, typename... FormatSpecs>
2587  typename std::enable_if<std::is_integral<T>::value, void>::type
2588  write(T value, FormatSpec spec, FormatSpecs... specs) {
2589  format_specs s(spec, specs...);
2590  s.align_ = ALIGN_RIGHT;
2591  write_int(value, s);
2592  }
2593 
2594  void write(double value) {
2595  write_double(value, format_specs());
2596  }
2597 
2604  void write(long double value) {
2605  write_double(value, format_specs());
2606  }
2607 
2609  void write(char value) {
2610  *reserve(1) = value;
2611  }
2612  void write(wchar_t value) {
2613  static_assert(std::is_same<char_type, wchar_t>::value, "");
2614  *reserve(1) = value;
2615  }
2616 
2622  void write(string_view value) {
2623  auto &&it = reserve(value.size());
2624  it = internal::copy_str<char_type>(value.begin(), value.end(), it);
2625  }
2626  void write(wstring_view value) {
2627  static_assert(std::is_same<char_type, wchar_t>::value, "");
2628  auto &&it = reserve(value.size());
2629  it = std::copy(value.begin(), value.end(), it);
2630  }
2631 
2632  // Writes a formatted string.
2633  template <typename Char>
2634  void write(const Char *s, std::size_t size, const align_spec &spec) {
2635  write_padded(spec, str_writer<Char>{s, size});
2636  }
2637 
2638  template <typename Char>
2640  const format_specs &spec = format_specs()) {
2641  const Char *data = s.data();
2642  std::size_t size = s.size();
2643  if (spec.precision >= 0 && internal::to_unsigned(spec.precision) < size)
2644  size = internal::to_unsigned(spec.precision);
2645  write(data, size, spec);
2646  }
2647 
2648  template <typename T>
2649  typename std::enable_if<std::is_same<T, void>::value>::type
2650  write(const T *p) {
2651  format_specs specs;
2652  specs.flags = HASH_FLAG;
2653  specs.type = 'x';
2654  write_int(reinterpret_cast<uintptr_t>(p), specs);
2655  }
2656 };
2657 
2659  char type;
2660  bool upper;
2661 
2662  explicit float_spec_handler(char t) : type(t), upper(false) {}
2663 
2664  void on_general() {
2665  if (type == 'G')
2666  upper = true;
2667  else
2668  type = 'g';
2669  }
2670 
2671  void on_exp() {
2672  if (type == 'E')
2673  upper = true;
2674  }
2675 
2676  void on_fixed() {
2677  if (type == 'F') {
2678  upper = true;
2679 #if FMT_MSC_VER
2680  // MSVC's printf doesn't support 'F'.
2681  type = 'f';
2682 #endif
2683  }
2684  }
2685 
2686  void on_hex() {
2687  if (type == 'A')
2688  upper = true;
2689  }
2690 
2691  void on_error() {
2692  FMT_THROW(format_error("invalid type specifier"));
2693  }
2694 };
2695 
2696 template <typename Range>
2697 template <typename T>
2698 void basic_writer<Range>::write_double(T value, const format_specs &spec) {
2699  // Check type.
2700  float_spec_handler handler(static_cast<char>(spec.type));
2701  internal::handle_float_type_spec(handler.type, handler);
2702 
2703  char sign = 0;
2704  // Use signbit instead of value < 0 because the latter is always
2705  // false for NaN.
2706  if (std::signbit(value)) {
2707  sign = '-';
2708  value = -value;
2709  } else if (spec.has(SIGN_FLAG)) {
2710  sign = spec.has(PLUS_FLAG) ? '+' : ' ';
2711  }
2712 
2713  struct write_inf_or_nan_t {
2715  format_specs spec;
2716  char sign;
2717  void operator()(const char *str) const {
2718  writer.write_padded(spec, inf_or_nan_writer{sign, str});
2719  }
2720  } write_inf_or_nan = {*this, spec, sign};
2721 
2722  // Format NaN and ininity ourselves because sprintf's output is not consistent
2723  // across platforms.
2724  if (internal::fputil::isnotanumber(value))
2725  return write_inf_or_nan(handler.upper ? "NAN" : "nan");
2726  if (internal::fputil::isinfinity(value))
2727  return write_inf_or_nan(handler.upper ? "INF" : "inf");
2728 
2729  memory_buffer buffer;
2730  bool use_grisu = FMT_USE_GRISU && sizeof(T) <= sizeof(double) &&
2731  spec.type != 'a' && spec.type != 'A' &&
2732  internal::grisu2_format(static_cast<double>(value), buffer, spec);
2733  if (!use_grisu) {
2734  format_specs normalized_spec(spec);
2735  normalized_spec.type = handler.type;
2736  internal::sprintf_format(value, buffer, normalized_spec);
2737  }
2738  size_t n = buffer.size();
2739  align_spec as = spec;
2740  if (spec.align() == ALIGN_NUMERIC) {
2741  if (sign) {
2742  auto &&it = reserve(1);
2743  *it++ = static_cast<char_type>(sign);
2744  sign = 0;
2745  if (as.width_)
2746  --as.width_;
2747  }
2748  as.align_ = ALIGN_RIGHT;
2749  } else {
2750  if (spec.align() == ALIGN_DEFAULT)
2751  as.align_ = ALIGN_RIGHT;
2752  if (sign)
2753  ++n;
2754  }
2755  write_padded(as, double_writer{n, sign, buffer});
2756 }
2757 
2758 // Reports a system error without throwing an exception.
2759 // Can be used to report errors from destructors.
2760 FMT_API void report_system_error(int error_code,
2761  string_view message) FMT_NOEXCEPT;
2762 
2763 #if FMT_USE_WINDOWS_H
2764 
2766 class windows_error : public system_error {
2767  private:
2768  FMT_API void init(int error_code, string_view format_str, format_args args);
2769 
2770  public:
2799  template <typename... Args>
2800  windows_error(int error_code, string_view message, const Args &... args) {
2801  init(error_code, message, make_format_args(args...));
2802  }
2803 };
2804 
2805 // Reports a Windows error without throwing an exception.
2806 // Can be used to report errors from destructors.
2807 FMT_API void report_windows_error(int error_code,
2808  string_view message) FMT_NOEXCEPT;
2809 
2810 #endif
2811 
2813 class format_int {
2814  private:
2815  // Buffer should be large enough to hold all digits (digits10 + 1),
2816  // a sign and a null character.
2817  enum {BUFFER_SIZE = std::numeric_limits<unsigned long long>::digits10 + 3};
2818  mutable char buffer_[BUFFER_SIZE];
2819  char *str_;
2820 
2821  // Formats value in reverse and returns a pointer to the beginning.
2822  char *format_decimal(unsigned long long value) {
2823  char *ptr = buffer_ + (BUFFER_SIZE - 1); // Parens to workaround MSVC bug.
2824  while (value >= 100) {
2825  // Integer division is slow so do it for a group of two digits instead
2826  // of for every digit. The idea comes from the talk by Alexandrescu
2827  // "Three Optimization Tips for C++". See speed-test for a comparison.
2828  unsigned index = static_cast<unsigned>((value % 100) * 2);
2829  value /= 100;
2830  *--ptr = internal::data::DIGITS[index + 1];
2831  *--ptr = internal::data::DIGITS[index];
2832  }
2833  if (value < 10) {
2834  *--ptr = static_cast<char>('0' + value);
2835  return ptr;
2836  }
2837  unsigned index = static_cast<unsigned>(value * 2);
2838  *--ptr = internal::data::DIGITS[index + 1];
2839  *--ptr = internal::data::DIGITS[index];
2840  return ptr;
2841  }
2842 
2843  void format_signed(long long value) {
2844  unsigned long long abs_value = static_cast<unsigned long long>(value);
2845  bool negative = value < 0;
2846  if (negative)
2847  abs_value = 0 - abs_value;
2848  str_ = format_decimal(abs_value);
2849  if (negative)
2850  *--str_ = '-';
2851  }
2852 
2853  public:
2854  explicit format_int(int value) { format_signed(value); }
2855  explicit format_int(long value) { format_signed(value); }
2856  explicit format_int(long long value) { format_signed(value); }
2857  explicit format_int(unsigned value) : str_(format_decimal(value)) {}
2858  explicit format_int(unsigned long value) : str_(format_decimal(value)) {}
2859  explicit format_int(unsigned long long value) : str_(format_decimal(value)) {}
2860 
2862  std::size_t size() const {
2863  return internal::to_unsigned(buffer_ - str_ + BUFFER_SIZE - 1);
2864  }
2865 
2870  const char *data() const { return str_; }
2871 
2876  const char *c_str() const {
2877  buffer_[BUFFER_SIZE - 1] = '\0';
2878  return str_;
2879  }
2880 
2886  std::string str() const { return std::string(str_, size()); }
2887 };
2888 
2889 // DEPRECATED!
2890 // Formats a decimal integer value writing into buffer and returns
2891 // a pointer to the end of the formatted string. This function doesn't
2892 // write a terminating null character.
2893 template <typename T>
2894 inline void format_decimal(char *&buffer, T value) {
2895  typedef typename internal::int_traits<T>::main_type main_type;
2896  main_type abs_value = static_cast<main_type>(value);
2897  if (internal::is_negative(value)) {
2898  *buffer++ = '-';
2899  abs_value = 0 - abs_value;
2900  }
2901  if (abs_value < 100) {
2902  if (abs_value < 10) {
2903  *buffer++ = static_cast<char>('0' + abs_value);
2904  return;
2905  }
2906  unsigned index = static_cast<unsigned>(abs_value * 2);
2907  *buffer++ = internal::data::DIGITS[index];
2908  *buffer++ = internal::data::DIGITS[index + 1];
2909  return;
2910  }
2911  int num_digits = internal::count_digits(abs_value);
2912  internal::format_decimal<char>(
2913  internal::make_checked(buffer, internal::to_unsigned(num_digits)), abs_value, num_digits);
2914  buffer += num_digits;
2915 }
2916 
2917 // Formatter of objects of type T.
2918 template <typename T, typename Char>
2919 struct formatter<
2920  T, Char,
2921  typename std::enable_if<internal::format_type<
2922  typename buffer_context<Char>::type, T>::value>::type> {
2923 
2924  // Parses format specifiers stopping either at the end of the range or at the
2925  // terminating '}'.
2926  template <typename ParseContext>
2927  FMT_CONSTEXPR typename ParseContext::iterator parse(ParseContext &ctx) {
2928  typedef internal::dynamic_specs_handler<ParseContext> handler_type;
2929  auto type = internal::get_type<
2930  typename buffer_context<Char>::type, T>::value;
2932  handler(handler_type(specs_, ctx), type);
2933  auto it = parse_format_specs(ctx.begin(), ctx.end(), handler);
2934  auto type_spec = specs_.type;
2935  auto eh = ctx.error_handler();
2936  switch (type) {
2937  case internal::none_type:
2939  FMT_ASSERT(false, "invalid argument type");
2940  break;
2941  case internal::int_type:
2942  case internal::uint_type:
2945  case internal::bool_type:
2947  type_spec, internal::int_type_checker<decltype(eh)>(eh));
2948  break;
2949  case internal::char_type:
2951  &specs_,
2952  internal::char_specs_checker<decltype(eh)>(type_spec, eh));
2953  break;
2954  case internal::double_type:
2957  type_spec, internal::float_type_checker<decltype(eh)>(eh));
2958  break;
2961  type_spec, internal::cstring_type_checker<decltype(eh)>(eh));
2962  break;
2963  case internal::string_type:
2964  internal::check_string_type_spec(type_spec, eh);
2965  break;
2967  internal::check_pointer_type_spec(type_spec, eh);
2968  break;
2969  case internal::custom_type:
2970  // Custom format specifiers should be checked in parse functions of
2971  // formatter specializations.
2972  break;
2973  }
2974  return it;
2975  }
2976 
2977  template <typename FormatContext>
2978  auto format(const T &val, FormatContext &ctx) -> decltype(ctx.out()) {
2979  internal::handle_dynamic_spec<internal::width_checker>(
2980  specs_.width_, specs_.width_ref, ctx);
2981  internal::handle_dynamic_spec<internal::precision_checker>(
2982  specs_.precision, specs_.precision_ref, ctx);
2983  typedef output_range<typename FormatContext::iterator,
2984  typename FormatContext::char_type> range_type;
2985  return visit_format_arg(arg_formatter<range_type>(ctx, &specs_),
2986  internal::make_arg<FormatContext>(val));
2987  }
2988 
2989  private:
2991 };
2992 
2993 // A formatter for types known only at run time such as variant alternatives.
2994 //
2995 // Usage:
2996 // typedef std::variant<int, std::string> variant;
2997 // template <>
2998 // struct formatter<variant>: dynamic_formatter<> {
2999 // void format(buffer &buf, const variant &v, context &ctx) {
3000 // visit([&](const auto &val) { format(buf, val, ctx); }, v);
3001 // }
3002 // };
3003 template <typename Char = char>
3005  private:
3006  struct null_handler: internal::error_handler {
3007  void on_align(alignment) {}
3008  void on_plus() {}
3009  void on_minus() {}
3010  void on_space() {}
3011  void on_hash() {}
3012  };
3013 
3014  public:
3015  template <typename ParseContext>
3016  auto parse(ParseContext &ctx) -> decltype(ctx.begin()) {
3017  // Checks are deferred to formatting time when the argument type is known.
3018  internal::dynamic_specs_handler<ParseContext> handler(specs_, ctx);
3019  return parse_format_specs(ctx.begin(), ctx.end(), handler);
3020  }
3021 
3022  template <typename T, typename FormatContext>
3023  auto format(const T &val, FormatContext &ctx) -> decltype(ctx.out()) {
3024  handle_specs(ctx);
3026  checker(null_handler(), internal::get_type<FormatContext, T>::value);
3027  checker.on_align(specs_.align());
3028  if (specs_.flags == 0); // Do nothing.
3029  else if (specs_.has(SIGN_FLAG))
3030  specs_.has(PLUS_FLAG) ? checker.on_plus() : checker.on_space();
3031  else if (specs_.has(MINUS_FLAG))
3032  checker.on_minus();
3033  else if (specs_.has(HASH_FLAG))
3034  checker.on_hash();
3035  if (specs_.precision != -1)
3036  checker.end_precision();
3037  typedef output_range<typename FormatContext::iterator,
3038  typename FormatContext::char_type> range;
3039  visit_format_arg(arg_formatter<range>(ctx, &specs_),
3040  internal::make_arg<FormatContext>(val));
3041  return ctx.out();
3042  }
3043 
3044  private:
3045  template <typename Context>
3046  void handle_specs(Context &ctx) {
3047  internal::handle_dynamic_spec<internal::width_checker>(
3048  specs_.width_, specs_.width_ref, ctx);
3049  internal::handle_dynamic_spec<internal::precision_checker>(
3050  specs_.precision, specs_.precision_ref, ctx);
3051  }
3052 
3054 };
3055 
3056 template <typename Range, typename Char>
3060  map_.init(this->args());
3061  format_arg arg = map_.find(name);
3062  if (arg.type() == internal::none_type)
3063  this->on_error("argument not found");
3064  return arg;
3065 }
3066 
3067 template <typename ArgFormatter, typename Char, typename Context>
3069  typedef typename ArgFormatter::range range;
3070 
3074  : context(r.begin(), str, format_args, loc) {}
3075 
3076  void on_text(const Char *begin, const Char *end) {
3077  auto size = internal::to_unsigned(end - begin);
3078  auto out = context.out();
3079  auto &&it = internal::reserve(out, size);
3080  it = std::copy_n(begin, size, it);
3081  context.advance_to(out);
3082  }
3083 
3084  void on_arg_id() { arg = context.next_arg(); }
3085  void on_arg_id(unsigned id) {
3086  context.parse_context().check_arg_id(id);
3087  arg = context.get_arg(id);
3088  }
3090  arg = context.get_arg(id);
3091  }
3092 
3093  void on_replacement_field(const Char *p) {
3094  context.parse_context().advance_to(p);
3096  if (!visit_format_arg(f, arg))
3097  context.advance_to(visit_format_arg(ArgFormatter(context), arg));
3098  }
3099 
3100  const Char *on_format_specs(const Char *begin, const Char *end) {
3101  auto &parse_ctx = context.parse_context();
3102  parse_ctx.advance_to(begin);
3104  if (visit_format_arg(f, arg))
3105  return parse_ctx.begin();
3109  handler(specs_handler<Context>(specs, context), arg.type());
3110  begin = parse_format_specs(begin, end, handler);
3111  if (begin == end || *begin != '}')
3112  on_error("missing '}' in format string");
3113  parse_ctx.advance_to(begin);
3114  context.advance_to(visit_format_arg(ArgFormatter(context, &specs), arg));
3115  return begin;
3116  }
3117 
3118  Context context;
3120 };
3121 
3123 template <typename ArgFormatter, typename Char, typename Context>
3124 typename Context::iterator vformat_to(
3125  typename ArgFormatter::range out,
3126  basic_string_view<Char> format_str,
3129  format_handler<ArgFormatter, Char, Context> h(out, format_str, args, loc);
3130  internal::parse_format_string<false>(format_str, h);
3131  return h.context.out();
3132 }
3133 
3134 // Casts ``p`` to ``const void*`` for pointer formatting.
3135 // Example:
3136 // auto s = format("{}", ptr(p));
3137 template <typename T>
3138 inline const void *ptr(const T *p) { return p; }
3139 
3140 template <typename It, typename Char>
3141 struct arg_join {
3142  It begin;
3143  It end;
3145 
3146  arg_join(It begin, It end, basic_string_view<Char> sep)
3147  : begin(begin), end(end), sep(sep) {}
3148 };
3149 
3150 template <typename It, typename Char>
3151 struct formatter<arg_join<It, Char>, Char>:
3152  formatter<typename std::iterator_traits<It>::value_type, Char> {
3153  template <typename FormatContext>
3154  auto format(const arg_join<It, Char> &value, FormatContext &ctx)
3155  -> decltype(ctx.out()) {
3157  auto it = value.begin;
3158  auto out = ctx.out();
3159  if (it != value.end) {
3160  out = base::format(*it++, ctx);
3161  while (it != value.end) {
3162  out = std::copy(value.sep.begin(), value.sep.end(), out);
3163  ctx.advance_to(out);
3164  out = base::format(*it++, ctx);
3165  }
3166  }
3167  return out;
3168  }
3169 };
3170 
3171 template <typename It>
3173  return arg_join<It, char>(begin, end, sep);
3174 }
3175 
3176 template <typename It>
3178  return arg_join<It, wchar_t>(begin, end, sep);
3179 }
3180 
3181 // The following causes ICE in gcc 4.4.
3182 #if FMT_USE_TRAILING_RETURN && (!FMT_GCC_VERSION || FMT_GCC_VERSION >= 405)
3183 template <typename Range>
3184 auto join(const Range &range, string_view sep)
3186  return join(internal::begin(range), internal::end(range), sep);
3187 }
3188 
3189 template <typename Range>
3190 auto join(const Range &range, wstring_view sep)
3192  return join(internal::begin(range), internal::end(range), sep);
3193 }
3194 #endif
3195 
3208 template <typename T>
3209 std::string to_string(const T &value) {
3210  std::string str;
3212  writer(buf).write(value);
3213  return str;
3214 }
3215 
3219 template <typename T>
3220 std::wstring to_wstring(const T &value) {
3221  std::wstring str;
3223  wwriter(buf).write(value);
3224  return str;
3225 }
3226 
3227 template <typename Char, std::size_t SIZE>
3228 std::basic_string<Char> to_string(const basic_memory_buffer<Char, SIZE> &buf) {
3229  return std::basic_string<Char>(buf.data(), buf.size());
3230 }
3231 
3232 template <typename Char>
3237  return vformat_to<arg_formatter<range>>(
3238  buf, to_string_view(format_str), args);
3239 }
3240 
3241 template <typename S, typename Char = FMT_CHAR(S)>
3243  internal::basic_buffer<Char> &buf, const S &format_str,
3245  return internal::vformat_to(buf, to_string_view(format_str), args);
3246 }
3247 
3248 template <
3249  typename S, typename... Args,
3250  std::size_t SIZE = inline_buffer_size,
3251  typename Char = typename internal::char_t<S>::type>
3253  basic_memory_buffer<Char, SIZE> &buf, const S &format_str,
3254  const Args &... args) {
3255  internal::check_format_string<Args...>(format_str);
3256  typedef typename buffer_context<Char>::type context;
3257  format_arg_store<context, Args...> as{args...};
3258  return internal::vformat_to(buf, to_string_view(format_str),
3260 }
3261 
3262 namespace internal {
3263 
3264 // Detect the iterator category of *any* given type in a SFINAE-friendly way.
3265 // Unfortunately, older implementations of std::iterator_traits are not safe
3266 // for use in a SFINAE-context.
3267 
3268 // the gist of C++17's void_t magic
3269 template<typename... Ts>
3270 struct void_ { typedef void type; };
3271 
3272 template <typename T, typename Enable = void>
3273 struct it_category : std::false_type {};
3274 
3275 template <typename T>
3276 struct it_category<T*> { typedef std::random_access_iterator_tag type; };
3277 
3278 template <typename T>
3279 struct it_category<T, typename void_<typename T::iterator_category>::type> {
3280  typedef typename T::iterator_category type;
3281 };
3282 
3283 // Detect if *any* given type models the OutputIterator concept.
3284 template <typename It>
3286  // Check for mutability because all iterator categories derived from
3287  // std::input_iterator_tag *may* also meet the requirements of an
3288  // OutputIterator, thereby falling into the category of 'mutable iterators'
3289  // [iterator.requirements.general] clause 4.
3290  // The compiler reveals this property only at the point of *actually
3291  // dereferencing* the iterator!
3292  template <typename U>
3293  static decltype(*(internal::declval<U>())) test(std::input_iterator_tag);
3294  template <typename U>
3295  static char& test(std::output_iterator_tag);
3296  template <typename U>
3297  static const char& test(...);
3298 
3299  typedef decltype(test<It>(typename it_category<It>::type{})) type;
3300  typedef typename std::remove_reference<type>::type result;
3301  public:
3302  static const bool value = !std::is_const<result>::value;
3303 };
3304 } // internal
3305 
3306 template <typename OutputIt, typename Char = char>
3307 //using format_context_t = basic_format_context<OutputIt, Char>;
3309 
3310 template <typename OutputIt, typename Char = char>
3311 //using format_args_t = basic_format_args<format_context_t<OutputIt, Char>>;
3313  typedef basic_format_args<
3315 };
3316 
3317 template <typename String, typename OutputIt, typename... Args>
3318 inline typename std::enable_if<internal::is_output_iterator<OutputIt>::value,
3319  OutputIt>::type
3320  vformat_to(OutputIt out, const String &format_str,
3321  typename format_args_t<OutputIt, FMT_CHAR(String)>::type args) {
3323  return vformat_to<arg_formatter<range>>(range(out),
3324  to_string_view(format_str), args);
3325 }
3326 
3338 template <typename OutputIt, typename S, typename... Args>
3339 inline FMT_ENABLE_IF_T(
3342  format_to(OutputIt out, const S &format_str, const Args &... args) {
3343  internal::check_format_string<Args...>(format_str);
3344  typedef typename format_context_t<OutputIt, FMT_CHAR(S)>::type context;
3345  format_arg_store<context, Args...> as{args...};
3346  return vformat_to(out, to_string_view(format_str),
3348 }
3349 
3350 template <typename OutputIt>
3353  OutputIt out;
3355  std::size_t size;
3356 };
3357 
3358 template <typename OutputIt, typename Char = typename OutputIt::value_type>
3360  format_context_t<fmt::internal::truncating_iterator<OutputIt>, Char> {};
3361 
3362 template <typename OutputIt, typename Char = typename OutputIt::value_type>
3364  typedef basic_format_args<
3366 };
3367 
3368 template <typename OutputIt, typename Char, typename ...Args>
3369 inline format_arg_store<
3371  make_format_to_n_args(const Args &... args) {
3372  return format_arg_store<
3373  typename format_to_n_context<OutputIt, Char>::type, Args...>(args...);
3374 }
3375 
3376 template <typename OutputIt, typename Char, typename... Args>
3377 inline typename std::enable_if<
3380  OutputIt out, std::size_t n, basic_string_view<Char> format_str,
3383  auto it = vformat_to(It(out, n), format_str, args);
3384  return {it.base(), it.count()};
3385 }
3386 
3394 template <typename OutputIt, typename S, typename... Args>
3395 inline FMT_ENABLE_IF_T(
3397  internal::is_output_iterator<OutputIt>::value,
3399  format_to_n(OutputIt out, std::size_t n, const S &format_str,
3400  const Args &... args) {
3401  internal::check_format_string<Args...>(format_str);
3402  typedef FMT_CHAR(S) Char;
3404  typename format_to_n_context<OutputIt, Char>::type, Args...> as(args...);
3405  return vformat_to_n(out, n, to_string_view(format_str),
3407 }
3408 
3409 template <typename Char>
3410 inline std::basic_string<Char> internal::vformat(
3411  basic_string_view<Char> format_str,
3414  internal::vformat_to(buffer, format_str, args);
3415  return fmt::to_string(buffer);
3416 }
3417 
3422 template <typename... Args>
3423 inline std::size_t formatted_size(string_view format_str,
3424  const Args &... args) {
3425  auto it = format_to(internal::counting_iterator<char>(), format_str, args...);
3426  return it.count();
3427 }
3428 
3429 #if FMT_USE_USER_DEFINED_LITERALS
3430 namespace internal {
3431 
3432 # if FMT_UDL_TEMPLATE
3433 template <typename Char, Char... CHARS>
3434 class udl_formatter {
3435  public:
3436  template <typename... Args>
3437  std::basic_string<Char> operator()(const Args &... args) const {
3438  FMT_CONSTEXPR_DECL Char s[] = {CHARS..., '\0'};
3439  FMT_CONSTEXPR_DECL bool invalid_format =
3440  do_check_format_string<Char, error_handler, Args...>(
3441  basic_string_view<Char>(s, sizeof...(CHARS)));
3442  (void)invalid_format;
3443  return format(s, args...);
3444  }
3445 };
3446 # else
3447 template <typename Char>
3448 struct udl_formatter {
3449  const Char *str;
3450 
3451  template <typename... Args>
3452  auto operator()(Args &&... args) const
3453  -> decltype(format(str, std::forward<Args>(args)...)) {
3454  return format(str, std::forward<Args>(args)...);
3455  }
3456 };
3457 # endif // FMT_UDL_TEMPLATE
3458 
3459 template <typename Char>
3460 struct udl_arg {
3461  const Char *str;
3462 
3463  template <typename T>
3464  named_arg<T, Char> operator=(T &&value) const {
3465  return {str, std::forward<T>(value)};
3466  }
3467 };
3468 
3469 } // namespace internal
3470 
3471 inline namespace literals {
3472 
3473 # if FMT_UDL_TEMPLATE
3474 template <typename Char, Char... CHARS>
3475 FMT_CONSTEXPR internal::udl_formatter<Char, CHARS...> operator""_format() {
3476  return {};
3477 }
3478 # else
3479 
3489 inline internal::udl_formatter<char>
3490 operator"" _format(const char *s, std::size_t) { return {s}; }
3491 inline internal::udl_formatter<wchar_t>
3492 operator"" _format(const wchar_t *s, std::size_t) { return {s}; }
3493 # endif // FMT_UDL_TEMPLATE
3494 
3505 inline internal::udl_arg<char>
3506 operator"" _a(const char *s, std::size_t) { return {s}; }
3507 inline internal::udl_arg<wchar_t>
3508 operator"" _a(const wchar_t *s, std::size_t) { return {s}; }
3509 } // inline namespace literals
3510 #endif // FMT_USE_USER_DEFINED_LITERALS
3512 
3513 #define FMT_STRING(s) [] { \
3514  typedef typename std::remove_cv<std::remove_pointer< \
3515  typename std::decay<decltype(s)>::type>::type>::type ct; \
3516  struct str : fmt::compile_string { \
3517  typedef ct char_type; \
3518  FMT_CONSTEXPR operator fmt::basic_string_view<ct>() const { \
3519  return {s, sizeof(s) / sizeof(ct) - 1}; \
3520  } \
3521  }; \
3522  return str{}; \
3523  }()
3524 
3525 #if defined(FMT_STRING_ALIAS) && FMT_STRING_ALIAS
3526 
3540 # define fmt(s) FMT_STRING(s)
3541 #endif
3542 
3543 #ifdef FMT_HEADER_ONLY
3544 # define FMT_FUNC inline
3545 # include "format-inl.h"
3546 #else
3547 # define FMT_FUNC
3548 #endif
3549 
3550 // Restore warnings.
3551 #if FMT_GCC_VERSION >= 406 || FMT_CLANG_VERSION
3552 # pragma GCC diagnostic pop
3553 #endif
3554 
3555 #endif // FMT_FORMAT_H_
iterator operator()(basic_string_view< char_type > value)
Definition: format.h:1427
+ + + + +
dynamic_specs_handler(dynamic_format_specs< char_type > &specs, ParseContext &ctx)
Definition: format.h:1746
+ +
result::char_type type
Definition: core.h:521
+ + +
T * begin(T(&array)[N])
Definition: format.h:255
+
std::enable_if< !is_integer< T >::value, unsigned long long >::type operator()(T)
Definition: format.h:1520
+ +
auto format(const arg_join< It, Char > &value, FormatContext &ctx) -> decltype(ctx.out())
Definition: format.h:3154
+ + +
u8string_view(const char *s, size_t count)
Definition: format.h:417
+
std::numeric_limits< internal::dummy_int > fputil
Definition: format.h:272
+
const format_arg * args_
Definition: core.h:1219
+ +
std::enable_if< !std::numeric_limits< T >::is_signed, bool >::type is_negative(T)
Definition: format.h:732
+ + +
truncating_iterator_base(OutputIt out, std::size_t limit)
Definition: format.h:653
+ + + + + + +
void write(wchar_t value)
Definition: format.h:2612
+ + +
T * make_checked(T *p, std::size_t)
Definition: format.h:389
+
arg_formatter_base(Range r, format_specs *s, locale_ref loc)
Definition: format.h:1359
+ +
wchar_t thousands_sep(locale_ref loc)
Definition: format.h:950
+
void parse_format_string(basic_string_view< Char > format_str, Handler &&handler)
Definition: format.h:1999
+
alignment align() const
Definition: format.h:1097
+
std::size_t capacity() const
Definition: core.h:253
+
width_checker(ErrorHandler &eh)
Definition: format.h:1507
+ +
std::enable_if< std::is_integral< T >::value, void >::type write(T value, FormatSpec spec, FormatSpecs...specs)
Definition: format.h:2588
+ + +
bool is_integral(type t)
Definition: core.h:540
+
iterator out() const
Definition: format.h:2571
+
void operator()(basic_string_view< Char > id)
Definition: format.h:1989
+ + +
unsigned parse_nonnegative_int(const Char *&begin, const Char *end, ErrorHandler &&eh)
Definition: format.h:1454
+
std::size_t count() const
Definition: format.h:630
+
precision_checker(ErrorHandler &eh)
Definition: format.h:1532
+
void handle_cstring_type_spec(Char spec, Handler &&handler)
Definition: format.h:1194
+ +
dummy_int isnan(...)
Definition: format.h:278
+ + + + +
Dest bit_cast(const Source &source)
Definition: format.h:242
+ +
void write(std::basic_ostream< Char > &os, basic_buffer< Char > &buf)
Definition: ostream.h:76
+
const char * c_str() const
Definition: format.h:2876
+
void operator()(Char *&buffer)
Definition: format.h:930
+ + + +
void write(unsigned value)
Definition: format.h:2577
+ + + + +
void write(unsigned long long value)
Definition: format.h:2579
+ +
dummy_int _isnan(...)
Definition: format.h:279
+ +
char_spec_handler(arg_formatter_base &f, char_type val)
Definition: format.h:1397
+
basic_format_args< typename format_context_t< OutputIt, Char >::type > type
Definition: format.h:3314
+
void write(const char_type *value)
Definition: format.h:1350
+ +
format_int(long long value)
Definition: format.h:2856
+
std::output_iterator_tag iterator_category
Definition: format.h:621
+ +
Allocator::value_type * allocate(Allocator &alloc, std::size_t n)
Definition: format.h:282
+ +
char * lg(uint32_t n, Handler h)
Definition: format.h:832
+ + + + + + +
void on_align(alignment align)
Definition: format.h:1562
+
arg_formatter(context_type &ctx, format_specs *spec=NULL)
Definition: format.h:2178
+
void operator()(basic_string_view< Char > id)
Definition: format.h:1816
+ + + + + + +
void write(long long value)
Definition: format.h:2575
+
std::enable_if< sizeof(Double)!=sizeof(uint64_t), bool >::type grisu2_format(Double, buffer &, core_format_specs)
Definition: format.h:1134
+ +
void write(unsigned long value)
Definition: format.h:2578
+ + + +
format_int(unsigned value)
Definition: format.h:2857
+ + + + +
char_specs_checker(char type, ErrorHandler eh)
Definition: format.h:1253
+
T * end(T(&array)[N])
Definition: format.h:259
+ + +
#define FMT_ALWAYS_INLINE
Definition: format.h:824
+
#define FMT_CONSTEXPR_DECL
Definition: core.h:70
+ + +
T const_check(T value)
Definition: format.h:293
+
Definition: format.h:297
+
internal::named_arg< T, char > arg(string_view name, const T &arg)
Definition: core.h:1391
+
specs_checker(const Handler &handler, internal::type arg_type)
Definition: format.h:1593
+ + +
void handle_float_type_spec(char spec, Handler &&handler)
Definition: format.h:1163
+ +
void write(basic_string_view< Char > s, const format_specs &spec=format_specs())
Definition: format.h:2639
+ + + + + +
void on_error(const char *message)
Definition: format.h:1840
+ + +
void on_replacement_field(const Char *p)
Definition: format.h:3093
+ + + + + + +
Container & get_container(std::back_insert_iterator< Container > it)
Definition: core.h:313
+ + +
void report_system_error(int error_code, fmt::string_view message)
Definition: format-inl.h:933
+
iterator operator()(monostate)
Definition: format.h:1362
+
wchar_t fill() const
Definition: format.h:1096
+
void operator()(unsigned id)
Definition: format.h:1988
+ + + +
std::enable_if< is_integer< T >::value, unsigned long long >::type operator()(T value)
Definition: format.h:1512
+ + + +
int_type_checker(ErrorHandler eh)
Definition: format.h:1218
+
specs_setter(basic_format_specs< Char > &specs)
Definition: format.h:1557
+ +
#define FMT_END_NAMESPACE
Definition: core.h:153
+ +
bool find< false, char >(const char *first, const char *last, char value, const char *&out)
Definition: format.h:1979
+
#define FMT_THROW(x)
Definition: format.h:115
+
const Char * parse_width(const Char *begin, const Char *end, Handler &&handler)
Definition: format.h:1884
+ + + +
unsigned width() const
Definition: format.h:1095
+ +
internal::type type() const
Definition: core.h:814
+ +
const ParseContext::char_type * parse_format_specs(ParseContext &ctx)
Definition: format.h:2053
+
std::size_t size() const
Definition: core.h:250
+ + + + + + + + + + + + +
void on_replacement_field(const Char *)
Definition: format.h:2080
+
Range::value_type char_type
Definition: format.h:2261
+
std::random_access_iterator_tag type
Definition: format.h:3276
+ +
std::size_t formatted_size(string_view format_str, const Args &...args)
Definition: format.h:3423
+ +
Context::char_type char_type
Definition: format.h:1669
+ + +
bool operator()(typename basic_format_arg< Context >::handle h) const
Definition: format.h:1487
+
basic_memory_buffer< wchar_t > wmemory_buffer
Definition: format.h:554
+ +
basic_string_view< wchar_t > wstring_view
Definition: core.h:429
+
ArgFormatter::range range
Definition: format.h:3069
+
int count_digits(uint64_t n)
Definition: format.h:777
+ + + + + + +
arg_join< It, wchar_t > join(It begin, It end, wstring_view sep)
Definition: format.h:3177
+ +
std::string str() const
Definition: format.h:2886
+
#define FMT_USE_GRISU
Definition: format.h:165
+
basic_memory_buffer< char > memory_buffer
Definition: format.h:553
+
auto format(const T &val, FormatContext &ctx) -> decltype(ctx.out())
Definition: format.h:3023
+ + +
void on_text(const Char *begin, const Char *end)
Definition: format.h:3076
+ +
internal::result_of< Visitor(int)>::type visit_format_arg(Visitor &&vis, const basic_format_arg< Context > &arg)
Definition: core.h:831
+ + + + + +
const Char * pointer_from(null_terminating_iterator< Char > it)
Definition: printf.h:107
+
std::output_iterator_tag iterator_category
Definition: format.h:657
+
format_error(const std::string &message)
Definition: format.h:370
+
truncating_iterator_base _Unchecked_type
Definition: format.h:661
+
size_t size() const
Definition: core.h:389
+ + + + +
bool find(Ptr first, Ptr last, T value, Ptr &out)
Definition: format.h:1970
+
basic_buffer< char > buffer
Definition: core.h:291
+ +
std::enable_if< !is_integer< T >::value, unsigned long long >::type operator()(T)
Definition: format.h:1544
+ + +
back_insert_range(typename base::iterator it)
Definition: format.h:358
+ + + + +
arg_join(It begin, It end, basic_string_view< Char > sep)
Definition: format.h:3146
+
basic_data data
Definition: format.h:764
+ + + + +
format_int(long value)
Definition: format.h:2855
+ +
basic_format_args< typename format_to_n_context< OutputIt, Char >::type > type
Definition: format.h:3365
+ + + + +
iterator operator()(typename basic_format_arg< context_type >::handle handle)
Definition: format.h:2188
+ +
void set_dynamic_spec(T &value, basic_format_arg< Context > arg, ErrorHandler eh)
Definition: format.h:1654
+ +
#define FMT_API
Definition: core.h:166
+ +
format_arg_store< Context, Args... > make_format_args(const Args &...args)
Definition: core.h:1199
+ + + +
cstring_spec_handler(arg_formatter_base &f, const char_type *val)
Definition: format.h:1413
+
arg_ref(unsigned index)
Definition: format.h:1711
+ + + +
std::make_unsigned< Int >::type to_unsigned(Int value)
Definition: core.h:208
+ + +
dummy_int _finite(...)
Definition: format.h:277
+ + +
std::basic_string< typename char_t< S >::type > format(const S &format_str, const Args &...args)
Definition: core.h:1454
+ + + +
iterator operator()(const void *value)
Definition: format.h:1438
+
float_type_checker(ErrorHandler eh)
Definition: format.h:1234
+
void write(wstring_view value)
Definition: format.h:2626
+ +
void write(string_view value)
Definition: format.h:2622
+
basic_writer< back_insert_range< internal::buffer > > writer
Definition: format.h:361
+
iterator operator()(const char_type *value)
Definition: format.h:1420
+ + +
ParseContext::char_type char_type
Definition: format.h:1744
+
basic_format_specs< Char > & specs_
Definition: format.h:1585
+ +
It format_uint(It out, UInt value, int num_digits, bool upper=false)
Definition: format.h:1019
+
counting_iterator & operator++()
Definition: format.h:632
+ +
format_error(const char *message)
Definition: format.h:367
+ + + +
add_thousands_sep(basic_string_view< Char > sep)
Definition: format.h:927
+
void write(long value)
Definition: format.h:2574
+ + + + +
#define FMT_CHAR(S)
Definition: core.h:1320
+
size_t count_code_points(basic_string_view< char8_t > s)
Definition: format-inl.h:197
+ +
Char thousands_sep_impl(locale_ref loc)
Definition: format-inl.h:222
+
bool do_check_format_string(basic_string_view< Char > s, ErrorHandler eh=ErrorHandler())
Definition: format.h:2110
+ +
basic_format_specs< char > format_specs
Definition: format.h:1115
+
Allocator get_allocator() const
Definition: format.h:531
+ + +
const Char * on_format_specs(const Char *begin, const Char *)
Definition: format.h:2082
+ +
bool is_name_start(Char c)
Definition: format.h:1447
+ +
base::iterator iterator
Definition: format.h:2168
+
void format(Context &ctx) const
Definition: core.h:802
+ + + +
#define FMT_NULL
Definition: core.h:107
+ + +
basic_format_arg< Context > arg
Definition: format.h:3119
+
counting_iterator _Unchecked_type
Definition: format.h:626
+
void on_error(const char *message)
Definition: format.h:1687
+
arg_ref(basic_string_view< Char > nm)
Definition: format.h:1712
+
void on_dynamic_precision(Id arg_id)
Definition: format.h:1682
+
specs_checker(const specs_checker &other)
Definition: format.h:1596
+
void sprintf_format(Double value, internal::buffer &buf, core_format_specs spec)
Definition: format-inl.h:764
+
output_range(OutputIt it)
Definition: format.h:345
+ + +
std::basic_string< Char > vformat(basic_string_view< Char > format_str, basic_format_args< typename buffer_context< Char >::type > args)
Definition: format.h:3410
+
format_int(int value)
Definition: format.h:2854
+
char8_t to_char8_t(char c)
Definition: format.h:799
+ + + +
void set(T *buf_data, std::size_t buf_capacity)
Definition: core.h:232
+
std::enable_if< internal::is_string< S >::value &&internal::is_output_iterator< OutputIt >::value, format_to_n_result< OutputIt > >::type format_to_n(OutputIt out, std::size_t n, const S &format_str, const Args &...args)
Definition: format.h:3399
+ +
#define FMT_CONSTEXPR
Definition: core.h:69
+
void operator()(basic_string_view< Char > id)
Definition: format.h:1836
+ +
string_view_t & to_string_view(spdlog::level::level_enum l) noexcept
Definition: common.h:135
+
dummy_int isinf(...)
Definition: format.h:276
+
std::wstring to_wstring(const T &value)
Definition: format.h:3220
+ +
unsigned width_
Definition: format.h:1088
+
auto parse(ParseContext &ctx) -> decltype(ctx.begin())
Definition: format.h:3016
+
const void * ptr(const T *p)
Definition: format.h:3138
+
const internal::value< Context > * values_
Definition: core.h:1218
+
std::enable_if< internal::is_output_iterator< OutputIt >::value, format_to_n_result< OutputIt > >::type vformat_to_n(OutputIt out, std::size_t n, basic_string_view< Char > format_str, typename format_to_n_args< OutputIt, Char >::type args)
Definition: format.h:3379
+
char8_t
Definition: format.h:407
+ +
specs_handler(basic_format_specs< char_type > &specs, Context &ctx)
Definition: format.h:1671
+
void check_string_type_spec(Char spec, ErrorHandler &&eh)
Definition: format.h:1204
+
void handle_dynamic_spec(Spec &value, arg_ref< typename Context::char_type > ref, Context &ctx)
Definition: format.h:2134
+ +
std::basic_string< Char > to_string(const basic_memory_buffer< Char, SIZE > &buf)
Definition: format.h:3228
+ + +
specs_setter(const specs_setter &other)
Definition: format.h:1560
+ + + +
void on_align(alignment align)
Definition: format.h:1599
+
Iterator & reserve(Iterator &it, std::size_t)
Definition: format.h:604
+ + + +
std::size_t size() const
Definition: format.h:2862
+ +
void on_precision(unsigned precision)
Definition: format.h:1575
+ + +
string_value< Char > name
Definition: format.h:1725
+ +
system_error(int error_code, string_view message, const Args &...args)
Definition: format.h:2227
+ + + + + +
bool is_arithmetic(type t)
Definition: core.h:545
+ +
void on_error(const char *message)
Definition: format.h:1820
+ +
const Char * on_format_specs(const Char *begin, const Char *end)
Definition: format.h:3100
+
void operator()(unsigned id)
Definition: format.h:1815
+ + +
uint_least8_t flags
Definition: format.h:1102
+ +
void copy(const RangeT &range, OutputIterator out)
Definition: ranges.h:58
+ +
void on_text(const Char *, const Char *)
Definition: format.h:2067
+
void on_arg_id(basic_string_view< Char > id)
Definition: format.h:3089
+ +
OutputIt iterator
Definition: format.h:342
+ + +
#define FMT_NOEXCEPT
Definition: core.h:140
+ +
basic_string_view< Char > sep
Definition: format.h:3144
+
std::enable_if< internal::is_string< S >::value &&internal::is_output_iterator< OutputIt >::value, OutputIt >::type format_to(OutputIt out, const S &format_str, const Args &...args)
Definition: format.h:3342
+
#define FMT_ENABLE_IF_T(B, T)
Definition: core.h:1305
+
Definition: bin_to_hex.h:69
+
counting_iterator operator++(int)
Definition: format.h:637
+
void write(const Char *s, std::size_t size, const align_spec &spec)
Definition: format.h:2634
+
format_string_checker(basic_string_view< Char > format_str, ErrorHandler eh)
Definition: format.h:2062
+ +
basic_writer< back_insert_range< internal::wbuffer > > wwriter
Definition: format.h:362
+ +
#define FMT_ASSERT(condition, message)
Definition: core.h:170
+
const Char * parse_align(const Char *begin, const Char *end, Handler &&handler)
Definition: format.h:1847
+ +
std::enable_if< std::is_integral< T >::value||std::is_same< T, char_type >::value, iterator >::type operator()(T value)
Definition: format.h:1370
+
void write(double value)
Definition: format.h:2594
+ + +
alignment
Definition: format.h:1079
+
const Char * data() const
Definition: core.h:386
+ +
#define FMT_BEGIN_NAMESPACE
Definition: core.h:155
+
std::enable_if< is_integer< T >::value, unsigned long long >::type operator()(T value)
Definition: format.h:1536
+ +
void on_error(const char *message)
Definition: format.h:1764
+
void handle_int_type_spec(char spec, Handler &&handler)
Definition: format.h:1140
+
void on_dynamic_width(Id arg_id)
Definition: format.h:1676
+
std::enable_if< internal::is_output_iterator< OutputIt >::value, OutputIt >::type vformat_to(OutputIt out, const String &format_str, typename format_args_t< OutputIt, typename char_t< String >::type >::type args)
Definition: format.h:3320
+ +
format_handler(range r, basic_string_view< Char > str, basic_format_args< Context > format_args, internal::locale_ref loc)
Definition: format.h:3071
+ +
void format_system_error(internal::buffer &out, int error_code, string_view message)
Definition: format-inl.h:906
+ + +
void handle_char_specs(const basic_format_specs< Char > *specs, Handler &&handler)
Definition: format.h:1184
+
u8string_view(const char *s)
Definition: format.h:415
+
void write(int value)
Definition: format.h:2573
+
#define FMT_OVERRIDE
Definition: core.h:88
+ + +
const Char * parse_arg_id(const Char *begin, const Char *end, IDHandler &&handler)
Definition: format.h:1786
+ +
ParseContext::iterator parse(ParseContext &)
+
void check_pointer_type_spec(Char spec, ErrorHandler &&eh)
Definition: format.h:1210
+
std::enable_if<!is_compile_string< S >::value >::type check_format_string(const S &)
Definition: core.h:1352
+
size_type max_size() const
Definition: core.h:1285
+
void on_error(const char *message)
Definition: format.h:1992
+ + +
alignment align_
Definition: format.h:1092
+ + + +
format_int(unsigned long value)
Definition: format.h:2858
+
iterator begin() const
Definition: core.h:391
+ +
basic_memory_buffer(basic_memory_buffer &&other)
Definition: format.h:514
+
void on_width(unsigned width)
Definition: format.h:1574
+
OutputIt begin() const
Definition: format.h:346
+ + +
void on_arg_id(unsigned id)
Definition: format.h:3085
+ +
basic_string_view< char > string_view
Definition: core.h:428
+
width_adapter(SpecHandler &h)
Definition: format.h:1812
+ +
void write(char value)
Definition: format.h:2609
+ + +
basic_writer(Range out, internal::locale_ref loc=internal::locale_ref())
Definition: format.h:2567
+ + +
std::enable_if< needs_conversion< InputIt, OutChar >::value, OutputIt >::type copy_str(InputIt begin, InputIt end, OutputIt it)
Definition: format.h:817
+
void format_decimal(char *&buffer, T value)
Definition: format.h:2894
+
base::format_specs format_specs
Definition: format.h:2169
+
basic_memory_buffer & operator=(basic_memory_buffer &&other)
Definition: format.h:523
+ +
const char * data() const
Definition: format.h:2870
+ +
bool has(unsigned f) const
Definition: format.h:1106
+
format_int(unsigned long long value)
Definition: format.h:2859
+ +
void on_error(const char *message)
Definition: format.h:2088
+ +
std::enable_if< std::is_same< T, void >::value >::type write(const T *p)
Definition: format.h:2650
+
void on_arg_id(basic_string_view< Char >)
Definition: format.h:2078
+ +
arg_ref & operator=(unsigned idx)
Definition: format.h:1716
+
arg_formatter(context_type &ctx, format_specs &spec)
Definition: format.h:2182
+
format_arg_store< typename format_to_n_context< OutputIt, Char >::type, Args... > make_format_to_n_args(const Args &...args)
Definition: format.h:3371
+
int error_code() const
Definition: format.h:2232
+
basic_memory_buffer(const Allocator &alloc=Allocator())
Definition: format.h:481
+
void write(long double value)
Definition: format.h:2604
+
dynamic_specs_handler(const dynamic_specs_handler &other)
Definition: format.h:1750
+
Container::value_type value_type
Definition: format.h:355
+
back_insert_range(Container &c)
Definition: format.h:357
+ +
std::enable_if< std::is_floating_point< T >::value, iterator >::type operator()(T value)
Definition: format.h:1388
+ +
basic_format_context< OutputIt, Char > type
Definition: format.h:3308
+ +
iterator end() const
Definition: core.h:392
+
- -
void write(string_view value)
Definition: format.h:2622
- -
It format_uint(It out, UInt value, int num_digits, bool upper=false)
Definition: format.h:1019
- - - -
void write(int value)
Definition: format.h:2573
- -
float_type_checker(ErrorHandler eh)
Definition: format.h:1234
-
result::char_type type
Definition: core.h:521
- - -
void on_align(alignment align)
Definition: format.h:1562
-
Range::value_type char_type
Definition: format.h:2261
-
void report_system_error(int error_code, fmt::string_view message)
Definition: format-inl.h:933
- - - - -
specs_handler(basic_format_specs< char_type > &specs, Context &ctx)
Definition: format.h:1671
- -
format_string_checker(basic_string_view< Char > format_str, ErrorHandler eh)
Definition: format.h:2062
-
basic_data data
Definition: format.h:764
- - - - -
bool is_name_start(Char c)
Definition: format.h:1447
- - -
const Char * on_format_specs(const Char *begin, const Char *)
Definition: format.h:2082
- -
truncating_iterator_base _Unchecked_type
Definition: format.h:661
- - - -
void write(unsigned long value)
Definition: format.h:2578
- - -
truncating_iterator_base(OutputIt out, std::size_t limit)
Definition: format.h:653
- - -
std::enable_if< is_integer< T >::value, unsigned long long >::type operator()(T value)
Definition: format.h:1512
- - - - - -
unsigned parse_nonnegative_int(const Char *&begin, const Char *end, ErrorHandler &&eh)
Definition: format.h:1454
- -
format_int(long long value)
Definition: format.h:2856
- -
std::basic_string< Char > vformat(basic_string_view< Char > format_str, basic_format_args< typename buffer_context< Char >::type > args)
Definition: format.h:3410
-
internal::result_of< Visitor(int)>::type visit_format_arg(Visitor &&vis, const basic_format_arg< Context > &arg)
Definition: core.h:831
- - -
Container::value_type value_type
Definition: format.h:355
- -
void on_dynamic_precision(Id arg_id)
Definition: format.h:1682
- -
wchar_t fill() const
Definition: format.h:1096
-
#define FMT_API
Definition: core.h:166
- -
arg_ref & operator=(unsigned idx)
Definition: format.h:1716
- -
std::size_t size() const
Definition: core.h:250
-
add_thousands_sep(basic_string_view< Char > sep)
Definition: format.h:927
- -
void write(basic_string_view< Char > s, const format_specs &spec=format_specs())
Definition: format.h:2639
-
dummy_int _finite(...)
Definition: format.h:277
-
void handle_dynamic_spec(Spec &value, arg_ref< typename Context::char_type > ref, Context &ctx)
Definition: format.h:2134
- -
Iterator & reserve(Iterator &it, std::size_t)
Definition: format.h:604
- - -
iterator end() const
Definition: core.h:392
-
std::size_t capacity() const
Definition: core.h:253
- -
format_int(int value)
Definition: format.h:2854
-
void write(double value)
Definition: format.h:2594
-
ParseContext::char_type char_type
Definition: format.h:1744
- -
arg_formatter(context_type &ctx, format_specs &spec)
Definition: format.h:2182
- - -
const format_arg * args_
Definition: core.h:1219
- - - - - - -
iterator operator()(typename basic_format_arg< context_type >::handle handle)
Definition: format.h:2188
-
u8string_view(const char *s)
Definition: format.h:415
- -
void format_system_error(internal::buffer &out, int error_code, string_view message)
Definition: format-inl.h:906
-
arg_ref(unsigned index)
Definition: format.h:1711
- - - -
Allocator::value_type * allocate(Allocator &alloc, std::size_t n)
Definition: format.h:282
-
format_error(const char *message)
Definition: format.h:367
-
void write(const Char *s, std::size_t size, const align_spec &spec)
Definition: format.h:2634
- -
Char thousands_sep_impl(locale_ref loc)
Definition: format-inl.h:222
- -
unsigned width_
Definition: format.h:1088
-
basic_format_args< typename format_context_t< OutputIt, Char >::type > type
Definition: format.h:3314
-
specs_checker(const Handler &handler, internal::type arg_type)
Definition: format.h:1593
- - -
size_t count_code_points(basic_string_view< char8_t > s)
Definition: format-inl.h:197
-
void write(wchar_t value)
Definition: format.h:2612
- - - - -
void write(long value)
Definition: format.h:2574
-
iterator operator()(const char_type *value)
Definition: format.h:1420
- - -
void on_replacement_field(const Char *p)
Definition: format.h:3093
- - - - -
base::iterator iterator
Definition: format.h:2168
- - - -
auto parse(ParseContext &ctx) -> decltype(ctx.begin())
Definition: format.h:3016
-
Container & get_container(std::back_insert_iterator< Container > it)
Definition: core.h:313
- -
void handle_float_type_spec(char spec, Handler &&handler)
Definition: format.h:1163
- -
std::output_iterator_tag iterator_category
Definition: format.h:657
- - - - -
void parse_format_string(basic_string_view< Char > format_str, Handler &&handler)
Definition: format.h:1999
- - - - - - - -
void operator()(Char *&buffer)
Definition: format.h:930
-
back_insert_range(Container &c)
Definition: format.h:357
- - - -
dummy_int isinf(...)
Definition: format.h:276
- - - - - -
char8_t to_char8_t(char c)
Definition: format.h:799
-
char_spec_handler(arg_formatter_base &f, char_type val)
Definition: format.h:1397
-
back_insert_range(typename base::iterator it)
Definition: format.h:358
- - -
const Char * parse_arg_id(const Char *begin, const Char *end, IDHandler &&handler)
Definition: format.h:1786
-
void on_error(const char *message)
Definition: format.h:1992
-
std::make_unsigned< Int >::type to_unsigned(Int value)
Definition: core.h:208
-
std::enable_if<!is_compile_string< S >::value >::type check_format_string(const S &)
Definition: core.h:1352
-
dummy_int isnan(...)
Definition: format.h:278
-
std::enable_if< is_integer< T >::value, unsigned long long >::type operator()(T value)
Definition: format.h:1536
-
std::enable_if< std::is_integral< T >::value, void >::type write(T value, FormatSpec spec, FormatSpecs... specs)
Definition: format.h:2588
-
void on_error(const char *message)
Definition: format.h:1820
- - - - - -
void on_error(const char *message)
Definition: format.h:1764
-
void operator()(unsigned id)
Definition: format.h:1815
-
ArgFormatter::range range
Definition: format.h:3069
- - - - - - -
std::enable_if< needs_conversion< InputIt, OutChar >::value, OutputIt >::type copy_str(InputIt begin, InputIt end, OutputIt it)
Definition: format.h:817
- -
format_error(const std::string &message)
Definition: format.h:370
- -
specs_checker(const specs_checker &other)
Definition: format.h:1596
-
OutputIt begin() const
Definition: format.h:346
-
#define FMT_OVERRIDE
Definition: core.h:88
- -
std::enable_if< internal::is_output_iterator< OutputIt >::value, OutputIt >::type vformat_to(OutputIt out, const String &format_str, typename format_args_t< OutputIt, typename char_t< String >::type >::type args)
Definition: format.h:3320
-
void on_text(const Char *begin, const Char *end)
Definition: format.h:3076
-
#define FMT_NULL
Definition: core.h:107
- -
u8string_view(const char *s, size_t count)
Definition: format.h:417
- -
dummy_int _isnan(...)
Definition: format.h:279
-
void write(long double value)
Definition: format.h:2604
-
unsigned width() const
Definition: format.h:1095
-
const internal::value< Context > * values_
Definition: core.h:1218
- -
width_adapter(SpecHandler &h)
Definition: format.h:1812
- -
precision_checker(ErrorHandler &eh)
Definition: format.h:1532
- - - - - - - - - -
void on_precision(unsigned precision)
Definition: format.h:1575
- - -
void copy(const RangeT &range, OutputIterator out)
Definition: ranges.h:58
-
basic_format_args< typename format_to_n_context< OutputIt, Char >::type > type
Definition: format.h:3365
- - - -
T * begin(T(&array)[N])
Definition: format.h:255
-
#define FMT_NOEXCEPT
Definition: core.h:140
-
basic_string_view< wchar_t > wstring_view
Definition: core.h:429
-
T * make_checked(T *p, std::size_t)
Definition: format.h:389
-
void on_text(const Char *, const Char *)
Definition: format.h:2067
- - -
char_specs_checker(char type, ErrorHandler eh)
Definition: format.h:1253
-
bool has(unsigned f) const
Definition: format.h:1106
- - -
#define FMT_USE_GRISU
Definition: format.h:165
- -
void set(T *buf_data, std::size_t buf_capacity)
Definition: core.h:232
- -
counting_iterator & operator++()
Definition: format.h:632
- -
const Char * parse_align(const Char *begin, const Char *end, Handler &&handler)
Definition: format.h:1847
-
alignment align() const
Definition: format.h:1097
-
arg_formatter(context_type &ctx, format_specs *spec=NULL)
Definition: format.h:2178
-
const Char * pointer_from(null_terminating_iterator< Char > it)
Definition: printf.h:107
- - - -
arg_ref(basic_string_view< Char > nm)
Definition: format.h:1712
- - -
string_view_t & to_string_view(spdlog::level::level_enum l) noexcept
Definition: common.h:135
- -
#define FMT_END_NAMESPACE
Definition: core.h:153
- - -
basic_buffer< char > buffer
Definition: core.h:291
- -
#define FMT_ALWAYS_INLINE
Definition: format.h:824
- -
void operator()(basic_string_view< Char > id)
Definition: format.h:1989
- - -
specs_setter(const specs_setter &other)
Definition: format.h:1560
-
iterator operator()(basic_string_view< char_type > value)
Definition: format.h:1427
- -
bool is_integral(type t)
Definition: core.h:540
-
void write(wstring_view value)
Definition: format.h:2626
- -
basic_memory_buffer< wchar_t > wmemory_buffer
Definition: format.h:554
- -
void operator()(basic_string_view< Char > id)
Definition: format.h:1836
-
size_type max_size() const
Definition: core.h:1285
-
dynamic_specs_handler(dynamic_format_specs< char_type > &specs, ParseContext &ctx)
Definition: format.h:1746
- -
void handle_cstring_type_spec(Char spec, Handler &&handler)
Definition: format.h:1194
- -
std::enable_if< !is_integer< T >::value, unsigned long long >::type operator()(T)
Definition: format.h:1544
- - -
arg_join(It begin, It end, basic_string_view< Char > sep)
Definition: format.h:3146
-
format_arg_store< Context, Args... > make_format_args(const Args &... args)
Definition: core.h:1199
-
const Char * parse_width(const Char *begin, const Char *end, Handler &&handler)
Definition: format.h:1884
-
std::enable_if< internal::is_string< S >::value &&internal::is_output_iterator< OutputIt >::value, format_to_n_result< OutputIt > >::type format_to_n(OutputIt out, std::size_t n, const S &format_str, const Args &... args)
Definition: format.h:3399
-
void write(char value)
Definition: format.h:2609
- - -
void set_dynamic_spec(T &value, basic_format_arg< Context > arg, ErrorHandler eh)
Definition: format.h:1654
- -
void write(unsigned value)
Definition: format.h:2577
- -
void on_error(const char *message)
Definition: format.h:1840
-
size_t size() const
Definition: core.h:389
- - - - -
width_checker(ErrorHandler &eh)
Definition: format.h:1507
-
cstring_spec_handler(arg_formatter_base &f, const char_type *val)
Definition: format.h:1413
- -
const typedef T & const_reference
Definition: format.h:479
-
void check_string_type_spec(Char spec, ErrorHandler &&eh)
Definition: format.h:1204
- - - - -
std::numeric_limits< internal::dummy_int > fputil
Definition: format.h:272
-
format_int(unsigned long value)
Definition: format.h:2858
- - - -
void on_error(const char *message)
Definition: format.h:2088
- -
void format(Context &ctx) const
Definition: core.h:802
-
iterator out() const
Definition: format.h:2571
-
int count_digits(uint64_t n)
Definition: format.h:777
- - -
std::enable_if< internal::is_output_iterator< OutputIt >::value, format_to_n_result< OutputIt > >::type vformat_to_n(OutputIt out, std::size_t n, basic_string_view< Char > format_str, typename format_to_n_args< OutputIt, Char >::type args)
Definition: format.h:3379
- -
basic_memory_buffer & operator=(basic_memory_buffer &&other)
Definition: format.h:523
-
base::format_specs format_specs
Definition: format.h:2169
-
T * end(T(&array)[N])
Definition: format.h:259
- -
void operator()(unsigned id)
Definition: format.h:1988
-
const char * data() const
Definition: format.h:2870
- - - -
format_int(unsigned value)
Definition: format.h:2857
-
std::enable_if< !is_integer< T >::value, unsigned long long >::type operator()(T)
Definition: format.h:1520
-
format_int(unsigned long long value)
Definition: format.h:2859
- - -
std::size_t formatted_size(string_view format_str, const Args &... args)
Definition: format.h:3423
- -
basic_string_view< char > string_view
Definition: core.h:428
- - - - -
void handle_char_specs(const basic_format_specs< Char > *specs, Handler &&handler)
Definition: format.h:1184
- - - -
void operator()(basic_string_view< Char > id)
Definition: format.h:1816
-
T const_check(T value)
Definition: format.h:293
- - - - -
void sprintf_format(Double value, internal::buffer &buf, core_format_specs spec)
Definition: format-inl.h:764
-
std::enable_if< internal::is_string< S >::value &&internal::is_output_iterator< OutputIt >::value, OutputIt >::type format_to(OutputIt out, const S &format_str, const Args &... args)
Definition: format.h:3342
- - - -
const char * c_str() const
Definition: format.h:2876
- -
bool find(Ptr first, Ptr last, T value, Ptr &out)
Definition: format.h:1970
-
std::enable_if< std::is_floating_point< T >::value, iterator >::type operator()(T value)
Definition: format.h:1388
-
basic_writer< back_insert_range< internal::wbuffer > > wwriter
Definition: format.h:362
- -
#define FMT_CHAR(S)
Definition: core.h:1320
- - -
#define FMT_ASSERT(condition, message)
Definition: core.h:170
-
Dest bit_cast(const Source &source)
Definition: format.h:242
- -
counting_iterator _Unchecked_type
Definition: format.h:626
-
basic_format_specs< char > format_specs
Definition: format.h:1115
-
basic_memory_buffer(const Allocator &alloc=Allocator())
Definition: format.h:481
-
system_error(int error_code, string_view message, const Args &... args)
Definition: format.h:2227
-
std::output_iterator_tag iterator_category
Definition: format.h:621
-
specs_setter(basic_format_specs< Char > &specs)
Definition: format.h:1557
-
void on_align(alignment align)
Definition: format.h:1599
- - -
const Char * data() const
Definition: core.h:386
-
basic_format_arg< Context > arg
Definition: format.h:3119
- -
void on_width(unsigned width)
Definition: format.h:1574
-
void write(unsigned long long value)
Definition: format.h:2579
-
Context::char_type char_type
Definition: format.h:1669
-
const Char * on_format_specs(const Char *begin, const Char *end)
Definition: format.h:3100
- -
bool find< false, char >(const char *first, const char *last, char value, const char *&out)
Definition: format.h:1979
- -
void on_error(const char *message)
Definition: format.h:1687
-
iterator operator()(const void *value)
Definition: format.h:1438
-
Definition: format.h:297
- -
std::size_t size() const
Definition: format.h:2862
-
iterator begin() const
Definition: core.h:391
-
Definition: bin_to_hex.h:69
- - -
const ParseContext::char_type * parse_format_specs(ParseContext &ctx)
Definition: format.h:2053
- - -
char8_t
Definition: format.h:407
- -
basic_writer(Range out, internal::locale_ref loc=internal::locale_ref())
Definition: format.h:2567
-
basic_memory_buffer(basic_memory_buffer &&other)
Definition: format.h:514
-
bool is_arithmetic(type t)
Definition: core.h:545
-
std::wstring to_wstring(const T &value)
Definition: format.h:3220
-
basic_string_view< Char > sep
Definition: format.h:3144
- - -
alignment align_
Definition: format.h:1092
- -
iterator operator()(monostate)
Definition: format.h:1362
- - -
std::enable_if< std::is_integral< T >::value||std::is_same< T, char_type >::value, iterator >::type operator()(T value)
Definition: format.h:1370
-
alignment
Definition: format.h:1079
-
int error_code() const
Definition: format.h:2232
-
#define FMT_BEGIN_NAMESPACE
Definition: core.h:155
- -
output_range(OutputIt it)
Definition: format.h:345
- -
internal::named_arg< T, char > arg(string_view name, const T &arg)
Definition: core.h:1391
- - -
format_handler(range r, basic_string_view< Char > str, basic_format_args< Context > format_args, internal::locale_ref loc)
Definition: format.h:3071
-
std::enable_if< sizeof(Double) !=sizeof(uint64_t), bool >::type grisu2_format(Double, buffer &, core_format_specs)
Definition: format.h:1134
-
basic_writer< back_insert_range< internal::buffer > > writer
Definition: format.h:361
- - - -
basic_format_context< OutputIt, Char > type
Definition: format.h:3308
- - -
void handle_int_type_spec(char spec, Handler &&handler)
Definition: format.h:1140
- - - -
format_arg_store< typename format_to_n_context< OutputIt, Char >::type, Args... > make_format_to_n_args(const Args &... args)
Definition: format.h:3371
-
arg_join< It, wchar_t > join(It begin, It end, wstring_view sep)
Definition: format.h:3177
- -
OutputIt iterator
Definition: format.h:342
-
wchar_t thousands_sep(locale_ref loc)
Definition: format.h:950
-
string_value< Char > name
Definition: format.h:1725
- - -
ParseContext::iterator parse(ParseContext &)
-
void on_arg_id(basic_string_view< Char > id)
Definition: format.h:3089
- - -
std::enable_if< !std::numeric_limits< T >::is_signed, bool >::type is_negative(T)
Definition: format.h:732
-
auto format(const T &val, FormatContext &ctx) -> decltype(ctx.out())
Definition: format.h:3023
- - -
bool do_check_format_string(basic_string_view< Char > s, ErrorHandler eh=ErrorHandler())
Definition: format.h:2110
- - - - - -
std::basic_string< Char > to_string(const basic_memory_buffer< Char, SIZE > &buf)
Definition: format.h:3228
-
void on_arg_id(unsigned id)
Definition: format.h:3085
- - - -
void write(long long value)
Definition: format.h:2575
- -
std::string str() const
Definition: format.h:2886
- -
void format_decimal(char *&buffer, T value)
Definition: format.h:2894
-
void write(const char_type *value)
Definition: format.h:1350
-
dynamic_specs_handler(const dynamic_specs_handler &other)
Definition: format.h:1750
- -
uint_least8_t flags
Definition: format.h:1102
-
arg_formatter_base(Range r, format_specs *s, locale_ref loc)
Definition: format.h:1359
-
basic_memory_buffer< char > memory_buffer
Definition: format.h:553
-
std::basic_string< typename char_t< S >::type > format(const S &format_str, const Args &... args)
Definition: core.h:1454
- -
void on_replacement_field(const Char *)
Definition: format.h:2080
- - - -
void check_pointer_type_spec(Char spec, ErrorHandler &&eh)
Definition: format.h:1210
-
void on_dynamic_width(Id arg_id)
Definition: format.h:1676
- - - - -
void on_arg_id(basic_string_view< Char >)
Definition: format.h:2078
-
Allocator get_allocator() const
Definition: format.h:531
- - -
const void * ptr(const T *p)
Definition: format.h:3138
-
std::size_t count() const
Definition: format.h:630
- -
basic_format_specs< Char > & specs_
Definition: format.h:1585
-
auto format(const arg_join< It, Char > &value, FormatContext &ctx) -> decltype(ctx.out())
Definition: format.h:3154
-
#define FMT_CONSTEXPR
Definition: core.h:69
-
std::random_access_iterator_tag type
Definition: format.h:3276
-
std::enable_if< std::is_same< T, void >::value >::type write(const T *p)
Definition: format.h:2650
-
char * lg(uint32_t n, Handler h)
Definition: format.h:832
- -
int_type_checker(ErrorHandler eh)
Definition: format.h:1218
-
void write(std::basic_ostream< Char > &os, basic_buffer< Char > &buf)
Definition: ostream.h:76
-
#define FMT_THROW(x)
Definition: format.h:115
- -
format_int(long value)
Definition: format.h:2855
- - -
#define FMT_CONSTEXPR_DECL
Definition: core.h:70
-
#define FMT_ENABLE_IF_T(B, T)
Definition: core.h:1305
- -
bool operator()(typename basic_format_arg< Context >::handle h) const
Definition: format.h:1487
-
counting_iterator operator++(int)
Definition: format.h:637
diff --git a/docs/formatter_8h.html b/docs/formatter_8h.html index 883a221..3ce7908 100644 --- a/docs/formatter_8h.html +++ b/docs/formatter_8h.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: sdk_core/include/third_party/spdlog/spdlog/formatter.h File Reference @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,40 @@ - + - - - - + +
@@ -117,7 +135,7 @@ Namespaces + doxygen 1.8.11
diff --git a/docs/formatter_8h_source.html b/docs/formatter_8h_source.html index de1efc1..900dcc2 100644 --- a/docs/formatter_8h_source.html +++ b/docs/formatter_8h_source.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: sdk_core/include/third_party/spdlog/spdlog/formatter.h Source File @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,40 @@ - + - - - - + +
@@ -91,44 +109,24 @@ $(document).ready(function(){initNavTree('formatter_8h_source.html','');});
formatter.h
-Go to the documentation of this file.
1 //
-
2 // Copyright(c) 2015 Gabi Melman.
-
3 // Distributed under the MIT License (http://opensource.org/licenses/MIT)
-
4 //
-
5 
-
6 #pragma once
-
7 
-
8 #include "fmt/fmt.h"
- -
10 
-
11 namespace spdlog {
-
12 
-
13 class formatter
-
14 {
-
15 public:
-
16  virtual ~formatter() = default;
-
17  virtual void format(const details::log_msg &msg, fmt::memory_buffer &dest) = 0;
-
18  virtual std::unique_ptr<formatter> clone() const = 0;
-
19 };
-
20 } // namespace spdlog
+Go to the documentation of this file.
1 //
2 // Copyright(c) 2015 Gabi Melman.
3 // Distributed under the MIT License (http://opensource.org/licenses/MIT)
4 //
5 
6 #pragma once
7 
8 #include "fmt/fmt.h"
10 
11 namespace spdlog {
12 
13 class formatter
14 {
15 public:
16  virtual ~formatter() = default;
17  virtual void format(const details::log_msg &msg, fmt::memory_buffer &dest) = 0;
18  virtual std::unique_ptr<formatter> clone() const = 0;
19 };
20 } // namespace spdlog
+ +
virtual std::unique_ptr< formatter > clone() const =0
+ +
virtual ~formatter()=default
+
Definition: async.h:27
+ + +
virtual void format(const details::log_msg &msg, fmt::memory_buffer &dest)=0
- - -
virtual void format(const details::log_msg &msg, fmt::memory_buffer &dest)=0
-
virtual ~formatter()=default
-
virtual std::unique_ptr< formatter > clone() const =0
-
Definition: async.h:27
- - - diff --git a/docs/functions.html b/docs/functions.html index 992932c..38f10f3 100644 --- a/docs/functions.html +++ b/docs/functions.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Class Members @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,84 @@ - + - - - - + + + +
@@ -89,7 +151,7 @@ $(document).ready(function(){initNavTree('functions.html','');});
Here is a list of all class members with links to the classes they belong to:
-

- _ -

diff --git a/docs/functions_0x7e.html b/docs/functions_0x7e.html new file mode 100644 index 0000000..74d4bbd --- /dev/null +++ b/docs/functions_0x7e.html @@ -0,0 +1,230 @@ + + + + + + +Livox SDK API: Class Members + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Livox SDK API +  V2.1.0 +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- ~ -

+
+
+ + + + diff --git a/docs/functions_a.html b/docs/functions_a.html index 44119ae..c74abab 100644 --- a/docs/functions_a.html +++ b/docs/functions_a.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Class Members @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,84 @@
- + - - - - + + + +
@@ -89,7 +151,7 @@ $(document).ready(function(){initNavTree('functions_a.html','');});
Here is a list of all class members with links to the classes they belong to:
-

- a -

diff --git a/docs/functions_b.html b/docs/functions_b.html index d6e280e..14f7f5e 100644 --- a/docs/functions_b.html +++ b/docs/functions_b.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Class Members @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,84 @@
- + - - - - + + + +
@@ -89,7 +151,7 @@ $(document).ready(function(){initNavTree('functions_b.html','');});
Here is a list of all class members with links to the classes they belong to:
-

- b -

diff --git a/docs/functions_c.html b/docs/functions_c.html index bb17fca..9a23e47 100644 --- a/docs/functions_c.html +++ b/docs/functions_c.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Class Members @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,84 @@
- + - - - - + + + +
@@ -89,7 +151,7 @@ $(document).ready(function(){initNavTree('functions_c.html','');});
Here is a list of all class members with links to the classes they belong to:
-

- c -

diff --git a/docs/functions_d.html b/docs/functions_d.html index 39bcc5e..f7a6bbd 100644 --- a/docs/functions_d.html +++ b/docs/functions_d.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Class Members @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,84 @@
- + - - - - + + + +
@@ -89,7 +151,7 @@ $(document).ready(function(){initNavTree('functions_d.html','');});
Here is a list of all class members with links to the classes they belong to:
-

- d -

diff --git a/docs/functions_dup.js b/docs/functions_dup.js index d7daffe..9100361 100644 --- a/docs/functions_dup.js +++ b/docs/functions_dup.js @@ -26,5 +26,5 @@ var functions_dup = [ "x", "functions_x.html", null ], [ "y", "functions_y.html", null ], [ "z", "functions_z.html", null ], - [ "~", "functions_~.html", null ] + [ "~", "functions_0x7e.html", null ] ]; \ No newline at end of file diff --git a/docs/functions_e.html b/docs/functions_e.html index a5462b5..914c46b 100644 --- a/docs/functions_e.html +++ b/docs/functions_e.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Class Members @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,84 @@
- + - - - - + + + +
@@ -89,7 +151,7 @@ $(document).ready(function(){initNavTree('functions_e.html','');});
Here is a list of all class members with links to the classes they belong to:
-

- e -

diff --git a/docs/functions_enum.html b/docs/functions_enum.html index f321ba4..d3b423e 100644 --- a/docs/functions_enum.html +++ b/docs/functions_enum.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Class Members - Enumerations @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,53 @@
- + - - - - + + +
@@ -102,7 +133,7 @@ $(document).ready(function(){initNavTree('functions_enum.html','');});
    + doxygen 1.8.11
diff --git a/docs/functions_eval.html b/docs/functions_eval.html index 8dac592..d7306f0 100644 --- a/docs/functions_eval.html +++ b/docs/functions_eval.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Class Members - Enumerator @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,53 @@ - + - - - - + + +
@@ -130,7 +161,7 @@ $(document).ready(function(){initNavTree('functions_eval.html','');});
    + doxygen 1.8.11
diff --git a/docs/functions_f.html b/docs/functions_f.html index e196104..6c8b500 100644 --- a/docs/functions_f.html +++ b/docs/functions_f.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Class Members @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,84 @@ - + - - - - + + + +
@@ -89,7 +151,7 @@ $(document).ready(function(){initNavTree('functions_f.html','');});
Here is a list of all class members with links to the classes they belong to:
-

- f -

diff --git a/docs/functions_func.html b/docs/functions_func.html index 23862d2..9a35d15 100644 --- a/docs/functions_func.html +++ b/docs/functions_func.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Class Members - Functions @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,81 @@
- + - - - - + + + +
@@ -89,7 +148,7 @@ $(document).ready(function(){initNavTree('functions_func.html','');});
  -

- a -

diff --git a/docs/functions_func.js b/docs/functions_func.js index 1377c88..6023735 100644 --- a/docs/functions_func.js +++ b/docs/functions_func.js @@ -23,5 +23,5 @@ var functions_func = [ "x", "functions_func_x.html", null ], [ "y", "functions_func_y.html", null ], [ "z", "functions_func_z.html", null ], - [ "~", "functions_func_~.html", null ] + [ "~", "functions_func_0x7e.html", null ] ]; \ No newline at end of file diff --git a/docs/functions_func_0x7e.html b/docs/functions_func_0x7e.html new file mode 100644 index 0000000..e06d404 --- /dev/null +++ b/docs/functions_func_0x7e.html @@ -0,0 +1,227 @@ + + + + + + +Livox SDK API: Class Members - Functions + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Livox SDK API +  V2.1.0 +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+  + +

- ~ -

+
+
+ + + + diff --git a/docs/functions_func_b.html b/docs/functions_func_b.html index 752f55d..893fc3d 100644 --- a/docs/functions_func_b.html +++ b/docs/functions_func_b.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Class Members - Functions @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,81 @@
- + - - - - + + + +
@@ -89,7 +148,7 @@ $(document).ready(function(){initNavTree('functions_func_b.html','');});
  -

- b -

diff --git a/docs/functions_func_c.html b/docs/functions_func_c.html index c8d5a3e..cdbdc1f 100644 --- a/docs/functions_func_c.html +++ b/docs/functions_func_c.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Class Members - Functions @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,81 @@
- + - - - - + + + +
@@ -89,7 +148,7 @@ $(document).ready(function(){initNavTree('functions_func_c.html','');});
  -

- c -

diff --git a/docs/functions_func_d.html b/docs/functions_func_d.html index 53f910f..56a0397 100644 --- a/docs/functions_func_d.html +++ b/docs/functions_func_d.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Class Members - Functions @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,81 @@
- + - - - - + + + +
@@ -89,7 +148,7 @@ $(document).ready(function(){initNavTree('functions_func_d.html','');});
  -

- d -

diff --git a/docs/functions_func_e.html b/docs/functions_func_e.html index d15a8d4..c2d6975 100644 --- a/docs/functions_func_e.html +++ b/docs/functions_func_e.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Class Members - Functions @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,81 @@
- + - - - - + + + +
@@ -89,7 +148,7 @@ $(document).ready(function(){initNavTree('functions_func_e.html','');}); @@ -140,7 +199,7 @@ $(document).ready(function(){initNavTree('functions_func_e.html','');});
    + doxygen 1.8.11
diff --git a/docs/functions_func_f.html b/docs/functions_func_f.html index 461baad..cc71eb0 100644 --- a/docs/functions_func_f.html +++ b/docs/functions_func_f.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Class Members - Functions @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,81 @@ - + - - - - + + + +
@@ -89,7 +148,7 @@ $(document).ready(function(){initNavTree('functions_func_f.html','');});
  -

- f -

diff --git a/docs/functions_func_g.html b/docs/functions_func_g.html index 66dbb25..8d09f42 100644 --- a/docs/functions_func_g.html +++ b/docs/functions_func_g.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Class Members - Functions @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,81 @@
- + - - - - + + + +
@@ -89,32 +148,32 @@ $(document).ready(function(){initNavTree('functions_func_g.html','');}); diff --git a/docs/functions_func_h.html b/docs/functions_func_h.html index 66990e1..21bddba 100644 --- a/docs/functions_func_h.html +++ b/docs/functions_func_h.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Class Members - Functions @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,81 @@
- + - - - - + + + +
@@ -89,7 +148,7 @@ $(document).ready(function(){initNavTree('functions_func_h.html','');}); @@ -122,7 +181,7 @@ $(document).ready(function(){initNavTree('functions_func_h.html','');});
    + doxygen 1.8.11
diff --git a/docs/functions_func_i.html b/docs/functions_func_i.html index de8a1f3..e56be30 100644 --- a/docs/functions_func_i.html +++ b/docs/functions_func_i.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Class Members - Functions @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,81 @@ - + - - - - + + + +
@@ -89,7 +148,7 @@ $(document).ready(function(){initNavTree('functions_func_i.html','');});
  -

- i -

diff --git a/docs/functions_func_l.html b/docs/functions_func_l.html index 2274aed..2072eb8 100644 --- a/docs/functions_func_l.html +++ b/docs/functions_func_l.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Class Members - Functions @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,81 @@
- + - - - - + + + +
@@ -89,16 +148,16 @@ $(document).ready(function(){initNavTree('functions_func_l.html','');}); diff --git a/docs/functions_func_m.html b/docs/functions_func_m.html index 5ce00eb..9467304 100644 --- a/docs/functions_func_m.html +++ b/docs/functions_func_m.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Class Members - Functions @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,81 @@
- + - - - - + + + +
@@ -89,7 +148,7 @@ $(document).ready(function(){initNavTree('functions_func_m.html','');});
  -

- m -

diff --git a/docs/functions_func_n.html b/docs/functions_func_n.html index 56979f0..549cfd9 100644 --- a/docs/functions_func_n.html +++ b/docs/functions_func_n.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Class Members - Functions @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,81 @@
- + - - - - + + + +
@@ -89,9 +148,9 @@ $(document).ready(function(){initNavTree('functions_func_n.html','');});
  -

- n -

diff --git a/docs/functions_func_o.html b/docs/functions_func_o.html index 1ea3764..3233808 100644 --- a/docs/functions_func_o.html +++ b/docs/functions_func_o.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Class Members - Functions @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,81 @@
- + - - - - + + + +
@@ -89,7 +148,7 @@ $(document).ready(function(){initNavTree('functions_func_o.html','');});
  -

- o -

diff --git a/docs/functions_func_p.html b/docs/functions_func_p.html index 9a42882..587dbbe 100644 --- a/docs/functions_func_p.html +++ b/docs/functions_func_p.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Class Members - Functions @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,81 @@
- + - - - - + + + +
@@ -89,7 +148,7 @@ $(document).ready(function(){initNavTree('functions_func_p.html','');});
  -

- p -

diff --git a/docs/functions_func_r.html b/docs/functions_func_r.html index cf2bd9d..a5aec62 100644 --- a/docs/functions_func_r.html +++ b/docs/functions_func_r.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Class Members - Functions @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,81 @@
- + - - - - + + + +
@@ -89,7 +148,7 @@ $(document).ready(function(){initNavTree('functions_func_r.html','');});
  -

- r -

    +

    - r -

    • r_formatter() : spdlog::details::r_formatter
    • @@ -141,7 +200,7 @@ $(document).ready(function(){initNavTree('functions_func_r.html','');});
        + doxygen 1.8.11
diff --git a/docs/functions_func_s.html b/docs/functions_func_s.html index 0632aa1..40f457a 100644 --- a/docs/functions_func_s.html +++ b/docs/functions_func_s.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Class Members - Functions @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,81 @@
- + - - - - + + + +
@@ -89,7 +148,7 @@ $(document).ready(function(){initNavTree('functions_func_s.html','');});
  -

- s -

@@ -255,7 +313,7 @@ $(document).ready(function(){initNavTree('functions_func_s.html','');});
    + doxygen 1.8.11
diff --git a/docs/functions_func_t.html b/docs/functions_func_t.html index e156ce9..708b3c3 100644 --- a/docs/functions_func_t.html +++ b/docs/functions_func_t.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Class Members - Functions @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,81 @@ - + - - - - + + + +
@@ -89,7 +148,7 @@ $(document).ready(function(){initNavTree('functions_func_t.html','');});
  -

- t -

@@ -135,7 +194,7 @@ $(document).ready(function(){initNavTree('functions_func_t.html','');});
    + doxygen 1.8.11
diff --git a/docs/functions_func_u.html b/docs/functions_func_u.html index d18bd86..6a74935 100644 --- a/docs/functions_func_u.html +++ b/docs/functions_func_u.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Class Members - Functions @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,81 @@ - + - - - - + + + +
@@ -89,7 +148,7 @@ $(document).ready(function(){initNavTree('functions_func_u.html','');});
  -

- u -

    +

    - u -

    • u8string_view() : fmt::v5::u8string_view
    • @@ -107,7 +166,7 @@ $(document).ready(function(){initNavTree('functions_func_u.html','');});
        + doxygen 1.8.11
diff --git a/docs/functions_func_v.html b/docs/functions_func_v.html index f803bcf..08d6ddb 100644 --- a/docs/functions_func_v.html +++ b/docs/functions_func_v.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Class Members - Functions @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,81 @@
- + - - - - + + + +
@@ -89,7 +148,7 @@ $(document).ready(function(){initNavTree('functions_func_v.html','');});
  -

- v -

    +

    - v -

    • v_formatter() : spdlog::details::v_formatter
    • @@ -107,7 +166,7 @@ $(document).ready(function(){initNavTree('functions_func_v.html','');});
        + doxygen 1.8.11
diff --git a/docs/functions_func_w.html b/docs/functions_func_w.html index b8d3b53..5a64407 100644 --- a/docs/functions_func_w.html +++ b/docs/functions_func_w.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Class Members - Functions @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,81 @@
- + - - - - + + + +
@@ -89,18 +148,18 @@ $(document).ready(function(){initNavTree('functions_func_w.html','');});
  -

- w -

diff --git a/docs/functions_func_x.html b/docs/functions_func_x.html index b877e07..6bb9bc0 100644 --- a/docs/functions_func_x.html +++ b/docs/functions_func_x.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Class Members - Functions @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,81 @@
- + - - - - + + + +
@@ -89,7 +148,7 @@ $(document).ready(function(){initNavTree('functions_func_x.html','');});
  -

- x -

diff --git a/docs/functions_func_y.html b/docs/functions_func_y.html index 2da3f8f..3398e7f 100644 --- a/docs/functions_func_y.html +++ b/docs/functions_func_y.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Class Members - Functions @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,81 @@
- + - - - - + + + +
@@ -89,7 +148,7 @@ $(document).ready(function(){initNavTree('functions_func_y.html','');});
  -

- y -

    +

    - y -

    • Y_formatter() : spdlog::details::Y_formatter
    • @@ -101,7 +160,7 @@ $(document).ready(function(){initNavTree('functions_func_y.html','');});
        + doxygen 1.8.11
diff --git a/docs/functions_func_z.html b/docs/functions_func_z.html index b5c963e..bb03a7c 100644 --- a/docs/functions_func_z.html +++ b/docs/functions_func_z.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Class Members - Functions @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,81 @@
- + - - - - + + + +
@@ -89,7 +148,7 @@ $(document).ready(function(){initNavTree('functions_func_z.html','');});
  -

- z -

    +

    - z -

    • z_formatter() : spdlog::details::z_formatter
    • @@ -101,7 +160,7 @@ $(document).ready(function(){initNavTree('functions_func_z.html','');});
        + doxygen 1.8.11
diff --git a/docs/functions_g.html b/docs/functions_g.html index 29aff4b..4a6dffd 100644 --- a/docs/functions_g.html +++ b/docs/functions_g.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Class Members @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,84 @@
- + - - - - + + + +
@@ -89,35 +151,35 @@ $(document).ready(function(){initNavTree('functions_g.html','');}); diff --git a/docs/functions_h.html b/docs/functions_h.html index bbd1ded..161391c 100644 --- a/docs/functions_h.html +++ b/docs/functions_h.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Class Members @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,84 @@
- + - - - - + + + +
@@ -89,7 +151,7 @@ $(document).ready(function(){initNavTree('functions_h.html','');});
Here is a list of all class members with links to the classes they belong to:
-

- h -

diff --git a/docs/functions_i.html b/docs/functions_i.html index 9e93d37..7cccc93 100644 --- a/docs/functions_i.html +++ b/docs/functions_i.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Class Members @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,84 @@
- + - - - - + + + +
@@ -89,7 +151,7 @@ $(document).ready(function(){initNavTree('functions_i.html','');});
Here is a list of all class members with links to the classes they belong to:
-

- i -

diff --git a/docs/functions_k.html b/docs/functions_k.html index 022bcd5..9384298 100644 --- a/docs/functions_k.html +++ b/docs/functions_k.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Class Members @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,84 @@
- + - - - - + + + +
@@ -89,7 +151,7 @@ $(document).ready(function(){initNavTree('functions_k.html','');});
Here is a list of all class members with links to the classes they belong to:
-

- k -

diff --git a/docs/functions_l.html b/docs/functions_l.html index 69b1cfc..db0d503 100644 --- a/docs/functions_l.html +++ b/docs/functions_l.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Class Members @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,84 @@
- + - - - - + + + +
@@ -89,7 +151,7 @@ $(document).ready(function(){initNavTree('functions_l.html','');});
Here is a list of all class members with links to the classes they belong to:
-

- l -

diff --git a/docs/functions_m.html b/docs/functions_m.html index 50347f9..af2e31c 100644 --- a/docs/functions_m.html +++ b/docs/functions_m.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Class Members @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,84 @@
- + - - - - + + + +
@@ -89,7 +151,7 @@ $(document).ready(function(){initNavTree('functions_m.html','');});
Here is a list of all class members with links to the classes they belong to:
-

- m -

diff --git a/docs/functions_n.html b/docs/functions_n.html index efe386c..9f87efb 100644 --- a/docs/functions_n.html +++ b/docs/functions_n.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Class Members @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,84 @@
- + - - - - + + + +
@@ -89,7 +151,7 @@ $(document).ready(function(){initNavTree('functions_n.html','');});
Here is a list of all class members with links to the classes they belong to:
-

- n -

diff --git a/docs/functions_o.html b/docs/functions_o.html index c2f050f..2cc397f 100644 --- a/docs/functions_o.html +++ b/docs/functions_o.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Class Members @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,84 @@
- + - - - - + + + +
@@ -89,7 +151,7 @@ $(document).ready(function(){initNavTree('functions_o.html','');});
Here is a list of all class members with links to the classes they belong to:
-

- o -

diff --git a/docs/functions_p.html b/docs/functions_p.html index 4e5b974..64c04d5 100644 --- a/docs/functions_p.html +++ b/docs/functions_p.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Class Members @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,84 @@
- + - - - - + + + +
@@ -89,7 +151,7 @@ $(document).ready(function(){initNavTree('functions_p.html','');});
Here is a list of all class members with links to the classes they belong to:
-

- p -

diff --git a/docs/functions_q.html b/docs/functions_q.html index c511405..a9346c7 100644 --- a/docs/functions_q.html +++ b/docs/functions_q.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Class Members @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,84 @@
- + - - - - + + + +
@@ -89,7 +151,7 @@ $(document).ready(function(){initNavTree('functions_q.html','');});
Here is a list of all class members with links to the classes they belong to:
-

- q -

    +

    - q -

    • q_type : spdlog::details::thread_pool
    • @@ -101,7 +163,7 @@ $(document).ready(function(){initNavTree('functions_q.html','');});
        + doxygen 1.8.11
diff --git a/docs/functions_r.html b/docs/functions_r.html index 342a8e5..df8b444 100644 --- a/docs/functions_r.html +++ b/docs/functions_r.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Class Members @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,84 @@
- + - - - - + + + +
@@ -89,7 +151,7 @@ $(document).ready(function(){initNavTree('functions_r.html','');});
Here is a list of all class members with links to the classes they belong to:
-

- r -

diff --git a/docs/functions_rela.html b/docs/functions_rela.html index 444f2f4..11dc0de 100644 --- a/docs/functions_rela.html +++ b/docs/functions_rela.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Class Members - Related Functions @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
Livox SDK API -  V2.0.0 +  V2.1.0
@@ -39,22 +41,53 @@
- + - - - - + + +
@@ -142,7 +173,7 @@ $(document).ready(function(){initNavTree('functions_rela.html','');}); : fmt::v5::text_style
  • pointer_from -: fmt::v5::internal::null_terminating_iterator< Char > +: fmt::v5::internal::null_terminating_iterator< Char >
  • visit_format_arg : fmt::v5::basic_format_arg< Context > @@ -155,7 +186,7 @@ $(document).ready(function(){initNavTree('functions_rela.html','');});
      + doxygen 1.8.11
  • diff --git a/docs/functions_s.html b/docs/functions_s.html index f4ffde0..5647d3d 100644 --- a/docs/functions_s.html +++ b/docs/functions_s.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Class Members @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
    Livox SDK API -  V2.0.0 +  V2.1.0
    @@ -39,22 +41,84 @@ - + - - - - + + + +
    @@ -89,7 +151,7 @@ $(document).ready(function(){initNavTree('functions_s.html','');});
    Here is a list of all class members with links to the classes they belong to:
    -

    - s -

    diff --git a/docs/functions_t.html b/docs/functions_t.html index 6067f06..9d79f34 100644 --- a/docs/functions_t.html +++ b/docs/functions_t.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Class Members @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
    Livox SDK API -  V2.0.0 +  V2.1.0
    @@ -39,22 +41,84 @@
    - + - - - - + + + +
    @@ -89,7 +151,7 @@ $(document).ready(function(){initNavTree('functions_t.html','');});
    Here is a list of all class members with links to the classes they belong to:
    -

    - t -

    diff --git a/docs/functions_type.html b/docs/functions_type.html index ef35223..90a2c69 100644 --- a/docs/functions_type.html +++ b/docs/functions_type.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Class Members - Typedefs @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
    Livox SDK API -  V2.0.0 +  V2.1.0
    @@ -39,22 +41,69 @@
    - + - - - - + + + +
    @@ -89,7 +136,7 @@ $(document).ready(function(){initNavTree('functions_type.html','');});
      -

    - _ -

    diff --git a/docs/functions_u.html b/docs/functions_u.html index 7201320..bc45cd4 100644 --- a/docs/functions_u.html +++ b/docs/functions_u.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Class Members @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
    Livox SDK API -  V2.0.0 +  V2.1.0
    @@ -39,22 +41,84 @@
    - + - - - - + + + +
    @@ -89,7 +151,7 @@ $(document).ready(function(){initNavTree('functions_u.html','');});
    Here is a list of all class members with links to the classes they belong to:
    -

    - u -

      +

      - u -

      • u8string_view() : fmt::v5::u8string_view
      • @@ -126,7 +188,7 @@ $(document).ready(function(){initNavTree('functions_u.html','');});
          + doxygen 1.8.11
    diff --git a/docs/functions_v.html b/docs/functions_v.html index d780693..d795964 100644 --- a/docs/functions_v.html +++ b/docs/functions_v.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Class Members @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
    Livox SDK API -  V2.0.0 +  V2.1.0
    @@ -39,22 +41,84 @@
    - + - - - - + + + +
    @@ -89,7 +151,7 @@ $(document).ready(function(){initNavTree('functions_v.html','');});
    Here is a list of all class members with links to the classes they belong to:
    -

    - v -

    diff --git a/docs/functions_vars.html b/docs/functions_vars.html index 36ce8a5..c192f58 100644 --- a/docs/functions_vars.html +++ b/docs/functions_vars.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Class Members - Variables @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
    Livox SDK API -  V2.0.0 +  V2.1.0
    @@ -39,22 +41,81 @@
    - + - - - - + + + +
    @@ -89,7 +148,7 @@ $(document).ready(function(){initNavTree('functions_vars.html','');});
      -

    - a -

    diff --git a/docs/functions_vars_b.html b/docs/functions_vars_b.html index a0c08d2..6239b62 100644 --- a/docs/functions_vars_b.html +++ b/docs/functions_vars_b.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Class Members - Variables @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
    Livox SDK API -  V2.0.0 +  V2.1.0
    @@ -39,22 +41,81 @@
    - + - - - - + + + +
    @@ -89,7 +148,7 @@ $(document).ready(function(){initNavTree('functions_vars_b.html','');});
      -

    - b -

      +

      - b -

      • b : fmt::v5::rgb
      • @@ -147,7 +206,7 @@ $(document).ready(function(){initNavTree('functions_vars_b.html','');});
          + doxygen 1.8.11
    diff --git a/docs/functions_vars_c.html b/docs/functions_vars_c.html index da418d6..6f91fc8 100644 --- a/docs/functions_vars_c.html +++ b/docs/functions_vars_c.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Class Members - Variables @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
    Livox SDK API -  V2.0.0 +  V2.1.0
    @@ -39,22 +41,81 @@
    - + - - - - + + + +
    @@ -89,7 +148,7 @@ $(document).ready(function(){initNavTree('functions_vars_c.html','');});
      -

    - c -

    diff --git a/docs/functions_vars_d.html b/docs/functions_vars_d.html index cd96685..e44658a 100644 --- a/docs/functions_vars_d.html +++ b/docs/functions_vars_d.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Class Members - Variables @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
    Livox SDK API -  V2.0.0 +  V2.1.0
    @@ -39,22 +41,81 @@
    - + - - - - + + + +
    @@ -89,13 +148,13 @@ $(document).ready(function(){initNavTree('functions_vars_d.html','');});
      -

    - d -

    diff --git a/docs/functions_vars_e.html b/docs/functions_vars_e.html index 25be778..c9c2a5c 100644 --- a/docs/functions_vars_e.html +++ b/docs/functions_vars_e.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Class Members - Variables @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
    Livox SDK API -  V2.0.0 +  V2.1.0
    @@ -39,22 +41,81 @@
    - + - - - - + + + +
    @@ -89,7 +148,7 @@ $(document).ready(function(){initNavTree('functions_vars_e.html','');});
      -

    - e -

      +

      - e -

      • e : fmt::v5::internal::fp
      • @@ -120,7 +179,7 @@ $(document).ready(function(){initNavTree('functions_vars_e.html','');});
          + doxygen 1.8.11
    diff --git a/docs/functions_vars_f.html b/docs/functions_vars_f.html index a4c041b..5217a63 100644 --- a/docs/functions_vars_f.html +++ b/docs/functions_vars_f.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Class Members - Variables @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
    Livox SDK API -  V2.0.0 +  V2.1.0
    @@ -39,22 +41,81 @@
    - + - - - - + + + +
    @@ -89,7 +148,7 @@ $(document).ready(function(){initNavTree('functions_vars_f.html','');});
      -

    - f -

    diff --git a/docs/functions_vars_g.html b/docs/functions_vars_g.html index 85c9f93..36b4799 100644 --- a/docs/functions_vars_g.html +++ b/docs/functions_vars_g.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Class Members - Variables @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
    Livox SDK API -  V2.0.0 +  V2.1.0
    @@ -39,22 +41,81 @@
    - + - - - - + + + +
    @@ -89,7 +148,7 @@ $(document).ready(function(){initNavTree('functions_vars_g.html','');});
      -

    - g -

      +

      - g -

      • g : fmt::v5::rgb
      • @@ -120,7 +179,7 @@ $(document).ready(function(){initNavTree('functions_vars_g.html','');});
          + doxygen 1.8.11
    diff --git a/docs/functions_vars_h.html b/docs/functions_vars_h.html index 41530f8..d60ae8e 100644 --- a/docs/functions_vars_h.html +++ b/docs/functions_vars_h.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Class Members - Variables @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
    Livox SDK API -  V2.0.0 +  V2.1.0
    @@ -39,22 +41,81 @@
    - + - - - - + + + +
    @@ -89,7 +148,7 @@ $(document).ready(function(){initNavTree('functions_vars_h.html','');});
      -

    - h -

      +

      - h -

      • handle : DeviceInfo
      • @@ -112,7 +171,7 @@ $(document).ready(function(){initNavTree('functions_vars_h.html','');});
          + doxygen 1.8.11
    diff --git a/docs/functions_vars_i.html b/docs/functions_vars_i.html index 9d87bfa..0733a58 100644 --- a/docs/functions_vars_i.html +++ b/docs/functions_vars_i.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Class Members - Variables @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
    Livox SDK API -  V2.0.0 +  V2.1.0
    @@ -39,22 +41,81 @@
    - + - - - - + + + +
    @@ -89,7 +148,7 @@ $(document).ready(function(){initNavTree('functions_vars_i.html','');});
      -

    - i -

    diff --git a/docs/functions_vars_k.html b/docs/functions_vars_k.html index b2a3b95..aab40c8 100644 --- a/docs/functions_vars_k.html +++ b/docs/functions_vars_k.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Class Members - Variables @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
    Livox SDK API -  V2.0.0 +  V2.1.0
    @@ -39,22 +41,81 @@
    - + - - - - + + + +
    @@ -89,7 +148,7 @@ $(document).ready(function(){initNavTree('functions_vars_k.html','');});
      -

    - k -

    diff --git a/docs/functions_vars_l.html b/docs/functions_vars_l.html index d246639..9b294dd 100644 --- a/docs/functions_vars_l.html +++ b/docs/functions_vars_l.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Class Members - Variables @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
    Livox SDK API -  V2.0.0 +  V2.1.0
    @@ -39,22 +41,81 @@
    - + - - - - + + + +
    @@ -89,7 +148,7 @@ $(document).ready(function(){initNavTree('functions_vars_l.html','');});
      -

    - l -

      +

      - l -

      • last_err_time_ : spdlog::logger
      • @@ -145,7 +204,7 @@ $(document).ready(function(){initNavTree('functions_vars_l.html','');});
          + doxygen 1.8.11
    diff --git a/docs/functions_vars_m.html b/docs/functions_vars_m.html index a108631..cbf8e02 100644 --- a/docs/functions_vars_m.html +++ b/docs/functions_vars_m.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Class Members - Variables @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
    Livox SDK API -  V2.0.0 +  V2.1.0
    @@ -39,22 +41,81 @@
    - + - - - - + + + +
    @@ -89,7 +148,7 @@ $(document).ready(function(){initNavTree('functions_vars_m.html','');});
      -

    - m -

    diff --git a/docs/functions_vars_n.html b/docs/functions_vars_n.html index 665f6e8..e44c13e 100644 --- a/docs/functions_vars_n.html +++ b/docs/functions_vars_n.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Class Members - Variables @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
    Livox SDK API -  V2.0.0 +  V2.1.0
    @@ -39,22 +41,81 @@
    - + - - - - + + + +
    @@ -89,7 +148,7 @@ $(document).ready(function(){initNavTree('functions_vars_n.html','');});
      -

    - n -

      +

      - n -

      • n : fmt::v5::internal::fill
      • @@ -118,7 +177,7 @@ $(document).ready(function(){initNavTree('functions_vars_n.html','');});
          + doxygen 1.8.11
    diff --git a/docs/functions_vars_o.html b/docs/functions_vars_o.html index 89793a9..a288a6e 100644 --- a/docs/functions_vars_o.html +++ b/docs/functions_vars_o.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Class Members - Variables @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
    Livox SDK API -  V2.0.0 +  V2.1.0
    @@ -39,22 +41,81 @@
    - + - - - - + + + +
    @@ -89,7 +148,7 @@ $(document).ready(function(){initNavTree('functions_vars_o.html','');});
      -

    - o -

    diff --git a/docs/functions_vars_p.html b/docs/functions_vars_p.html index c3c081b..7e1e37a 100644 --- a/docs/functions_vars_p.html +++ b/docs/functions_vars_p.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Class Members - Variables @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
    Livox SDK API -  V2.0.0 +  V2.1.0
    @@ -39,22 +41,81 @@
    - + - - - - + + + +
    @@ -89,7 +148,7 @@ $(document).ready(function(){initNavTree('functions_vars_p.html','');});
      -

    - p -

    diff --git a/docs/functions_vars_r.html b/docs/functions_vars_r.html index 0c39afd..262e9da 100644 --- a/docs/functions_vars_r.html +++ b/docs/functions_vars_r.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Class Members - Variables @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
    Livox SDK API -  V2.0.0 +  V2.1.0
    @@ -39,22 +41,81 @@
    - + - - - - + + + +
    @@ -89,7 +148,7 @@ $(document).ready(function(){initNavTree('functions_vars_r.html','');});
      -

    - r -

    diff --git a/docs/functions_vars_s.html b/docs/functions_vars_s.html index 7a3fd65..5883ee5 100644 --- a/docs/functions_vars_s.html +++ b/docs/functions_vars_s.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Class Members - Variables @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
    Livox SDK API -  V2.0.0 +  V2.1.0
    @@ -39,22 +41,81 @@
    - + - - - - + + + +
    @@ -89,7 +148,7 @@ $(document).ready(function(){initNavTree('functions_vars_s.html','');});
      -

    - s -

    diff --git a/docs/functions_vars_t.html b/docs/functions_vars_t.html index 7e89e33..394b492 100644 --- a/docs/functions_vars_t.html +++ b/docs/functions_vars_t.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Class Members - Variables @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
    Livox SDK API -  V2.0.0 +  V2.1.0
    @@ -39,22 +41,81 @@
    - + - - - - + + + +
    @@ -89,7 +148,7 @@ $(document).ready(function(){initNavTree('functions_vars_t.html','');});
      -

    - t -

    diff --git a/docs/functions_vars_u.html b/docs/functions_vars_u.html index 970541f..e53e522 100644 --- a/docs/functions_vars_u.html +++ b/docs/functions_vars_u.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Class Members - Variables @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
    Livox SDK API -  V2.0.0 +  V2.1.0
    @@ -39,22 +41,81 @@
    - + - - - - + + + +
    @@ -89,7 +148,7 @@ $(document).ready(function(){initNavTree('functions_vars_u.html','');});
      -

    - u -

    diff --git a/docs/functions_vars_v.html b/docs/functions_vars_v.html index 6eb6f70..b494367 100644 --- a/docs/functions_vars_v.html +++ b/docs/functions_vars_v.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Class Members - Variables @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
    Livox SDK API -  V2.0.0 +  V2.1.0
    @@ -39,22 +41,81 @@
    - + - - - - + + + +
    @@ -89,7 +148,7 @@ $(document).ready(function(){initNavTree('functions_vars_v.html','');});
      -

    - v -

    diff --git a/docs/functions_vars_w.html b/docs/functions_vars_w.html index 4182e39..9f52363 100644 --- a/docs/functions_vars_w.html +++ b/docs/functions_vars_w.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Class Members - Variables @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
    Livox SDK API -  V2.0.0 +  V2.1.0
    @@ -39,22 +41,81 @@
    - + - - - - + + + +
    @@ -89,7 +148,7 @@ $(document).ready(function(){initNavTree('functions_vars_w.html','');});
      -

    - w -

    diff --git a/docs/functions_vars_x.html b/docs/functions_vars_x.html index 6a20226..f8ce8a5 100644 --- a/docs/functions_vars_x.html +++ b/docs/functions_vars_x.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Class Members - Variables @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
    Livox SDK API -  V2.0.0 +  V2.1.0
    @@ -39,22 +41,81 @@
    - + - - - - + + + +
    @@ -89,7 +148,7 @@ $(document).ready(function(){initNavTree('functions_vars_x.html','');});
      -

    - x -

    diff --git a/docs/functions_vars_y.html b/docs/functions_vars_y.html index 06e346f..0f8ee4e 100644 --- a/docs/functions_vars_y.html +++ b/docs/functions_vars_y.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Class Members - Variables @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
    Livox SDK API -  V2.0.0 +  V2.1.0
    @@ -39,22 +41,81 @@
    - + - - - - + + + +
    @@ -89,7 +148,7 @@ $(document).ready(function(){initNavTree('functions_vars_y.html','');});
      -

    - y -

    diff --git a/docs/functions_vars_z.html b/docs/functions_vars_z.html index ff7983d..251ff4f 100644 --- a/docs/functions_vars_z.html +++ b/docs/functions_vars_z.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Class Members - Variables @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
    Livox SDK API -  V2.0.0 +  V2.1.0
    @@ -39,22 +41,81 @@
    - + - - - - + + + +
    @@ -89,7 +148,7 @@ $(document).ready(function(){initNavTree('functions_vars_z.html','');});
      -

    - z -

    diff --git a/docs/functions_w.html b/docs/functions_w.html index 0bf4f67..57d4d5f 100644 --- a/docs/functions_w.html +++ b/docs/functions_w.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Class Members @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
    Livox SDK API -  V2.0.0 +  V2.1.0
    @@ -39,22 +41,84 @@
    - + - - - - + + + +
    @@ -89,15 +151,15 @@ $(document).ready(function(){initNavTree('functions_w.html','');});
    Here is a list of all class members with links to the classes they belong to:
    -

    - w -

    diff --git a/docs/functions_x.html b/docs/functions_x.html index 8124ed6..8c8a63d 100644 --- a/docs/functions_x.html +++ b/docs/functions_x.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Class Members @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
    Livox SDK API -  V2.0.0 +  V2.1.0
    @@ -39,22 +41,84 @@
    - + - - - - + + + +
    @@ -89,7 +151,7 @@ $(document).ready(function(){initNavTree('functions_x.html','');});
    Here is a list of all class members with links to the classes they belong to:
    -

    - x -

    diff --git a/docs/functions_y.html b/docs/functions_y.html index a5cc168..344571b 100644 --- a/docs/functions_y.html +++ b/docs/functions_y.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Class Members @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
    Livox SDK API -  V2.0.0 +  V2.1.0
    @@ -39,22 +41,84 @@
    - + - - - - + + + +
    @@ -89,7 +151,7 @@ $(document).ready(function(){initNavTree('functions_y.html','');});
    Here is a list of all class members with links to the classes they belong to:
    -

    - y -

    diff --git a/docs/functions_z.html b/docs/functions_z.html index 3c1d5ad..8241788 100644 --- a/docs/functions_z.html +++ b/docs/functions_z.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Class Members @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
    Livox SDK API -  V2.0.0 +  V2.1.0
    @@ -39,22 +41,84 @@
    - + - - - - + + + +
    @@ -89,7 +151,7 @@ $(document).ready(function(){initNavTree('functions_z.html','');});
    Here is a list of all class members with links to the classes they belong to:
    -

    - z -

    diff --git a/docs/globals.html b/docs/globals.html index 52bc95c..8f9b4c0 100644 --- a/docs/globals.html +++ b/docs/globals.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: File Members @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
    Livox SDK API -  V2.0.0 +  V2.1.0
    @@ -39,22 +41,71 @@
    - + - - - - + + + +
    @@ -89,7 +138,7 @@ $(document).ready(function(){initNavTree('globals.html','');});
    Here is a list of all file members with links to the files they belong to:
    -

    - _ -

      +

      - _ -

      • __has_feature : os.h
      • @@ -101,7 +150,7 @@ $(document).ready(function(){initNavTree('globals.html','');});
          + doxygen 1.8.11
    diff --git a/docs/globals_a.html b/docs/globals_a.html index c576c0e..00449d9 100644 --- a/docs/globals_a.html +++ b/docs/globals_a.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: File Members @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
    Livox SDK API -  V2.0.0 +  V2.1.0
    @@ -39,22 +41,71 @@
    - + - - - - + + + +
    @@ -89,7 +138,7 @@ $(document).ready(function(){initNavTree('globals_a.html','');});
    Here is a list of all file members with links to the files they belong to:
    -

    - a -

      +

      - a -

      • AddHubToConnect() : livox_sdk.h
      • @@ -104,7 +153,7 @@ $(document).ready(function(){initNavTree('globals_a.html','');});
          + doxygen 1.8.11
    diff --git a/docs/globals_c.html b/docs/globals_c.html index 7bcd068..3c65144 100644 --- a/docs/globals_c.html +++ b/docs/globals_c.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: File Members @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
    Livox SDK API -  V2.0.0 +  V2.1.0
    @@ -39,22 +41,71 @@
    - + - - - - + + + +
    @@ -89,7 +138,7 @@ $(document).ready(function(){initNavTree('globals_c.html','');});
    Here is a list of all file members with links to the files they belong to:
    -

    - c -

      +

      - c -

      • CommonCommandCallback : livox_sdk.h
      • @@ -101,7 +150,7 @@ $(document).ready(function(){initNavTree('globals_c.html','');});
          + doxygen 1.8.11
    diff --git a/docs/globals_d.html b/docs/globals_d.html index 8945299..26f3de5 100644 --- a/docs/globals_d.html +++ b/docs/globals_d.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: File Members @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
    Livox SDK API -  V2.0.0 +  V2.1.0
    @@ -39,22 +41,71 @@
    - + - - - - + + + +
    @@ -89,7 +138,7 @@ $(document).ready(function(){initNavTree('globals_d.html','');});
    Here is a list of all file members with links to the files they belong to:
    -

    - d -

      +

      - d -

      • DataCallback : livox_sdk.h
      • @@ -108,6 +157,9 @@ $(document).ready(function(){initNavTree('globals_d.html','');});
      • DeviceType : livox_def.h
      • +
      • DisableConsoleLogger() +: livox_sdk.h +
      • DisconnectDevice() : livox_sdk.h
      • @@ -119,7 +171,7 @@ $(document).ready(function(){initNavTree('globals_d.html','');});
          + doxygen 1.8.11
    diff --git a/docs/globals_defs.html b/docs/globals_defs.html index 4aa44cd..4192c4a 100644 --- a/docs/globals_defs.html +++ b/docs/globals_defs.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: File Members @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
    Livox SDK API -  V2.0.0 +  V2.1.0
    @@ -39,22 +41,59 @@
    - + - - - - + + + +
    @@ -89,14 +126,14 @@ $(document).ready(function(){initNavTree('globals_defs.html','');});
      -

    - _ -

      +

      - _ -

      • __has_feature : os.h
      -

      - f -

        +

        - f -

        • FMT_ALWAYS_INLINE : format.h
        • @@ -285,7 +322,7 @@ $(document).ready(function(){initNavTree('globals_defs.html','');});
        -

        - k -

          +

          - k -

          • kBroadcastCodeSize : livox_def.h
          • @@ -295,7 +332,7 @@ $(document).ready(function(){initNavTree('globals_defs.html','');});
          -

          - l -

            +

            - l -

            • LIVOX_SDK_MAJOR_VERSION : livox_def.h
            • @@ -308,7 +345,7 @@ $(document).ready(function(){initNavTree('globals_defs.html','');});
            -

            - s -

              +

              - s -

              • SPDLOG_ACTIVE_LEVEL : common.h
              • @@ -428,7 +465,7 @@ $(document).ready(function(){initNavTree('globals_defs.html','');});
                  + doxygen 1.8.11
    diff --git a/docs/globals_e.html b/docs/globals_e.html index 9665706..6387046 100644 --- a/docs/globals_e.html +++ b/docs/globals_e.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: File Members @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
    Livox SDK API -  V2.0.0 +  V2.1.0
    @@ -39,22 +41,71 @@
    - + - - - - + + + +
    @@ -89,7 +138,7 @@ $(document).ready(function(){initNavTree('globals_e.html','');});
    Here is a list of all file members with links to the files they belong to:
    -

    - e -

      +

      - e -

      • ErrorMessageCallback : livox_sdk.h
      • @@ -101,7 +150,7 @@ $(document).ready(function(){initNavTree('globals_e.html','');});
          + doxygen 1.8.11
    diff --git a/docs/globals_enum.html b/docs/globals_enum.html index 81433e5..e090801 100644 --- a/docs/globals_enum.html +++ b/docs/globals_enum.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: File Members @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
    Livox SDK API -  V2.0.0 +  V2.1.0
    @@ -39,22 +41,50 @@
    - + - - - - + + +
    @@ -129,7 +157,7 @@ $(document).ready(function(){initNavTree('globals_enum.html','');});
      + doxygen 1.8.11
    diff --git a/docs/globals_eval.html b/docs/globals_eval.html index a37c61e..6e9ca14 100644 --- a/docs/globals_eval.html +++ b/docs/globals_eval.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: File Members @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
    Livox SDK API -  V2.0.0 +  V2.1.0
    @@ -39,22 +41,55 @@ - + - - - - + + + +
    @@ -89,7 +122,7 @@ $(document).ready(function(){initNavTree('globals_eval.html','');});
      -

    - k -

      +

      - k -

      • kCartesian : livox_def.h
      • @@ -248,7 +281,7 @@ $(document).ready(function(){initNavTree('globals_eval.html','');});
          + doxygen 1.8.11
    diff --git a/docs/globals_f.html b/docs/globals_f.html index aba1c9a..3c8139f 100644 --- a/docs/globals_f.html +++ b/docs/globals_f.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: File Members @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
    Livox SDK API -  V2.0.0 +  V2.1.0
    @@ -39,22 +41,71 @@
    - + - - - - + + + +
    @@ -89,7 +138,7 @@ $(document).ready(function(){initNavTree('globals_f.html','');});
    Here is a list of all file members with links to the files they belong to:
    -

    - f -

      +

      - f -

      • FMT_ALWAYS_INLINE : format.h
      • @@ -283,7 +332,7 @@ $(document).ready(function(){initNavTree('globals_f.html','');});
          + doxygen 1.8.11
    diff --git a/docs/globals_func.html b/docs/globals_func.html index 6673f2b..08f930f 100644 --- a/docs/globals_func.html +++ b/docs/globals_func.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: File Members @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
    Livox SDK API -  V2.0.0 +  V2.1.0
    @@ -39,22 +41,64 @@
    - + - - - - + + + +
    @@ -89,7 +131,7 @@ $(document).ready(function(){initNavTree('globals_func.html','');});
      -

    - a -

      +

      - a -

      • AddHubToConnect() : livox_sdk.h
      • @@ -99,14 +141,17 @@ $(document).ready(function(){initNavTree('globals_func.html','');});
      -

      - d -

        +

        - d -

        -

        - g -

          +

          - g -

          • GetConnectedDevices() : livox_sdk.h
          • @@ -119,7 +164,7 @@ $(document).ready(function(){initNavTree('globals_func.html','');});
          -

          - h -

            +

            - h -

            • HubControlSlotPower() : livox_sdk.h
            • @@ -177,14 +222,14 @@ $(document).ready(function(){initNavTree('globals_func.html','');});
            -

            - i -

              +

              - i -

              -

              - l -

                +

                - l -

                • LidarGetExtrinsicParameter() : livox_sdk.h
                • @@ -233,21 +278,21 @@ $(document).ready(function(){initNavTree('globals_func.html','');});
                -

                - q -

                  +

                  - q -

                  -

                  - r -

                    +

                    - r -

                    -

                    - s -

                      +

                      - s -

                      • SaveLoggerFile() : livox_sdk.h
                      • @@ -290,7 +335,7 @@ $(document).ready(function(){initNavTree('globals_func.html','');});
                      -

                      - u -

                        +

                        - u -

                        • Uninit() : livox_sdk.h
                        • @@ -302,7 +347,7 @@ $(document).ready(function(){initNavTree('globals_func.html','');});
                            + doxygen 1.8.11
    diff --git a/docs/globals_g.html b/docs/globals_g.html index 980315a..e52f32a 100644 --- a/docs/globals_g.html +++ b/docs/globals_g.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: File Members @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
    Livox SDK API -  V2.0.0 +  V2.1.0
    @@ -39,22 +41,71 @@
    - + - - - - + + + +
    @@ -89,7 +138,7 @@ $(document).ready(function(){initNavTree('globals_g.html','');});
    Here is a list of all file members with links to the files they belong to:
    -

    - g -

      +

      - g -

      • GetConnectedDevices() : livox_sdk.h
      • @@ -110,7 +159,7 @@ $(document).ready(function(){initNavTree('globals_g.html','');});
          + doxygen 1.8.11
    diff --git a/docs/globals_h.html b/docs/globals_h.html index d445d25..7f922bb 100644 --- a/docs/globals_h.html +++ b/docs/globals_h.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: File Members @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
    Livox SDK API -  V2.0.0 +  V2.1.0
    @@ -39,22 +41,71 @@
    - + - - - - + + + +
    @@ -89,7 +138,7 @@ $(document).ready(function(){initNavTree('globals_h.html','');});
    Here is a list of all file members with links to the files they belong to:
    -

    - h -

      +

      - h -

      • HubControlSlotPower() : livox_sdk.h
      • @@ -191,7 +240,7 @@ $(document).ready(function(){initNavTree('globals_h.html','');});
          + doxygen 1.8.11
    diff --git a/docs/globals_i.html b/docs/globals_i.html index 56ca2bb..e3e63aa 100644 --- a/docs/globals_i.html +++ b/docs/globals_i.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: File Members @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
    Livox SDK API -  V2.0.0 +  V2.1.0
    @@ -39,22 +41,71 @@
    - + - - - - + + + +
    @@ -89,7 +138,7 @@ $(document).ready(function(){initNavTree('globals_i.html','');});
    Here is a list of all file members with links to the files they belong to:
    -

    - i -

      +

      - i -

      • ImuFreq : livox_def.h
      • @@ -104,7 +153,7 @@ $(document).ready(function(){initNavTree('globals_i.html','');});
          + doxygen 1.8.11
    diff --git a/docs/globals_k.html b/docs/globals_k.html index 8b056be..895f676 100644 --- a/docs/globals_k.html +++ b/docs/globals_k.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: File Members @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
    Livox SDK API -  V2.0.0 +  V2.1.0
    @@ -39,22 +41,71 @@
    - + - - - - + + + +
    @@ -89,7 +138,7 @@ $(document).ready(function(){initNavTree('globals_k.html','');});
    Here is a list of all file members with links to the files they belong to:
    -

    - k -

      +

      - k -

      • kBroadcastCodeSize : livox_def.h
      • @@ -254,7 +303,7 @@ $(document).ready(function(){initNavTree('globals_k.html','');});
          + doxygen 1.8.11
    diff --git a/docs/globals_l.html b/docs/globals_l.html index ba99802..da86bb4 100644 --- a/docs/globals_l.html +++ b/docs/globals_l.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: File Members @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
    Livox SDK API -  V2.0.0 +  V2.1.0
    @@ -39,22 +41,71 @@
    - + - - - - + + + +
    @@ -89,7 +138,7 @@ $(document).ready(function(){initNavTree('globals_l.html','');});
    Here is a list of all file members with links to the files they belong to:
    -

    - l -

      +

      - l -

      • LidarFeature : livox_def.h
      • @@ -182,7 +231,7 @@ $(document).ready(function(){initNavTree('globals_l.html','');});
          + doxygen 1.8.11
    diff --git a/docs/globals_p.html b/docs/globals_p.html index e5af1e3..168c757 100644 --- a/docs/globals_p.html +++ b/docs/globals_p.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: File Members @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
    Livox SDK API -  V2.0.0 +  V2.1.0
    @@ -39,22 +41,71 @@
    - + - - - - + + + +
    @@ -89,7 +138,7 @@ $(document).ready(function(){initNavTree('globals_p.html','');});
    Here is a list of all file members with links to the files they belong to:
    -

    - p -

      +

      - p -

      • PointCloudReturnMode : livox_def.h
      • @@ -104,7 +153,7 @@ $(document).ready(function(){initNavTree('globals_p.html','');});
          + doxygen 1.8.11
    diff --git a/docs/globals_q.html b/docs/globals_q.html index 54250e0..1113d05 100644 --- a/docs/globals_q.html +++ b/docs/globals_q.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: File Members @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
    Livox SDK API -  V2.0.0 +  V2.1.0
    @@ -39,22 +41,71 @@
    - + - - - - + + + +
    @@ -89,7 +138,7 @@ $(document).ready(function(){initNavTree('globals_q.html','');});
    Here is a list of all file members with links to the files they belong to:
    -

    - q -

      +

      - q -

      • QueryDeviceInformation() : livox_sdk.h
      • @@ -101,7 +150,7 @@ $(document).ready(function(){initNavTree('globals_q.html','');});
          + doxygen 1.8.11
    diff --git a/docs/globals_r.html b/docs/globals_r.html index 860fcd6..222078e 100644 --- a/docs/globals_r.html +++ b/docs/globals_r.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: File Members @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
    Livox SDK API -  V2.0.0 +  V2.1.0
    @@ -39,22 +41,71 @@
    - + - - - - + + + +
    @@ -89,7 +138,7 @@ $(document).ready(function(){initNavTree('globals_r.html','');});
    Here is a list of all file members with links to the files they belong to:
    -

    - r -

      +

      - r -

      • RebootDevice() : livox_sdk.h
      • @@ -101,7 +150,7 @@ $(document).ready(function(){initNavTree('globals_r.html','');});
          + doxygen 1.8.11
    diff --git a/docs/globals_s.html b/docs/globals_s.html index 49267b5..4c13a9b 100644 --- a/docs/globals_s.html +++ b/docs/globals_s.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: File Members @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
    Livox SDK API -  V2.0.0 +  V2.1.0
    @@ -39,22 +41,71 @@
    - + - - - - + + + +
    @@ -89,7 +138,7 @@ $(document).ready(function(){initNavTree('globals_s.html','');});
    Here is a list of all file members with links to the files they belong to:
    -

    - s -

      +

      - s -

      • SaveLoggerFile() : livox_sdk.h
      • @@ -248,7 +297,7 @@ $(document).ready(function(){initNavTree('globals_s.html','');});
          + doxygen 1.8.11
    diff --git a/docs/globals_t.html b/docs/globals_t.html index bd56ec6..7743354 100644 --- a/docs/globals_t.html +++ b/docs/globals_t.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: File Members @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
    Livox SDK API -  V2.0.0 +  V2.1.0
    @@ -39,22 +41,71 @@
    - + - - - - + + + +
    @@ -89,7 +138,7 @@ $(document).ready(function(){initNavTree('globals_t.html','');});
    Here is a list of all file members with links to the files they belong to:
    -

    - t -

      +

      - t -

      • TimestampType : livox_def.h
      • @@ -101,7 +150,7 @@ $(document).ready(function(){initNavTree('globals_t.html','');});
          + doxygen 1.8.11
    diff --git a/docs/globals_type.html b/docs/globals_type.html index 26469f0..be15cf7 100644 --- a/docs/globals_type.html +++ b/docs/globals_type.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: File Members @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
    Livox SDK API -  V2.0.0 +  V2.1.0
    @@ -39,22 +41,50 @@
    - + - - - - + + +
    @@ -171,7 +199,7 @@ $(document).ready(function(){initNavTree('globals_type.html','');});
      + doxygen 1.8.11
    diff --git a/docs/globals_u.html b/docs/globals_u.html index 3771247..e6ec34f 100644 --- a/docs/globals_u.html +++ b/docs/globals_u.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: File Members @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
    Livox SDK API -  V2.0.0 +  V2.1.0
    @@ -39,22 +41,71 @@ - + - - - - + + + +
    @@ -89,7 +138,7 @@ $(document).ready(function(){initNavTree('globals_u.html','');});
    Here is a list of all file members with links to the files they belong to:
    -

    - u -

      +

      - u -

      • Uninit() : livox_sdk.h
      • @@ -101,7 +150,7 @@ $(document).ready(function(){initNavTree('globals_u.html','');});
          + doxygen 1.8.11
    diff --git a/docs/hierarchy.html b/docs/hierarchy.html index 3180081..6a8ffdd 100644 --- a/docs/hierarchy.html +++ b/docs/hierarchy.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: Class Hierarchy @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
    Livox SDK API -  V2.0.0 +  V2.1.0
    @@ -39,22 +41,42 @@
    - + - - - - + +
    @@ -371,137 +391,131 @@ $(document).ready(function(){initNavTree('hierarchy.html','');});  Cfmt::v5::internal::int_checker< true >  Cfmt::v5::internal::int_traits< T >  Cfmt::v5::internal::int_traits< Int > - Cfmt::v5::internal::integer_sequence< T, N > - Cfmt::v5::internal::integer_sequence< T, Ns... > - Cfmt::v5::internal::make_integer_sequence< T, 0, Ns... > - Cintegral_constant - Cfmt::v5::convert_to_int< T, Char, Enable > - Cfmt::v5::internal::format_type< Context, T > - Cfmt::v5::internal::is_string< S > - Cfmt::v5::internal::needs_conversion< InputIt, OutChar > - Cis_base_of - Cfmt::v5::is_compile_string< S > - Cis_constructible - Cfmt::v5::is_constructible< T > - Cfmt::v5::internal::is_integer< T > - Cfmt::v5::internal::is_like_std_string< T >Return true value if T has std::string interface, like std::string_view - Cfmt::v5::internal::is_output_iterator< It > - Cfmt::v5::is_range< T > - Cfmt::v5::internal::is_streamable< T, Char > - Cfmt::v5::is_tuple_like< T > - Cfmt::v5::internal::is_tuple_like_< T >Tuple_size and tuple_element check - Cfmt::v5::internal::it_category< T * > - Cfmt::v5::internal::it_category< T, typename void_< typename T::iterator_category >::type > - CLidarErrorCode - CLidarGetExtrinsicParameterResponse - CLidarGetFanStateResponse - CLidarGetImuPushFrequencyResponse - CLidarGetPointCloudReturnModeResponse - CLidarModeRequestItem - CLidarSetExtrinsicParameterRequest - CLidarSetUtcSyncTimeRequest - CLidarStateItem - CLivoxDualExtendRawPoint - CLivoxDualExtendSpherPoint - CLivoxEthPacket - CLivoxExtendRawPoint - CLivoxExtendSpherPoint - CLivoxImuPoint - CLivoxPoint - CLivoxRawPoint - CLivoxSdkVersion - CLivoxSpherPoint - Cfmt::v5::internal::locale_ref - Cspdlog::details::log_msg - Cspdlog::logger - Cspdlog::async_logger - Cfmt::v5::internal::make_integer_sequence< T, N, Ns > - Cmake_unsigned - Cfmt::v5::internal::make_unsigned_or_bool< T > - Cfmt::v5::internal::make_unsigned_or_bool< bool > - Cfmt::v5::monostate - Cspdlog::details::mpmc_blocking_queue< T > - Cspdlog::details::mpmc_blocking_queue< item_type > - Cfmt::v5::internal::named_arg_base< Char > - Cfmt::v5::internal::named_arg< T, Char > - Cfmt::v5::internal::no_thousands_sep - Cfmt::v5::internal::null< T > - Cspdlog::details::null_atomic_int - Cspdlog::details::null_mutex - Cfmt::v5::internal::null_terminating_iterator< Char > - Cfmt::v5::basic_writer< Range >::int_writer< Int, Spec >::num_writer - Cnumeric_limits - Cstd::numeric_limits< fmt::internal::dummy_int > - Cfmt::v5::output_range< OutputIt, T > - Cfmt::v5::output_range< std::back_insert_iterator< Container > > - Cfmt::v5::back_insert_range< Container > - Cspdlog::details::padding_info - Cspdlog::details::periodic_worker - Clivox::PortCache - Cfmt::v5::internal::precision_adapter< SpecHandler, Char > - Cfmt::v5::internal::prettify_handler - Cfmt::v5::printf_formatter< T > - Clivox::Protocol - CRainFogSuppressRequestItem - Cspdlog::details::registry - Cfmt::v5::internal::function< Result >::result< T > - Cfmt::v5::internal::result_of< typename > - Cfmt::v5::internal::result_of< F(Args...)> - CReturnCode - Cfmt::v5::rgb - Cruntime_error - Cfmt::v5::format_error - Cfmt::v5::system_error - Cspdlog::details::scoped_pad - CSetDeviceIPModeRequest - CSetImuPushFrequencyRequestItem - CSetPointCloudReturnModeRequestItem - CSetStaticDeviceIpModeRequest - Cspdlog::sinks::sink - Cspdlog::sinks::ansicolor_sink< TargetStream, ConsoleMutex > - Cspdlog::sinks::base_sink< Mutex > - Cspdlog::sinks::android_sink< Mutex > - Cspdlog::sinks::basic_file_sink< Mutex > - Cspdlog::sinks::daily_file_sink< Mutex, FileNameCalc > - Cspdlog::sinks::dist_sink< Mutex > - Cspdlog::sinks::null_sink< Mutex > - Cspdlog::sinks::ostream_sink< Mutex > - Cspdlog::sinks::rotating_file_sink< Mutex > - Cspdlog::sinks::syslog_sink< Mutex > - Cspdlog::sinks::stdout_sink< TargetStream, ConsoleMutex > - Cspdlog::sinks::wincolor_sink< OutHandle, ConsoleMutex > - Cspdlog::source_loc - Cfmt::v5::internal::specs_setter< Char > - Cfmt::v5::internal::specs_setter< Context::char_type > - Cfmt::v5::internal::specs_handler< Context > - Cfmt::v5::internal::specs_setter< ParseContext::char_type > - Cfmt::v5::internal::dynamic_specs_handler< ParseContext > - CStatusUnion - Cfmt::v5::internal::string_value< Char > - Cfmt::v5::internal::string_value< char_type > - Cfmt::v5::internal::string_value< signed char > - Cfmt::v5::internal::string_value< unsigned char > - Cspdlog::synchronous_factory - Cfmt::v5::text_style - Cspdlog::details::thread_pool - Ctrue_type - Cfmt::v5::internal::is_like_std_string< fmt::basic_string_view< Char > > - Cfmt::v5::internal::is_range_< T, typename std::conditional< false, conditional_helper< decltype(internal::declval< T >().begin()), decltype(internal::declval< T >().end())>, void >::type > - Cfmt::v5::is_contiguous< internal::basic_buffer< Char > > - Cfmt::v5::is_contiguous< std::basic_string< Char > > - Cfmt::v5::internal::truncating_iterator< OutputIt, Enable > - Cfmt::v5::internal::truncating_iterator_base< OutputIt > - Cfmt::v5::internal::truncating_iterator< OutputIt, std::false_type > - Cfmt::v5::internal::truncating_iterator< OutputIt, std::true_type > - Cfmt::v5::internal::value< Context > - Cfmt::v5::internal::value< basic_format_context< OutputIt, Char > > - Cfmt::v5::internal::value< basic_printf_context< OutputIt, Char, ArgFormatter > > - Cfmt::v5::internal::value< format_context > - Cfmt::v5::internal::value< wformat_context > - Cfmt::v5::internal::void_< Ts > - Cfmt::v5::internal::width_adapter< SpecHandler, Char > - CAllocator - Cfmt::v5::basic_memory_buffer< T, SIZE, Allocator > + Cintegral_constant + Cfmt::v5::convert_to_int< T, Char, Enable > + Cfmt::v5::internal::format_type< Context, T > + Cfmt::v5::internal::is_string< S > + Cfmt::v5::internal::needs_conversion< InputIt, OutChar > + Cis_base_of + Cfmt::v5::is_compile_string< S > + Cis_constructible + Cfmt::v5::is_constructible< T > + Cfmt::v5::internal::is_integer< T > + Cfmt::v5::internal::is_like_std_string< T >Return true value if T has std::string interface, like std::string_view + Cfmt::v5::internal::is_output_iterator< It > + Cfmt::v5::is_range< T > + Cfmt::v5::internal::is_streamable< T, Char > + Cfmt::v5::is_tuple_like< T > + Cfmt::v5::internal::it_category< T * > + Cfmt::v5::internal::it_category< T, typename void_< typename T::iterator_category >::type > + CLidarErrorCode + CLidarGetExtrinsicParameterResponse + CLidarGetFanStateResponse + CLidarGetImuPushFrequencyResponse + CLidarGetPointCloudReturnModeResponse + CLidarModeRequestItem + CLidarSetExtrinsicParameterRequest + CLidarSetUtcSyncTimeRequest + CLidarStateItem + CLivoxDualExtendRawPoint + CLivoxDualExtendSpherPoint + CLivoxEthPacket + CLivoxExtendRawPoint + CLivoxExtendSpherPoint + CLivoxImuPoint + CLivoxPoint + CLivoxRawPoint + CLivoxSdkVersion + CLivoxSpherPoint + Cfmt::v5::internal::locale_ref + Cspdlog::details::log_msg + Cspdlog::logger + Cspdlog::async_logger + Cmake_unsigned + Cfmt::v5::internal::make_unsigned_or_bool< T > + Cfmt::v5::internal::make_unsigned_or_bool< bool > + Cfmt::v5::monostate + Cspdlog::details::mpmc_blocking_queue< T > + Cspdlog::details::mpmc_blocking_queue< item_type > + Cfmt::v5::internal::named_arg_base< Char > + Cfmt::v5::internal::named_arg< T, Char > + Cfmt::v5::internal::no_thousands_sep + Cfmt::v5::internal::null< T > + Cspdlog::details::null_atomic_int + Cspdlog::details::null_mutex + Cfmt::v5::internal::null_terminating_iterator< Char > + Cfmt::v5::basic_writer< Range >::int_writer< Int, Spec >::num_writer + Cnumeric_limits + Cstd::numeric_limits< fmt::internal::dummy_int > + Cfmt::v5::output_range< OutputIt, T > + Cfmt::v5::output_range< std::back_insert_iterator< Container > > + Cfmt::v5::back_insert_range< Container > + Cspdlog::details::padding_info + Cspdlog::details::periodic_worker + Clivox::PortCache + Cfmt::v5::internal::precision_adapter< SpecHandler, Char > + Cfmt::v5::internal::prettify_handler + Cfmt::v5::printf_formatter< T > + Clivox::Protocol + CRainFogSuppressRequestItem + Cspdlog::details::registry + Cfmt::v5::internal::function< Result >::result< T > + Cfmt::v5::internal::result_of< typename > + Cfmt::v5::internal::result_of< F(Args...)> + CReturnCode + Cfmt::v5::rgb + Cruntime_error + Cfmt::v5::format_error + Cfmt::v5::system_error + Cspdlog::details::scoped_pad + CSetDeviceIPModeRequest + CSetImuPushFrequencyRequestItem + CSetPointCloudReturnModeRequestItem + CSetStaticDeviceIpModeRequest + Cspdlog::sinks::sink + Cspdlog::sinks::ansicolor_sink< TargetStream, ConsoleMutex > + Cspdlog::sinks::base_sink< Mutex > + Cspdlog::sinks::android_sink< Mutex > + Cspdlog::sinks::basic_file_sink< Mutex > + Cspdlog::sinks::daily_file_sink< Mutex, FileNameCalc > + Cspdlog::sinks::dist_sink< Mutex > + Cspdlog::sinks::null_sink< Mutex > + Cspdlog::sinks::ostream_sink< Mutex > + Cspdlog::sinks::rotating_file_sink< Mutex > + Cspdlog::sinks::syslog_sink< Mutex > + Cspdlog::sinks::stdout_sink< TargetStream, ConsoleMutex > + Cspdlog::sinks::wincolor_sink< OutHandle, ConsoleMutex > + Cspdlog::source_loc + Cfmt::v5::internal::specs_setter< Char > + Cfmt::v5::internal::specs_setter< Context::char_type > + Cfmt::v5::internal::specs_handler< Context > + Cfmt::v5::internal::specs_setter< ParseContext::char_type > + Cfmt::v5::internal::dynamic_specs_handler< ParseContext > + CStatusUnion + Cfmt::v5::internal::string_value< Char > + Cfmt::v5::internal::string_value< char_type > + Cfmt::v5::internal::string_value< signed char > + Cfmt::v5::internal::string_value< unsigned char > + Cspdlog::synchronous_factory + Cfmt::v5::text_style + Cspdlog::details::thread_pool + Ctrue_type + Cfmt::v5::internal::is_like_std_string< fmt::basic_string_view< Char > > + Cfmt::v5::is_contiguous< internal::basic_buffer< Char > > + Cfmt::v5::is_contiguous< std::basic_string< Char > > + Cfmt::v5::internal::truncating_iterator< OutputIt, Enable > + Cfmt::v5::internal::truncating_iterator_base< OutputIt > + Cfmt::v5::internal::truncating_iterator< OutputIt, std::false_type > + Cfmt::v5::internal::truncating_iterator< OutputIt, std::true_type > + Cfmt::v5::internal::value< Context > + Cfmt::v5::internal::value< basic_format_context< OutputIt, Char > > + Cfmt::v5::internal::value< basic_printf_context< OutputIt, Char, ArgFormatter > > + Cfmt::v5::internal::value< format_context > + Cfmt::v5::internal::value< wformat_context > + Cfmt::v5::internal::void_< Ts > + Cfmt::v5::internal::width_adapter< SpecHandler, Char > + CAllocator + Cfmt::v5::basic_memory_buffer< T, SIZE, Allocator >
    @@ -511,7 +525,7 @@ $(document).ready(function(){initNavTree('hierarchy.html','');});
      + doxygen 1.8.11
    diff --git a/docs/hierarchy.js b/docs/hierarchy.js index 50ebc4a..b83af6f 100644 --- a/docs/hierarchy.js +++ b/docs/hierarchy.js @@ -221,10 +221,10 @@ var hierarchy = [ "fmt::v5::internal::format_string_checker< Char, ErrorHandler, Args >", "classfmt_1_1v5_1_1internal_1_1format__string__checker.html", null ], [ "fmt::v5::format_to_n_args< OutputIt, Char >", "structfmt_1_1v5_1_1format__to__n__args.html", null ], [ "fmt::v5::format_to_n_result< OutputIt >", "structfmt_1_1v5_1_1format__to__n__result.html", null ], - [ "fmt::v5::formatter< T, Char, Enable >", "structfmt_1_1v5_1_1formatter.html", null ], [ "spdlog::formatter", "classspdlog_1_1formatter.html", [ [ "spdlog::pattern_formatter", "classspdlog_1_1pattern__formatter.html", null ] ] ], + [ "fmt::v5::formatter< T, Char, Enable >", "structfmt_1_1v5_1_1formatter.html", null ], [ "fmt::v5::formatter< basic_string_view< Char >, Char >", "structfmt_1_1v5_1_1formatter.html", [ [ "fmt::v5::formatter< T, Char, typename std::enable_if< internal::is_streamable< T, Char >::value &&!internal::format_type< typename buffer_context< Char >::type, T >::value >::type >", "structfmt_1_1v5_1_1formatter_3_01_t_00_01_char_00_01typename_01std_1_1enable__if_3_01internal_1_a6b64300f4f7ee1d24250c7c28e1fdc2.html", null ] ] ], @@ -316,10 +316,6 @@ var hierarchy = [ "fmt::v5::internal::int_checker< true >", "structfmt_1_1v5_1_1internal_1_1int__checker_3_01true_01_4.html", null ], [ "fmt::v5::internal::int_traits< T >", "structfmt_1_1v5_1_1internal_1_1int__traits.html", null ], [ "fmt::v5::internal::int_traits< Int >", "structfmt_1_1v5_1_1internal_1_1int__traits.html", null ], - [ "fmt::v5::internal::integer_sequence< T, N >", "structfmt_1_1v5_1_1internal_1_1integer__sequence.html", null ], - [ "fmt::v5::internal::integer_sequence< T, Ns... >", "structfmt_1_1v5_1_1internal_1_1integer__sequence.html", [ - [ "fmt::v5::internal::make_integer_sequence< T, 0, Ns... >", "structfmt_1_1v5_1_1internal_1_1make__integer__sequence_3_01_t_00_010_00_01_ns_8_8_8_01_4.html", null ] - ] ], [ "integral_constant", null, [ [ "fmt::v5::convert_to_int< T, Char, Enable >", "structfmt_1_1v5_1_1convert__to__int.html", null ], [ "fmt::v5::internal::format_type< Context, T >", "structfmt_1_1v5_1_1internal_1_1format__type.html", null ], @@ -338,7 +334,6 @@ var hierarchy = [ "fmt::v5::is_range< T >", "structfmt_1_1v5_1_1is__range.html", null ], [ "fmt::v5::internal::is_streamable< T, Char >", "classfmt_1_1v5_1_1internal_1_1is__streamable.html", null ], [ "fmt::v5::is_tuple_like< T >", "structfmt_1_1v5_1_1is__tuple__like.html", null ], - [ "fmt::v5::internal::is_tuple_like_< T >", "classfmt_1_1v5_1_1internal_1_1is__tuple__like__.html", null ], [ "fmt::v5::internal::it_category< T * >", "structfmt_1_1v5_1_1internal_1_1it__category_3_01_t_01_5_01_4.html", null ], [ "fmt::v5::internal::it_category< T, typename void_< typename T::iterator_category >::type >", "structfmt_1_1v5_1_1internal_1_1it__category_3_01_t_00_01typename_01void___3_01typename_01_t_1_1id61388ae7521fb5f9bdb01fd14083b7f.html", null ], [ "LidarErrorCode", "struct_lidar_error_code.html", null ], @@ -365,7 +360,6 @@ var hierarchy = [ "spdlog::logger", "classspdlog_1_1logger.html", [ [ "spdlog::async_logger", "classspdlog_1_1async__logger.html", null ] ] ], - [ "fmt::v5::internal::make_integer_sequence< T, N, Ns >", "structfmt_1_1v5_1_1internal_1_1make__integer__sequence.html", null ], [ "make_unsigned", null, [ [ "fmt::v5::internal::make_unsigned_or_bool< T >", "structfmt_1_1v5_1_1internal_1_1make__unsigned__or__bool.html", null ] ] ], @@ -445,7 +439,6 @@ var hierarchy = [ "spdlog::details::thread_pool", "classspdlog_1_1details_1_1thread__pool.html", null ], [ "true_type", null, [ [ "fmt::v5::internal::is_like_std_string< fmt::basic_string_view< Char > >", "structfmt_1_1v5_1_1internal_1_1is__like__std__string_3_01fmt_1_1basic__string__view_3_01_char_01_4_01_4.html", null ], - [ "fmt::v5::internal::is_range_< T, typename std::conditional< false, conditional_helper< decltype(internal::declval< T >().begin()), decltype(internal::declval< T >().end())>, void >::type >", "structfmt_1_1v5_1_1internal_1_1is__range___3_01_t_00_01typename_01std_1_1conditional_3_01false_00543cac082ebea7893cc13a711f6eb2b.html", null ], [ "fmt::v5::is_contiguous< internal::basic_buffer< Char > >", "structfmt_1_1v5_1_1is__contiguous_3_01internal_1_1basic__buffer_3_01_char_01_4_01_4.html", null ], [ "fmt::v5::is_contiguous< std::basic_string< Char > >", "structfmt_1_1v5_1_1is__contiguous_3_01std_1_1basic__string_3_01_char_01_4_01_4.html", null ] ] ], diff --git a/docs/index.html b/docs/index.html index 96370f4..4d9d837 100644 --- a/docs/index.html +++ b/docs/index.html @@ -1,10 +1,9 @@ - + - - + Livox SDK API: 1 Introduction @@ -14,12 +13,15 @@ + $(window).load(resizeHeight); + + @@ -31,7 +33,7 @@ Logo
    Livox SDK API -  V2.0.0 +  V2.1.0
    @@ -39,22 +41,34 @@ - + - - - - +
    @@ -86,16 +98,16 @@ $(document).ready(function(){initNavTree('index.html','');});
    -
    +
    1 Introduction

    Livox SDK is the software development kit designed for all Livox products. It is developed based on C/C++ following Livox SDK Communication Protocol, and provides easy-to-use C style API. With Livox SDK, users can quickly connect to Livox products and receive point cloud data.

    Livox SDK consists of Livox SDK communication protocol, Livox SDK core, Livox SDK API, Linux sample, and ROS demo.

    -

    Prerequisites

    +

    Prerequisites

      -
    • Ubuntu 14.04/Ubuntu 16.04, both x86 and ARM (Nvidia TX2)
    • +
    • Ubuntu 14.04/Ubuntu 16.04/Ubuntu 18.04, both x86 and ARM (Nvidia TX2)
    • Windows 7/10, Visual Studio 2015/2017
    • C++11 compiler
    @@ -104,55 +116,52 @@ $(document).ready(function(){initNavTree('index.html','');});

    3 Livox SDK Core

    Livox SDK provides the implementation of control commands and point cloud data transmission, as well as the C/C++ API. The basic structure of Livox SDK core is shown as below:

    - +sdk.png
    Livox SDK Architecture
    -

    User Datagram Protocol (UDP) is used for communication between Livox SDK and LiDAR sensors. Please refer to the Livox SDK Communication Protocol for further information. Point cloud data handler supports point cloud data transmission, while command handler receives and sends control commands. And the C/C++ API is based on command handler and point cloud data handler.

    +

    User Datagram Protocol (UDP) is used for communication between Livox SDK and LiDAR sensors. Please refer to the Livox SDK Communication Protocol for further information. Point cloud data handler supports point cloud data transmission, while command handler receives and sends control commands. And the C/C++ API is based on command handler and point cloud data handler.

    The Livox LiDAR sensors can be connected to host directly or through the Livox Hub. Livox SDK supports both connection methods. When LiDAR units are connected to host directly, the host will establish communication with each LiDAR unit individually. And if the LiDAR units connect to host through Hub, then the host only communicates with the Livox Hub while the Hub communicates with each LiDAR unit.

    4 Livox SDK API

    Livox SDK API provides a set of C style functions which can be conveniently integrated in C/C++ programs. Please refer to the Livox SDK API Reference for further information.

    4.1 Installation

    The installation procedures in Ubuntu 18.04/16.04/14.04 LTS and Windows 7/10 are shown here as examples. For Ubuntu 18.04/16.04/14.04 32-bit LTS and Mac, you can get it in Livox-SDK wiki.

    4.1.1 Ubuntu 18.04/16.04/14.04 LTS

    Dependencies

    -

    Livox SDK requires CMake 3.0.0+, Apache Portable Runtime (APR) 1.61+ and Boost 1.54+ as dependencies. You can install these packages using apt:

    sudo apt install cmake pkg-config libapr1-dev libboost-atomic-dev libboost-system-dev
    -

    Compile Livox SDK

    -

    In the Livox SDK directory, run the following commands to compile the project:

    git clone https://github.com/Livox-SDK/Livox-SDK.git
    -
    cd Livox-SDK/build
    -
    cmake ..
    -
    make
    -
    sudo make install
    -

    4.1.2 Windows 7/10

    +

    Livox SDK requires CMake 3.0.0+ as dependencies. You can install these packages using apt:

    1 sudo apt install cmake pkg-config

    Compile Livox SDK

    +

    In the Livox SDK directory, run the following commands to compile the project:

    1 git clone https://github.com/Livox-SDK/Livox-SDK.git
    2 cd Livox-SDK
    3 sudo ./third_party/apr/apr_build.sh
    4 cd build && cmake ..
    5 make
    6 sudo make install

    4.1.2 Windows 7/10

    Dependencies

    -

    Livox SDK supports Visual Studio 2015/2017 and requires CMake 3.0.0+, Apache Portable Runtime (APR) 1.61+ and Boost 1.54+ as dependencies. vcpkg is recommended for building the dependency libraries as follows: For the 32-bit project:

    .\vcpkg install apr
    -
    .\vcpkg install boost-atomic
    -
    .\vcpkg install boost-system
    -
    .\vcpkg install boost-thread
    -
    .\vcpkg integrate install
    -

    For the 64-bit project:

    .\vcpkg install apr:x64-windows
    -
    .\vcpkg install boost-atomic:x64-windows
    -
    .\vcpkg install boost-system:x64-windows
    -
    .\vcpkg install boost-thread:x64-windows
    -
    .\vcpkg integrate install
    -

    Then, in the Livox SDK directory, run the following commands to create the Visual Studio solution file. Please replace [vcpkgroot] with your vcpkg installation path. Generate the 32-bit project:

    cd build && \
    -
    cmake .. "-DCMAKE_TOOLCHAIN_FILE=[vcpkgroot]\scripts\buildsystems\vcpkg.cmake"
    -

    Generate the 64-bit project:

    cd build && \
    -
    cmake .. -G "Visual Studio 15 2017 Win64" "-DCMAKE_TOOLCHAIN_FILE=[vcpkgroot]\scripts\buildsystems\vcpkg.cmake"
    -

    Compile Livox SDK

    -

    You can now compile the Livox SDK in Visual Studio.

    4.2 Run Livox SDK Sample

    +

    Livox SDK supports Visual Studio 2015/2017 and requires install CMake 3.0.0+ as dependencies.

    +

    In the Livox SDK directory, run the following commands to create the Visual Studio solution file. Generate the 32-bit project:

    +
    1 cd Livox-SDK
    2 .\third_party\apr\apr_build.bat
    3 cd build && \
    4 cmake ..

    Generate the 64-bit project:

    1 cd Livox-SDK
    2 .\third_party\apr\apr_build.bat amd64
    3 cd build && \
    4 cmake .. -G "Visual Studio 15 2017 Win64"

    Compile Livox SDK

    +

    You can now compile the Livox SDK in Visual Studio.

    +

    4.1.3 ARM-Linux Cross Compile

    +

    The procedure of cross compile Livox-SDK in ARM-Linux are shown below。

    +

    Dependencies

    +

    Host machine requires install cmake and gcc。You can install these packages using apt:

    +
    1 sudo apt install cmake gcc

    Cross Compile Toolchain

    +

    If your ARM board vendor provides a cross compile toolchain, you can skip the following step of installing the toolchain and use the vendor-supplied cross compile toolchain instead.

    +

    The following commands will install C and C++ cross compiler toolchains for 32bit and 64bit ARM board. You need to install the correct toolchain for your ARM board. For 64bit SoC ARM board, only install 64bit toolchain, and for 32bit SoC ARM board, only install 32bit toolchain.

    +

    Install **ARM 32 bits cross compile toolchain**:

    +
    1 sudo apt-get install gcc-arm-linux-gnueabi g++-arm-linux-gnueabi

    Install **ARM 64 bits cross compile toolchain**:

    +
    1 sudo apt-get install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu

    Cross Compile Livox-SDK

    +

    For **ARM 32 bits toolchain**,In the Livox SDK directory,run the following commands to cross compile the project:

    +
    1 cd Livox-SDK
    2 cd build && \
    3 cmake .. -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_C_COMPILER=arm-linux-gnueabi-gcc -DCMAKE_CXX_COMPILER=arm-linux-gnueabi-g++
    4 make

    For **ARM 64 bits toolchain**,In the Livox SDK directory,run the following commands to cross compile the project:

    +
    1 cd Livox-SDK
    2 cd build && \
    3 cmake .. -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_C_COMPILER=aarch64-linux-gnu-gcc -DCMAKE_CXX_COMPILER=aarch64-linux-gnu-g++
    4 make

    Note:

    +
      +
    • gcc cross compiler need to support C ++11 standard
    • +
    +

    4.2 Run Livox SDK Sample

    Two samples are provided in Sample/Lidar and Sample/Hub, which demonstrate how to configure Livox LiDAR units and receive the point cloud data when directly connecting Livox SDK to LiDAR units or by using a Livox Hub, respectively. The sequence diagram is shown as below:

    - +sample.png
    -

    4.2.1 Ubuntu 18.04/16.04 /14.04 LTS

    -

    For Ubuntun 18.04/16.04/14.04 LTS, run the lidar_sample if connect with the LiDAR unit(s):

    cd sample/lidar && ./lidar_sample
    -

    or run the hub_sample if connect with the hub unit(s):

    cd sample/hub && ./hub_sample
    -

    4.2.2 Windows 7/10

    -

    After compiling the Livox SDK as shown in section 4.1.2, you can find hub_sample.exe or lidar_sample.exe in the {Livox-SDK}\build\sample\hub\Debug or {Livox-SDK}\build\sample\lidar\Debug folder, respectively, which can be run directly.

    +

    4.2.1 Ubuntu 18.04/16.04 /14.04 LTS

    +

    For Ubuntun 18.04/16.04/14.04 LTS, run the lidar_sample if connect with the LiDAR unit(s):

    1 cd sample/lidar && ./lidar_sample

    or run the hub_sample if connect with the hub unit(s):

    1 cd sample/hub && ./hub_sample

    4.2.2 Windows 7/10

    +

    After compiling the Livox SDK as shown in section 4.1.2, you can find hub_sample.exe or lidar_sample.exe in the {Livox-SDK} or {Livox-SDK} folder, respectively, which can be run directly.

    Then you can see the information as below:

    - +sdk_init.png
    -

    4.3 Connect to the specific LiDAR units

    +

    4.3 Connect to the specific LiDAR units

    Samples we provided will connect all the broadcast device in you LAN in default.There are two ways to connect the specific units:

    • run sample with input options
    • @@ -161,50 +170,29 @@ Livox SDK Architecture

    NOTE:

    Each Livox LiDAR unit owns a unique Broadcast Code . The broadcast code consists of its serial number and an additional number (1,2, or 3). The serial number can be found on the body of the LiDAR unit (below the QR code).The Broadcast Code may be used when you want to connect to the specific LiDAR unit(s). The detailed format is shown as below:

    - +broadcast_code.png
    Broadcast Code
    -

    4.3.1 Program Options

    -

    We provide the following program options for connecting the specific units and saving log file:

    [-c]:Register LiDAR units by Broadcast Code. Connect the registered units ONLY.
    -
    [-l]:Save the log file(In the executable file's directory).
    -
    [-h]:Show help.
    -

    Here is the example:

    ./lidar_sample -c "00000000000002&00000000000003&00000000000004" -l
    -
    ./hub_sample -c "00000000000001" -l
    -

    4.3.2 Edit Broadcast Code List

    +

    4.3.1 Program Options

    +

    We provide the following program options for connecting the specific units and saving log file:

    1 [-c]:Register LiDAR units by Broadcast Code. Connect the registered units ONLY.
    2 [-l]:Save the log file(In the executable file's directory).
    3 [-h]:Show help.

    Here is the example:

    1 ./lidar_sample -c "00000000000002&00000000000003&00000000000004" -l
    2 ./hub_sample -c "00000000000001" -l

    4.3.2 Edit Broadcast Code List

    Comment the following code section:

    -
    /** Connect all the broadcast device. */
    -
    int lidar_count = 0;
    -
    char broadcast_code_list[kMaxLidarCount][kBroadcastCodeSize];
    -

    Remove the comment of the following code section, set the BROADCAST_CODE_LIST_SIZE and replace the broadcast code lists in the main.c for both LiDAR sample ({Livox-SDK}/sample/lidar/main.c) and Hub sample ({Livox-SDK}/sample/hub/main.c) with the broadcast code of your devices before building.

    -
    /** Connect the broadcast device in list, please input the broadcast code and modify the BROADCAST_CODE_LIST_SIZE. */
    -
    /*#define BROADCAST_CODE_LIST_SIZE 3
    -
    int lidar_count = BROADCAST_CODE_LIST_SIZE;
    -
    char broadcast_code_list[kMaxLidarCount][kBroadcastCodeSize] = {
    -
    "000000000000002",
    -
    "000000000000003",
    -
    "000000000000004"
    -
    };*/
    -

    4.4 Generate the lvx file

    +
    1 /** Connect all the broadcast device. */
    2 int lidar_count = 0;
    3 char broadcast_code_list[kMaxLidarCount][kBroadcastCodeSize];

    Remove the comment of the following code section, set the BROADCAST_CODE_LIST_SIZE and replace the broadcast code lists in the main.c for both LiDAR sample ({Livox-SDK}/sample/lidar/main.c) and Hub sample ({Livox-SDK}/sample/hub/main.c) with the broadcast code of your devices before building.

    +
    1 /** Connect the broadcast device in list, please input the broadcast code and modify the BROADCAST_CODE_LIST_SIZE. */
    2 /*#define BROADCAST_CODE_LIST_SIZE 3
    3 int lidar_count = BROADCAST_CODE_LIST_SIZE;
    4 char broadcast_code_list[kMaxLidarCount][kBroadcastCodeSize] = {
    5  "000000000000002",
    6  "000000000000003",
    7  "000000000000004"
    8 };*/

    4.4 Generate the lvx file

    We provide the C++ sample to generate the lvx file for hub and LiDAR unit(s). You can use the same way in 4.2.1 and 4.2.2 to run them.

    4.4.1 Program Options

    -

    You can alse use the program options in 4.3.1 to connect specific device and generate the log file, and we provide two new options for lvx file:

    [-t] Time to save point cloud to the lvx file.(unit: s)
    -
    [-p] Get the extrinsic parameter from standard extrinsic.xml file(The same as viewer) in the executable file's directory.(Especially for LiDAR unit(s) as the hub will calculate the extrinsic parameter by itself)
    -

    Here is the example:

    ./lidar_lvx_sample -c "00000000000002&00000000000003&00000000000004" -l -t 10 -p
    -
    ./hub_lvx_sample -c "00000000000001" -l -t 10
    -

    5 Support

    +

    You can alse use the program options in 4.3.1 to connect specific device and generate the log file, and we provide two new options for lvx file:

    1 [-t] Time to save point cloud to the lvx file.(unit: s)
    2 [-p] Get the extrinsic parameter from standard extrinsic.xml file(The same as viewer) in the executable file's directory.(Especially for LiDAR unit(s) as the hub will calculate the extrinsic parameter by itself)

    Here is the example:

    1 ./lidar_lvx_sample -c "00000000000002&00000000000003&00000000000004" -l -t 10 -p
    2 ./hub_lvx_sample -c "00000000000001" -l -t 10

    5 Support

    You can get support from Livox with the following methods:

    -
    - + diff --git a/docs/jquery.js b/docs/jquery.js index 103c32d..d52a1c7 100644 --- a/docs/jquery.js +++ b/docs/jquery.js @@ -1,35 +1,68 @@ -/*! jQuery v3.4.1 | (c) JS Foundation and other contributors | jquery.org/license */ -!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],E=C.document,r=Object.getPrototypeOf,s=t.slice,g=t.concat,u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType},x=function(e){return null!=e&&e===e.window},c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.4.1",k=function(e,t){return new k.fn.init(e,t)},p=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;function d(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp($),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+$),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),ne=function(e,t,n){var r="0x"+t-65536;return r!=r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(m.childNodes),m.childNodes),t[m.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&((e?e.ownerDocument||e:m)!==C&&T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!A[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&U.test(t)){(s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=k),o=(l=h(t)).length;while(o--)l[o]="#"+s+" "+xe(l[o]);c=l.join(","),f=ee.test(t)&&ye(e.parentNode)||e}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){A(t,!0)}finally{s===k&&e.removeAttribute("id")}}}return g(t.replace(B,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[k]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:m;return r!==C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),m!==C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=k,!C.getElementsByName||!C.getElementsByName(k).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+k+"-]").length||v.push("~="),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+k+"+*").length||v.push(".#.+[+~]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",$)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e===C||e.ownerDocument===m&&y(m,e)?-1:t===C||t.ownerDocument===m&&y(m,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e===C?-1:t===C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]===m?-1:s[r]===m?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if((e.ownerDocument||e)!==C&&T(e),d.matchesSelector&&E&&!A[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){A(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=p[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&p(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?k.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?k.grep(e,function(e){return e===n!==r}):"string"!=typeof n?k.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(k.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||q,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:L.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof k?t[0]:t,k.merge(this,k.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),D.test(r[1])&&k.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(k):k.makeArray(e,this)}).prototype=k.fn,q=k(E);var H=/^(?:parents|prev(?:Until|All))/,O={children:!0,contents:!0,next:!0,prev:!0};function P(e,t){while((e=e[t])&&1!==e.nodeType);return e}k.fn.extend({has:function(e){var t=k(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i,ge={option:[1,""],thead:[1,"","
    "],col:[2,"","
    "],tr:[2,"","
    "],td:[3,"","
    "],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?k.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;nx",y.noCloneChecked=!!me.cloneNode(!0).lastChild.defaultValue;var Te=/^key/,Ce=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ee=/^([^.]*)(?:\.(.+)|)/;function ke(){return!0}function Se(){return!1}function Ne(e,t){return e===function(){try{return E.activeElement}catch(e){}}()==("focus"===t)}function Ae(e,t,n,r,i,o){var a,s;if("object"==typeof t){for(s in"string"!=typeof n&&(r=r||n,n=void 0),t)Ae(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=Se;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return k().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=k.guid++)),e.each(function(){k.event.add(this,t,i,r,n)})}function De(e,i,o){o?(Q.set(e,i,!1),k.event.add(e,i,{namespace:!1,handler:function(e){var t,n,r=Q.get(this,i);if(1&e.isTrigger&&this[i]){if(r.length)(k.event.special[i]||{}).delegateType&&e.stopPropagation();else if(r=s.call(arguments),Q.set(this,i,r),t=o(this,i),this[i](),r!==(n=Q.get(this,i))||t?Q.set(this,i,!1):n={},r!==n)return e.stopImmediatePropagation(),e.preventDefault(),n.value}else r.length&&(Q.set(this,i,{value:k.event.trigger(k.extend(r[0],k.Event.prototype),r.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===Q.get(e,i)&&k.event.add(e,i,ke)}k.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.get(t);if(v){n.handler&&(n=(o=n).handler,i=o.selector),i&&k.find.matchesSelector(ie,i),n.guid||(n.guid=k.guid++),(u=v.events)||(u=v.events={}),(a=v.handle)||(a=v.handle=function(e){return"undefined"!=typeof k&&k.event.triggered!==e.type?k.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||"").match(R)||[""]).length;while(l--)d=g=(s=Ee.exec(e[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=k.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=k.event.special[d]||{},c=k.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&k.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,r,h,a)||t.addEventListener&&t.addEventListener(d,a)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),k.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.hasData(e)&&Q.get(e);if(v&&(u=v.events)){l=(t=(t||"").match(R)||[""]).length;while(l--)if(d=g=(s=Ee.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d){f=k.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,v.handle)||k.removeEvent(e,d,v.handle),delete u[d])}else for(d in u)k.event.remove(e,d+t[l],n,r,!0);k.isEmptyObject(u)&&Q.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,a,s=k.event.fix(e),u=new Array(arguments.length),l=(Q.get(this,"events")||{})[s.type]||[],c=k.event.special[s.type]||{};for(u[0]=s,t=1;t\x20\t\r\n\f]*)[^>]*)\/>/gi,qe=/\s*$/g;function Oe(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&k(e).children("tbody")[0]||e}function Pe(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function Re(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Me(e,t){var n,r,i,o,a,s,u,l;if(1===t.nodeType){if(Q.hasData(e)&&(o=Q.access(e),a=Q.set(t,o),l=o.events))for(i in delete a.handle,a.events={},l)for(n=0,r=l[i].length;n")},clone:function(e,t,n){var r,i,o,a,s,u,l,c=e.cloneNode(!0),f=oe(e);if(!(y.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||k.isXMLDoc(e)))for(a=ve(c),r=0,i=(o=ve(e)).length;r").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var Vt,Gt=[],Yt=/(=)\?(?=&|$)|\?\?/;k.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Gt.pop()||k.expando+"_"+kt++;return this[e]=!0,e}}),k.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Yt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Yt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Yt,"$1"+r):!1!==e.jsonp&&(e.url+=(St.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||k.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?k(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Gt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((Vt=E.implementation.createHTMLDocument("").body).innerHTML="
    ",2===Vt.childNodes.length),k.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=D.exec(e))?[t.createElement(i[1])]:(i=we([e],t,o),o&&o.length&&k(o).remove(),k.merge([],i.childNodes)));var r,i,o},k.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(k.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},k.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){k.fn[t]=function(e){return this.on(t,e)}}),k.expr.pseudos.animated=function(t){return k.grep(k.timers,function(e){return t===e.elem}).length},k.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=k.css(e,"position"),c=k(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=k.css(e,"top"),u=k.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,k.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},k.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){k.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===k.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===k.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=k(e).offset()).top+=k.css(e,"borderTopWidth",!0),i.left+=k.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-k.css(r,"marginTop",!0),left:t.left-i.left-k.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===k.css(e,"position"))e=e.offsetParent;return e||ie})}}),k.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;k.fn[t]=function(e){return _(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),k.each(["top","left"],function(e,n){k.cssHooks[n]=ze(y.pixelPosition,function(e,t){if(t)return t=_e(e,n),$e.test(t)?k(e).position()[n]+"px":t})}),k.each({Height:"height",Width:"width"},function(a,s){k.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){k.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return _(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?k.css(e,t,i):k.style(e,t,n,i)},s,n?e:void 0,n)}})}),k.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){k.fn[n]=function(e,t){return 0a;a++)for(i in o[a])n=o[a][i],o[a].hasOwnProperty(i)&&void 0!==n&&(e[i]=t.isPlainObject(n)?t.isPlainObject(e[i])?t.widget.extend({},e[i],n):t.widget.extend({},n):n);return e},t.widget.bridge=function(e,i){var n=i.prototype.widgetFullName||e;t.fn[e]=function(o){var a="string"==typeof o,r=s.call(arguments,1),h=this;return a?this.length||"instance"!==o?this.each(function(){var i,s=t.data(this,n);return"instance"===o?(h=s,!1):s?t.isFunction(s[o])&&"_"!==o.charAt(0)?(i=s[o].apply(s,r),i!==s&&void 0!==i?(h=i&&i.jquery?h.pushStack(i.get()):i,!1):void 0):t.error("no such method '"+o+"' for "+e+" widget instance"):t.error("cannot call methods on "+e+" prior to initialization; "+"attempted to call method '"+o+"'")}):h=void 0:(r.length&&(o=t.widget.extend.apply(null,[o].concat(r))),this.each(function(){var e=t.data(this,n);e?(e.option(o||{}),e._init&&e._init()):t.data(this,n,new i(o,this))})),h}},t.Widget=function(){},t.Widget._childConstructors=[],t.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"
    ",options:{classes:{},disabled:!1,create:null},_createWidget:function(e,s){s=t(s||this.defaultElement||this)[0],this.element=t(s),this.uuid=i++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=t(),this.hoverable=t(),this.focusable=t(),this.classesElementLookup={},s!==this&&(t.data(s,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===s&&this.destroy()}}),this.document=t(s.style?s.ownerDocument:s.document||s),this.window=t(this.document[0].defaultView||this.document[0].parentWindow)),this.options=t.widget.extend({},this.options,this._getCreateOptions(),e),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:t.noop,_create:t.noop,_init:t.noop,destroy:function(){var e=this;this._destroy(),t.each(this.classesElementLookup,function(t,i){e._removeClass(i,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:t.noop,widget:function(){return this.element},option:function(e,i){var s,n,o,a=e;if(0===arguments.length)return t.widget.extend({},this.options);if("string"==typeof e)if(a={},s=e.split("."),e=s.shift(),s.length){for(n=a[e]=t.widget.extend({},this.options[e]),o=0;s.length-1>o;o++)n[s[o]]=n[s[o]]||{},n=n[s[o]];if(e=s.pop(),1===arguments.length)return void 0===n[e]?null:n[e];n[e]=i}else{if(1===arguments.length)return void 0===this.options[e]?null:this.options[e];a[e]=i}return this._setOptions(a),this},_setOptions:function(t){var e;for(e in t)this._setOption(e,t[e]);return this},_setOption:function(t,e){return"classes"===t&&this._setOptionClasses(e),this.options[t]=e,"disabled"===t&&this._setOptionDisabled(e),this},_setOptionClasses:function(e){var i,s,n;for(i in e)n=this.classesElementLookup[i],e[i]!==this.options.classes[i]&&n&&n.length&&(s=t(n.get()),this._removeClass(n,i),s.addClass(this._classes({element:s,keys:i,classes:e,add:!0})))},_setOptionDisabled:function(t){this._toggleClass(this.widget(),this.widgetFullName+"-disabled",null,!!t),t&&(this._removeClass(this.hoverable,null,"ui-state-hover"),this._removeClass(this.focusable,null,"ui-state-focus"))},enable:function(){return this._setOptions({disabled:!1})},disable:function(){return this._setOptions({disabled:!0})},_classes:function(e){function i(i,o){var a,r;for(r=0;i.length>r;r++)a=n.classesElementLookup[i[r]]||t(),a=e.add?t(t.unique(a.get().concat(e.element.get()))):t(a.not(e.element).get()),n.classesElementLookup[i[r]]=a,s.push(i[r]),o&&e.classes[i[r]]&&s.push(e.classes[i[r]])}var s=[],n=this;return e=t.extend({element:this.element,classes:this.options.classes||{}},e),this._on(e.element,{remove:"_untrackClassesElement"}),e.keys&&i(e.keys.match(/\S+/g)||[],!0),e.extra&&i(e.extra.match(/\S+/g)||[]),s.join(" ")},_untrackClassesElement:function(e){var i=this;t.each(i.classesElementLookup,function(s,n){-1!==t.inArray(e.target,n)&&(i.classesElementLookup[s]=t(n.not(e.target).get()))})},_removeClass:function(t,e,i){return this._toggleClass(t,e,i,!1)},_addClass:function(t,e,i){return this._toggleClass(t,e,i,!0)},_toggleClass:function(t,e,i,s){s="boolean"==typeof s?s:i;var n="string"==typeof t||null===t,o={extra:n?e:i,keys:n?t:e,element:n?this.element:t,add:s};return o.element.toggleClass(this._classes(o),s),this},_on:function(e,i,s){var n,o=this;"boolean"!=typeof e&&(s=i,i=e,e=!1),s?(i=n=t(i),this.bindings=this.bindings.add(i)):(s=i,i=this.element,n=this.widget()),t.each(s,function(s,a){function r(){return e||o.options.disabled!==!0&&!t(this).hasClass("ui-state-disabled")?("string"==typeof a?o[a]:a).apply(o,arguments):void 0}"string"!=typeof a&&(r.guid=a.guid=a.guid||r.guid||t.guid++);var h=s.match(/^([\w:-]*)\s*(.*)$/),l=h[1]+o.eventNamespace,c=h[2];c?n.on(l,c,r):i.on(l,r)})},_off:function(e,i){i=(i||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,e.off(i).off(i),this.bindings=t(this.bindings.not(e).get()),this.focusable=t(this.focusable.not(e).get()),this.hoverable=t(this.hoverable.not(e).get())},_delay:function(t,e){function i(){return("string"==typeof t?s[t]:t).apply(s,arguments)}var s=this;return setTimeout(i,e||0)},_hoverable:function(e){this.hoverable=this.hoverable.add(e),this._on(e,{mouseenter:function(e){this._addClass(t(e.currentTarget),null,"ui-state-hover")},mouseleave:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-hover")}})},_focusable:function(e){this.focusable=this.focusable.add(e),this._on(e,{focusin:function(e){this._addClass(t(e.currentTarget),null,"ui-state-focus")},focusout:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-focus")}})},_trigger:function(e,i,s){var n,o,a=this.options[e];if(s=s||{},i=t.Event(i),i.type=(e===this.widgetEventPrefix?e:this.widgetEventPrefix+e).toLowerCase(),i.target=this.element[0],o=i.originalEvent)for(n in o)n in i||(i[n]=o[n]);return this.element.trigger(i,s),!(t.isFunction(a)&&a.apply(this.element[0],[i].concat(s))===!1||i.isDefaultPrevented())}},t.each({show:"fadeIn",hide:"fadeOut"},function(e,i){t.Widget.prototype["_"+e]=function(s,n,o){"string"==typeof n&&(n={effect:n});var a,r=n?n===!0||"number"==typeof n?i:n.effect||i:e;n=n||{},"number"==typeof n&&(n={duration:n}),a=!t.isEmptyObject(n),n.complete=o,n.delay&&s.delay(n.delay),a&&t.effects&&t.effects.effect[r]?s[e](n):r!==e&&s[r]?s[r](n.duration,n.easing,o):s.queue(function(i){t(this)[e](),o&&o.call(s[0]),i()})}}),t.widget,function(){function e(t,e,i){return[parseFloat(t[0])*(u.test(t[0])?e/100:1),parseFloat(t[1])*(u.test(t[1])?i/100:1)]}function i(e,i){return parseInt(t.css(e,i),10)||0}function s(e){var i=e[0];return 9===i.nodeType?{width:e.width(),height:e.height(),offset:{top:0,left:0}}:t.isWindow(i)?{width:e.width(),height:e.height(),offset:{top:e.scrollTop(),left:e.scrollLeft()}}:i.preventDefault?{width:0,height:0,offset:{top:i.pageY,left:i.pageX}}:{width:e.outerWidth(),height:e.outerHeight(),offset:e.offset()}}var n,o=Math.max,a=Math.abs,r=/left|center|right/,h=/top|center|bottom/,l=/[\+\-]\d+(\.[\d]+)?%?/,c=/^\w+/,u=/%$/,d=t.fn.position;t.position={scrollbarWidth:function(){if(void 0!==n)return n;var e,i,s=t("
    "),o=s.children()[0];return t("body").append(s),e=o.offsetWidth,s.css("overflow","scroll"),i=o.offsetWidth,e===i&&(i=s[0].clientWidth),s.remove(),n=e-i},getScrollInfo:function(e){var i=e.isWindow||e.isDocument?"":e.element.css("overflow-x"),s=e.isWindow||e.isDocument?"":e.element.css("overflow-y"),n="scroll"===i||"auto"===i&&e.widthi?"left":e>0?"right":"center",vertical:0>r?"top":s>0?"bottom":"middle"};l>p&&p>a(e+i)&&(u.horizontal="center"),c>f&&f>a(s+r)&&(u.vertical="middle"),u.important=o(a(e),a(i))>o(a(s),a(r))?"horizontal":"vertical",n.using.call(this,t,u)}),h.offset(t.extend(D,{using:r}))})},t.ui.position={fit:{left:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollLeft:s.offset.left,a=s.width,r=t.left-e.collisionPosition.marginLeft,h=n-r,l=r+e.collisionWidth-a-n;e.collisionWidth>a?h>0&&0>=l?(i=t.left+h+e.collisionWidth-a-n,t.left+=h-i):t.left=l>0&&0>=h?n:h>l?n+a-e.collisionWidth:n:h>0?t.left+=h:l>0?t.left-=l:t.left=o(t.left-r,t.left)},top:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollTop:s.offset.top,a=e.within.height,r=t.top-e.collisionPosition.marginTop,h=n-r,l=r+e.collisionHeight-a-n;e.collisionHeight>a?h>0&&0>=l?(i=t.top+h+e.collisionHeight-a-n,t.top+=h-i):t.top=l>0&&0>=h?n:h>l?n+a-e.collisionHeight:n:h>0?t.top+=h:l>0?t.top-=l:t.top=o(t.top-r,t.top)}},flip:{left:function(t,e){var i,s,n=e.within,o=n.offset.left+n.scrollLeft,r=n.width,h=n.isWindow?n.scrollLeft:n.offset.left,l=t.left-e.collisionPosition.marginLeft,c=l-h,u=l+e.collisionWidth-r-h,d="left"===e.my[0]?-e.elemWidth:"right"===e.my[0]?e.elemWidth:0,p="left"===e.at[0]?e.targetWidth:"right"===e.at[0]?-e.targetWidth:0,f=-2*e.offset[0];0>c?(i=t.left+d+p+f+e.collisionWidth-r-o,(0>i||a(c)>i)&&(t.left+=d+p+f)):u>0&&(s=t.left-e.collisionPosition.marginLeft+d+p+f-h,(s>0||u>a(s))&&(t.left+=d+p+f))},top:function(t,e){var i,s,n=e.within,o=n.offset.top+n.scrollTop,r=n.height,h=n.isWindow?n.scrollTop:n.offset.top,l=t.top-e.collisionPosition.marginTop,c=l-h,u=l+e.collisionHeight-r-h,d="top"===e.my[1],p=d?-e.elemHeight:"bottom"===e.my[1]?e.elemHeight:0,f="top"===e.at[1]?e.targetHeight:"bottom"===e.at[1]?-e.targetHeight:0,m=-2*e.offset[1];0>c?(s=t.top+p+f+m+e.collisionHeight-r-o,(0>s||a(c)>s)&&(t.top+=p+f+m)):u>0&&(i=t.top-e.collisionPosition.marginTop+p+f+m-h,(i>0||u>a(i))&&(t.top+=p+f+m))}},flipfit:{left:function(){t.ui.position.flip.left.apply(this,arguments),t.ui.position.fit.left.apply(this,arguments)},top:function(){t.ui.position.flip.top.apply(this,arguments),t.ui.position.fit.top.apply(this,arguments)}}}}(),t.ui.position,t.extend(t.expr[":"],{data:t.expr.createPseudo?t.expr.createPseudo(function(e){return function(i){return!!t.data(i,e)}}):function(e,i,s){return!!t.data(e,s[3])}}),t.fn.extend({disableSelection:function(){var t="onselectstart"in document.createElement("div")?"selectstart":"mousedown";return function(){return this.on(t+".ui-disableSelection",function(t){t.preventDefault()})}}(),enableSelection:function(){return this.off(".ui-disableSelection")}}),t.ui.focusable=function(i,s){var n,o,a,r,h,l=i.nodeName.toLowerCase();return"area"===l?(n=i.parentNode,o=n.name,i.href&&o&&"map"===n.nodeName.toLowerCase()?(a=t("img[usemap='#"+o+"']"),a.length>0&&a.is(":visible")):!1):(/^(input|select|textarea|button|object)$/.test(l)?(r=!i.disabled,r&&(h=t(i).closest("fieldset")[0],h&&(r=!h.disabled))):r="a"===l?i.href||s:s,r&&t(i).is(":visible")&&e(t(i)))},t.extend(t.expr[":"],{focusable:function(e){return t.ui.focusable(e,null!=t.attr(e,"tabindex"))}}),t.ui.focusable,t.fn.form=function(){return"string"==typeof this[0].form?this.closest("form"):t(this[0].form)},t.ui.formResetMixin={_formResetHandler:function(){var e=t(this);setTimeout(function(){var i=e.data("ui-form-reset-instances");t.each(i,function(){this.refresh()})})},_bindFormResetHandler:function(){if(this.form=this.element.form(),this.form.length){var t=this.form.data("ui-form-reset-instances")||[];t.length||this.form.on("reset.ui-form-reset",this._formResetHandler),t.push(this),this.form.data("ui-form-reset-instances",t)}},_unbindFormResetHandler:function(){if(this.form.length){var e=this.form.data("ui-form-reset-instances");e.splice(t.inArray(this,e),1),e.length?this.form.data("ui-form-reset-instances",e):this.form.removeData("ui-form-reset-instances").off("reset.ui-form-reset")}}},"1.7"===t.fn.jquery.substring(0,3)&&(t.each(["Width","Height"],function(e,i){function s(e,i,s,o){return t.each(n,function(){i-=parseFloat(t.css(e,"padding"+this))||0,s&&(i-=parseFloat(t.css(e,"border"+this+"Width"))||0),o&&(i-=parseFloat(t.css(e,"margin"+this))||0)}),i}var n="Width"===i?["Left","Right"]:["Top","Bottom"],o=i.toLowerCase(),a={innerWidth:t.fn.innerWidth,innerHeight:t.fn.innerHeight,outerWidth:t.fn.outerWidth,outerHeight:t.fn.outerHeight};t.fn["inner"+i]=function(e){return void 0===e?a["inner"+i].call(this):this.each(function(){t(this).css(o,s(this,e)+"px")})},t.fn["outer"+i]=function(e,n){return"number"!=typeof e?a["outer"+i].call(this,e):this.each(function(){t(this).css(o,s(this,e,!0,n)+"px")})}}),t.fn.addBack=function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}),t.ui.keyCode={BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38},t.ui.escapeSelector=function(){var t=/([!"#$%&'()*+,./:;<=>?@[\]^`{|}~])/g;return function(e){return e.replace(t,"\\$1")}}(),t.fn.labels=function(){var e,i,s,n,o;return this[0].labels&&this[0].labels.length?this.pushStack(this[0].labels):(n=this.eq(0).parents("label"),s=this.attr("id"),s&&(e=this.eq(0).parents().last(),o=e.add(e.length?e.siblings():this.siblings()),i="label[for='"+t.ui.escapeSelector(s)+"']",n=n.add(o.find(i).addBack(i))),this.pushStack(n))},t.fn.scrollParent=function(e){var i=this.css("position"),s="absolute"===i,n=e?/(auto|scroll|hidden)/:/(auto|scroll)/,o=this.parents().filter(function(){var e=t(this);return s&&"static"===e.css("position")?!1:n.test(e.css("overflow")+e.css("overflow-y")+e.css("overflow-x"))}).eq(0);return"fixed"!==i&&o.length?o:t(this[0].ownerDocument||document)},t.extend(t.expr[":"],{tabbable:function(e){var i=t.attr(e,"tabindex"),s=null!=i;return(!s||i>=0)&&t.ui.focusable(e,s)}}),t.fn.extend({uniqueId:function(){var t=0;return function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++t)})}}(),removeUniqueId:function(){return this.each(function(){/^ui-id-\d+$/.test(this.id)&&t(this).removeAttr("id")})}}),t.ui.ie=!!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase());var n=!1;t(document).on("mouseup",function(){n=!1}),t.widget("ui.mouse",{version:"1.12.1",options:{cancel:"input, textarea, button, select, option",distance:1,delay:0},_mouseInit:function(){var e=this;this.element.on("mousedown."+this.widgetName,function(t){return e._mouseDown(t)}).on("click."+this.widgetName,function(i){return!0===t.data(i.target,e.widgetName+".preventClickEvent")?(t.removeData(i.target,e.widgetName+".preventClickEvent"),i.stopImmediatePropagation(),!1):void 0}),this.started=!1},_mouseDestroy:function(){this.element.off("."+this.widgetName),this._mouseMoveDelegate&&this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate)},_mouseDown:function(e){if(!n){this._mouseMoved=!1,this._mouseStarted&&this._mouseUp(e),this._mouseDownEvent=e;var i=this,s=1===e.which,o="string"==typeof this.options.cancel&&e.target.nodeName?t(e.target).closest(this.options.cancel).length:!1;return s&&!o&&this._mouseCapture(e)?(this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){i.mouseDelayMet=!0},this.options.delay)),this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=this._mouseStart(e)!==!1,!this._mouseStarted)?(e.preventDefault(),!0):(!0===t.data(e.target,this.widgetName+".preventClickEvent")&&t.removeData(e.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(t){return i._mouseMove(t)},this._mouseUpDelegate=function(t){return i._mouseUp(t)},this.document.on("mousemove."+this.widgetName,this._mouseMoveDelegate).on("mouseup."+this.widgetName,this._mouseUpDelegate),e.preventDefault(),n=!0,!0)):!0}},_mouseMove:function(e){if(this._mouseMoved){if(t.ui.ie&&(!document.documentMode||9>document.documentMode)&&!e.button)return this._mouseUp(e);if(!e.which)if(e.originalEvent.altKey||e.originalEvent.ctrlKey||e.originalEvent.metaKey||e.originalEvent.shiftKey)this.ignoreMissingWhich=!0;else if(!this.ignoreMissingWhich)return this._mouseUp(e)}return(e.which||e.button)&&(this._mouseMoved=!0),this._mouseStarted?(this._mouseDrag(e),e.preventDefault()):(this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=this._mouseStart(this._mouseDownEvent,e)!==!1,this._mouseStarted?this._mouseDrag(e):this._mouseUp(e)),!this._mouseStarted)},_mouseUp:function(e){this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,e.target===this._mouseDownEvent.target&&t.data(e.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(e)),this._mouseDelayTimer&&(clearTimeout(this._mouseDelayTimer),delete this._mouseDelayTimer),this.ignoreMissingWhich=!1,n=!1,e.preventDefault()},_mouseDistanceMet:function(t){return Math.max(Math.abs(this._mouseDownEvent.pageX-t.pageX),Math.abs(this._mouseDownEvent.pageY-t.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),t.ui.plugin={add:function(e,i,s){var n,o=t.ui[e].prototype;for(n in s)o.plugins[n]=o.plugins[n]||[],o.plugins[n].push([i,s[n]])},call:function(t,e,i,s){var n,o=t.plugins[e];if(o&&(s||t.element[0].parentNode&&11!==t.element[0].parentNode.nodeType))for(n=0;o.length>n;n++)t.options[o[n][0]]&&o[n][1].apply(t.element,i)}},t.widget("ui.resizable",t.ui.mouse,{version:"1.12.1",widgetEventPrefix:"resize",options:{alsoResize:!1,animate:!1,animateDuration:"slow",animateEasing:"swing",aspectRatio:!1,autoHide:!1,classes:{"ui-resizable-se":"ui-icon ui-icon-gripsmall-diagonal-se"},containment:!1,ghost:!1,grid:!1,handles:"e,s,se",helper:!1,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:90,resize:null,start:null,stop:null},_num:function(t){return parseFloat(t)||0},_isNumber:function(t){return!isNaN(parseFloat(t))},_hasScroll:function(e,i){if("hidden"===t(e).css("overflow"))return!1;var s=i&&"left"===i?"scrollLeft":"scrollTop",n=!1;return e[s]>0?!0:(e[s]=1,n=e[s]>0,e[s]=0,n)},_create:function(){var e,i=this.options,s=this;this._addClass("ui-resizable"),t.extend(this,{_aspectRatio:!!i.aspectRatio,aspectRatio:i.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:i.helper||i.ghost||i.animate?i.helper||"ui-resizable-helper":null}),this.element[0].nodeName.match(/^(canvas|textarea|input|select|button|img)$/i)&&(this.element.wrap(t("
    ").css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("ui-resizable",this.element.resizable("instance")),this.elementIsWrapper=!0,e={marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom"),marginLeft:this.originalElement.css("marginLeft")},this.element.css(e),this.originalElement.css("margin",0),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css(e),this._proportionallyResize()),this._setupHandles(),i.autoHide&&t(this.element).on("mouseenter",function(){i.disabled||(s._removeClass("ui-resizable-autohide"),s._handles.show())}).on("mouseleave",function(){i.disabled||s.resizing||(s._addClass("ui-resizable-autohide"),s._handles.hide())}),this._mouseInit()},_destroy:function(){this._mouseDestroy();var e,i=function(e){t(e).removeData("resizable").removeData("ui-resizable").off(".resizable").find(".ui-resizable-handle").remove()};return this.elementIsWrapper&&(i(this.element),e=this.element,this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")}).insertAfter(e),e.remove()),this.originalElement.css("resize",this.originalResizeStyle),i(this.originalElement),this},_setOption:function(t,e){switch(this._super(t,e),t){case"handles":this._removeHandles(),this._setupHandles();break;default:}},_setupHandles:function(){var e,i,s,n,o,a=this.options,r=this;if(this.handles=a.handles||(t(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this._handles=t(),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),s=this.handles.split(","),this.handles={},i=0;s.length>i;i++)e=t.trim(s[i]),n="ui-resizable-"+e,o=t("
    "),this._addClass(o,"ui-resizable-handle "+n),o.css({zIndex:a.zIndex}),this.handles[e]=".ui-resizable-"+e,this.element.append(o);this._renderAxis=function(e){var i,s,n,o;e=e||this.element;for(i in this.handles)this.handles[i].constructor===String?this.handles[i]=this.element.children(this.handles[i]).first().show():(this.handles[i].jquery||this.handles[i].nodeType)&&(this.handles[i]=t(this.handles[i]),this._on(this.handles[i],{mousedown:r._mouseDown})),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)&&(s=t(this.handles[i],this.element),o=/sw|ne|nw|se|n|s/.test(i)?s.outerHeight():s.outerWidth(),n=["padding",/ne|nw|n/.test(i)?"Top":/se|sw|s/.test(i)?"Bottom":/^e$/.test(i)?"Right":"Left"].join(""),e.css(n,o),this._proportionallyResize()),this._handles=this._handles.add(this.handles[i])},this._renderAxis(this.element),this._handles=this._handles.add(this.element.find(".ui-resizable-handle")),this._handles.disableSelection(),this._handles.on("mouseover",function(){r.resizing||(this.className&&(o=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),r.axis=o&&o[1]?o[1]:"se")}),a.autoHide&&(this._handles.hide(),this._addClass("ui-resizable-autohide"))},_removeHandles:function(){this._handles.remove()},_mouseCapture:function(e){var i,s,n=!1;for(i in this.handles)s=t(this.handles[i])[0],(s===e.target||t.contains(s,e.target))&&(n=!0);return!this.options.disabled&&n},_mouseStart:function(e){var i,s,n,o=this.options,a=this.element;return this.resizing=!0,this._renderProxy(),i=this._num(this.helper.css("left")),s=this._num(this.helper.css("top")),o.containment&&(i+=t(o.containment).scrollLeft()||0,s+=t(o.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:i,top:s},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{width:a.width(),height:a.height()},this.originalSize=this._helper?{width:a.outerWidth(),height:a.outerHeight()}:{width:a.width(),height:a.height()},this.sizeDiff={width:a.outerWidth()-a.width(),height:a.outerHeight()-a.height()},this.originalPosition={left:i,top:s},this.originalMousePosition={left:e.pageX,top:e.pageY},this.aspectRatio="number"==typeof o.aspectRatio?o.aspectRatio:this.originalSize.width/this.originalSize.height||1,n=t(".ui-resizable-"+this.axis).css("cursor"),t("body").css("cursor","auto"===n?this.axis+"-resize":n),this._addClass("ui-resizable-resizing"),this._propagate("start",e),!0},_mouseDrag:function(e){var i,s,n=this.originalMousePosition,o=this.axis,a=e.pageX-n.left||0,r=e.pageY-n.top||0,h=this._change[o];return this._updatePrevProperties(),h?(i=h.apply(this,[e,a,r]),this._updateVirtualBoundaries(e.shiftKey),(this._aspectRatio||e.shiftKey)&&(i=this._updateRatio(i,e)),i=this._respectSize(i,e),this._updateCache(i),this._propagate("resize",e),s=this._applyChanges(),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),t.isEmptyObject(s)||(this._updatePrevProperties(),this._trigger("resize",e,this.ui()),this._applyChanges()),!1):!1},_mouseStop:function(e){this.resizing=!1;var i,s,n,o,a,r,h,l=this.options,c=this;return this._helper&&(i=this._proportionallyResizeElements,s=i.length&&/textarea/i.test(i[0].nodeName),n=s&&this._hasScroll(i[0],"left")?0:c.sizeDiff.height,o=s?0:c.sizeDiff.width,a={width:c.helper.width()-o,height:c.helper.height()-n},r=parseFloat(c.element.css("left"))+(c.position.left-c.originalPosition.left)||null,h=parseFloat(c.element.css("top"))+(c.position.top-c.originalPosition.top)||null,l.animate||this.element.css(t.extend(a,{top:h,left:r})),c.helper.height(c.size.height),c.helper.width(c.size.width),this._helper&&!l.animate&&this._proportionallyResize()),t("body").css("cursor","auto"),this._removeClass("ui-resizable-resizing"),this._propagate("stop",e),this._helper&&this.helper.remove(),!1},_updatePrevProperties:function(){this.prevPosition={top:this.position.top,left:this.position.left},this.prevSize={width:this.size.width,height:this.size.height}},_applyChanges:function(){var t={};return this.position.top!==this.prevPosition.top&&(t.top=this.position.top+"px"),this.position.left!==this.prevPosition.left&&(t.left=this.position.left+"px"),this.size.width!==this.prevSize.width&&(t.width=this.size.width+"px"),this.size.height!==this.prevSize.height&&(t.height=this.size.height+"px"),this.helper.css(t),t},_updateVirtualBoundaries:function(t){var e,i,s,n,o,a=this.options;o={minWidth:this._isNumber(a.minWidth)?a.minWidth:0,maxWidth:this._isNumber(a.maxWidth)?a.maxWidth:1/0,minHeight:this._isNumber(a.minHeight)?a.minHeight:0,maxHeight:this._isNumber(a.maxHeight)?a.maxHeight:1/0},(this._aspectRatio||t)&&(e=o.minHeight*this.aspectRatio,s=o.minWidth/this.aspectRatio,i=o.maxHeight*this.aspectRatio,n=o.maxWidth/this.aspectRatio,e>o.minWidth&&(o.minWidth=e),s>o.minHeight&&(o.minHeight=s),o.maxWidth>i&&(o.maxWidth=i),o.maxHeight>n&&(o.maxHeight=n)),this._vBoundaries=o},_updateCache:function(t){this.offset=this.helper.offset(),this._isNumber(t.left)&&(this.position.left=t.left),this._isNumber(t.top)&&(this.position.top=t.top),this._isNumber(t.height)&&(this.size.height=t.height),this._isNumber(t.width)&&(this.size.width=t.width)},_updateRatio:function(t){var e=this.position,i=this.size,s=this.axis;return this._isNumber(t.height)?t.width=t.height*this.aspectRatio:this._isNumber(t.width)&&(t.height=t.width/this.aspectRatio),"sw"===s&&(t.left=e.left+(i.width-t.width),t.top=null),"nw"===s&&(t.top=e.top+(i.height-t.height),t.left=e.left+(i.width-t.width)),t},_respectSize:function(t){var e=this._vBoundaries,i=this.axis,s=this._isNumber(t.width)&&e.maxWidth&&e.maxWidtht.width,a=this._isNumber(t.height)&&e.minHeight&&e.minHeight>t.height,r=this.originalPosition.left+this.originalSize.width,h=this.originalPosition.top+this.originalSize.height,l=/sw|nw|w/.test(i),c=/nw|ne|n/.test(i);return o&&(t.width=e.minWidth),a&&(t.height=e.minHeight),s&&(t.width=e.maxWidth),n&&(t.height=e.maxHeight),o&&l&&(t.left=r-e.minWidth),s&&l&&(t.left=r-e.maxWidth),a&&c&&(t.top=h-e.minHeight),n&&c&&(t.top=h-e.maxHeight),t.width||t.height||t.left||!t.top?t.width||t.height||t.top||!t.left||(t.left=null):t.top=null,t},_getPaddingPlusBorderDimensions:function(t){for(var e=0,i=[],s=[t.css("borderTopWidth"),t.css("borderRightWidth"),t.css("borderBottomWidth"),t.css("borderLeftWidth")],n=[t.css("paddingTop"),t.css("paddingRight"),t.css("paddingBottom"),t.css("paddingLeft")];4>e;e++)i[e]=parseFloat(s[e])||0,i[e]+=parseFloat(n[e])||0;return{height:i[0]+i[2],width:i[1]+i[3]}},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var t,e=0,i=this.helper||this.element;this._proportionallyResizeElements.length>e;e++)t=this._proportionallyResizeElements[e],this.outerDimensions||(this.outerDimensions=this._getPaddingPlusBorderDimensions(t)),t.css({height:i.height()-this.outerDimensions.height||0,width:i.width()-this.outerDimensions.width||0})},_renderProxy:function(){var e=this.element,i=this.options;this.elementOffset=e.offset(),this._helper?(this.helper=this.helper||t("
    "),this._addClass(this.helper,this._helper),this.helper.css({width:this.element.outerWidth(),height:this.element.outerHeight(),position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++i.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element -},_change:{e:function(t,e){return{width:this.originalSize.width+e}},w:function(t,e){var i=this.originalSize,s=this.originalPosition;return{left:s.left+e,width:i.width-e}},n:function(t,e,i){var s=this.originalSize,n=this.originalPosition;return{top:n.top+i,height:s.height-i}},s:function(t,e,i){return{height:this.originalSize.height+i}},se:function(e,i,s){return t.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[e,i,s]))},sw:function(e,i,s){return t.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[e,i,s]))},ne:function(e,i,s){return t.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[e,i,s]))},nw:function(e,i,s){return t.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[e,i,s]))}},_propagate:function(e,i){t.ui.plugin.call(this,e,[i,this.ui()]),"resize"!==e&&this._trigger(e,i,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),t.ui.plugin.add("resizable","animate",{stop:function(e){var i=t(this).resizable("instance"),s=i.options,n=i._proportionallyResizeElements,o=n.length&&/textarea/i.test(n[0].nodeName),a=o&&i._hasScroll(n[0],"left")?0:i.sizeDiff.height,r=o?0:i.sizeDiff.width,h={width:i.size.width-r,height:i.size.height-a},l=parseFloat(i.element.css("left"))+(i.position.left-i.originalPosition.left)||null,c=parseFloat(i.element.css("top"))+(i.position.top-i.originalPosition.top)||null;i.element.animate(t.extend(h,c&&l?{top:c,left:l}:{}),{duration:s.animateDuration,easing:s.animateEasing,step:function(){var s={width:parseFloat(i.element.css("width")),height:parseFloat(i.element.css("height")),top:parseFloat(i.element.css("top")),left:parseFloat(i.element.css("left"))};n&&n.length&&t(n[0]).css({width:s.width,height:s.height}),i._updateCache(s),i._propagate("resize",e)}})}}),t.ui.plugin.add("resizable","containment",{start:function(){var e,i,s,n,o,a,r,h=t(this).resizable("instance"),l=h.options,c=h.element,u=l.containment,d=u instanceof t?u.get(0):/parent/.test(u)?c.parent().get(0):u;d&&(h.containerElement=t(d),/document/.test(u)||u===document?(h.containerOffset={left:0,top:0},h.containerPosition={left:0,top:0},h.parentData={element:t(document),left:0,top:0,width:t(document).width(),height:t(document).height()||document.body.parentNode.scrollHeight}):(e=t(d),i=[],t(["Top","Right","Left","Bottom"]).each(function(t,s){i[t]=h._num(e.css("padding"+s))}),h.containerOffset=e.offset(),h.containerPosition=e.position(),h.containerSize={height:e.innerHeight()-i[3],width:e.innerWidth()-i[1]},s=h.containerOffset,n=h.containerSize.height,o=h.containerSize.width,a=h._hasScroll(d,"left")?d.scrollWidth:o,r=h._hasScroll(d)?d.scrollHeight:n,h.parentData={element:d,left:s.left,top:s.top,width:a,height:r}))},resize:function(e){var i,s,n,o,a=t(this).resizable("instance"),r=a.options,h=a.containerOffset,l=a.position,c=a._aspectRatio||e.shiftKey,u={top:0,left:0},d=a.containerElement,p=!0;d[0]!==document&&/static/.test(d.css("position"))&&(u=h),l.left<(a._helper?h.left:0)&&(a.size.width=a.size.width+(a._helper?a.position.left-h.left:a.position.left-u.left),c&&(a.size.height=a.size.width/a.aspectRatio,p=!1),a.position.left=r.helper?h.left:0),l.top<(a._helper?h.top:0)&&(a.size.height=a.size.height+(a._helper?a.position.top-h.top:a.position.top),c&&(a.size.width=a.size.height*a.aspectRatio,p=!1),a.position.top=a._helper?h.top:0),n=a.containerElement.get(0)===a.element.parent().get(0),o=/relative|absolute/.test(a.containerElement.css("position")),n&&o?(a.offset.left=a.parentData.left+a.position.left,a.offset.top=a.parentData.top+a.position.top):(a.offset.left=a.element.offset().left,a.offset.top=a.element.offset().top),i=Math.abs(a.sizeDiff.width+(a._helper?a.offset.left-u.left:a.offset.left-h.left)),s=Math.abs(a.sizeDiff.height+(a._helper?a.offset.top-u.top:a.offset.top-h.top)),i+a.size.width>=a.parentData.width&&(a.size.width=a.parentData.width-i,c&&(a.size.height=a.size.width/a.aspectRatio,p=!1)),s+a.size.height>=a.parentData.height&&(a.size.height=a.parentData.height-s,c&&(a.size.width=a.size.height*a.aspectRatio,p=!1)),p||(a.position.left=a.prevPosition.left,a.position.top=a.prevPosition.top,a.size.width=a.prevSize.width,a.size.height=a.prevSize.height)},stop:function(){var e=t(this).resizable("instance"),i=e.options,s=e.containerOffset,n=e.containerPosition,o=e.containerElement,a=t(e.helper),r=a.offset(),h=a.outerWidth()-e.sizeDiff.width,l=a.outerHeight()-e.sizeDiff.height;e._helper&&!i.animate&&/relative/.test(o.css("position"))&&t(this).css({left:r.left-n.left-s.left,width:h,height:l}),e._helper&&!i.animate&&/static/.test(o.css("position"))&&t(this).css({left:r.left-n.left-s.left,width:h,height:l})}}),t.ui.plugin.add("resizable","alsoResize",{start:function(){var e=t(this).resizable("instance"),i=e.options;t(i.alsoResize).each(function(){var e=t(this);e.data("ui-resizable-alsoresize",{width:parseFloat(e.width()),height:parseFloat(e.height()),left:parseFloat(e.css("left")),top:parseFloat(e.css("top"))})})},resize:function(e,i){var s=t(this).resizable("instance"),n=s.options,o=s.originalSize,a=s.originalPosition,r={height:s.size.height-o.height||0,width:s.size.width-o.width||0,top:s.position.top-a.top||0,left:s.position.left-a.left||0};t(n.alsoResize).each(function(){var e=t(this),s=t(this).data("ui-resizable-alsoresize"),n={},o=e.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];t.each(o,function(t,e){var i=(s[e]||0)+(r[e]||0);i&&i>=0&&(n[e]=i||null)}),e.css(n)})},stop:function(){t(this).removeData("ui-resizable-alsoresize")}}),t.ui.plugin.add("resizable","ghost",{start:function(){var e=t(this).resizable("instance"),i=e.size;e.ghost=e.originalElement.clone(),e.ghost.css({opacity:.25,display:"block",position:"relative",height:i.height,width:i.width,margin:0,left:0,top:0}),e._addClass(e.ghost,"ui-resizable-ghost"),t.uiBackCompat!==!1&&"string"==typeof e.options.ghost&&e.ghost.addClass(this.options.ghost),e.ghost.appendTo(e.helper)},resize:function(){var e=t(this).resizable("instance");e.ghost&&e.ghost.css({position:"relative",height:e.size.height,width:e.size.width})},stop:function(){var e=t(this).resizable("instance");e.ghost&&e.helper&&e.helper.get(0).removeChild(e.ghost.get(0))}}),t.ui.plugin.add("resizable","grid",{resize:function(){var e,i=t(this).resizable("instance"),s=i.options,n=i.size,o=i.originalSize,a=i.originalPosition,r=i.axis,h="number"==typeof s.grid?[s.grid,s.grid]:s.grid,l=h[0]||1,c=h[1]||1,u=Math.round((n.width-o.width)/l)*l,d=Math.round((n.height-o.height)/c)*c,p=o.width+u,f=o.height+d,m=s.maxWidth&&p>s.maxWidth,g=s.maxHeight&&f>s.maxHeight,_=s.minWidth&&s.minWidth>p,v=s.minHeight&&s.minHeight>f;s.grid=h,_&&(p+=l),v&&(f+=c),m&&(p-=l),g&&(f-=c),/^(se|s|e)$/.test(r)?(i.size.width=p,i.size.height=f):/^(ne)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.top=a.top-d):/^(sw)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.left=a.left-u):((0>=f-c||0>=p-l)&&(e=i._getPaddingPlusBorderDimensions(this)),f-c>0?(i.size.height=f,i.position.top=a.top-d):(f=c-e.height,i.size.height=f,i.position.top=a.top+o.height-f),p-l>0?(i.size.width=p,i.position.left=a.left-u):(p=l-e.width,i.size.width=p,i.position.left=a.left+o.width-p))}}),t.ui.resizable});/** - * Copyright (c) 2007 Ariel Flesler - aflesler ○ gmail • com | https://github.com/flesler - * Licensed under MIT - * @author Ariel Flesler - * @version 2.1.2 +/* + * jQuery JavaScript Library v1.7.1 + * http://jquery.com/ + * + * Copyright 2011, John Resig + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * Includes Sizzle.js + * http://sizzlejs.com/ + * Copyright 2011, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * + * Date: Mon Nov 21 21:11:03 2011 -0500 */ -;(function(f){"use strict";"function"===typeof define&&define.amd?define(["jquery"],f):"undefined"!==typeof module&&module.exports?module.exports=f(require("jquery")):f(jQuery)})(function($){"use strict";function n(a){return!a.nodeName||-1!==$.inArray(a.nodeName.toLowerCase(),["iframe","#document","html","body"])}function h(a){return $.isFunction(a)||$.isPlainObject(a)?a:{top:a,left:a}}var p=$.scrollTo=function(a,d,b){return $(window).scrollTo(a,d,b)};p.defaults={axis:"xy",duration:0,limit:!0};$.fn.scrollTo=function(a,d,b){"object"=== typeof d&&(b=d,d=0);"function"===typeof b&&(b={onAfter:b});"max"===a&&(a=9E9);b=$.extend({},p.defaults,b);d=d||b.duration;var u=b.queue&&1=f[g]?0:Math.min(f[g],n));!a&&1)[^>]*$|#([\w\-]*)$)/,bM=/\S/,bI=/^\s+/,bE=/\s+$/,bA=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,bN=/^[\],:{}\s]*$/,bW=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,bP=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,bJ=/(?:^|:|,)(?:\s*\[)+/g,by=/(webkit)[ \/]([\w.]+)/,bR=/(opera)(?:.*version)?[ \/]([\w.]+)/,bQ=/(msie) ([\w.]+)/,bS=/(mozilla)(?:.*? rv:([\w.]+))?/,bB=/-([a-z]|[0-9])/ig,bZ=/^-ms-/,bT=function(b0,b1){return(b1+"").toUpperCase()},bX=bu.userAgent,bV,bC,e,bL=Object.prototype.toString,bG=Object.prototype.hasOwnProperty,bz=Array.prototype.push,bK=Array.prototype.slice,bO=String.prototype.trim,bv=Array.prototype.indexOf,bx={};bF.fn=bF.prototype={constructor:bF,init:function(b0,b4,b3){var b2,b5,b1,b6;if(!b0){return this}if(b0.nodeType){this.context=this[0]=b0;this.length=1;return this}if(b0==="body"&&!b4&&av.body){this.context=av;this[0]=av.body;this.selector=b0;this.length=1;return this}if(typeof b0==="string"){if(b0.charAt(0)==="<"&&b0.charAt(b0.length-1)===">"&&b0.length>=3){b2=[null,b0,null]}else{b2=bY.exec(b0)}if(b2&&(b2[1]||!b4)){if(b2[1]){b4=b4 instanceof bF?b4[0]:b4;b6=(b4?b4.ownerDocument||b4:av);b1=bA.exec(b0);if(b1){if(bF.isPlainObject(b4)){b0=[av.createElement(b1[1])];bF.fn.attr.call(b0,b4,true)}else{b0=[b6.createElement(b1[1])]}}else{b1=bF.buildFragment([b2[1]],[b6]);b0=(b1.cacheable?bF.clone(b1.fragment):b1.fragment).childNodes}return bF.merge(this,b0)}else{b5=av.getElementById(b2[2]);if(b5&&b5.parentNode){if(b5.id!==b2[2]){return b3.find(b0)}this.length=1;this[0]=b5}this.context=av;this.selector=b0;return this}}else{if(!b4||b4.jquery){return(b4||b3).find(b0)}else{return this.constructor(b4).find(b0)}}}else{if(bF.isFunction(b0)){return b3.ready(b0)}}if(b0.selector!==L){this.selector=b0.selector;this.context=b0.context}return bF.makeArray(b0,this)},selector:"",jquery:"1.7.1",length:0,size:function(){return this.length},toArray:function(){return bK.call(this,0)},get:function(b0){return b0==null?this.toArray():(b0<0?this[this.length+b0]:this[b0])},pushStack:function(b1,b3,b0){var b2=this.constructor();if(bF.isArray(b1)){bz.apply(b2,b1)}else{bF.merge(b2,b1)}b2.prevObject=this;b2.context=this.context;if(b3==="find"){b2.selector=this.selector+(this.selector?" ":"")+b0}else{if(b3){b2.selector=this.selector+"."+b3+"("+b0+")"}}return b2},each:function(b1,b0){return bF.each(this,b1,b0)},ready:function(b0){bF.bindReady();bC.add(b0);return this},eq:function(b0){b0=+b0;return b0===-1?this.slice(b0):this.slice(b0,b0+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(bK.apply(this,arguments),"slice",bK.call(arguments).join(","))},map:function(b0){return this.pushStack(bF.map(this,function(b2,b1){return b0.call(b2,b1,b2)}))},end:function(){return this.prevObject||this.constructor(null)},push:bz,sort:[].sort,splice:[].splice};bF.fn.init.prototype=bF.fn;bF.extend=bF.fn.extend=function(){var b9,b2,b0,b1,b6,b7,b5=arguments[0]||{},b4=1,b3=arguments.length,b8=false;if(typeof b5==="boolean"){b8=b5;b5=arguments[1]||{};b4=2}if(typeof b5!=="object"&&!bF.isFunction(b5)){b5={}}if(b3===b4){b5=this;--b4}for(;b40){return}bC.fireWith(av,[bF]);if(bF.fn.trigger){bF(av).trigger("ready").off("ready")}}},bindReady:function(){if(bC){return}bC=bF.Callbacks("once memory");if(av.readyState==="complete"){return setTimeout(bF.ready,1)}if(av.addEventListener){av.addEventListener("DOMContentLoaded",e,false);bb.addEventListener("load",bF.ready,false)}else{if(av.attachEvent){av.attachEvent("onreadystatechange",e);bb.attachEvent("onload",bF.ready);var b0=false;try{b0=bb.frameElement==null}catch(b1){}if(av.documentElement.doScroll&&b0){bw()}}}},isFunction:function(b0){return bF.type(b0)==="function"},isArray:Array.isArray||function(b0){return bF.type(b0)==="array"},isWindow:function(b0){return b0&&typeof b0==="object"&&"setInterval" in b0},isNumeric:function(b0){return !isNaN(parseFloat(b0))&&isFinite(b0)},type:function(b0){return b0==null?String(b0):bx[bL.call(b0)]||"object"},isPlainObject:function(b2){if(!b2||bF.type(b2)!=="object"||b2.nodeType||bF.isWindow(b2)){return false}try{if(b2.constructor&&!bG.call(b2,"constructor")&&!bG.call(b2.constructor.prototype,"isPrototypeOf")){return false}}catch(b1){return false}var b0;for(b0 in b2){}return b0===L||bG.call(b2,b0)},isEmptyObject:function(b1){for(var b0 in b1){return false}return true},error:function(b0){throw new Error(b0)},parseJSON:function(b0){if(typeof b0!=="string"||!b0){return null}b0=bF.trim(b0);if(bb.JSON&&bb.JSON.parse){return bb.JSON.parse(b0)}if(bN.test(b0.replace(bW,"@").replace(bP,"]").replace(bJ,""))){return(new Function("return "+b0))()}bF.error("Invalid JSON: "+b0)},parseXML:function(b2){var b0,b1;try{if(bb.DOMParser){b1=new DOMParser();b0=b1.parseFromString(b2,"text/xml")}else{b0=new ActiveXObject("Microsoft.XMLDOM");b0.async="false";b0.loadXML(b2)}}catch(b3){b0=L}if(!b0||!b0.documentElement||b0.getElementsByTagName("parsererror").length){bF.error("Invalid XML: "+b2)}return b0},noop:function(){},globalEval:function(b0){if(b0&&bM.test(b0)){(bb.execScript||function(b1){bb["eval"].call(bb,b1)})(b0)}},camelCase:function(b0){return b0.replace(bZ,"ms-").replace(bB,bT)},nodeName:function(b1,b0){return b1.nodeName&&b1.nodeName.toUpperCase()===b0.toUpperCase()},each:function(b3,b6,b2){var b1,b4=0,b5=b3.length,b0=b5===L||bF.isFunction(b3);if(b2){if(b0){for(b1 in b3){if(b6.apply(b3[b1],b2)===false){break}}}else{for(;b40&&b0[0]&&b0[b1-1])||b1===0||bF.isArray(b0));if(b3){for(;b21?aJ.call(arguments,0):bG;if(!(--bw)){bC.resolveWith(bC,bx)}}}function bz(bF){return function(bG){bB[bF]=arguments.length>1?aJ.call(arguments,0):bG;bC.notifyWith(bE,bB)}}if(e>1){for(;bv
    a";bI=bv.getElementsByTagName("*");bF=bv.getElementsByTagName("a")[0];if(!bI||!bI.length||!bF){return{}}bG=av.createElement("select");bx=bG.appendChild(av.createElement("option"));bE=bv.getElementsByTagName("input")[0];bJ={leadingWhitespace:(bv.firstChild.nodeType===3),tbody:!bv.getElementsByTagName("tbody").length,htmlSerialize:!!bv.getElementsByTagName("link").length,style:/top/.test(bF.getAttribute("style")),hrefNormalized:(bF.getAttribute("href")==="/a"),opacity:/^0.55/.test(bF.style.opacity),cssFloat:!!bF.style.cssFloat,checkOn:(bE.value==="on"),optSelected:bx.selected,getSetAttribute:bv.className!=="t",enctype:!!av.createElement("form").enctype,html5Clone:av.createElement("nav").cloneNode(true).outerHTML!=="<:nav>",submitBubbles:true,changeBubbles:true,focusinBubbles:false,deleteExpando:true,noCloneEvent:true,inlineBlockNeedsLayout:false,shrinkWrapBlocks:false,reliableMarginRight:true};bE.checked=true;bJ.noCloneChecked=bE.cloneNode(true).checked;bG.disabled=true;bJ.optDisabled=!bx.disabled;try{delete bv.test}catch(bC){bJ.deleteExpando=false}if(!bv.addEventListener&&bv.attachEvent&&bv.fireEvent){bv.attachEvent("onclick",function(){bJ.noCloneEvent=false});bv.cloneNode(true).fireEvent("onclick")}bE=av.createElement("input");bE.value="t";bE.setAttribute("type","radio");bJ.radioValue=bE.value==="t";bE.setAttribute("checked","checked");bv.appendChild(bE);bD=av.createDocumentFragment();bD.appendChild(bv.lastChild);bJ.checkClone=bD.cloneNode(true).cloneNode(true).lastChild.checked;bJ.appendChecked=bE.checked;bD.removeChild(bE);bD.appendChild(bv);bv.innerHTML="";if(bb.getComputedStyle){bA=av.createElement("div");bA.style.width="0";bA.style.marginRight="0";bv.style.width="2px";bv.appendChild(bA);bJ.reliableMarginRight=(parseInt((bb.getComputedStyle(bA,null)||{marginRight:0}).marginRight,10)||0)===0}if(bv.attachEvent){for(by in {submit:1,change:1,focusin:1}){bB="on"+by;bw=(bB in bv);if(!bw){bv.setAttribute(bB,"return;");bw=(typeof bv[bB]==="function")}bJ[by+"Bubbles"]=bw}}bD.removeChild(bv);bD=bG=bx=bA=bv=bE=null;b(function(){var bM,bU,bV,bT,bN,bO,bL,bS,bR,e,bP,bQ=av.getElementsByTagName("body")[0];if(!bQ){return}bL=1;bS="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;";bR="visibility:hidden;border:0;";e="style='"+bS+"border:5px solid #000;padding:0;'";bP="
    ";bM=av.createElement("div");bM.style.cssText=bR+"width:0;height:0;position:static;top:0;margin-top:"+bL+"px";bQ.insertBefore(bM,bQ.firstChild);bv=av.createElement("div");bM.appendChild(bv);bv.innerHTML="
    t
    ";bz=bv.getElementsByTagName("td");bw=(bz[0].offsetHeight===0);bz[0].style.display="";bz[1].style.display="none";bJ.reliableHiddenOffsets=bw&&(bz[0].offsetHeight===0);bv.innerHTML="";bv.style.width=bv.style.paddingLeft="1px";b.boxModel=bJ.boxModel=bv.offsetWidth===2;if(typeof bv.style.zoom!=="undefined"){bv.style.display="inline";bv.style.zoom=1;bJ.inlineBlockNeedsLayout=(bv.offsetWidth===2);bv.style.display="";bv.innerHTML="
    ";bJ.shrinkWrapBlocks=(bv.offsetWidth!==2)}bv.style.cssText=bS+bR;bv.innerHTML=bP;bU=bv.firstChild;bV=bU.firstChild;bN=bU.nextSibling.firstChild.firstChild;bO={doesNotAddBorder:(bV.offsetTop!==5),doesAddBorderForTableAndCells:(bN.offsetTop===5)};bV.style.position="fixed";bV.style.top="20px";bO.fixedPosition=(bV.offsetTop===20||bV.offsetTop===15);bV.style.position=bV.style.top="";bU.style.overflow="hidden";bU.style.position="relative";bO.subtractsBorderForOverflowNotVisible=(bV.offsetTop===-5);bO.doesNotIncludeMarginInBodyOffset=(bQ.offsetTop!==bL);bQ.removeChild(bM);bv=bM=null;b.extend(bJ,bO)});return bJ})();var aS=/^(?:\{.*\}|\[.*\])$/,aA=/([A-Z])/g;b.extend({cache:{},uuid:0,expando:"jQuery"+(b.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:true,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:true},hasData:function(e){e=e.nodeType?b.cache[e[b.expando]]:e[b.expando];return !!e&&!S(e)},data:function(bx,bv,bz,by){if(!b.acceptData(bx)){return}var bG,bA,bD,bE=b.expando,bC=typeof bv==="string",bF=bx.nodeType,e=bF?b.cache:bx,bw=bF?bx[bE]:bx[bE]&&bE,bB=bv==="events";if((!bw||!e[bw]||(!bB&&!by&&!e[bw].data))&&bC&&bz===L){return}if(!bw){if(bF){bx[bE]=bw=++b.uuid}else{bw=bE}}if(!e[bw]){e[bw]={};if(!bF){e[bw].toJSON=b.noop}}if(typeof bv==="object"||typeof bv==="function"){if(by){e[bw]=b.extend(e[bw],bv)}else{e[bw].data=b.extend(e[bw].data,bv)}}bG=bA=e[bw];if(!by){if(!bA.data){bA.data={}}bA=bA.data}if(bz!==L){bA[b.camelCase(bv)]=bz}if(bB&&!bA[bv]){return bG.events}if(bC){bD=bA[bv];if(bD==null){bD=bA[b.camelCase(bv)]}}else{bD=bA}return bD},removeData:function(bx,bv,by){if(!b.acceptData(bx)){return}var bB,bA,bz,bC=b.expando,bD=bx.nodeType,e=bD?b.cache:bx,bw=bD?bx[bC]:bC;if(!e[bw]){return}if(bv){bB=by?e[bw]:e[bw].data;if(bB){if(!b.isArray(bv)){if(bv in bB){bv=[bv]}else{bv=b.camelCase(bv);if(bv in bB){bv=[bv]}else{bv=bv.split(" ")}}}for(bA=0,bz=bv.length;bA-1){return true}}return false},val:function(bx){var e,bv,by,bw=this[0];if(!arguments.length){if(bw){e=b.valHooks[bw.nodeName.toLowerCase()]||b.valHooks[bw.type];if(e&&"get" in e&&(bv=e.get(bw,"value"))!==L){return bv}bv=bw.value;return typeof bv==="string"?bv.replace(aU,""):bv==null?"":bv}return}by=b.isFunction(bx);return this.each(function(bA){var bz=b(this),bB;if(this.nodeType!==1){return}if(by){bB=bx.call(this,bA,bz.val())}else{bB=bx}if(bB==null){bB=""}else{if(typeof bB==="number"){bB+=""}else{if(b.isArray(bB)){bB=b.map(bB,function(bC){return bC==null?"":bC+""})}}}e=b.valHooks[this.nodeName.toLowerCase()]||b.valHooks[this.type];if(!e||!("set" in e)||e.set(this,bB,"value")===L){this.value=bB}})}});b.extend({valHooks:{option:{get:function(e){var bv=e.attributes.value;return !bv||bv.specified?e.value:e.text}},select:{get:function(e){var bA,bv,bz,bx,by=e.selectedIndex,bB=[],bC=e.options,bw=e.type==="select-one";if(by<0){return null}bv=bw?by:0;bz=bw?by+1:bC.length;for(;bv=0});if(!e.length){bv.selectedIndex=-1}return e}}},attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(bA,bx,bB,bz){var bw,e,by,bv=bA.nodeType;if(!bA||bv===3||bv===8||bv===2){return}if(bz&&bx in b.attrFn){return b(bA)[bx](bB)}if(typeof bA.getAttribute==="undefined"){return b.prop(bA,bx,bB)}by=bv!==1||!b.isXMLDoc(bA);if(by){bx=bx.toLowerCase();e=b.attrHooks[bx]||(ao.test(bx)?aY:be)}if(bB!==L){if(bB===null){b.removeAttr(bA,bx);return}else{if(e&&"set" in e&&by&&(bw=e.set(bA,bB,bx))!==L){return bw}else{bA.setAttribute(bx,""+bB);return bB}}}else{if(e&&"get" in e&&by&&(bw=e.get(bA,bx))!==null){return bw}else{bw=bA.getAttribute(bx);return bw===null?L:bw}}},removeAttr:function(bx,bz){var by,bA,bv,e,bw=0;if(bz&&bx.nodeType===1){bA=bz.toLowerCase().split(af);e=bA.length;for(;bw=0)}}})});var bd=/^(?:textarea|input|select)$/i,n=/^([^\.]*)?(?:\.(.+))?$/,J=/\bhover(\.\S+)?\b/,aO=/^key/,bf=/^(?:mouse|contextmenu)|click/,T=/^(?:focusinfocus|focusoutblur)$/,U=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,Y=function(e){var bv=U.exec(e);if(bv){bv[1]=(bv[1]||"").toLowerCase();bv[3]=bv[3]&&new RegExp("(?:^|\\s)"+bv[3]+"(?:\\s|$)")}return bv},j=function(bw,e){var bv=bw.attributes||{};return((!e[1]||bw.nodeName.toLowerCase()===e[1])&&(!e[2]||(bv.id||{}).value===e[2])&&(!e[3]||e[3].test((bv["class"]||{}).value)))},bt=function(e){return b.event.special.hover?e:e.replace(J,"mouseenter$1 mouseleave$1")};b.event={add:function(bx,bC,bJ,bA,by){var bD,bB,bK,bI,bH,bF,e,bG,bv,bz,bw,bE;if(bx.nodeType===3||bx.nodeType===8||!bC||!bJ||!(bD=b._data(bx))){return}if(bJ.handler){bv=bJ;bJ=bv.handler}if(!bJ.guid){bJ.guid=b.guid++}bK=bD.events;if(!bK){bD.events=bK={}}bB=bD.handle;if(!bB){bD.handle=bB=function(bL){return typeof b!=="undefined"&&(!bL||b.event.triggered!==bL.type)?b.event.dispatch.apply(bB.elem,arguments):L};bB.elem=bx}bC=b.trim(bt(bC)).split(" ");for(bI=0;bI=0){bG=bG.slice(0,-1);bw=true}if(bG.indexOf(".")>=0){bx=bG.split(".");bG=bx.shift();bx.sort()}if((!bA||b.event.customEvent[bG])&&!b.event.global[bG]){return}bv=typeof bv==="object"?bv[b.expando]?bv:new b.Event(bG,bv):new b.Event(bG);bv.type=bG;bv.isTrigger=true;bv.exclusive=bw;bv.namespace=bx.join(".");bv.namespace_re=bv.namespace?new RegExp("(^|\\.)"+bx.join("\\.(?:.*\\.)?")+"(\\.|$)"):null;by=bG.indexOf(":")<0?"on"+bG:"";if(!bA){e=b.cache;for(bC in e){if(e[bC].events&&e[bC].events[bG]){b.event.trigger(bv,bD,e[bC].handle.elem,true)}}return}bv.result=L;if(!bv.target){bv.target=bA}bD=bD!=null?b.makeArray(bD):[];bD.unshift(bv);bF=b.event.special[bG]||{};if(bF.trigger&&bF.trigger.apply(bA,bD)===false){return}bB=[[bA,bF.bindType||bG]];if(!bJ&&!bF.noBubble&&!b.isWindow(bA)){bI=bF.delegateType||bG;bH=T.test(bI+bG)?bA:bA.parentNode;bz=null;for(;bH;bH=bH.parentNode){bB.push([bH,bI]);bz=bH}if(bz&&bz===bA.ownerDocument){bB.push([bz.defaultView||bz.parentWindow||bb,bI])}}for(bC=0;bCbA){bH.push({elem:this,matches:bz.slice(bA)})}for(bC=0;bC0?this.on(e,null,bx,bw):this.trigger(e)};if(b.attrFn){b.attrFn[e]=true}if(aO.test(e)){b.event.fixHooks[e]=b.event.keyHooks}if(bf.test(e)){b.event.fixHooks[e]=b.event.mouseHooks}}); +/* + * Sizzle CSS Selector Engine + * Copyright 2011, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * More information: http://sizzlejs.com/ + */ +(function(){var bH=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,bC="sizcache"+(Math.random()+"").replace(".",""),bI=0,bL=Object.prototype.toString,bB=false,bA=true,bK=/\\/g,bO=/\r\n/g,bQ=/\W/;[0,0].sort(function(){bA=false;return 0});var by=function(bV,e,bY,bZ){bY=bY||[];e=e||av;var b1=e;if(e.nodeType!==1&&e.nodeType!==9){return[]}if(!bV||typeof bV!=="string"){return bY}var bS,b3,b6,bR,b2,b5,b4,bX,bU=true,bT=by.isXML(e),bW=[],b0=bV;do{bH.exec("");bS=bH.exec(b0);if(bS){b0=bS[3];bW.push(bS[1]);if(bS[2]){bR=bS[3];break}}}while(bS);if(bW.length>1&&bD.exec(bV)){if(bW.length===2&&bE.relative[bW[0]]){b3=bM(bW[0]+bW[1],e,bZ)}else{b3=bE.relative[bW[0]]?[e]:by(bW.shift(),e);while(bW.length){bV=bW.shift();if(bE.relative[bV]){bV+=bW.shift()}b3=bM(bV,b3,bZ)}}}else{if(!bZ&&bW.length>1&&e.nodeType===9&&!bT&&bE.match.ID.test(bW[0])&&!bE.match.ID.test(bW[bW.length-1])){b2=by.find(bW.shift(),e,bT);e=b2.expr?by.filter(b2.expr,b2.set)[0]:b2.set[0]}if(e){b2=bZ?{expr:bW.pop(),set:bF(bZ)}:by.find(bW.pop(),bW.length===1&&(bW[0]==="~"||bW[0]==="+")&&e.parentNode?e.parentNode:e,bT);b3=b2.expr?by.filter(b2.expr,b2.set):b2.set;if(bW.length>0){b6=bF(b3)}else{bU=false}while(bW.length){b5=bW.pop();b4=b5;if(!bE.relative[b5]){b5=""}else{b4=bW.pop()}if(b4==null){b4=e}bE.relative[b5](b6,b4,bT)}}else{b6=bW=[]}}if(!b6){b6=b3}if(!b6){by.error(b5||bV)}if(bL.call(b6)==="[object Array]"){if(!bU){bY.push.apply(bY,b6)}else{if(e&&e.nodeType===1){for(bX=0;b6[bX]!=null;bX++){if(b6[bX]&&(b6[bX]===true||b6[bX].nodeType===1&&by.contains(e,b6[bX]))){bY.push(b3[bX])}}}else{for(bX=0;b6[bX]!=null;bX++){if(b6[bX]&&b6[bX].nodeType===1){bY.push(b3[bX])}}}}}else{bF(b6,bY)}if(bR){by(bR,b1,bY,bZ);by.uniqueSort(bY)}return bY};by.uniqueSort=function(bR){if(bJ){bB=bA;bR.sort(bJ);if(bB){for(var e=1;e0};by.find=function(bX,e,bY){var bW,bS,bU,bT,bV,bR;if(!bX){return[]}for(bS=0,bU=bE.order.length;bS":function(bW,bR){var bV,bU=typeof bR==="string",bS=0,e=bW.length;if(bU&&!bQ.test(bR)){bR=bR.toLowerCase();for(;bS=0)){if(!bS){e.push(bV)}}else{if(bS){bR[bU]=false}}}}return false},ID:function(e){return e[1].replace(bK,"")},TAG:function(bR,e){return bR[1].replace(bK,"").toLowerCase()},CHILD:function(e){if(e[1]==="nth"){if(!e[2]){by.error(e[0])}e[2]=e[2].replace(/^\+|\s*/g,"");var bR=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(e[2]==="even"&&"2n"||e[2]==="odd"&&"2n+1"||!/\D/.test(e[2])&&"0n+"+e[2]||e[2]);e[2]=(bR[1]+(bR[2]||1))-0;e[3]=bR[3]-0}else{if(e[2]){by.error(e[0])}}e[0]=bI++;return e},ATTR:function(bU,bR,bS,e,bV,bW){var bT=bU[1]=bU[1].replace(bK,"");if(!bW&&bE.attrMap[bT]){bU[1]=bE.attrMap[bT]}bU[4]=(bU[4]||bU[5]||"").replace(bK,"");if(bU[2]==="~="){bU[4]=" "+bU[4]+" "}return bU},PSEUDO:function(bU,bR,bS,e,bV){if(bU[1]==="not"){if((bH.exec(bU[3])||"").length>1||/^\w/.test(bU[3])){bU[3]=by(bU[3],null,null,bR)}else{var bT=by.filter(bU[3],bR,bS,true^bV);if(!bS){e.push.apply(e,bT)}return false}}else{if(bE.match.POS.test(bU[0])||bE.match.CHILD.test(bU[0])){return true}}return bU},POS:function(e){e.unshift(true);return e}},filters:{enabled:function(e){return e.disabled===false&&e.type!=="hidden"},disabled:function(e){return e.disabled===true},checked:function(e){return e.checked===true},selected:function(e){if(e.parentNode){e.parentNode.selectedIndex}return e.selected===true},parent:function(e){return !!e.firstChild},empty:function(e){return !e.firstChild},has:function(bS,bR,e){return !!by(e[3],bS).length},header:function(e){return(/h\d/i).test(e.nodeName)},text:function(bS){var e=bS.getAttribute("type"),bR=bS.type;return bS.nodeName.toLowerCase()==="input"&&"text"===bR&&(e===bR||e===null)},radio:function(e){return e.nodeName.toLowerCase()==="input"&&"radio"===e.type},checkbox:function(e){return e.nodeName.toLowerCase()==="input"&&"checkbox"===e.type},file:function(e){return e.nodeName.toLowerCase()==="input"&&"file"===e.type},password:function(e){return e.nodeName.toLowerCase()==="input"&&"password"===e.type},submit:function(bR){var e=bR.nodeName.toLowerCase();return(e==="input"||e==="button")&&"submit"===bR.type},image:function(e){return e.nodeName.toLowerCase()==="input"&&"image"===e.type},reset:function(bR){var e=bR.nodeName.toLowerCase();return(e==="input"||e==="button")&&"reset"===bR.type},button:function(bR){var e=bR.nodeName.toLowerCase();return e==="input"&&"button"===bR.type||e==="button"},input:function(e){return(/input|select|textarea|button/i).test(e.nodeName)},focus:function(e){return e===e.ownerDocument.activeElement}},setFilters:{first:function(bR,e){return e===0},last:function(bS,bR,e,bT){return bR===bT.length-1},even:function(bR,e){return e%2===0},odd:function(bR,e){return e%2===1},lt:function(bS,bR,e){return bRe[3]-0},nth:function(bS,bR,e){return e[3]-0===bR},eq:function(bS,bR,e){return e[3]-0===bR}},filter:{PSEUDO:function(bS,bX,bW,bY){var e=bX[1],bR=bE.filters[e];if(bR){return bR(bS,bW,bX,bY)}else{if(e==="contains"){return(bS.textContent||bS.innerText||bw([bS])||"").indexOf(bX[3])>=0}else{if(e==="not"){var bT=bX[3];for(var bV=0,bU=bT.length;bV=0)}}},ID:function(bR,e){return bR.nodeType===1&&bR.getAttribute("id")===e},TAG:function(bR,e){return(e==="*"&&bR.nodeType===1)||!!bR.nodeName&&bR.nodeName.toLowerCase()===e},CLASS:function(bR,e){return(" "+(bR.className||bR.getAttribute("class"))+" ").indexOf(e)>-1},ATTR:function(bV,bT){var bS=bT[1],e=by.attr?by.attr(bV,bS):bE.attrHandle[bS]?bE.attrHandle[bS](bV):bV[bS]!=null?bV[bS]:bV.getAttribute(bS),bW=e+"",bU=bT[2],bR=bT[4];return e==null?bU==="!=":!bU&&by.attr?e!=null:bU==="="?bW===bR:bU==="*="?bW.indexOf(bR)>=0:bU==="~="?(" "+bW+" ").indexOf(bR)>=0:!bR?bW&&e!==false:bU==="!="?bW!==bR:bU==="^="?bW.indexOf(bR)===0:bU==="$="?bW.substr(bW.length-bR.length)===bR:bU==="|="?bW===bR||bW.substr(0,bR.length+1)===bR+"-":false},POS:function(bU,bR,bS,bV){var e=bR[2],bT=bE.setFilters[e];if(bT){return bT(bU,bS,bR,bV)}}}};var bD=bE.match.POS,bx=function(bR,e){return"\\"+(e-0+1)};for(var bz in bE.match){bE.match[bz]=new RegExp(bE.match[bz].source+(/(?![^\[]*\])(?![^\(]*\))/.source));bE.leftMatch[bz]=new RegExp(/(^(?:.|\r|\n)*?)/.source+bE.match[bz].source.replace(/\\(\d+)/g,bx))}var bF=function(bR,e){bR=Array.prototype.slice.call(bR,0);if(e){e.push.apply(e,bR);return e}return bR};try{Array.prototype.slice.call(av.documentElement.childNodes,0)[0].nodeType}catch(bP){bF=function(bU,bT){var bS=0,bR=bT||[];if(bL.call(bU)==="[object Array]"){Array.prototype.push.apply(bR,bU)}else{if(typeof bU.length==="number"){for(var e=bU.length;bS";e.insertBefore(bR,e.firstChild);if(av.getElementById(bS)){bE.find.ID=function(bU,bV,bW){if(typeof bV.getElementById!=="undefined"&&!bW){var bT=bV.getElementById(bU[1]);return bT?bT.id===bU[1]||typeof bT.getAttributeNode!=="undefined"&&bT.getAttributeNode("id").nodeValue===bU[1]?[bT]:L:[]}};bE.filter.ID=function(bV,bT){var bU=typeof bV.getAttributeNode!=="undefined"&&bV.getAttributeNode("id");return bV.nodeType===1&&bU&&bU.nodeValue===bT}}e.removeChild(bR);e=bR=null})();(function(){var e=av.createElement("div");e.appendChild(av.createComment(""));if(e.getElementsByTagName("*").length>0){bE.find.TAG=function(bR,bV){var bU=bV.getElementsByTagName(bR[1]);if(bR[1]==="*"){var bT=[];for(var bS=0;bU[bS];bS++){if(bU[bS].nodeType===1){bT.push(bU[bS])}}bU=bT}return bU}}e.innerHTML="";if(e.firstChild&&typeof e.firstChild.getAttribute!=="undefined"&&e.firstChild.getAttribute("href")!=="#"){bE.attrHandle.href=function(bR){return bR.getAttribute("href",2)}}e=null})();if(av.querySelectorAll){(function(){var e=by,bT=av.createElement("div"),bS="__sizzle__";bT.innerHTML="

    ";if(bT.querySelectorAll&&bT.querySelectorAll(".TEST").length===0){return}by=function(b4,bV,bZ,b3){bV=bV||av;if(!b3&&!by.isXML(bV)){var b2=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b4);if(b2&&(bV.nodeType===1||bV.nodeType===9)){if(b2[1]){return bF(bV.getElementsByTagName(b4),bZ)}else{if(b2[2]&&bE.find.CLASS&&bV.getElementsByClassName){return bF(bV.getElementsByClassName(b2[2]),bZ)}}}if(bV.nodeType===9){if(b4==="body"&&bV.body){return bF([bV.body],bZ)}else{if(b2&&b2[3]){var bY=bV.getElementById(b2[3]);if(bY&&bY.parentNode){if(bY.id===b2[3]){return bF([bY],bZ)}}else{return bF([],bZ)}}}try{return bF(bV.querySelectorAll(b4),bZ)}catch(b0){}}else{if(bV.nodeType===1&&bV.nodeName.toLowerCase()!=="object"){var bW=bV,bX=bV.getAttribute("id"),bU=bX||bS,b6=bV.parentNode,b5=/^\s*[+~]/.test(b4);if(!bX){bV.setAttribute("id",bU)}else{bU=bU.replace(/'/g,"\\$&")}if(b5&&b6){bV=bV.parentNode}try{if(!b5||b6){return bF(bV.querySelectorAll("[id='"+bU+"'] "+b4),bZ)}}catch(b1){}finally{if(!bX){bW.removeAttribute("id")}}}}}return e(b4,bV,bZ,b3)};for(var bR in e){by[bR]=e[bR]}bT=null})()}(function(){var e=av.documentElement,bS=e.matchesSelector||e.mozMatchesSelector||e.webkitMatchesSelector||e.msMatchesSelector;if(bS){var bU=!bS.call(av.createElement("div"),"div"),bR=false;try{bS.call(av.documentElement,"[test!='']:sizzle")}catch(bT){bR=true}by.matchesSelector=function(bW,bY){bY=bY.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!by.isXML(bW)){try{if(bR||!bE.match.PSEUDO.test(bY)&&!/!=/.test(bY)){var bV=bS.call(bW,bY);if(bV||!bU||bW.document&&bW.document.nodeType!==11){return bV}}}catch(bX){}}return by(bY,null,null,[bW]).length>0}}})();(function(){var e=av.createElement("div");e.innerHTML="
    ";if(!e.getElementsByClassName||e.getElementsByClassName("e").length===0){return}e.lastChild.className="e";if(e.getElementsByClassName("e").length===1){return}bE.order.splice(1,0,"CLASS");bE.find.CLASS=function(bR,bS,bT){if(typeof bS.getElementsByClassName!=="undefined"&&!bT){return bS.getElementsByClassName(bR[1])}};e=null})();function bv(bR,bW,bV,bZ,bX,bY){for(var bT=0,bS=bZ.length;bT0){bU=e;break}}}e=e[bR]}bZ[bT]=bU}}}if(av.documentElement.contains){by.contains=function(bR,e){return bR!==e&&(bR.contains?bR.contains(e):true)}}else{if(av.documentElement.compareDocumentPosition){by.contains=function(bR,e){return !!(bR.compareDocumentPosition(e)&16)}}else{by.contains=function(){return false}}}by.isXML=function(e){var bR=(e?e.ownerDocument||e:0).documentElement;return bR?bR.nodeName!=="HTML":false};var bM=function(bS,e,bW){var bV,bX=[],bU="",bY=e.nodeType?[e]:e;while((bV=bE.match.PSEUDO.exec(bS))){bU+=bV[0];bS=bS.replace(bE.match.PSEUDO,"")}bS=bE.relative[bS]?bS+"*":bS;for(var bT=0,bR=bY.length;bT0){for(bB=bA;bB=0:b.filter(e,this).length>0:this.filter(e).length>0)},closest:function(by,bx){var bv=[],bw,e,bz=this[0];if(b.isArray(by)){var bB=1;while(bz&&bz.ownerDocument&&bz!==bx){for(bw=0;bw-1:b.find.matchesSelector(bz,by)){bv.push(bz);break}else{bz=bz.parentNode;if(!bz||!bz.ownerDocument||bz===bx||bz.nodeType===11){break}}}}bv=bv.length>1?b.unique(bv):bv;return this.pushStack(bv,"closest",by)},index:function(e){if(!e){return(this[0]&&this[0].parentNode)?this.prevAll().length:-1}if(typeof e==="string"){return b.inArray(this[0],b(e))}return b.inArray(e.jquery?e[0]:e,this)},add:function(e,bv){var bx=typeof e==="string"?b(e,bv):b.makeArray(e&&e.nodeType?[e]:e),bw=b.merge(this.get(),bx);return this.pushStack(C(bx[0])||C(bw[0])?bw:b.unique(bw))},andSelf:function(){return this.add(this.prevObject)}});function C(e){return !e||!e.parentNode||e.parentNode.nodeType===11}b.each({parent:function(bv){var e=bv.parentNode;return e&&e.nodeType!==11?e:null},parents:function(e){return b.dir(e,"parentNode")},parentsUntil:function(bv,e,bw){return b.dir(bv,"parentNode",bw)},next:function(e){return b.nth(e,2,"nextSibling")},prev:function(e){return b.nth(e,2,"previousSibling")},nextAll:function(e){return b.dir(e,"nextSibling")},prevAll:function(e){return b.dir(e,"previousSibling")},nextUntil:function(bv,e,bw){return b.dir(bv,"nextSibling",bw)},prevUntil:function(bv,e,bw){return b.dir(bv,"previousSibling",bw)},siblings:function(e){return b.sibling(e.parentNode.firstChild,e)},children:function(e){return b.sibling(e.firstChild)},contents:function(e){return b.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:b.makeArray(e.childNodes)}},function(e,bv){b.fn[e]=function(by,bw){var bx=b.map(this,bv,by);if(!ab.test(e)){bw=by}if(bw&&typeof bw==="string"){bx=b.filter(bw,bx)}bx=this.length>1&&!ay[e]?b.unique(bx):bx;if((this.length>1||a9.test(bw))&&aq.test(e)){bx=bx.reverse()}return this.pushStack(bx,e,P.call(arguments).join(","))}});b.extend({filter:function(bw,e,bv){if(bv){bw=":not("+bw+")"}return e.length===1?b.find.matchesSelector(e[0],bw)?[e[0]]:[]:b.find.matches(bw,e)},dir:function(bw,bv,by){var e=[],bx=bw[bv];while(bx&&bx.nodeType!==9&&(by===L||bx.nodeType!==1||!b(bx).is(by))){if(bx.nodeType===1){e.push(bx)}bx=bx[bv]}return e},nth:function(by,e,bw,bx){e=e||1;var bv=0;for(;by;by=by[bw]){if(by.nodeType===1&&++bv===e){break}}return by},sibling:function(bw,bv){var e=[];for(;bw;bw=bw.nextSibling){if(bw.nodeType===1&&bw!==bv){e.push(bw)}}return e}});function aG(bx,bw,e){bw=bw||0;if(b.isFunction(bw)){return b.grep(bx,function(bz,by){var bA=!!bw.call(bz,by,bz);return bA===e})}else{if(bw.nodeType){return b.grep(bx,function(bz,by){return(bz===bw)===e})}else{if(typeof bw==="string"){var bv=b.grep(bx,function(by){return by.nodeType===1});if(bp.test(bw)){return b.filter(bw,bv,!e)}else{bw=b.filter(bw,bv)}}}}return b.grep(bx,function(bz,by){return(b.inArray(bz,bw)>=0)===e})}function a(e){var bw=aR.split("|"),bv=e.createDocumentFragment();if(bv.createElement){while(bw.length){bv.createElement(bw.pop())}}return bv}var aR="abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",ag=/ jQuery\d+="(?:\d+|null)"/g,ar=/^\s+/,R=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,d=/<([\w:]+)/,w=/",""],legend:[1,"
    ","
    "],thead:[1,"","
    "],tr:[2,"","
    "],td:[3,"","
    "],col:[2,"","
    "],area:[1,"",""],_default:[0,"",""]},ac=a(av);ax.optgroup=ax.option;ax.tbody=ax.tfoot=ax.colgroup=ax.caption=ax.thead;ax.th=ax.td;if(!b.support.htmlSerialize){ax._default=[1,"div
    ","
    "]}b.fn.extend({text:function(e){if(b.isFunction(e)){return this.each(function(bw){var bv=b(this);bv.text(e.call(this,bw,bv.text()))})}if(typeof e!=="object"&&e!==L){return this.empty().append((this[0]&&this[0].ownerDocument||av).createTextNode(e))}return b.text(this)},wrapAll:function(e){if(b.isFunction(e)){return this.each(function(bw){b(this).wrapAll(e.call(this,bw))})}if(this[0]){var bv=b(e,this[0].ownerDocument).eq(0).clone(true);if(this[0].parentNode){bv.insertBefore(this[0])}bv.map(function(){var bw=this;while(bw.firstChild&&bw.firstChild.nodeType===1){bw=bw.firstChild}return bw}).append(this)}return this},wrapInner:function(e){if(b.isFunction(e)){return this.each(function(bv){b(this).wrapInner(e.call(this,bv))})}return this.each(function(){var bv=b(this),bw=bv.contents();if(bw.length){bw.wrapAll(e)}else{bv.append(e)}})},wrap:function(e){var bv=b.isFunction(e);return this.each(function(bw){b(this).wrapAll(bv?e.call(this,bw):e)})},unwrap:function(){return this.parent().each(function(){if(!b.nodeName(this,"body")){b(this).replaceWith(this.childNodes)}}).end()},append:function(){return this.domManip(arguments,true,function(e){if(this.nodeType===1){this.appendChild(e)}})},prepend:function(){return this.domManip(arguments,true,function(e){if(this.nodeType===1){this.insertBefore(e,this.firstChild)}})},before:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,false,function(bv){this.parentNode.insertBefore(bv,this)})}else{if(arguments.length){var e=b.clean(arguments);e.push.apply(e,this.toArray());return this.pushStack(e,"before",arguments)}}},after:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,false,function(bv){this.parentNode.insertBefore(bv,this.nextSibling)})}else{if(arguments.length){var e=this.pushStack(this,"after",arguments);e.push.apply(e,b.clean(arguments));return e}}},remove:function(e,bx){for(var bv=0,bw;(bw=this[bv])!=null;bv++){if(!e||b.filter(e,[bw]).length){if(!bx&&bw.nodeType===1){b.cleanData(bw.getElementsByTagName("*"));b.cleanData([bw])}if(bw.parentNode){bw.parentNode.removeChild(bw)}}}return this},empty:function(){for(var e=0,bv;(bv=this[e])!=null;e++){if(bv.nodeType===1){b.cleanData(bv.getElementsByTagName("*"))}while(bv.firstChild){bv.removeChild(bv.firstChild)}}return this},clone:function(bv,e){bv=bv==null?false:bv;e=e==null?bv:e;return this.map(function(){return b.clone(this,bv,e)})},html:function(bx){if(bx===L){return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(ag,""):null}else{if(typeof bx==="string"&&!ae.test(bx)&&(b.support.leadingWhitespace||!ar.test(bx))&&!ax[(d.exec(bx)||["",""])[1].toLowerCase()]){bx=bx.replace(R,"<$1>");try{for(var bw=0,bv=this.length;bw1&&bw0?this.clone(true):this).get();b(bC[bA])[bv](by);bz=bz.concat(by)}return this.pushStack(bz,e,bC.selector)}}});function bg(e){if(typeof e.getElementsByTagName!=="undefined"){return e.getElementsByTagName("*")}else{if(typeof e.querySelectorAll!=="undefined"){return e.querySelectorAll("*")}else{return[]}}}function az(e){if(e.type==="checkbox"||e.type==="radio"){e.defaultChecked=e.checked}}function E(e){var bv=(e.nodeName||"").toLowerCase();if(bv==="input"){az(e)}else{if(bv!=="script"&&typeof e.getElementsByTagName!=="undefined"){b.grep(e.getElementsByTagName("input"),az)}}}function al(e){var bv=av.createElement("div");ac.appendChild(bv);bv.innerHTML=e.outerHTML;return bv.firstChild}b.extend({clone:function(by,bA,bw){var e,bv,bx,bz=b.support.html5Clone||!ah.test("<"+by.nodeName)?by.cloneNode(true):al(by);if((!b.support.noCloneEvent||!b.support.noCloneChecked)&&(by.nodeType===1||by.nodeType===11)&&!b.isXMLDoc(by)){ai(by,bz);e=bg(by);bv=bg(bz);for(bx=0;e[bx];++bx){if(bv[bx]){ai(e[bx],bv[bx])}}}if(bA){t(by,bz);if(bw){e=bg(by);bv=bg(bz);for(bx=0;e[bx];++bx){t(e[bx],bv[bx])}}}e=bv=null;return bz},clean:function(bw,by,bH,bA){var bF;by=by||av;if(typeof by.createElement==="undefined"){by=by.ownerDocument||by[0]&&by[0].ownerDocument||av}var bI=[],bB;for(var bE=0,bz;(bz=bw[bE])!=null;bE++){if(typeof bz==="number"){bz+=""}if(!bz){continue}if(typeof bz==="string"){if(!W.test(bz)){bz=by.createTextNode(bz)}else{bz=bz.replace(R,"<$1>");var bK=(d.exec(bz)||["",""])[1].toLowerCase(),bx=ax[bK]||ax._default,bD=bx[0],bv=by.createElement("div");if(by===av){ac.appendChild(bv)}else{a(by).appendChild(bv)}bv.innerHTML=bx[1]+bz+bx[2];while(bD--){bv=bv.lastChild}if(!b.support.tbody){var e=w.test(bz),bC=bK==="table"&&!e?bv.firstChild&&bv.firstChild.childNodes:bx[1]===""&&!e?bv.childNodes:[];for(bB=bC.length-1;bB>=0;--bB){if(b.nodeName(bC[bB],"tbody")&&!bC[bB].childNodes.length){bC[bB].parentNode.removeChild(bC[bB])}}}if(!b.support.leadingWhitespace&&ar.test(bz)){bv.insertBefore(by.createTextNode(ar.exec(bz)[0]),bv.firstChild)}bz=bv.childNodes}}var bG;if(!b.support.appendChecked){if(bz[0]&&typeof(bG=bz.length)==="number"){for(bB=0;bB=0){return bx+"px"}}else{return bx}}}});if(!b.support.opacity){b.cssHooks.opacity={get:function(bv,e){return au.test((e&&bv.currentStyle?bv.currentStyle.filter:bv.style.filter)||"")?(parseFloat(RegExp.$1)/100)+"":e?"1":""},set:function(by,bz){var bx=by.style,bv=by.currentStyle,e=b.isNumeric(bz)?"alpha(opacity="+bz*100+")":"",bw=bv&&bv.filter||bx.filter||"";bx.zoom=1;if(bz>=1&&b.trim(bw.replace(ak,""))===""){bx.removeAttribute("filter");if(bv&&!bv.filter){return}}bx.filter=ak.test(bw)?bw.replace(ak,e):bw+" "+e}}}b(function(){if(!b.support.reliableMarginRight){b.cssHooks.marginRight={get:function(bw,bv){var e;b.swap(bw,{display:"inline-block"},function(){if(bv){e=Z(bw,"margin-right","marginRight")}else{e=bw.style.marginRight}});return e}}}});if(av.defaultView&&av.defaultView.getComputedStyle){aI=function(by,bw){var bv,bx,e;bw=bw.replace(z,"-$1").toLowerCase();if((bx=by.ownerDocument.defaultView)&&(e=bx.getComputedStyle(by,null))){bv=e.getPropertyValue(bw);if(bv===""&&!b.contains(by.ownerDocument.documentElement,by)){bv=b.style(by,bw)}}return bv}}if(av.documentElement.currentStyle){aX=function(bz,bw){var bA,e,by,bv=bz.currentStyle&&bz.currentStyle[bw],bx=bz.style;if(bv===null&&bx&&(by=bx[bw])){bv=by}if(!bc.test(bv)&&bn.test(bv)){bA=bx.left;e=bz.runtimeStyle&&bz.runtimeStyle.left;if(e){bz.runtimeStyle.left=bz.currentStyle.left}bx.left=bw==="fontSize"?"1em":(bv||0);bv=bx.pixelLeft+"px";bx.left=bA;if(e){bz.runtimeStyle.left=e}}return bv===""?"auto":bv}}Z=aI||aX;function p(by,bw,bv){var bA=bw==="width"?by.offsetWidth:by.offsetHeight,bz=bw==="width"?an:a1,bx=0,e=bz.length;if(bA>0){if(bv!=="border"){for(;bx)<[^<]*)*<\/script>/gi,q=/^(?:select|textarea)/i,h=/\s+/,br=/([?&])_=[^&]*/,K=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,A=b.fn.load,aa={},r={},aE,s,aV=["*/"]+["*"];try{aE=bl.href}catch(aw){aE=av.createElement("a");aE.href="";aE=aE.href}s=K.exec(aE.toLowerCase())||[];function f(e){return function(by,bA){if(typeof by!=="string"){bA=by;by="*"}if(b.isFunction(bA)){var bx=by.toLowerCase().split(h),bw=0,bz=bx.length,bv,bB,bC;for(;bw=0){var e=bw.slice(by,bw.length);bw=bw.slice(0,by)}var bx="GET";if(bz){if(b.isFunction(bz)){bA=bz;bz=L}else{if(typeof bz==="object"){bz=b.param(bz,b.ajaxSettings.traditional);bx="POST"}}}var bv=this;b.ajax({url:bw,type:bx,dataType:"html",data:bz,complete:function(bC,bB,bD){bD=bC.responseText;if(bC.isResolved()){bC.done(function(bE){bD=bE});bv.html(e?b("
    ").append(bD.replace(a6,"")).find(e):bD)}if(bA){bv.each(bA,[bD,bB,bC])}}});return this},serialize:function(){return b.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?b.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||q.test(this.nodeName)||aZ.test(this.type))}).map(function(e,bv){var bw=b(this).val();return bw==null?null:b.isArray(bw)?b.map(bw,function(by,bx){return{name:bv.name,value:by.replace(bs,"\r\n")}}):{name:bv.name,value:bw.replace(bs,"\r\n")}}).get()}});b.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(e,bv){b.fn[bv]=function(bw){return this.on(bv,bw)}});b.each(["get","post"],function(e,bv){b[bv]=function(bw,by,bz,bx){if(b.isFunction(by)){bx=bx||bz;bz=by;by=L}return b.ajax({type:bv,url:bw,data:by,success:bz,dataType:bx})}});b.extend({getScript:function(e,bv){return b.get(e,L,bv,"script")},getJSON:function(e,bv,bw){return b.get(e,bv,bw,"json")},ajaxSetup:function(bv,e){if(e){am(bv,b.ajaxSettings)}else{e=bv;bv=b.ajaxSettings}am(bv,e);return bv},ajaxSettings:{url:aE,isLocal:aM.test(s[1]),global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":aV},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":bb.String,"text html":true,"text json":b.parseJSON,"text xml":b.parseXML},flatOptions:{context:true,url:true}},ajaxPrefilter:f(aa),ajaxTransport:f(r),ajax:function(bz,bx){if(typeof bz==="object"){bx=bz;bz=L}bx=bx||{};var bD=b.ajaxSetup({},bx),bS=bD.context||bD,bG=bS!==bD&&(bS.nodeType||bS instanceof b)?b(bS):b.event,bR=b.Deferred(),bN=b.Callbacks("once memory"),bB=bD.statusCode||{},bC,bH={},bO={},bQ,by,bL,bE,bI,bA=0,bw,bK,bJ={readyState:0,setRequestHeader:function(bT,bU){if(!bA){var e=bT.toLowerCase();bT=bO[e]=bO[e]||bT;bH[bT]=bU}return this},getAllResponseHeaders:function(){return bA===2?bQ:null},getResponseHeader:function(bT){var e;if(bA===2){if(!by){by={};while((e=aD.exec(bQ))){by[e[1].toLowerCase()]=e[2]}}e=by[bT.toLowerCase()]}return e===L?null:e},overrideMimeType:function(e){if(!bA){bD.mimeType=e}return this},abort:function(e){e=e||"abort";if(bL){bL.abort(e)}bF(0,e);return this}};function bF(bZ,bU,b0,bW){if(bA===2){return}bA=2;if(bE){clearTimeout(bE)}bL=L;bQ=bW||"";bJ.readyState=bZ>0?4:0;var bT,b4,b3,bX=bU,bY=b0?bj(bD,bJ,b0):L,bV,b2;if(bZ>=200&&bZ<300||bZ===304){if(bD.ifModified){if((bV=bJ.getResponseHeader("Last-Modified"))){b.lastModified[bC]=bV}if((b2=bJ.getResponseHeader("Etag"))){b.etag[bC]=b2}}if(bZ===304){bX="notmodified";bT=true}else{try{b4=G(bD,bY);bX="success";bT=true}catch(b1){bX="parsererror";b3=b1}}}else{b3=bX;if(!bX||bZ){bX="error";if(bZ<0){bZ=0}}}bJ.status=bZ;bJ.statusText=""+(bU||bX);if(bT){bR.resolveWith(bS,[b4,bX,bJ])}else{bR.rejectWith(bS,[bJ,bX,b3])}bJ.statusCode(bB);bB=L;if(bw){bG.trigger("ajax"+(bT?"Success":"Error"),[bJ,bD,bT?b4:b3])}bN.fireWith(bS,[bJ,bX]);if(bw){bG.trigger("ajaxComplete",[bJ,bD]);if(!(--b.active)){b.event.trigger("ajaxStop")}}}bR.promise(bJ);bJ.success=bJ.done;bJ.error=bJ.fail;bJ.complete=bN.add;bJ.statusCode=function(bT){if(bT){var e;if(bA<2){for(e in bT){bB[e]=[bB[e],bT[e]]}}else{e=bT[bJ.status];bJ.then(e,e)}}return this};bD.url=((bz||bD.url)+"").replace(bq,"").replace(c,s[1]+"//");bD.dataTypes=b.trim(bD.dataType||"*").toLowerCase().split(h);if(bD.crossDomain==null){bI=K.exec(bD.url.toLowerCase());bD.crossDomain=!!(bI&&(bI[1]!=s[1]||bI[2]!=s[2]||(bI[3]||(bI[1]==="http:"?80:443))!=(s[3]||(s[1]==="http:"?80:443))))}if(bD.data&&bD.processData&&typeof bD.data!=="string"){bD.data=b.param(bD.data,bD.traditional)}aW(aa,bD,bx,bJ);if(bA===2){return false}bw=bD.global;bD.type=bD.type.toUpperCase();bD.hasContent=!aQ.test(bD.type);if(bw&&b.active++===0){b.event.trigger("ajaxStart")}if(!bD.hasContent){if(bD.data){bD.url+=(M.test(bD.url)?"&":"?")+bD.data;delete bD.data}bC=bD.url;if(bD.cache===false){var bv=b.now(),bP=bD.url.replace(br,"$1_="+bv);bD.url=bP+((bP===bD.url)?(M.test(bD.url)?"&":"?")+"_="+bv:"")}}if(bD.data&&bD.hasContent&&bD.contentType!==false||bx.contentType){bJ.setRequestHeader("Content-Type",bD.contentType)}if(bD.ifModified){bC=bC||bD.url;if(b.lastModified[bC]){bJ.setRequestHeader("If-Modified-Since",b.lastModified[bC])}if(b.etag[bC]){bJ.setRequestHeader("If-None-Match",b.etag[bC])}}bJ.setRequestHeader("Accept",bD.dataTypes[0]&&bD.accepts[bD.dataTypes[0]]?bD.accepts[bD.dataTypes[0]]+(bD.dataTypes[0]!=="*"?", "+aV+"; q=0.01":""):bD.accepts["*"]);for(bK in bD.headers){bJ.setRequestHeader(bK,bD.headers[bK])}if(bD.beforeSend&&(bD.beforeSend.call(bS,bJ,bD)===false||bA===2)){bJ.abort();return false}for(bK in {success:1,error:1,complete:1}){bJ[bK](bD[bK])}bL=aW(r,bD,bx,bJ);if(!bL){bF(-1,"No Transport")}else{bJ.readyState=1;if(bw){bG.trigger("ajaxSend",[bJ,bD])}if(bD.async&&bD.timeout>0){bE=setTimeout(function(){bJ.abort("timeout")},bD.timeout)}try{bA=1;bL.send(bH,bF)}catch(bM){if(bA<2){bF(-1,bM)}else{throw bM}}}return bJ},param:function(e,bw){var bv=[],by=function(bz,bA){bA=b.isFunction(bA)?bA():bA;bv[bv.length]=encodeURIComponent(bz)+"="+encodeURIComponent(bA)};if(bw===L){bw=b.ajaxSettings.traditional}if(b.isArray(e)||(e.jquery&&!b.isPlainObject(e))){b.each(e,function(){by(this.name,this.value)})}else{for(var bx in e){v(bx,e[bx],bw,by)}}return bv.join("&").replace(k,"+")}});function v(bw,by,bv,bx){if(b.isArray(by)){b.each(by,function(bA,bz){if(bv||ap.test(bw)){bx(bw,bz)}else{v(bw+"["+(typeof bz==="object"||b.isArray(bz)?bA:"")+"]",bz,bv,bx)}})}else{if(!bv&&by!=null&&typeof by==="object"){for(var e in by){v(bw+"["+e+"]",by[e],bv,bx)}}else{bx(bw,by)}}}b.extend({active:0,lastModified:{},etag:{}});function bj(bD,bC,bz){var bv=bD.contents,bB=bD.dataTypes,bw=bD.responseFields,by,bA,bx,e;for(bA in bw){if(bA in bz){bC[bw[bA]]=bz[bA]}}while(bB[0]==="*"){bB.shift();if(by===L){by=bD.mimeType||bC.getResponseHeader("content-type")}}if(by){for(bA in bv){if(bv[bA]&&bv[bA].test(by)){bB.unshift(bA);break}}}if(bB[0] in bz){bx=bB[0]}else{for(bA in bz){if(!bB[0]||bD.converters[bA+" "+bB[0]]){bx=bA;break}if(!e){e=bA}}bx=bx||e}if(bx){if(bx!==bB[0]){bB.unshift(bx)}return bz[bx]}}function G(bH,bz){if(bH.dataFilter){bz=bH.dataFilter(bz,bH.dataType)}var bD=bH.dataTypes,bG={},bA,bE,bw=bD.length,bB,bC=bD[0],bx,by,bF,bv,e;for(bA=1;bA=bw.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();bw.animatedProperties[this.prop]=true;for(bA in bw.animatedProperties){if(bw.animatedProperties[bA]!==true){e=false}}if(e){if(bw.overflow!=null&&!b.support.shrinkWrapBlocks){b.each(["","X","Y"],function(bC,bD){bz.style["overflow"+bD]=bw.overflow[bC]})}if(bw.hide){b(bz).hide()}if(bw.hide||bw.show){for(bA in bw.animatedProperties){b.style(bz,bA,bw.orig[bA]);b.removeData(bz,"fxshow"+bA,true);b.removeData(bz,"toggle"+bA,true)}}bv=bw.complete;if(bv){bw.complete=false;bv.call(bz)}}return false}else{if(bw.duration==Infinity){this.now=bx}else{bB=bx-this.startTime;this.state=bB/bw.duration;this.pos=b.easing[bw.animatedProperties[this.prop]](this.state,bB,0,1,bw.duration);this.now=this.start+((this.end-this.start)*this.pos)}this.update()}return true}};b.extend(b.fx,{tick:function(){var bw,bv=b.timers,e=0;for(;e").appendTo(e),bw=bv.css("display");bv.remove();if(bw==="none"||bw===""){if(!a8){a8=av.createElement("iframe");a8.frameBorder=a8.width=a8.height=0}e.appendChild(a8);if(!m||!a8.createElement){m=(a8.contentWindow||a8.contentDocument).document;m.write((av.compatMode==="CSS1Compat"?"":"")+"");m.close()}bv=m.createElement(bx);m.body.appendChild(bv);bw=b.css(bv,"display");e.removeChild(a8)}Q[bx]=bw}return Q[bx]}var V=/^t(?:able|d|h)$/i,ad=/^(?:body|html)$/i;if("getBoundingClientRect" in av.documentElement){b.fn.offset=function(bI){var by=this[0],bB;if(bI){return this.each(function(e){b.offset.setOffset(this,bI,e)})}if(!by||!by.ownerDocument){return null}if(by===by.ownerDocument.body){return b.offset.bodyOffset(by)}try{bB=by.getBoundingClientRect()}catch(bF){}var bH=by.ownerDocument,bw=bH.documentElement;if(!bB||!b.contains(bw,by)){return bB?{top:bB.top,left:bB.left}:{top:0,left:0}}var bC=bH.body,bD=aK(bH),bA=bw.clientTop||bC.clientTop||0,bE=bw.clientLeft||bC.clientLeft||0,bv=bD.pageYOffset||b.support.boxModel&&bw.scrollTop||bC.scrollTop,bz=bD.pageXOffset||b.support.boxModel&&bw.scrollLeft||bC.scrollLeft,bG=bB.top+bv-bA,bx=bB.left+bz-bE;return{top:bG,left:bx}}}else{b.fn.offset=function(bF){var bz=this[0];if(bF){return this.each(function(bG){b.offset.setOffset(this,bF,bG)})}if(!bz||!bz.ownerDocument){return null}if(bz===bz.ownerDocument.body){return b.offset.bodyOffset(bz)}var bC,bw=bz.offsetParent,bv=bz,bE=bz.ownerDocument,bx=bE.documentElement,bA=bE.body,bB=bE.defaultView,e=bB?bB.getComputedStyle(bz,null):bz.currentStyle,bD=bz.offsetTop,by=bz.offsetLeft;while((bz=bz.parentNode)&&bz!==bA&&bz!==bx){if(b.support.fixedPosition&&e.position==="fixed"){break}bC=bB?bB.getComputedStyle(bz,null):bz.currentStyle;bD-=bz.scrollTop;by-=bz.scrollLeft;if(bz===bw){bD+=bz.offsetTop;by+=bz.offsetLeft;if(b.support.doesNotAddBorder&&!(b.support.doesAddBorderForTableAndCells&&V.test(bz.nodeName))){bD+=parseFloat(bC.borderTopWidth)||0;by+=parseFloat(bC.borderLeftWidth)||0}bv=bw;bw=bz.offsetParent}if(b.support.subtractsBorderForOverflowNotVisible&&bC.overflow!=="visible"){bD+=parseFloat(bC.borderTopWidth)||0;by+=parseFloat(bC.borderLeftWidth)||0}e=bC}if(e.position==="relative"||e.position==="static"){bD+=bA.offsetTop;by+=bA.offsetLeft}if(b.support.fixedPosition&&e.position==="fixed"){bD+=Math.max(bx.scrollTop,bA.scrollTop);by+=Math.max(bx.scrollLeft,bA.scrollLeft)}return{top:bD,left:by}}}b.offset={bodyOffset:function(e){var bw=e.offsetTop,bv=e.offsetLeft;if(b.support.doesNotIncludeMarginInBodyOffset){bw+=parseFloat(b.css(e,"marginTop"))||0;bv+=parseFloat(b.css(e,"marginLeft"))||0}return{top:bw,left:bv}},setOffset:function(bx,bG,bA){var bB=b.css(bx,"position");if(bB==="static"){bx.style.position="relative"}var bz=b(bx),bv=bz.offset(),e=b.css(bx,"top"),bE=b.css(bx,"left"),bF=(bB==="absolute"||bB==="fixed")&&b.inArray("auto",[e,bE])>-1,bD={},bC={},bw,by;if(bF){bC=bz.position();bw=bC.top;by=bC.left}else{bw=parseFloat(e)||0;by=parseFloat(bE)||0}if(b.isFunction(bG)){bG=bG.call(bx,bA,bv)}if(bG.top!=null){bD.top=(bG.top-bv.top)+bw}if(bG.left!=null){bD.left=(bG.left-bv.left)+by}if("using" in bG){bG.using.call(bx,bD)}else{bz.css(bD)}}};b.fn.extend({position:function(){if(!this[0]){return null}var bw=this[0],bv=this.offsetParent(),bx=this.offset(),e=ad.test(bv[0].nodeName)?{top:0,left:0}:bv.offset();bx.top-=parseFloat(b.css(bw,"marginTop"))||0;bx.left-=parseFloat(b.css(bw,"marginLeft"))||0;e.top+=parseFloat(b.css(bv[0],"borderTopWidth"))||0;e.left+=parseFloat(b.css(bv[0],"borderLeftWidth"))||0;return{top:bx.top-e.top,left:bx.left-e.left}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||av.body;while(e&&(!ad.test(e.nodeName)&&b.css(e,"position")==="static")){e=e.offsetParent}return e})}});b.each(["Left","Top"],function(bv,e){var bw="scroll"+e;b.fn[bw]=function(bz){var bx,by;if(bz===L){bx=this[0];if(!bx){return null}by=aK(bx);return by?("pageXOffset" in by)?by[bv?"pageYOffset":"pageXOffset"]:b.support.boxModel&&by.document.documentElement[bw]||by.document.body[bw]:bx[bw]}return this.each(function(){by=aK(this);if(by){by.scrollTo(!bv?bz:b(by).scrollLeft(),bv?bz:b(by).scrollTop())}else{this[bw]=bz}})}});function aK(e){return b.isWindow(e)?e:e.nodeType===9?e.defaultView||e.parentWindow:false}b.each(["Height","Width"],function(bv,e){var bw=e.toLowerCase();b.fn["inner"+e]=function(){var bx=this[0];return bx?bx.style?parseFloat(b.css(bx,bw,"padding")):this[bw]():null};b.fn["outer"+e]=function(by){var bx=this[0];return bx?bx.style?parseFloat(b.css(bx,bw,by?"margin":"border")):this[bw]():null};b.fn[bw]=function(bz){var bA=this[0];if(!bA){return bz==null?null:this}if(b.isFunction(bz)){return this.each(function(bE){var bD=b(this);bD[bw](bz.call(this,bE,bD[bw]()))})}if(b.isWindow(bA)){var bB=bA.document.documentElement["client"+e],bx=bA.document.body;return bA.document.compatMode==="CSS1Compat"&&bB||bx&&bx["client"+e]||bB}else{if(bA.nodeType===9){return Math.max(bA.documentElement["client"+e],bA.body["scroll"+e],bA.documentElement["scroll"+e],bA.body["offset"+e],bA.documentElement["offset"+e])}else{if(bz===L){var bC=b.css(bA,bw),by=parseFloat(bC);return b.isNumeric(by)?by:bC}else{return this.css(bw,typeof bz==="string"?bz:bz+"px")}}}}});bb.jQuery=bb.$=b;if(typeof define==="function"&&define.amd&&define.amd.jQuery){define("jquery",[],function(){return b})}})(window);/* + * jQuery UI 1.8.18 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI + */ +(function(a,d){a.ui=a.ui||{};if(a.ui.version){return}a.extend(a.ui,{version:"1.8.18",keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91}});a.fn.extend({propAttr:a.fn.prop||a.fn.attr,_focus:a.fn.focus,focus:function(e,f){return typeof e==="number"?this.each(function(){var g=this;setTimeout(function(){a(g).focus();if(f){f.call(g)}},e)}):this._focus.apply(this,arguments)},scrollParent:function(){var e;if((a.browser.msie&&(/(static|relative)/).test(this.css("position")))||(/absolute/).test(this.css("position"))){e=this.parents().filter(function(){return(/(relative|absolute|fixed)/).test(a.curCSS(this,"position",1))&&(/(auto|scroll)/).test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0)}else{e=this.parents().filter(function(){return(/(auto|scroll)/).test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0)}return(/fixed/).test(this.css("position"))||!e.length?a(document):e},zIndex:function(h){if(h!==d){return this.css("zIndex",h)}if(this.length){var f=a(this[0]),e,g;while(f.length&&f[0]!==document){e=f.css("position");if(e==="absolute"||e==="relative"||e==="fixed"){g=parseInt(f.css("zIndex"),10);if(!isNaN(g)&&g!==0){return g}}f=f.parent()}}return 0},disableSelection:function(){return this.bind((a.support.selectstart?"selectstart":"mousedown")+".ui-disableSelection",function(e){e.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}});a.each(["Width","Height"],function(g,e){var f=e==="Width"?["Left","Right"]:["Top","Bottom"],h=e.toLowerCase(),k={innerWidth:a.fn.innerWidth,innerHeight:a.fn.innerHeight,outerWidth:a.fn.outerWidth,outerHeight:a.fn.outerHeight};function j(m,l,i,n){a.each(f,function(){l-=parseFloat(a.curCSS(m,"padding"+this,true))||0;if(i){l-=parseFloat(a.curCSS(m,"border"+this+"Width",true))||0}if(n){l-=parseFloat(a.curCSS(m,"margin"+this,true))||0}});return l}a.fn["inner"+e]=function(i){if(i===d){return k["inner"+e].call(this)}return this.each(function(){a(this).css(h,j(this,i)+"px")})};a.fn["outer"+e]=function(i,l){if(typeof i!=="number"){return k["outer"+e].call(this,i)}return this.each(function(){a(this).css(h,j(this,i,true,l)+"px")})}});function c(g,e){var j=g.nodeName.toLowerCase();if("area"===j){var i=g.parentNode,h=i.name,f;if(!g.href||!h||i.nodeName.toLowerCase()!=="map"){return false}f=a("img[usemap=#"+h+"]")[0];return !!f&&b(f)}return(/input|select|textarea|button|object/.test(j)?!g.disabled:"a"==j?g.href||e:e)&&b(g)}function b(e){return !a(e).parents().andSelf().filter(function(){return a.curCSS(this,"visibility")==="hidden"||a.expr.filters.hidden(this)}).length}a.extend(a.expr[":"],{data:function(g,f,e){return !!a.data(g,e[3])},focusable:function(e){return c(e,!isNaN(a.attr(e,"tabindex")))},tabbable:function(g){var e=a.attr(g,"tabindex"),f=isNaN(e);return(f||e>=0)&&c(g,!f)}});a(function(){var e=document.body,f=e.appendChild(f=document.createElement("div"));f.offsetHeight;a.extend(f.style,{minHeight:"100px",height:"auto",padding:0,borderWidth:0});a.support.minHeight=f.offsetHeight===100;a.support.selectstart="onselectstart" in f;e.removeChild(f).style.display="none"});a.extend(a.ui,{plugin:{add:function(f,g,j){var h=a.ui[f].prototype;for(var e in j){h.plugins[e]=h.plugins[e]||[];h.plugins[e].push([g,j[e]])}},call:function(e,g,f){var j=e.plugins[g];if(!j||!e.element[0].parentNode){return}for(var h=0;h0){return true}h[e]=1;g=(h[e]>0);h[e]=0;return g},isOverAxis:function(f,e,g){return(f>e)&&(f<(e+g))},isOver:function(j,f,i,h,e,g){return a.ui.isOverAxis(j,i,e)&&a.ui.isOverAxis(f,h,g)}})})(jQuery);/* + * jQuery UI Widget 1.8.18 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Widget + */ +(function(b,d){if(b.cleanData){var c=b.cleanData;b.cleanData=function(f){for(var g=0,h;(h=f[g])!=null;g++){try{b(h).triggerHandler("remove")}catch(j){}}c(f)}}else{var a=b.fn.remove;b.fn.remove=function(e,f){return this.each(function(){if(!f){if(!e||b.filter(e,[this]).length){b("*",this).add([this]).each(function(){try{b(this).triggerHandler("remove")}catch(g){}})}}return a.call(b(this),e,f)})}}b.widget=function(f,h,e){var g=f.split(".")[0],j;f=f.split(".")[1];j=g+"-"+f;if(!e){e=h;h=b.Widget}b.expr[":"][j]=function(k){return !!b.data(k,f)};b[g]=b[g]||{};b[g][f]=function(k,l){if(arguments.length){this._createWidget(k,l)}};var i=new h();i.options=b.extend(true,{},i.options);b[g][f].prototype=b.extend(true,i,{namespace:g,widgetName:f,widgetEventPrefix:b[g][f].prototype.widgetEventPrefix||f,widgetBaseClass:j},e);b.widget.bridge(f,b[g][f])};b.widget.bridge=function(f,e){b.fn[f]=function(i){var g=typeof i==="string",h=Array.prototype.slice.call(arguments,1),j=this;i=!g&&h.length?b.extend.apply(null,[true,i].concat(h)):i;if(g&&i.charAt(0)==="_"){return j}if(g){this.each(function(){var k=b.data(this,f),l=k&&b.isFunction(k[i])?k[i].apply(k,h):k;if(l!==k&&l!==d){j=l;return false}})}else{this.each(function(){var k=b.data(this,f);if(k){k.option(i||{})._init()}else{b.data(this,f,new e(i,this))}})}return j}};b.Widget=function(e,f){if(arguments.length){this._createWidget(e,f)}};b.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",options:{disabled:false},_createWidget:function(f,g){b.data(g,this.widgetName,this);this.element=b(g);this.options=b.extend(true,{},this.options,this._getCreateOptions(),f);var e=this;this.element.bind("remove."+this.widgetName,function(){e.destroy()});this._create();this._trigger("create");this._init()},_getCreateOptions:function(){return b.metadata&&b.metadata.get(this.element[0])[this.widgetName]},_create:function(){},_init:function(){},destroy:function(){this.element.unbind("."+this.widgetName).removeData(this.widgetName);this.widget().unbind("."+this.widgetName).removeAttr("aria-disabled").removeClass(this.widgetBaseClass+"-disabled ui-state-disabled")},widget:function(){return this.element},option:function(f,g){var e=f;if(arguments.length===0){return b.extend({},this.options)}if(typeof f==="string"){if(g===d){return this.options[f]}e={};e[f]=g}this._setOptions(e);return this},_setOptions:function(f){var e=this;b.each(f,function(g,h){e._setOption(g,h)});return this},_setOption:function(e,f){this.options[e]=f;if(e==="disabled"){this.widget()[f?"addClass":"removeClass"](this.widgetBaseClass+"-disabled ui-state-disabled").attr("aria-disabled",f)}return this},enable:function(){return this._setOption("disabled",false)},disable:function(){return this._setOption("disabled",true)},_trigger:function(e,f,g){var j,i,h=this.options[e];g=g||{};f=b.Event(f);f.type=(e===this.widgetEventPrefix?e:this.widgetEventPrefix+e).toLowerCase();f.target=this.element[0];i=f.originalEvent;if(i){for(j in i){if(!(j in f)){f[j]=i[j]}}}this.element.trigger(f,g);return !(b.isFunction(h)&&h.call(this.element[0],f,g)===false||f.isDefaultPrevented())}}})(jQuery);/* + * jQuery UI Mouse 1.8.18 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Mouse + * + * Depends: + * jquery.ui.widget.js + */ +(function(b,c){var a=false;b(document).mouseup(function(d){a=false});b.widget("ui.mouse",{options:{cancel:":input,option",distance:1,delay:0},_mouseInit:function(){var d=this;this.element.bind("mousedown."+this.widgetName,function(e){return d._mouseDown(e)}).bind("click."+this.widgetName,function(e){if(true===b.data(e.target,d.widgetName+".preventClickEvent")){b.removeData(e.target,d.widgetName+".preventClickEvent");e.stopImmediatePropagation();return false}});this.started=false},_mouseDestroy:function(){this.element.unbind("."+this.widgetName)},_mouseDown:function(f){if(a){return}(this._mouseStarted&&this._mouseUp(f));this._mouseDownEvent=f;var e=this,g=(f.which==1),d=(typeof this.options.cancel=="string"&&f.target.nodeName?b(f.target).closest(this.options.cancel).length:false);if(!g||d||!this._mouseCapture(f)){return true}this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet){this._mouseDelayTimer=setTimeout(function(){e.mouseDelayMet=true},this.options.delay)}if(this._mouseDistanceMet(f)&&this._mouseDelayMet(f)){this._mouseStarted=(this._mouseStart(f)!==false);if(!this._mouseStarted){f.preventDefault();return true}}if(true===b.data(f.target,this.widgetName+".preventClickEvent")){b.removeData(f.target,this.widgetName+".preventClickEvent")}this._mouseMoveDelegate=function(h){return e._mouseMove(h)};this._mouseUpDelegate=function(h){return e._mouseUp(h)};b(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate);f.preventDefault();a=true;return true},_mouseMove:function(d){if(b.browser.msie&&!(document.documentMode>=9)&&!d.button){return this._mouseUp(d)}if(this._mouseStarted){this._mouseDrag(d);return d.preventDefault()}if(this._mouseDistanceMet(d)&&this._mouseDelayMet(d)){this._mouseStarted=(this._mouseStart(this._mouseDownEvent,d)!==false);(this._mouseStarted?this._mouseDrag(d):this._mouseUp(d))}return !this._mouseStarted},_mouseUp:function(d){b(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted=false;if(d.target==this._mouseDownEvent.target){b.data(d.target,this.widgetName+".preventClickEvent",true)}this._mouseStop(d)}return false},_mouseDistanceMet:function(d){return(Math.max(Math.abs(this._mouseDownEvent.pageX-d.pageX),Math.abs(this._mouseDownEvent.pageY-d.pageY))>=this.options.distance)},_mouseDelayMet:function(d){return this.mouseDelayMet},_mouseStart:function(d){},_mouseDrag:function(d){},_mouseStop:function(d){},_mouseCapture:function(d){return true}})})(jQuery);(function(c,d){c.widget("ui.resizable",c.ui.mouse,{widgetEventPrefix:"resize",options:{alsoResize:false,animate:false,animateDuration:"slow",animateEasing:"swing",aspectRatio:false,autoHide:false,containment:false,ghost:false,grid:false,handles:"e,s,se",helper:false,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:1000},_create:function(){var f=this,k=this.options;this.element.addClass("ui-resizable");c.extend(this,{_aspectRatio:!!(k.aspectRatio),aspectRatio:k.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:k.helper||k.ghost||k.animate?k.helper||"ui-resizable-helper":null});if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)){this.element.wrap(c('
    ').css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")}));this.element=this.element.parent().data("resizable",this.element.data("resizable"));this.elementIsWrapper=true;this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")});this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0});this.originalResizeStyle=this.originalElement.css("resize");this.originalElement.css("resize","none");this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"}));this.originalElement.css({margin:this.originalElement.css("margin")});this._proportionallyResize()}this.handles=k.handles||(!c(".ui-resizable-handle",this.element).length?"e,s,se":{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"});if(this.handles.constructor==String){if(this.handles=="all"){this.handles="n,e,s,w,se,sw,ne,nw"}var l=this.handles.split(",");this.handles={};for(var g=0;g
    ');if(/sw|se|ne|nw/.test(j)){h.css({zIndex:++k.zIndex})}if("se"==j){h.addClass("ui-icon ui-icon-gripsmall-diagonal-se")}this.handles[j]=".ui-resizable-"+j;this.element.append(h)}}this._renderAxis=function(q){q=q||this.element;for(var n in this.handles){if(this.handles[n].constructor==String){this.handles[n]=c(this.handles[n],this.element).show()}if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var o=c(this.handles[n],this.element),p=0;p=/sw|ne|nw|se|n|s/.test(n)?o.outerHeight():o.outerWidth();var m=["padding",/ne|nw|n/.test(n)?"Top":/se|sw|s/.test(n)?"Bottom":/^e$/.test(n)?"Right":"Left"].join("");q.css(m,p);this._proportionallyResize()}if(!c(this.handles[n]).length){continue}}};this._renderAxis(this.element);this._handles=c(".ui-resizable-handle",this.element).disableSelection();this._handles.mouseover(function(){if(!f.resizing){if(this.className){var i=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)}f.axis=i&&i[1]?i[1]:"se"}});if(k.autoHide){this._handles.hide();c(this.element).addClass("ui-resizable-autohide").hover(function(){if(k.disabled){return}c(this).removeClass("ui-resizable-autohide");f._handles.show()},function(){if(k.disabled){return}if(!f.resizing){c(this).addClass("ui-resizable-autohide");f._handles.hide()}})}this._mouseInit()},destroy:function(){this._mouseDestroy();var e=function(g){c(g).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};if(this.elementIsWrapper){e(this.element);var f=this.element;f.after(this.originalElement.css({position:f.css("position"),width:f.outerWidth(),height:f.outerHeight(),top:f.css("top"),left:f.css("left")})).remove()}this.originalElement.css("resize",this.originalResizeStyle);e(this.originalElement);return this},_mouseCapture:function(f){var g=false;for(var e in this.handles){if(c(this.handles[e])[0]==f.target){g=true}}return !this.options.disabled&&g},_mouseStart:function(g){var j=this.options,f=this.element.position(),e=this.element;this.resizing=true;this.documentScroll={top:c(document).scrollTop(),left:c(document).scrollLeft()};if(e.is(".ui-draggable")||(/absolute/).test(e.css("position"))){e.css({position:"absolute",top:f.top,left:f.left})}this._renderProxy();var k=b(this.helper.css("left")),h=b(this.helper.css("top"));if(j.containment){k+=c(j.containment).scrollLeft()||0;h+=c(j.containment).scrollTop()||0}this.offset=this.helper.offset();this.position={left:k,top:h};this.size=this._helper?{width:e.outerWidth(),height:e.outerHeight()}:{width:e.width(),height:e.height()};this.originalSize=this._helper?{width:e.outerWidth(),height:e.outerHeight()}:{width:e.width(),height:e.height()};this.originalPosition={left:k,top:h};this.sizeDiff={width:e.outerWidth()-e.width(),height:e.outerHeight()-e.height()};this.originalMousePosition={left:g.pageX,top:g.pageY};this.aspectRatio=(typeof j.aspectRatio=="number")?j.aspectRatio:((this.originalSize.width/this.originalSize.height)||1);var i=c(".ui-resizable-"+this.axis).css("cursor");c("body").css("cursor",i=="auto"?this.axis+"-resize":i);e.addClass("ui-resizable-resizing");this._propagate("start",g);return true},_mouseDrag:function(e){var h=this.helper,g=this.options,m={},q=this,j=this.originalMousePosition,n=this.axis;var r=(e.pageX-j.left)||0,p=(e.pageY-j.top)||0;var i=this._change[n];if(!i){return false}var l=i.apply(this,[e,r,p]),k=c.browser.msie&&c.browser.version<7,f=this.sizeDiff;this._updateVirtualBoundaries(e.shiftKey);if(this._aspectRatio||e.shiftKey){l=this._updateRatio(l,e)}l=this._respectSize(l,e);this._propagate("resize",e);h.css({top:this.position.top+"px",left:this.position.left+"px",width:this.size.width+"px",height:this.size.height+"px"});if(!this._helper&&this._proportionallyResizeElements.length){this._proportionallyResize()}this._updateCache(l);this._trigger("resize",e,this.ui());return false},_mouseStop:function(h){this.resizing=false;var i=this.options,m=this;if(this._helper){var g=this._proportionallyResizeElements,e=g.length&&(/textarea/i).test(g[0].nodeName),f=e&&c.ui.hasScroll(g[0],"left")?0:m.sizeDiff.height,k=e?0:m.sizeDiff.width;var n={width:(m.helper.width()-k),height:(m.helper.height()-f)},j=(parseInt(m.element.css("left"),10)+(m.position.left-m.originalPosition.left))||null,l=(parseInt(m.element.css("top"),10)+(m.position.top-m.originalPosition.top))||null;if(!i.animate){this.element.css(c.extend(n,{top:l,left:j}))}m.helper.height(m.size.height);m.helper.width(m.size.width);if(this._helper&&!i.animate){this._proportionallyResize()}}c("body").css("cursor","auto");this.element.removeClass("ui-resizable-resizing");this._propagate("stop",h);if(this._helper){this.helper.remove()}return false},_updateVirtualBoundaries:function(g){var j=this.options,i,h,f,k,e;e={minWidth:a(j.minWidth)?j.minWidth:0,maxWidth:a(j.maxWidth)?j.maxWidth:Infinity,minHeight:a(j.minHeight)?j.minHeight:0,maxHeight:a(j.maxHeight)?j.maxHeight:Infinity};if(this._aspectRatio||g){i=e.minHeight*this.aspectRatio;f=e.minWidth/this.aspectRatio;h=e.maxHeight*this.aspectRatio;k=e.maxWidth/this.aspectRatio;if(i>e.minWidth){e.minWidth=i}if(f>e.minHeight){e.minHeight=f}if(hl.width),s=a(l.height)&&i.minHeight&&(i.minHeight>l.height);if(h){l.width=i.minWidth}if(s){l.height=i.minHeight}if(t){l.width=i.maxWidth}if(m){l.height=i.maxHeight}var f=this.originalPosition.left+this.originalSize.width,p=this.position.top+this.size.height;var k=/sw|nw|w/.test(q),e=/nw|ne|n/.test(q);if(h&&k){l.left=f-i.minWidth}if(t&&k){l.left=f-i.maxWidth}if(s&&e){l.top=p-i.minHeight}if(m&&e){l.top=p-i.maxHeight}var n=!l.width&&!l.height;if(n&&!l.left&&l.top){l.top=null}else{if(n&&!l.top&&l.left){l.left=null}}return l},_proportionallyResize:function(){var k=this.options;if(!this._proportionallyResizeElements.length){return}var g=this.helper||this.element;for(var f=0;f');var e=c.browser.msie&&c.browser.version<7,g=(e?1:0),h=(e?2:-1);this.helper.addClass(this._helper).css({width:this.element.outerWidth()+h,height:this.element.outerHeight()+h,position:"absolute",left:this.elementOffset.left-g+"px",top:this.elementOffset.top-g+"px",zIndex:++i.zIndex});this.helper.appendTo("body").disableSelection()}else{this.helper=this.element}},_change:{e:function(g,f,e){return{width:this.originalSize.width+f}},w:function(h,f,e){var j=this.options,g=this.originalSize,i=this.originalPosition;return{left:i.left+f,width:g.width-f}},n:function(h,f,e){var j=this.options,g=this.originalSize,i=this.originalPosition;return{top:i.top+e,height:g.height-e}},s:function(g,f,e){return{height:this.originalSize.height+e}},se:function(g,f,e){return c.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[g,f,e]))},sw:function(g,f,e){return c.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[g,f,e]))},ne:function(g,f,e){return c.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[g,f,e]))},nw:function(g,f,e){return c.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[g,f,e]))}},_propagate:function(f,e){c.ui.plugin.call(this,f,[e,this.ui()]);(f!="resize"&&this._trigger(f,e,this.ui()))},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}});c.extend(c.ui.resizable,{version:"1.8.18"});c.ui.plugin.add("resizable","alsoResize",{start:function(f,g){var e=c(this).data("resizable"),i=e.options;var h=function(j){c(j).each(function(){var k=c(this);k.data("resizable-alsoresize",{width:parseInt(k.width(),10),height:parseInt(k.height(),10),left:parseInt(k.css("left"),10),top:parseInt(k.css("top"),10)})})};if(typeof(i.alsoResize)=="object"&&!i.alsoResize.parentNode){if(i.alsoResize.length){i.alsoResize=i.alsoResize[0];h(i.alsoResize)}else{c.each(i.alsoResize,function(j){h(j)})}}else{h(i.alsoResize)}},resize:function(g,i){var f=c(this).data("resizable"),j=f.options,h=f.originalSize,l=f.originalPosition;var k={height:(f.size.height-h.height)||0,width:(f.size.width-h.width)||0,top:(f.position.top-l.top)||0,left:(f.position.left-l.left)||0},e=function(m,n){c(m).each(function(){var q=c(this),r=c(this).data("resizable-alsoresize"),p={},o=n&&n.length?n:q.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];c.each(o,function(s,u){var t=(r[u]||0)+(k[u]||0);if(t&&t>=0){p[u]=t||null}});q.css(p)})};if(typeof(j.alsoResize)=="object"&&!j.alsoResize.nodeType){c.each(j.alsoResize,function(m,n){e(m,n)})}else{e(j.alsoResize)}},stop:function(e,f){c(this).removeData("resizable-alsoresize")}});c.ui.plugin.add("resizable","animate",{stop:function(i,n){var p=c(this).data("resizable"),j=p.options;var h=p._proportionallyResizeElements,e=h.length&&(/textarea/i).test(h[0].nodeName),f=e&&c.ui.hasScroll(h[0],"left")?0:p.sizeDiff.height,l=e?0:p.sizeDiff.width;var g={width:(p.size.width-l),height:(p.size.height-f)},k=(parseInt(p.element.css("left"),10)+(p.position.left-p.originalPosition.left))||null,m=(parseInt(p.element.css("top"),10)+(p.position.top-p.originalPosition.top))||null;p.element.animate(c.extend(g,m&&k?{top:m,left:k}:{}),{duration:j.animateDuration,easing:j.animateEasing,step:function(){var o={width:parseInt(p.element.css("width"),10),height:parseInt(p.element.css("height"),10),top:parseInt(p.element.css("top"),10),left:parseInt(p.element.css("left"),10)};if(h&&h.length){c(h[0]).css({width:o.width,height:o.height})}p._updateCache(o);p._propagate("resize",i)}})}});c.ui.plugin.add("resizable","containment",{start:function(f,r){var t=c(this).data("resizable"),j=t.options,l=t.element;var g=j.containment,k=(g instanceof c)?g.get(0):(/parent/.test(g))?l.parent().get(0):g;if(!k){return}t.containerElement=c(k);if(/document/.test(g)||g==document){t.containerOffset={left:0,top:0};t.containerPosition={left:0,top:0};t.parentData={element:c(document),left:0,top:0,width:c(document).width(),height:c(document).height()||document.body.parentNode.scrollHeight}}else{var n=c(k),i=[];c(["Top","Right","Left","Bottom"]).each(function(p,o){i[p]=b(n.css("padding"+o))});t.containerOffset=n.offset();t.containerPosition=n.position();t.containerSize={height:(n.innerHeight()-i[3]),width:(n.innerWidth()-i[1])};var q=t.containerOffset,e=t.containerSize.height,m=t.containerSize.width,h=(c.ui.hasScroll(k,"left")?k.scrollWidth:m),s=(c.ui.hasScroll(k)?k.scrollHeight:e);t.parentData={element:k,left:q.left,top:q.top,width:h,height:s}}},resize:function(g,q){var t=c(this).data("resizable"),i=t.options,f=t.containerSize,p=t.containerOffset,m=t.size,n=t.position,r=t._aspectRatio||g.shiftKey,e={top:0,left:0},h=t.containerElement;if(h[0]!=document&&(/static/).test(h.css("position"))){e=p}if(n.left<(t._helper?p.left:0)){t.size.width=t.size.width+(t._helper?(t.position.left-p.left):(t.position.left-e.left));if(r){t.size.height=t.size.width/i.aspectRatio}t.position.left=i.helper?p.left:0}if(n.top<(t._helper?p.top:0)){t.size.height=t.size.height+(t._helper?(t.position.top-p.top):t.position.top);if(r){t.size.width=t.size.height*i.aspectRatio}t.position.top=t._helper?p.top:0}t.offset.left=t.parentData.left+t.position.left;t.offset.top=t.parentData.top+t.position.top;var l=Math.abs((t._helper?t.offset.left-e.left:(t.offset.left-e.left))+t.sizeDiff.width),s=Math.abs((t._helper?t.offset.top-e.top:(t.offset.top-p.top))+t.sizeDiff.height);var k=t.containerElement.get(0)==t.element.parent().get(0),j=/relative|absolute/.test(t.containerElement.css("position"));if(k&&j){l-=t.parentData.left}if(l+t.size.width>=t.parentData.width){t.size.width=t.parentData.width-l;if(r){t.size.height=t.size.width/t.aspectRatio}}if(s+t.size.height>=t.parentData.height){t.size.height=t.parentData.height-s;if(r){t.size.width=t.size.height*t.aspectRatio}}},stop:function(f,n){var q=c(this).data("resizable"),g=q.options,l=q.position,m=q.containerOffset,e=q.containerPosition,i=q.containerElement;var j=c(q.helper),r=j.offset(),p=j.outerWidth()-q.sizeDiff.width,k=j.outerHeight()-q.sizeDiff.height;if(q._helper&&!g.animate&&(/relative/).test(i.css("position"))){c(this).css({left:r.left-e.left-m.left,width:p,height:k})}if(q._helper&&!g.animate&&(/static/).test(i.css("position"))){c(this).css({left:r.left-e.left-m.left,width:p,height:k})}}});c.ui.plugin.add("resizable","ghost",{start:function(g,h){var e=c(this).data("resizable"),i=e.options,f=e.size;e.ghost=e.originalElement.clone();e.ghost.css({opacity:0.25,display:"block",position:"relative",height:f.height,width:f.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof i.ghost=="string"?i.ghost:"");e.ghost.appendTo(e.helper)},resize:function(f,g){var e=c(this).data("resizable"),h=e.options;if(e.ghost){e.ghost.css({position:"relative",height:e.size.height,width:e.size.width})}},stop:function(f,g){var e=c(this).data("resizable"),h=e.options;if(e.ghost&&e.helper){e.helper.get(0).removeChild(e.ghost.get(0))}}});c.ui.plugin.add("resizable","grid",{resize:function(e,m){var p=c(this).data("resizable"),h=p.options,k=p.size,i=p.originalSize,j=p.originalPosition,n=p.axis,l=h._aspectRatio||e.shiftKey;h.grid=typeof h.grid=="number"?[h.grid,h.grid]:h.grid;var g=Math.round((k.width-i.width)/(h.grid[0]||1))*(h.grid[0]||1),f=Math.round((k.height-i.height)/(h.grid[1]||1))*(h.grid[1]||1);if(/^(se|s|e)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f}else{if(/^(ne)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f;p.position.top=j.top-f}else{if(/^(sw)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f;p.position.left=j.left-g}else{p.size.width=i.width+g;p.size.height=i.height+f;p.position.top=j.top-f;p.position.left=j.left-g}}}}});var b=function(e){return parseInt(e,10)||0};var a=function(e){return !isNaN(parseInt(e,10))}})(jQuery);/* + * jQuery hashchange event - v1.3 - 7/21/2010 + * http://benalman.com/projects/jquery-hashchange-plugin/ + * + * Copyright (c) 2010 "Cowboy" Ben Alman + * Dual licensed under the MIT and GPL licenses. + * http://benalman.com/about/license/ + */ +(function($,e,b){var c="hashchange",h=document,f,g=$.event.special,i=h.documentMode,d="on"+c in e&&(i===b||i>7);function a(j){j=j||location.href;return"#"+j.replace(/^[^#]*#?(.*)$/,"$1")}$.fn[c]=function(j){return j?this.bind(c,j):this.trigger(c)};$.fn[c].delay=50;g[c]=$.extend(g[c],{setup:function(){if(d){return false}$(f.start)},teardown:function(){if(d){return false}$(f.stop)}});f=(function(){var j={},p,m=a(),k=function(q){return q},l=k,o=k;j.start=function(){p||n()};j.stop=function(){p&&clearTimeout(p);p=b};function n(){var r=a(),q=o(m);if(r!==m){l(m=r,q);$(e).trigger(c)}else{if(q!==m){location.href=location.href.replace(/#.*/,"")+q}}p=setTimeout(n,$.fn[c].delay)}$.browser.msie&&!d&&(function(){var q,r;j.start=function(){if(!q){r=$.fn[c].src;r=r&&r+a();q=$('