-
Notifications
You must be signed in to change notification settings - Fork 120
Expand file tree
/
Copy pathdas2rst.das
More file actions
1954 lines (1809 loc) · 113 KB
/
Copy pathdas2rst.das
File metadata and controls
1954 lines (1809 loc) · 113 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
options gen2
options rtti = true
// docs describe the SOURCE API: splices legitimately rewrite ctor bodies, method
// shapes, and describe() output, which would rename hash-keyed doc files per run
options auto_inline_functions = false
require daslib/fio
require clipboard/clipboard
require daslib/rtti
require daslib/ast
require math
require uriparser
require strings
require jobque
require daslib/ast_boost
require daslib/strings_boost
require daslib/strings_convert
require daslib/md_boost
require daslib/rst
require daslib/rst_comment
require daslib/functional
require daslib/json
require daslib/json_boost
require daslib/jsonrpc
require daslib/regex
require daslib/regex_boost
require daslib/apply
require daslib/algorithm
require daslib/ansi_colors
require daslib/tty
require daslib/jobque_boost
require daslib/jobque_profile
require daslib/apply_in_context
require daslib/contracts
require daslib/defer
require daslib/with_boost
require daslib/delegate
require daslib/option
require daslib/result
require daslib/if_not_null
require daslib/templates
require daslib/templates_boost
require daslib/instance_function
require daslib/is_local
require daslib/safe_addr
require daslib/static_let
require daslib/lpipe
require daslib/random
require daslib/math_bits
require daslib/math_boost
require daslib/array_boost
require daslib/archive
require daslib/unroll
require daslib/assert_once
require daslib/ast_block_to_loop
require daslib/ast_cursor
require daslib/ast_match
require daslib/ast_used
require daslib/constant_expression
require daslib/uriparser_boost
require daslib/sort_boost
require daslib/enum_trait
require daslib/cpp_bind
require daslib/decs
require daslib/decs_boost
require daslib/utf8_utils
require daslib/coroutines
require daslib/interfaces
require daslib/faker
require daslib/fuzzer
require daslib/match
require daslib/linq
require daslib/linq_boost
require daslib/linq_fold
require daslib/flat_hash_table
require daslib/cuckoo_hash_table
require daslib/macro_boost
require daslib/class_boost
require daslib/soa
require daslib/base64
// require daslib/linked_list // spoof template, not documentable
require daslib/bool_array
require daslib/bitfield_boost
require daslib/bitfield_trait
require daslib/async_boost
require daslib/command_line
require daslib/consume
require daslib/dap
require daslib/das_source_formatter
require daslib/das_source_formatter_fio
// require daslib/debug // uses persistent_heap, gc, complex dependencies
require daslib/debug_eval
require daslib/decs_state
require daslib/dynamic_cast_rtti
require daslib/generic_return
// require daslib/heartbeat // qmacro(heartbeat()) conflicts when used in das2rst context
require daslib/lint
require daslib/logger
// require daslib/lint_everything // global_lint_macro causes lint errors in other modules
require daslib/profiler
require daslib/profiler_boost
require daslib/quote
require daslib/refactor
require daslib/remove_call_args
// require daslib/spoof // depends on peg module
require daslib/stringify
require peg/peg
require gltf/gltf_boost
require daslib/temp_strings
require daslib/type_traits
require daslib/typemacro_boost
require daslib/validate_code
require dashv/dashv_boost
require openai/openai_common
require openai/openai_chat
require openai/openai_embeddings
require openai/openai_models
require openai/openai_completions
require openai/openai_audio
require openai/openai_moderations
require openai/openai_images
require openai/openai_vision
require pugixml/PUGIXML_boost
require stbimage/stbimage_boost
require stbimage/stbimage_ttf
require audio/audio_boost
require audio/audio_wav
require audio/audio_record
require strudel/strudel_event
require strudel/strudel_time
require strudel/strudel_live
require strudel/strudel_scales
require strudel/strudel_mini
require strudel/strudel_samples
require strudel/strudel_synth
require strudel/strudel_scheduler
require strudel/strudel_player
require strudel/strudel_midi
require strudel/strudel_midi_player
require strudel/strudel_sf2
require strudel/strudel_sf2_voice
require strudel/strudel_pattern
require spirv/spirv_reflect
require dasllama/dasllama
require llvm/daslib/llvm_tune // documentation context keeps [tune] fully inert
def document_module_math(_root : string) {
var mod = get_module("math")
var groups <- array<DocGroup>(
group_by_regex("Horizontal reduce (float2, float3, float4)", mod, %regex~(hmin|hmax|hadd)$%%),
group_by_regex("all numerics (uint*, int*, float*, double)", mod, %regex~(min|max)$%%),
group_by_regex("float* and double", mod, %regex~(sign|abs|acos|asin|safe_acos|safe_asin|atan|atan2|cos|sin|tan|sinh|cosh|tanh|asinh|acosh|atanh|exp|log|exp2|expm1|log2|log10|log1p|pow|sqrt|cbrt|hypot|fmod|remainder|trunc|rcp|ceil|floor|abs|saturate|sincos|is_finite|is_nan|radians|degrees|step|smoothstep)$%%),
group_by_regex("float* only", mod, %regex~(atan_est|atan2_est|rcp_est|ceili|floori|roundi|trunci|round|rsqrt|rsqrt_est|fract|\-)$%%),
group_by_regex("float3 only", mod, %regex~(cross|reflect|refract|distance|distance_sq|
inv_distance|inv_distance_sq)$%%),
group_by_regex("float2, float3, float4", mod, %regex~(length|length_sq|inv_length|inv_length_sq|
dot|normalize|fast_normalize)$%%),
group_by_regex("Noise functions", mod, %regex~(uint32_hash|uint_noise_1D|uint_noise_2D|uint_noise_3D)$%%),
group_by_regex("lerp/mad/clamp", mod, %regex~(lerp|mad|clamp)$%%),
group_by_regex("Matrix element access", mod, %regex~\.\[\]$%%),
group_by_regex("Matrix operations", mod, %regex~(\=\=|\!\=|\*).*$%%),
group_by_regex("Matrix initializers", mod, %regex~(float3x4|float4x4|float3x3|identity3x4|identity4x4|identity3x3)$%%),
group_by_regex("Matrix manipulation", mod, %regex~(identity|inverse|rotate|transpose|translation|compose|decompose|look_at|orthonormal_inverse|persp_forward|persp_reverse|determinant)$%%),
group_by_regex("Quaternion operations", mod, %regex~(quat_conjugate|quat_mul|quat_mul_vec|quat_from_unit_arc|quat_from_unit_vec_ang|quat_from_euler|euler_from_quat|quat$|quat_slerp)%%),
group_by_regex("Packing and unpacking", mod, %regex~(pack_float_to_byte|unpack_byte_to_float)$%%)
);
document("Math library", mod, "math.rst", groups);
}
def document_module_builtin(_root : string) {
var mod = [get_module("$"), find_module("builtin")]
var groups <- array<DocGroup>(
hide_group(group_by_regex("Internal builtin functions", mod, %regex~builtin%%)),
hide_group(group_by_regex("Internal pointer arithmetics", mod, %regex~i_das_%%)),
hide_group(group_by_regex("Internal clone infrastructure", mod, %regex~clone%%)),
hide_group(group_by_regex("Internal finalize infrastructure", mod, %regex~finalize%%)),
group_by_regex("Containers", mod, %regex~(capacity|clear|length|resize|resize_no_init|reserve|each|each_kv|emplace|emplace_from|erase|find|
find_for_edit|find_if_exists|find_index|find_index_if|has_value|key_exists|keys|values|get_key|lock|each_enum|each_ref|
find_for_edit_if_exists|lock_forever|next|nothing|pop|push|push_from|push_clone|push_clone_from|back|sort|stable_sort|to_array|to_table|to_array_move|
to_table_move|empty|subarray|insert|move_to_ref|copy_to_local|move_to_local|get|remove_value|erase_if|resize_and_init|
get_value|insert_clone|emplace_new|insert_default|emplace_default|get_with_default|modify|long_length|long_capacity|long_find_index)$%%),
group_by_regex("Character set groups", mod, %regex~(is_alpha|is_number|is_white_space|is_char_in_set)$%%),
group_by_regex("das::string manipulation", mod, %regex~(peek|set)$%%),
group_by_regex("String builder", mod, %regex~(build_string|write|write_char|write_chars|write_escape_string)$%%),
group_by_regex("Heap reporting", mod, %regex~(heap|string_heap|memory_report|tag_array|tag_table)%%),
group_by_regex("Vector and matrix math", mod, %regex~(float3x4|float4x4|identity|inverse|rotate|translation|transpose)$%%),
group_by_regex("16/8-bit lattice converts", mod, %regex~(short2_sat|short3_sat|short4_sat|ushort2_sat|ushort3_sat|ushort4_sat|byte2_sat|byte3_sat|byte4_sat|byte8_sat|ubyte2_sat|ubyte3_sat|ubyte4_sat|ubyte8_sat|half8_lo|half8_hi)$%%),
group_by_regex("16/8-bit lattice integer dots", mod, %regex~(idot|idot4|shuffle)$%%),
group_by_regex("GC0 infrastructure", mod, %regex~gc0%%),
group_by_regex("Smart ptr infrastructure", mod, %regex~(add_ptr_ref|smart_ptr|get_const_ptr|move|move_new|get_ptr$)%%),
group_by_regex("Macro infrastructure", mod, %regex~(is_folding|is_compiling|is_in_completion|is_in_lint_check|is_building_documentation|is_reporting_compilation_errors)%%),
group_by_regex("Profiler", mod, %regex~(profile|reset_profiler|dump_profile_info|collect_profile_info)$%%),
group_by_regex("System infrastructure", mod, %regex~(panic|print|feint|sprint|sprint_json|sscan_json|to_log|to_compiler_log|error|terminate|breakpoint|stackwalk|get_stackwalk|get_das_root|get_das_version|is_in_aot|aot_enabled|is_intern_strings|is_safe_hash|eval_main_loop|shared_module_extension)$%%),
group_by_regex("Memory manipulation", mod, %regex~(intptr|memcmp|variant_index|set_variant_index|hash|memcpy|lock_data|map_to_array|map_to_ro_array)$%%),
group_by_regex("Binary serializer", mod, %regex~(binary_load|binary_save)$%%),
group_by_regex("Path and command line", mod, %regex~(get_command_line_arguments|with_argv)$%%),
group_by_regex("Time and date", mod, %regex~(get_time_usec|ref_time_ticks|get_clock|get_time_nsec|mktime|iso8601_now|format_time)$%%),
group_by_regex("Platform queries", mod, %regex~(get_context_share_counter|das_is_dll_build|das_is_exceptions_enabled|is_standalone_exe|get_platform_name|get_running_platform_name|get_cross_platform_name|get_architecture_name|cpu_supports)$%%),
group_by_regex("String formatting", mod, %regex~(fmt)$%%),
group_by_regex("Argument consumption", mod, %regex~(consume_argument)$%%),
group_by_regex("Lock checking", mod, %regex~(lock_count)$%%),
group_by_regex("Bit operations", mod, %regex~(popcnt|clz|ctz|mul128|__bit_set)$%%),
group_by_regex("Intervals", mod, %regex~(interval)$%%),
group_by_regex("RTTI", mod, %regex~(class_rtti_size)$%%),
hide_group(group_by_regex("Jit", mod,%regex~(invoke_code|.*jit.*)$%%)),
group_by_regex("Initialization and finalization", mod, %regex~(using|clone|finalize)$%%),
group_by_regex("Algorithms", mod, %regex~(swap|iter_range|count|ucount|long_iter_range)$%%),
group_by_regex("Memset", mod, %regex~(memset.*)$%%),
group_by_regex("Malloc", mod, %regex~(malloc|free|malloc_usable_size)$%%),
group_by_regex("Compilation and AOT", mod, %regex~(is_aot_enabled|set_aot|reset_aot|compiling_file_name|compiling_module_name|get_module_file_name)$%%),
group_by_regex("GC", mod, %regex~(gc_active_root_count|gc_thread_root_count|gc_thread_root_report|gc_thread_root_report_detailed|gc_total_id)$%%))
documents("Built-in runtime", mod, "builtin.rst", groups);
}
def document_module_fio(_root : string) {
var mod = [get_module("fio_core"), find_module("fio")]
var groups <- array<DocGroup>(
hide_group(group_by_regex("Internal builtin functions", mod, %regex~builtin%%)),
group_by_regex("File manipulation", mod, %regex~(f|long_f|stat$|getchar|remove|rename|copy_file|file_size|equivalent|is_symlink|set_mtime)%%),
group_by_regex("Path manipulation", mod, %regex~(base_name|dir_name|get_full_file_name|extension|stem|replace_extension|path_join|normalize|to_generic_path|is_absolute|relative|relative_result|parent)$%%),
group_by_regex("Directory manipulation", mod, %regex~(dir|dir_rec|mkdir|mkdir_rec|mkdir_result|rmdir|rmdir_rec|rmdir_rec_result|rmdir_result|chdir|getcwd)$%%),
group_by_regex("Glob and pattern matching", mod, %regex~(match_glob|glob|glob_filtered|is_glob_pattern|expand_glob|parse_file_list)$%%),
group_by_regex("Filesystem queries", mod, %regex~(temp_directory|temp_directory_result|create_temp_file|create_temp_file_result|create_temp_directory|create_temp_directory_result|disk_space)$%%),
group_by_regex("Terminal queries", mod, %regex~(is_terminal|terminal_width)$%%),
group_by_regex("OS specific routines", mod, %regex~(sleep|exit|system|popen|popen_binary|popen_timeout|spawn_argv|popen_argv|popen_argv_pipe|popen_timed_out|run_and_capture|get_env_variable|set_env_variable|sanitize_command_line|has_env_variable)$%%),
group_by_regex("Dynamic modules", mod, %regex~(register_dynamic_module|register_native_path)$%%)
)
documents("File input output library", mod, "fio.rst", groups)
}
def document_module_clipboard(_root : string) {
var mod = [get_module("clipboard_core"), find_module("clipboard")]
var groups <- array<DocGroup>(
hide_group(group_by_regex("Internal clipboard functions", mod, %regex~^_clipboard_%%)),
group_by_regex("UTF-8 system clipboard", mod, %regex~^clipboard_%%)
)
documents("System clipboard", mod, "clipboard.rst", groups)
}
def document_module_random(_root : string) {
var mod = get_module("random")
var groups <- array<DocGroup>(
group_by_regex("Seed and basic generators", mod, %regex~(random_seed|random_seed2D|random_float|random_float4|random_int|random_big_int|random_int4|random_uint)$%%),
group_by_regex("Random iterators", mod, %regex~(each_random_.*)$%%),
group_by_regex("Specific distributions", mod, %regex~(random_unit_vector|random_in_unit_disk|random_in_unit_sphere)$%%)
)
document("Random generator library", mod, "random.rst", groups)
}
def document_module_network(_root : string) {
var mod = get_module("network_core")
var groups <- array<DocGroup>(
group_by_regex("Low level NetworkServer IO", mod, %regex~(make_server|server_init|server_is_open|server_is_connected|server_tick|server_send|server_restore)$%%)
)
document("Network socket library", mod, "network.rst", groups)
}
def document_module_dashv(_root : string) {
var mod = get_module("dashv")
var groups <- array<DocGroup>(
group_by_regex("WebSocket client", mod, %regex~(make_web_socket_client|destroy_web_socket_client|open|close|is_connected|tick|send)$%%),
group_by_regex("WebSocket server lifecycle", mod, %regex~(make_web_socket_server|destroy_web_socket_server|set_bind_host|start|stop)$%%),
group_by_regex("WebSocket channel send", mod, %regex~(send)$%%),
group_by_regex("Handle operations", mod, %regex~(is_alive|==|!=)$%%),
group_by_regex("HTTP route registration", mod, %regex~(GET|POST|PUT|DELETE|PATCH|HEAD|ANY|SSE|STREAM)$%%),
group_by_regex("HTTP server configuration", mod, %regex~(STATIC|allow_cors|set_document_root|set_home_page|set_index_of|set_error_page)$%%),
group_by_regex("HTTP response helpers", mod, %regex~(TEXT_PLAIN|JSON|REDIRECT|SERVE_FILE|DATA|set_header|set_content_type)$%%),
group_by_regex("HTTP client requests", mod, %regex~(request|request_cb|status_message)$%%),
group_by_regex("Message and header access", mod, %regex~(get_header|each_header|.*content_length)$%%),
group_by_regex("Request configuration", mod, %regex~(set_basic_auth|set_bearer_token_auth|set_timeout|set_connect_timeout|allow_redirect|set_param|get_param|each_param)$%%),
group_by_regex("Cookies", mod, %regex~(add_cookie|get_cookie|each_cookie)$%%),
group_by_regex("Form data", mod, %regex~(set_form_data|set_form_file|get_form_data|each_form_field|save_form_file|set_url_encoded|get_url_encoded)$%%),
group_by_regex("SSE response writer", mod, %regex~(respond|sse_event|end_headers|write_chunked|set_writer_keepalive_timeout|close_writer|release_writer|is_writer_connected)$%%)
)
document("HTTP and WebSocket library (libhv)", mod, "dashv.rst", groups)
}
def document_module_dashv_boost(_root : string) {
var mod = find_module("dashv_boost")
var groups <- array<DocGroup>(
group_by_regex("HTTP request helpers", mod, %regex~(with_http_request|get_body_bytes)$%%)
)
document("High-level HTTP and WebSocket wrappers", mod, "dashv_boost.rst", groups)
}
def document_module_openai(_root : string) {
var mod = [find_module("openai_common"), find_module("openai_chat"),
find_module("openai_embeddings"), find_module("openai_models"),
find_module("openai_completions"), find_module("openai_audio"),
find_module("openai_moderations"), find_module("openai_images"),
find_module("openai_vision")]
var groups <- array<DocGroup>(
group_by_regex("Client and transport", mod, %regex~(openai_client|configure_request|percent_encode|parse_error_body|post_json|get_json|post_for_bytes|post_and_decode|get_and_decode)$%%),
group_by_regex("Chat completions", mod, %regex~(chat|chat_text|chat_stream|json_object_format)$%%),
group_by_regex("Embeddings", mod, %regex~(embeddings|embed)$%%),
group_by_regex("Models", mod, %regex~(list_models|retrieve_model)$%%),
group_by_regex("Legacy completions", mod, %regex~(completions|complete)$%%),
group_by_regex("Audio (TTS and STT)", mod, %regex~(speech|speak|transcribe|translate)$%%),
group_by_regex("Moderations", mod, %regex~(moderations)$%%),
group_by_regex("Image generation", mod, %regex~(generate_image)$%%),
group_by_regex("Vision", mod, %regex~(chat_vision|vision_request_body)$%%)
)
documents("OpenAI-compatible API client (chat, embeddings, audio, vision, ...)", mod, "openai.rst", groups)
}
// One hand-written stanza per engine type the facade signatures mention. The facade re-exports
// these from dasllama_common / dasllama_chat, which are deliberately NOT documented (their
// internals are engine detail) — the stanzas define the :ref: labels the signatures link to.
def private dasllama_type_stanza(f : FILE const?; lab : string; tname : string; text : string) {
fwrite(f, ".. _{lab}:\n\n")
fwrite(f, ".. das:attribute:: {tname}\n\n")
fwrite(f, "{text}\n\n")
}
def document_module_dasllama(_root : string) {
var mod = find_module("dasllama")
var groups <- array<DocGroup>(
group_by_regex("Model loading and sessions", mod, %regex~(load_model|create_session|create_kv_pool|release_kv_pages|create_batch_workspace|setup_dasllama_jobque|caps)$%%),
group_by_regex("Prefix cache", mod, %regex~(create_prefix_cache|prefix_attach|prefix_insert|prefix_release|prefix_held_groups|prefix_chain_list)$%%),
group_by_regex("Tokenizer", mod, %regex~(encode|decode|piece)$%%),
group_by_regex("Evaluation and sampling", mod, %regex~(eval|eval_embd|eval_batch|sample|set_seed|stats)$%%),
group_by_regex("Generation", mod, %regex~(generate|generate_embd)$%%),
group_by_regex("Embeddings", mod, %regex~(embed)$%%),
group_by_regex("Chat", mod, %regex~(create_chat|create_chat_renderer|add_user|add_user_audio|add_assistant|render_turn|render_assistant|render_close|respond|set_thinking)$%%),
group_by_regex("Tool calling", mod, %regex~(set_tools|add_tool_results|render_assistant_calls)$%%)
)
var hook = DocsHook()
hook.afterEnums <- @(var f : FILE const?; _was_enums : bool) {
fwrite(f, make_group("Types"))
fwrite(f, "The engine types the API below works with. They are created and consumed by the\n")
fwrite(f, "functions of this module; their remaining fields are engine implementation detail.\n\n")
dasllama_type_stanza(f, "struct-dasllama_common-Model", "Model",
"A loaded model: weights, ``config``, tokenizer, and the architecture's blocks and chat template, as produced by ``load_model``. User code touches ``config`` (e.g. cap ``config.seq_len`` before ``create_session`` on large-context models) and ``arch`` (the GGUF architecture name).")
dasllama_type_stanza(f, "struct-dasllama_common-Session", "Session",
"One generation stream over a model: the KV cache, scratch buffers, sampling RNG, and the current position ``n_past``. ``logits`` holds the distribution produced by the last ``eval``. A model serves many independent sessions.")
dasllama_type_stanza(f, "struct-dasllama_common-BatchWorkspace", "BatchWorkspace",
"Caller-owned scratch for ``eval_batch``: the batched activation buffers a step of B sessions shares. One per concurrent batch, reused across calls; holds no session state — positions, caches and logits stay in the sessions.")
dasllama_type_stanza(f, "struct-dasllama_common-KVPool", "KVPool",
"A caller-owned paged KV-cache pool (``create_kv_pool``): sessions created over it allocate fixed-size page groups on demand, so cache memory tracks the actual context instead of the full ``seq_len`` slab. One pool serves many sessions; an ``eval_batch`` batch must share one pool. Keep it alive and in place while its sessions live.")
dasllama_type_stanza(f, "struct-dasllama_prefix-PrefixCache", "PrefixCache",
"A page-granular prefix cache over one pool's sessions (``create_prefix_cache``): finished streams donate their KV pages keyed by a chained page hash of the token history, and later requests attach the longest cached prefix instead of re-prefilling it. Pages are refcounted with the pool; an LRU budget bounds retention.")
dasllama_type_stanza(f, "enum-dasllama_common-KVDtype", "KVDtype",
"Per-session KV-cache codec picked at ``create_session``/``create_chat``: ``f16`` — the default, half the KV bytes and faster deep-context decode (stores clamp to ±65504); ``f32`` — the bit-exact reference; ``q8_0`` — block-quantized (llama.cpp ``-ctk``/``-ctv q8_0``), half the f16 bytes again and near-lossless in practice; needs head_size and kv_dim to be multiples of 32 (checked at create).")
dasllama_type_stanza(f, "enum-dasllama_common-QuantMode", "QuantMode",
"Weight representation picked at load: ``fp32`` — the token-exact reference; ``q8`` — int8 quantization, the fast CPU path; ``q4`` — 4-bit, smallest footprint.")
dasllama_type_stanza(f, "struct-dasllama_common-SamplingParams", "SamplingParams",
"Sampling knobs: ``temp`` (<= 0 selects greedy argmax), ``top_k`` (0 = no cutoff), and repetition ``penalty`` (1.0 = none) applied over the last ``penalty_last_n`` generated tokens. The defaults are greedy — ``SamplingParams()`` reproduces argmax exactly.")
dasllama_type_stanza(f, "struct-dasllama_common-Stats", "Stats",
"Timing of the last ``generate``/``respond`` call: ``n_prompt``/``n_gen`` token counts, ``ttft_s`` (seconds to first token), and ``prefill_tps``/``gen_tps`` throughput in tokens per second.")
dasllama_type_stanza(f, "struct-dasllama_common-LlmCaps", "LlmCaps",
"What the model honestly supports at the chat layer, as returned by ``caps``: ``system_prompt`` is false for architectures with no system role (gemma), where the chat layer silently folds the system prompt into the first user turn. Grows as gaps surface.")
dasllama_type_stanza(f, "struct-dasllama_chat-ChatSession", "ChatSession",
"A conversation over a model: its ``session``, the resolved chat template, and the running transcript in ``history``. Create with ``create_chat``, then drive with ``add_user`` + ``respond``.")
dasllama_type_stanza(f, "struct-dasllama_audio-AudioTower", "AudioTower",
"A loaded audio encoder: Whisper-family encoder weights plus the model-specific projector tail, as produced by ``load_audio_tower`` from an mmproj GGUF. Pass it to ``create_chat`` to enable ``add_user_audio`` turns.")
}
document("dasLLAMA LLM inference: models, sessions, generation, chat", mod, "dasllama.rst", groups, hook)
}
def document_module_debugapi(_root : string) {
var mod = get_module("debugapi")
var groups <- array<DocGroup>(
group_by_regex("Agent lifecycle", mod, %regex~(fork_debug_agent_context|install_debug_agent|install_debug_agent_thread_local|install_new_debug_agent|install_new_thread_local_debug_agent|has_debug_agent_context|get_debug_agent_context|delete_debug_agent_context|is_in_debug_agent_creation|lock_debug_agent)$%%),
group_by_regex("Cross-context invocation", mod, %regex~(invoke_in_context|invoke_debug_agent_method|invoke_debug_agent_function)$%%),
group_by_regex("Agent construction", mod, %regex~(make_debug_agent|make_data_walker|make_stack_walker)$%%),
group_by_regex("Agent tick and state collection", mod, %regex~(tick_debug_agent|collect_debug_agent_state|on_breakpoints_reset|report_context_state|debug_agent_command|debugger_stop_requested)$%%),
group_by_regex("Instrumentation", mod, %regex~(instrument_node|instrument_function|instrument_all_functions|instrument_all_functions_thread_local|instrument_context_allocations|clear_instruments|set_single_step)$%%),
group_by_regex("Data and stack walking", mod, %regex~(walk_data|walk_stack|stackwalk|get_stackwalk|stack_depth)$%%),
group_by_regex("Context inspection", mod, %regex~(get_context_global_variable|has_function|get_heap_stats)$%%),
group_by_regex("Breakpoints", mod, %regex~(set_hw_breakpoint|clear_hw_breakpoint)$%%),
group_by_regex("Memory", mod, %regex~(free_temp_string|temp_string_size|break_on_free|track_insane_pointer)$%%)
)
document("Debug agent API", mod, "debugapi.rst", groups)
}
def document_module_uriparser(_root : string) {
var mod = get_module("uriparser")
var groups <- array<DocGroup>(
group_by_regex("Initialization and finalization", mod, %regex~(Uri|using|clone|finalize)$%%),
group_by_regex("Escape and unescape", mod, %regex~(escape_uri|unescape_uri)$%%),
group_by_regex("Uri manipulations", mod, %regex~(normalize_uri|unescape_uri|string|uri_for_each_query_kv|remove_base_uri|add_base_uri|strip_uri|normalize)$%%),
group_by_regex("File name conversions", mod, %regex~(to_unix_file_name|to_windows_file_name|to_file_name|uri_from_file_name|uri_from_windows_file_name|uri_from_unix_file_name|uri_to_unix_file_name|uri_to_windows_file_name|unix_file_name_to_uri|windows_file_name_to_uri|uri_to_file_name|file_name_to_uri)$%%),
group_by_regex("GUID", mod, %regex~(make_new_guid)$%%)
)
document("URI manipulation library based on UriParser", mod, "uriparser.rst", groups)
}
def document_module_rtti(_root : string) {
var mod = [get_module("rtti_core"), find_module("rtti")]
var groups <- array<DocGroup>(
group_by_regex("Initialization and finalization", mod, %regex~(using|LineInfo|CodeOfPolicies|RttiValue_nothing)$%%),
group_by_regex("Type access", mod, %regex~(get_dim|builtin_is_same_type|is_compatible_cast|get_das_type_name|is_same_type|each_dim|arg_types|arg_names|get_type_size|get_type_align)$%%),
group_by_regex("Rtti context access", mod, %regex~(get_total_functions|get_total_variables|get_function_info|get_variable_info|get_variable_value|get_function_by_mnh|get_line_info|this_context|context_for_each_function|context_for_each_variable|class_info|type_info)$%%),
group_by_regex("Program access", mod, %regex~(program_for_each_module|program_for_each_registered_module|get_this_module|get_module|has_module)$%%),
group_by_regex("Module access", mod, %regex~(module_for_each_structure|module_for_each_enumeration|module_for_each_function|module_for_each_generic|module_for_each_global|module_for_each_annotation|module_for_each_dependency)$%%),
group_by_regex("Annotation access", mod, %regex~(get_annotation_argument_value|add_annotation_argument|get_annotation|get_annotation_argument|resolve_annotation|each_annotation|each_annotation_argument)$%%),
group_by_regex("Compilation and simulation", mod, %regex~(compile|compile_file|for_each_expected_error|for_each_require_declaration|simulate|create_ast_serializer|create_ast_deserializer|delete_ast_serializer|serialize_program|deserialize_program|ast_serializer_get_data)$%%),
group_by_regex("File access", mod, %regex~(make_file_access|set_file_source|add_file_access_root|add_extra_module)$%%),
group_by_regex("Structure access", mod, %regex~(rtti_builtin_structure_for_each_annotation|basic_struct_for_each_field|structure_for_each_annotation|basic_struct_for_each_parent)$%%),
group_by_regex("Data walking and printing", mod, %regex~(sprint_data|sprint_json_at|sscan_json_at|describe|get_mangled_name)$%%),
group_by_regex("Function and mangled name hash", mod, %regex~(get_function_by_mangled_name_hash|get_function_mangled_name_hash|get_function_address)$%%),
group_by_regex("Context and mutex locking", mod, %regex~(lock_this_context|lock_context|lock_mutex)$%%),
group_by_regex("Runtime data access", mod, %regex~(get_table_key_index)$%%),
group_by_regex("Tuple and variant access", mod, %regex~(get_tuple_field_offset|get_variant_field_offset)$%%),
group_by_regex("Lint suppression", mod, %regex~(rtti_get_source_line|rtti_is_nolint_suppressed|is_lint_suppressed|extract_lint_code)$%%),
group_by_regex("Iteration", mod, %regex~(each)$%%))
// CompilationError's 580-value list blows the search crawler's per-record size cap;
// exclude it from search (the symbol + its description stay indexed).
documents("Runtime type information library", mod, "rtti.rst", groups, DocsHook(), ["CompilationError"])
}
def document_module_ast(_root : string) {
var mod = [get_module("ast_core"), find_module("ast")]
var groups <- array<DocGroup>(
group_by_regex("Compilation and file access", mod, %regex~(compile|compile_file|make_file_access)$%%),
group_by_regex("Call generation", mod, %regex~(make_call)$%%),
group_by_regex("Visitor pattern", mod, %regex~visit.*%%),
group_by_regex("Expression generation", mod, %regex~(force_generated|get_expression_annotation|make_type_info_structure)%%),
group_by_regex("Adapter generation", mod, %regex~make_.*%%),
group_by_regex("Adapter application", mod, %regex~(add_.*_(annotation|macro)|add_new_comment_reader|add_comment_reader|add_module_option)%%),
group_by_regex("Adding objects to objects", mod, %regex~add_.*%%),
group_by_regex("Program and module access", mod, %regex~(this_program|this_module|compiling_program|compiling_module)$%%),
group_by_regex("Textual descriptions of the objects", mod, %regex~(describe.*|das_to_string)%%),
group_by_regex("Searching", mod, %regex~find.*%%),
group_by_regex("Iterating", mod, %regex~(for_each.*|.*_foreach)%%),
group_by_regex("Cloning", mod, %regex~clone.*%%),
group_by_regex("Mangled name", mod, %regex~(parse_mangled_name|get_mangled_name)%%),
group_by_regex("Size and offset", mod, %regex~.*_(size|offset)%%),
group_by_regex("Pointer conversion", mod, %regex~(ExpressionPtr|FunctionPtr|StructurePtr)%%),
group_by_regex("Evaluations", mod, %regex~(eval_single_expression)%%),
group_by_regex("Error reporting", mod, %regex~(macro_error|macro_performance_warning|macro_style_warning)%%),
group_by_regex("Location and context", mod, %regex~(force_at|collect_dependencies|get_ast_context)%%),
group_by_regex("Use queries", mod, %regex~(get_use_global_variables|get_use_functions)%%),
group_by_regex("Log", mod, %regex~(to_compilation_log)%%),
group_by_regex("Removal", mod, %regex~(remove.*)%%),
group_by_regex("Properties", mod, %regex~(is|has|get|can)_.*%%),
group_by_regex("Infer", mod, %regex~(infer_generic_type|update_alias_map)$%%),
group_by_regex("Module queries", mod, %regex~(module_find_annotation|module_find_type_annotation|module_find_structure|module_find_enumeration|module_has_comment_reader|not_inferred)$%%),
group_by_regex("Debug info helpers", mod, %regex~(debug_helper_.*)%%),
group_by_regex("AOT support", mod, %regex~(aot_require|aot_type_ann_get_field_ptr|aot_need_type_info|aot_previsit_get_field_ptr|aot_previsit_get_field|aot_visit_get_field|write_aot_body|write_aot_suffix|write_aot_macro_suffix|write_aot_macro_prefix|macro_aot_infix|getInitSemanticHashWithDep|get_aot_hash_comment)$%%),
group_by_regex("String builder writer", mod, %regex~(string_builder_str|string_builder_clear)$%%),
group_by_regex("GC", mod, %regex~(ast_gc_guard|ast_gc_collect_scope|verify_typedecl_gc|verify_expression_gc|delete_expression|delete_type)$%%),
hide_group(group_by_regex("Internal ast infrastructure", mod, %regex~(builtin_ast_.*)%%))
)
documents("AST manipulation library", mod, "ast.rst", groups)
}
def document_module_ast_boost(_root : string) {
var mod = find_module("ast_boost")
var groups <- array<DocGroup>(
group_by_regex("Containers", mod, %regex~(emplace_new)%%),
group_by_regex("Textual descriptions of the objects", mod, %regex~(describe.*|debug_expression)%%),
group_by_regex("Queries", mod, %regex~(is.*|find.*|get.*)%%),
group_by_regex("Annotations", mod, %regex~(append.*|add.*)%%),
group_by_regex("Expression generation", mod, %regex~(override_method|panic_expr_as|make_static_assert_false|convert_to_expression)%%),
group_by_regex("Visitors", mod, %regex~(visit.*)%%),
group_by_regex("Type generation", mod, %regex~(function_to_type|make_fixed_array_type)%%),
group_by_regex("Type casts", mod, %regex~(`is`|`as`|walk_and_convert)%%),
hide_group(group_by_regex("Clonning", mod, %regex~(clone)%%)),
group_by_regex("Setup", mod, %regex~setup.*$%%)
)
document("Boost package for the AST", mod, "ast_boost.rst", groups)
}
def document_module_strings(_root : string) {
var mod = find_module("strings")
var groups <- array<DocGroup>(
hide_group(group_by_regex("Internal builtin functions", mod, %regex~builtin%%)),
group_by_regex("Character set", mod, %regex~(set_total|set_element|is_char_in_set)$%%),
group_by_regex("Character groups", mod, %regex~is.+%%),
group_by_regex("Character by index", mod, %regex~(character_at|character_uat|first_character)$%%),
group_by_regex("String properties", mod, %regex~(empty|ends_with|length|starts_with)$%%),
group_by_regex("String builder", mod, %regex~(build_string|format|write|write_char|write_chars|write_escape_string|build_hash)$%%),
group_by_regex("das::string manipulation", mod, %regex~(append|resize|with_das_string)$%%),
group_by_regex("String modifications", mod, %regex~(chop|escape|unescape|repeat|replace|reverse|slice|
strip|strip_left|strip_right|to_lower|to_lower_in_place|to_upper|to_upper_in_place|rtrim|safe_unescape|ltrim|trim)$%%),
group_by_regex("Search substrings", mod, %regex~(find|rfind).*%%),
group_by_regex("String comparison", mod, %regex~(compare_ignore_case)$%%),
group_by_regex("String conversion routines", mod, %regex~(double|float|int|uint|int64|uint64|to_double|to_float|to_int|to_uint|to_int64|to_uint64|string|to_char|fmt|int8|to_int8|uint8|to_uint8|int16|to_int16|uint16|to_uint16|to_cpp_float)$%%),
group_by_regex("String as array", mod, %regex~(modify_data|peek_data)$%%),
group_by_regex("Low level memory allocation", mod, %regex~(delete_string|reserve_string_buffer)$%%)
);
document("String manipulation library", mod, "strings.rst", groups);
}
def document_module_strings_boost(_root : string) {
var mod = find_module("strings_boost")
var groups <- array<DocGroup>(
group_by_regex("Split and join", mod, %regex~(split|split_by_chars|join)$%%),
group_by_regex("Formatting", mod, %regex~(wide|pad_left|pad_right|capitalize)$%%),
group_by_regex("Queries and comparisons", mod, %regex~(is_character_at|eq|contains|count|is_null_or_whitespace)$%%),
group_by_regex("Search and match", mod, %regex~(last_index_of|glob_match|text_match)$%%),
group_by_regex("Replace", mod, %regex~(replace_multiple)$%%),
group_by_regex("Prefix and suffix", mod, %regex~(trim_prefix|trim_suffix)$%%),
group_by_regex("String similarity", mod, %regex~(levenshtein_distance|levenshtein_distance_fast|jaccard)$%%),
group_by_regex("Character traits", mod, %regex~(is_hex|is_tab_or_space)$%%))
document("Boost package for string manipulation library", mod, "strings_boost.rst", groups)
}
def document_module_strings_convert(_root : string) {
var mod = find_module("strings_convert")
var groups <- array<DocGroup>(
group_by_regex("Soft-failing conversions", mod, %regex~try_to_(int|uint|int8|uint8|int16|uint16|int64|uint64|float|double)$%%))
document("Soft-failing string-to-numeric conversions returning Result<T; ConversionError>", mod, "strings_convert.rst", groups)
}
def document_module_functional(_root : string) {
var mod = find_module("functional")
var groups <- array<DocGroup>(
group_by_regex("Transformations", mod, %regex~(filter|map|flat_map|flatten|sorted|scan)$%%),
group_by_regex("Aggregation", mod, %regex~(reduce|reduce_or_default|fold|sum|any|all|count)$%%),
group_by_regex("Search and split", mod, %regex~(find|find_index|partition)$%%),
group_by_regex("Iteration", mod, %regex~(for_each|tap|echo|enumerate|long_enumerate)$%%),
group_by_regex("Generators", mod, %regex~(repeat_ref|repeat|cycle|iterate|chain|pairwise|islice)$%%),
group_by_regex("Predicates", mod, %regex~(is_equal|is_not_equal|not)$%%)
)
document("Functional programming library", mod, "functional.rst", groups)
}
def document_module_json(_root : string) {
var mod = find_module("json")
var groups <- array<DocGroup>(
group_by_regex("Value conversion", mod, %regex~(JV|JVNull)$%%),
group_by_regex("Read and write", mod, %regex~(read_json|write_json|write_json_compact)$%%),
group_by_regex("Memory management", mod, %regex~(delete_json|update|json_null_sentinel)$%%),
group_by_regex("JSON properties", mod, %regex~(set_no_trailing_zeros|set_no_empty_arrays|set_allow_duplicate_keys)$%%),
group_by_regex("Broken JSON", mod, %regex~(try_fixing_broken_json)$%%)
)
document("JSON manipulation library", mod, "json.rst", groups)
}
def document_module_json_boost(_root : string) {
var mod = find_module("json_boost")
var groups <- array<DocGroup>(
group_by_regex("Value conversion", mod, %regex~(JV|from_JV)$%%),
group_by_regex("LINQ source builders", mod, %regex~(from_json|from_json_row|read_json_field)$%%),
group_by_regex("Element access operators", mod, %regex~(\[\]|\?\[\]|\?\.|\.)$%%),
group_by_regex("Null coalescing operators", mod, %regex~(\?\?)$%%),
group_by_regex("Value extraction", mod, %regex~(\?\.)?`value$%%),
group_by_regex("Annotation parsing", mod, %regex~(parse_json_annotation)$%%)
)
document("Boost package for JSON", mod, "json_boost.rst", groups)
}
def document_module_jsonrpc(_root : string) {
var mod = find_module("jsonrpc")
var groups <- array<DocGroup>(
group_by_regex("Envelope builders", mod, %regex~(response|error|error_with_data|serialize_id)$%%),
group_by_regex("Server-side parsers", mod, %regex~(parse_request|parse_batch)$%%),
group_by_regex("Outgoing request builders", mod, %regex~(make_request|make_notification|make_batch)$%%),
group_by_regex("Response parsers", mod, %regex~(parse_response|parse_response_batch)$%%),
group_by_regex("Framing helper", mod, %regex~(compact_json_whitespace)$%%),
group_by_regex("High-level dispatch", mod, %regex~(dispatch_line)$%%)
)
document("JSON-RPC 2.0 envelope + parser, transport-agnostic", mod, "jsonrpc.rst", groups)
}
def document_module_regex(_root : string) {
var mod = find_module("regex")
var groups <- array<DocGroup>(
group_by_regex("Compilation and validation", mod, %regex~(regex_compile|is_valid|regex_debug|debug_set|visit_top_down)$%%),
group_by_regex("Access", mod, %regex~(regex_group|regex_group_by_name|regex_foreach|\[\])$%%),
group_by_regex("Match & replace", mod, %regex~(regex_match|regex_replace|regex_search|regex_split|regex_match_all)$%%),
group_by_regex("Generation", mod, %regex~(re_gen.*)$%%)
)
document("Regular expression library", mod, "regex.rst", groups)
}
def document_module_regex_boost(_root : string) {
var mod = find_module("regex_boost")
var groups <- array<DocGroup>(
)
document("Boost package for REGEX", mod, "regex_boost.rst", groups)
}
def document_module_rst(_root : string) {
var mod = find_module("rst")
var groups <- array<DocGroup>(
group_by_regex("Document writers", mod, %regex~document%%),
group_by_regex("Descriptions", mod, %regex~describe%%),
group_by_regex("Label makers", mod, %regex~(\w+_label_name|function_label_file)%%),
group_by_regex("RST section makers", mod, %regex~make%%),
group_by_regex("Documentation queries", mod, %regex~.+_needs%%),
group_by_regex("Group operations", mod, %regex~.*group%%),
group_by_regex("Naming helpers", mod, %regex~(topic|module_name|function_name|safe_function_name)$%%)
)
document("Documentation generator", mod, "rst.rst", groups)
}
def document_module_apply(_root : string) {
var mod = find_module("apply")
var groups <- array<DocGroup>(
)
document("Apply reflection pattern", mod, "apply.rst", groups)
}
def document_module_jobque(_root : string) {
var mod = find_module("jobque")
var groups <- array<DocGroup>(
group_by_regex("Channel, JobStatus, Lockbox, Stream", mod, %regex~(append|notify|join|channel_create|channel_remove|stream_create|stream_remove|add_ref|release|notify_and_release|lock_box_create|lock_box_remove|job_status_create|job_status_remove)$%%),
group_by_regex("Queries", mod, %regex~(get_total_hw_jobs|get_total_hw_threads|get_total_hw_cores|is_job_que_shutting_down|is_job_que_available|count_jobque_leaks)$%%),
group_by_regex("Event tracing", mod, %regex~(jobque_trace_start|jobque_trace_stop|jobque_trace_save|jobque_trace_tag|jobque_trace_category|jobque_trace_marker_name|jobque_trace_marker)$%%),
group_by_regex("Internal invocations", mod, %regex~(new_job_invoke|new_thread_invoke|new_debugger_thread|set_jobque_fork_pool|set_jobque_fork_skip_heap_reset|set_jobque_worker_spin|set_jobque_batch_dispatch|set_jobque_join_spin|set_jobque_team_mode|get_jobque_team_mode|set_jobque_thread_team_mode|get_jobque_thread_team_mode|set_current_thread_priority|set_jobque_threads_cap|set_jobque_affinity|get_jobque_affinity|set_jobque_worker_limit|get_jobque_worker_limit|set_jobque_team_rank_gate|get_jobque_team_rank_gate|set_jobque_team_prof|reset_jobque_team_prof|get_jobque_team_prof|get_jobque_team_prof_counts|get_jobque_team_prof_react|team_parallel_for_invoke|team_parallel_for_indexed_invoke|team_parallel_stages_invoke|flush_jobque_batch|jobque_try_run_one)$%%),
group_by_regex("Construction", mod, %regex~(with_channel|with_stream|with_job_status|with_job_que|with_lock_box|create_job_que|destroy_job_que)$%%),
group_by_regex("Atomic", mod, %regex~(atomic32_create|atomic32_remove|with_atomic32|atomic64_create|atomic64_remove|with_atomic64|get|set|inc|dec)$%%)
)
document("Jobs and threads", mod, "jobque.rst", groups)
}
def document_module_jobque_boost(_root : string) {
var mod = find_module("jobque_boost")
var groups <- array<DocGroup>(
group_by_regex("Invocations", mod, %regex~(new_job|new_thread)$%%),
group_by_regex("Iteration", mod, %regex~(for_each|each|each_clone|for_each_clone)$%%),
group_by_regex("Passing data", mod, %regex~(push|push_clone|push_batch|push_batch_clone|push_archive)$%%),
group_by_regex("Receiving data", mod, %regex~(gather|gather_ex|gather_and_forward|peek|pop|pop_one|pop_and_clone_one|try_pop|try_pop_clone|pop_with_timeout|pop_with_timeout_clone|pop_archive|try_pop_archive|gather_archive)$%%),
group_by_regex("Synchronization", mod, %regex~(with_wait_group|done)$%%),
group_by_regex("Parallel execution", mod, %regex~(_parallel_for|parallel_for|team_parallel_for|team_parallel_for_indexed|team_parallel_stages|_parallel_for_each|parallel_for_each|_parallel_map|parallel_map)$%%),
group_by_regex("LockBox operations", mod, %regex~(set|get|update|clear|fill|grab)$%%),
group_by_regex("Internal capture details", mod, %regex~(capture_jobque_channel|capture_jobque_job_status|release_capture_jobque_channel|release_capture_jobque_job_status|capture_jobque_lock_box|release_capture_jobque_lock_box|capture_jobque_stream|release_capture_jobque_stream)$%%)
)
document("Boost package for jobs and threads", mod, "jobque_boost.rst", groups)
}
def document_module_jobque_profile(_root : string) {
var mod = find_module("jobque_profile")
var groups <- array<DocGroup>(
group_by_regex("Trace sessions", mod, %regex~(profile_start|profile_stop|profile_save)$%%),
group_by_regex("Categories", mod, %regex~(profile_category|profile_tag)$%%),
group_by_regex("Markers", mod, %regex~(profile_marker|profile_marker_id)$%%)
)
document("Self-describing jobque profiling", mod, "jobque_profile.rst", groups)
}
def document_module_apply_in_context(_root : string) {
var mod = find_module("apply_in_context")
var groups <- array<DocGroup>(
)
document("Cross-context evaluation helpers", mod, "apply_in_context.rst", groups)
}
def document_module_ansi_colors(_root : string) {
var mod = find_module("ansi_colors")
var groups <- array<DocGroup>(
group_by_regex("Configuration", mod, %regex~.*(init_ansi_colors|use_tty_colors)$%%),
group_by_regex("Colors", mod, %regex~.*(red_str|green_str|yellow_str|blue_str|magenta_str|cyan_str)$%%),
group_by_regex("Styles", mod, %regex~.*(bold_str|dim_str|underline_str|reset_str)$%%)
)
document("ANSI terminal color and style helpers", mod, "ansi_colors.rst", groups)
}
def document_module_tty(_root : string) {
var mod = find_module("tty")
var groups <- array<DocGroup>(
group_by_regex("Terminal detection", mod, %regex~.*(is_stream_terminal|is_stdin_terminal|is_stdout_terminal|is_stderr_terminal)$%%),
group_by_regex("Terminal geometry", mod, %regex~.*(terminal_columns)$%%)
)
document("Terminal capability probes", mod, "tty.rst", groups)
}
def document_module_algorithm(_root : string) {
var mod = find_module("algorithm")
var groups <- array<DocGroup>(
group_by_regex("Search", mod, %regex~(lower_bound|upper_bound|binary_search|equal_range)$%%),
group_by_regex("Array manipulation", mod, %regex~(unique|sort_unique|reverse|combine|erase_all|topological_sort|fill|is_sorted|rotate|min_element|max_element)$%%),
group_by_regex("Table manipulation", mod, %regex~(intersection|union|difference|symmetric_difference|identical|is_subset)$%%)
)
document("Miscellaneous algorithms", mod, "algorithm.rst", groups)
}
def document_module_contracts(_root : string) {
var mod = find_module("contracts")
var groups <- array<DocGroup>(
group_by_regex("Type queries", mod, %regex~(isYetAnotherVectorTemplate)$%%)
)
document("Miscellaneous contract annotations", mod, "contracts.rst", groups)
}
def document_module_delegate(_root : string) {
var mod = find_module("delegate")
var groups <- array<DocGroup>(
group_by_regex("Delegate type macro", mod, %regex~(delegate)$%%)
)
document("C#-like multicast delegate type macro", mod, "delegate.rst", groups)
}
def document_module_option(_root : string) {
var mod = find_module("option")
var groups <- array<DocGroup>(
group_by_regex("Constructors", mod, %regex~(some|move_some|none)$%%),
group_by_regex("Queries", mod, %regex~(is_some|is_none)$%%),
group_by_regex("Transforming", mod, %regex~(map|and_then|filter|or_else|or_value)$%%),
group_by_regex("Extraction", mod, %regex~(unwrap|unwrap_or|unwrap_or_else|unwrap_or_default|expect_value|move_unwrap)$%%),
group_by_regex("Side effects", mod, %regex~(if_some|if_none)$%%),
group_by_regex("Pairing", mod, %regex~(zip)$%%),
group_by_regex("Operators", mod, %regex~(==|!=|\?\?)$%%)
)
document("Monadic Option<T> — a value-or-nothing tagged pair", mod, "option.rst", groups)
}
def document_module_result(_root : string) {
var mod = find_module("result")
var groups <- array<DocGroup>(
group_by_regex("Constructors", mod, %regex~(ok|err|move_ok|move_err)$%%),
group_by_regex("Queries", mod, %regex~(is_ok|is_err)$%%),
group_by_regex("Transforming", mod, %regex~(map|map_err|and_then|or_else)$%%),
group_by_regex("Extraction", mod, %regex~(unwrap|unwrap_or|unwrap_or_else|unwrap_or_default|unwrap_err|expect_value|expect_err|move_unwrap|move_unwrap_err)$%%),
group_by_regex("Side effects", mod, %regex~(if_ok|if_err)$%%),
group_by_regex("Bridges to Option", mod, %regex~(to_option|err_to_option)$%%),
group_by_regex("Operators", mod, %regex~(==|!=|\?\?)$%%)
)
document("Monadic Result<T, E> — a value-or-error tagged pair", mod, "result.rst", groups)
}
def document_module_defer(_root : string) {
var mod = find_module("defer")
var groups <- array<DocGroup>(
group_by_regex("Defer", mod, %regex~(defer)$%%),
group_by_regex("Stub", mod, %regex~(nada)$%%)
)
document("defer and defer_delete macros", mod, "defer.rst", groups)
}
def document_module_with_boost(_root : string) {
var mod = find_module("with_boost")
var groups <- array<DocGroup>(
group_by_regex("Locked element binding helpers", mod, %regex~(_with_locked_.*)$%%)
)
document("``with_`` macro: locked array/table element binding", mod, "with_boost.rst", groups)
}
def document_module_if_not_null(_root : string) {
var mod = find_module("if_not_null")
var groups <- array<DocGroup>(
)
document("if_not_null macro", mod, "if_not_null.rst", groups)
}
def document_module_instance_function(_root : string) {
var mod = find_module("instance_function")
var groups <- array<DocGroup>(
)
document("instance_function function annotation", mod, "instance_function.rst", groups)
}
def document_module_templates(_root : string) {
var mod = find_module("templates")
var groups <- array<DocGroup>(
)
document("decltype macro and template function annotation", mod, "templates.rst", groups)
}
def document_module_templates_boost(_root : string) {
var mod = find_module("templates_boost")
var groups <- array<DocGroup>(
group_by_regex("Template rules", mod, %regex~(kaboomVarField|replaceVariable|renameVariable|replaceType|replaceAnnotationArgument|replaceBlockArgument|replaceVarTag|replaceArgumentWithList|replaceVariableWithList|renameField|replaceStructWithTypeDecl|replaceTypeWithTypeDecl|renameCall)$%%),
group_by_regex("Template application", mod, %regex~(apply_template|clone_and_rename_var)$%%),
group_by_regex("Expression helpers", mod, %regex~(remove_deref|visit_expression|expression_at)$%%),
group_by_regex("Expression generation", mod, %regex~(make_expression_block)$%%),
group_by_regex("Block helpers", mod, %regex~(unquote_block|move_unquote_block|push_block_list)$%%),
group_by_regex("Global variable helpers", mod, %regex~(add_global_var|add_global_let|add_global_private_var|add_global_private_let)$%%),
group_by_regex("Hygienic names", mod, %regex~(make_unique_private_name)$%%),
group_by_regex("Quoting macros", mod, %regex~(apply_qmacro|apply_qblock|apply_qblock_to_array|apply_qblock_expr|apply_qtype|apply_qmacro_function|apply_qmacro_method|apply_qmacro_variable|apply_qmacro_template_class|apply_qmacro_template_function)$%%),
group_by_regex("Type pointer helpers", mod, %regex~(add_type_ptr_ref|add_array_ptr_ref)$%%),
group_by_regex("Structure helpers", mod, %regex~(add_structure_field)$%%),
group_by_regex("Class generation", mod, %regex~(make_class|make_class_constructor|modify_to_class_member|enum_class_type)$%%)
)
document("Template application helpers", mod, "templates_boost.rst", groups)
}
def document_module_is_local(_root : string) {
var mod = find_module("is_local")
var groups <- array<DocGroup>(
group_by_regex("Scope checks", mod, %regex~(is_local_expr|is_local_or_global_expr|is_scope_expr|is_temp_safe|is_shared_expr)$%%)
)
document("is_local_xxx ast helpers", mod, "is_local.rst", groups)
}
def document_module_safe_addr(_root : string) {
var mod = find_module("safe_addr")
var groups <- array<DocGroup>(
group_by_regex("Safe temporary address", mod, %regex~(safe_addr|shared_addr)$%%),
group_by_regex("Temporary pointers", mod, %regex~(temp_ptr)$%%),
group_by_regex("Temporary values", mod, %regex~(temp_value)$%%)
)
document("safe_addr macro", mod, "safe_addr.rst", groups)
}
def document_module_static_let(_root : string) {
var mod = find_module("static_let")
var groups <- array<DocGroup>(
group_by_regex("Static variable declarations", mod, %regex~(static_let|static_let_finalize)$%%)
)
document("static_let macro", mod, "static_let.rst", groups)
}
def document_module_lpipe(_root : string) {
var mod = find_module("lpipe")
var groups <- array<DocGroup>(
)
document("lpipe macro", mod, "lpipe.rst", groups)
}
def document_module_math_bits(_root : string) {
var mod = find_module("math_bits")
var groups <- array<DocGroup>(
group_by_regex("float in int,uint", mod, %regex~(int_bits_to_float|uint_bits_to_float)$%%),
group_by_regex("int,uint in float", mod, %regex~(float_bits_to_int|float_bits_to_uint)$%%),
group_by_regex("int64,uint64 in double", mod, %regex~(int64_bits_to_double|uint64_bits_to_double|double_bits_to_int64|double_bits_to_uint64)$%%),
group_by_regex("bit-cast vec4f", mod, %regex~(cast_to.*)$%%))
document("Math bit helpers", mod, "math_bits.rst", groups)
}
def document_module_math_boost(_root : string) {
var mod = find_module("math_boost")
var groups <- array<DocGroup>(
group_by_regex("Angle conversions", mod, %regex~(degrees|radians)$%%),
group_by_regex("Intersections", mod, %regex~(is_intersecting)$%%),
group_by_regex("Matrices", mod, %regex~(look_at_lh|look_at_rh|perspective_lh|perspective_rh|perspective_rh_opengl|perspective_rh_0_to_1|perspective_rh_minus1_to_1|ortho_rh|planar_shadow)$%%),
group_by_regex("Plane", mod, %regex~(plane_dot|plane_normalize|plane_from_point_normal)$%%),
group_by_regex("Color conversions", mod, %regex~(linear_to_SRGB)$%%),
group_by_regex("Color packing and unpacking", mod, %regex~(RGBA_TO_UCOLOR|UCOLOR_TO_RGBA|UCOLOR_TO_RGB)$%%)
)
document("Boost package for math", mod, "math_boost.rst", groups)
}
def document_module_md_boost(_root : string) {
var mod = find_module("md_boost")
var groups <- array<DocGroup>(
group_by_regex("Tables", mod, %regex~(render_md_table|ColAlign)$%%),
group_by_regex("Text helpers", mod, %regex~(md_bold|md_escape)$%%)
)
document("Markdown generation helpers", mod, "md_boost.rst", groups)
}
def document_module_array_boost(_root : string) {
var mod = find_module("array_boost")
var groups <- array<DocGroup>(
group_by_regex("Temporary arrays", mod, %regex~(temp_array)$%%),
group_by_regex("Empty check", mod, %regex~(empty)$%%),
group_by_regex("Sub-array view", mod, %regex~(array_view|pod_view)$%%)
)
document("Boost package for array manipulation", mod, "array_boost.rst", groups)
}
def document_module_archive(_root : string) {
var mod = find_module("archive")
var groups <- array<DocGroup>(
group_by_regex("Serialization", mod, %regex~(serialize|serialize_raw|read_raw|write_raw)$%%),
group_by_regex("Memory archive", mod, %regex~(mem_archive_save|mem_archive_load)$%%)
)
document("General purpose serialization", mod, "archive.rst", groups)
}
def document_module_unroll(_root : string) {
var mod = find_module("unroll")
var groups <- array<DocGroup>(
group_by_regex("Unrolling", mod, %regex~(unroll)$%%)
)
document("Loop unrolling", mod, "unroll.rst", groups)
}
def document_module_assert_once(_root : string) {
var mod = find_module("assert_once")
var groups <- array<DocGroup>(
group_by_regex("Assertion", mod, %regex~(assert_once)$%%)
)
document("Assert once", mod, "assert_once.rst", groups)
}
def document_module_ast_block_to_loop(_root : string) {
var mod = find_module("ast_block_to_loop")
var groups <- array<DocGroup>(
group_by_regex("Block to loop conversion", mod, %regex~(convert_block_to_loop)$%%)
)
document("DECS, AST block to loop", mod, "ast_block_to_loop.rst", groups)
}
def document_module_ast_cursor(_root : string) {
var mod = find_module("ast_cursor")
var groups <- array<DocGroup>(
group_by_regex("Cursor queries", mod, %regex~.*(find_at_cursor|find_at_cursor_in_function|cursor_inside)$%%),
group_by_regex("Result inspection", mod, %regex~.*(describe)$%%)
)
document("Position-based AST queries", mod, "ast_cursor.rst", groups)
}
def document_module_ast_used(_root : string) {
var mod = find_module("ast_used")
var groups <- array<DocGroup>(
group_by_regex("Collecting type information", mod, %regex~(collect_used_types)$%%)
)
document("AST type usage collection", mod, "ast_used.rst", groups)
}
def document_module_ast_match(_root : string) {
var mod = find_module("ast_match")
var groups <- array<DocGroup>(
group_by_regex("Match execution", mod, %regex~.*(qm_run|qm_run_function)$%%),
group_by_regex("Call matching", mod, %regex~.*(match_call_in_module|match_call_in_linq)$%%),
group_by_regex("Result builders", mod, %regex~.*(qm_ok|qm_fail_.*)$%%),
group_by_regex("Value extraction", mod, %regex~.*(qm_extract|extract_const_string)$%%),
group_by_regex("Name and type extraction", mod, %regex~.*(qm_extract_name|qm_extract_call_name|qm_extract_field_name|qm_extract_type|qm_rtti|qm_call_name_matches)$%%),
group_by_regex("Argument filtering", mod, %regex~.*(qm_count_real_args|qm_real_arg_index|qm_extract_remaining_args|qm_is_fake_arg|qm_count_real_call_args|qm_real_call_arg_index)$%%),
group_by_regex("Block scanning", mod, %regex~.*(qm_scan|qm_extract_stmts)$%%),
group_by_regex("Constant construction", mod, %regex~.*(qm_make_zero_const)$%%),
group_by_regex("AST reconstruction", mod, %regex~.*(qm_convert_local_function|qm_resolve_local_function|qm_convert_comprehension|qm_resolve_comprehension)$%%),
group_by_regex("AST normalization", mod, %regex~.*(qm_peel_ref2value|peel_lambda.*|peel_tuple_field_read)$%%),
group_by_regex("Hygienic names", mod, %regex~.*(qn)$%%)
)
document("AST pattern matching", mod, "ast_match.rst", groups)
}
def document_module_constexpr(_root : string) {
var mod = find_module("constant_expression")
var groups <- array<DocGroup>(
group_by_regex("Macro helpers", mod, %regex~(isConstantExpression)$%%)
)
document("Constant expression checker and substitution", mod, "constexpr.rst", groups)
}
def document_module_uriparser_boost(_root : string) {
var mod = find_module("uriparser_boost")
var groups <- array<DocGroup>(
group_by_regex("Split and compose", mod, %regex~(uri_split_full_path|uri_compose_query|uri_compose_query_in_order|uri_compose)$%%),
group_by_regex("Component accessors", mod, %regex~(scheme|user_info|host|port|path|query|fragment)$%%)
)
document("Boost package for the URI parser", mod, "uriparser_boost.rst", groups)
}
def document_module_pugixml(_root : string) {
// NOTE: regex_match is start-anchored, so patterns must begin with .* to match
// property names like .`ok, .`first_child (dot-backtick prefix).
var mod = get_module("pugixml")
var groups <- array<DocGroup>(
group_by_regex("Document operations", mod, %regex~.*(document_element|document_as_node|load_document|load_string|save_file|save_string|reset)$%%),
group_by_regex("Node lookup", mod, %regex~.*(child|find_child_by_attribute|first_element_by_path)$%%),
group_by_regex("Node navigation", mod, %regex~.*(first_child|last_child|next_sibling|previous_sibling|parent|root|path|print_to_string)$%%),
group_by_regex("Node mutation", mod, %regex~.*(set_name|set_value|append_child|prepend_child|insert_child_after|insert_child_before|remove_child|remove_children)$%%),
group_by_regex("Attribute access", mod, %regex~.*(attribute|first_attribute|last_attribute|next_attribute|previous_attribute|append_attribute|prepend_attribute|insert_attribute_after|insert_attribute_before|remove_attribute|remove_attributes)$%%),
group_by_regex("Copy and move", mod, %regex~.*(append_copy|prepend_copy|append_move|prepend_move)$%%),
group_by_regex("Value reading", mod, %regex~.*(as_string|as_int|as_uint|as_float|as_double|as_bool|as_int64|as_uint64|text|data|child_value)$%%),
group_by_regex("Value writing", mod, %regex~.*^set$%%),
group_by_regex("XPath compilation and evaluation", mod, %regex~.*(xpath_compile|evaluate_boolean|evaluate_number|evaluate_string|evaluate_node_set|evaluate_node|return_type|result_description|result_offset)$%%),
group_by_regex("XPath selection", mod, %regex~.*(select_node|select_nodes|node)$%%),
group_by_regex("XPath node set operations", mod, %regex~.*(at|sort|size|empty|first)$%%),
group_by_regex("Construction and RAII", mod, %regex~.*(xml_document|xpath_node_set|xpath_variable_set|using)$%%),
group_by_regex("Handle validity and comparison", mod, %regex~.*(ok|hash_value|offset_debug|==|!=)$%%)
)
document("XML parser (pugixml)", mod, "pugixml.rst", groups)
}
def document_module_PUGIXML_boost(_root : string) {
// NOTE: regex_match is start-anchored. Backtick operator names like `is`int
// need regex_compile (reader macro %regex~ can't embed literal backticks).
var mod = find_module("PUGIXML_boost")
var r_type_conv : Regex
regex_compile(r_type_conv, ".*(`is`|`as`|\\[\\])")
var groups <- array<DocGroup>(
group_by_regex("Block-based iteration", mod, %regex~.*(for_each_child_reverse|for_each_child|for_each_attribute|for_each)$%%),
group_by_regex("Iterator-based iteration", mod, %regex~.*(each_child_reverse|each|each_child|each_attribute)$%%),
group_by_regex("LINQ source", mod, %regex~.*(from_xml_node|build_xml_row|read_xml_field|peek_xml_field)$%%),
group_by_regex("RAII document handling", mod, %regex~.*(open_xml|parse_xml|with_doc)$%%),
group_by_regex("Quick accessors", mod, %regex~.*(node_text|node_attr|node_attr_int|node_attr_float|node_attr_bool)$%%),
group_by_regex("Builder helpers", mod, %regex~.*(add_child|add_child_ex|add_attr)$%%),
group_by_regex("Builder EDSL", mod, %regex~.*(tag|attr)$%%),
group_by_regex("String conversion", mod, %regex~.*(to_string)$%%),
group_by_regex("XPath helpers", mod, %regex~.*(with_xpath|select_text|select_value|for_each_select)$%%),
group_by_regex("Serialization", mod, %regex~.*(to_XML|from_XML|XML|XML_table)$%%),
group_by_regex("Type conversion operators", mod, r_type_conv)
)
document("High-level XML helpers (pugixml boost)", mod, "PUGIXML_boost.rst", groups)
}
def document_module_sort_boost(_root : string) {
var mod = find_module("sort_boost")
var groups <- array<DocGroup>(
group_by_regex("Partial sorting", mod, %regex~(partial_sort|nth_element|qpartial_sort|qnth_element)$%%),
group_by_regex("Heap operations", mod, %regex~(make_heap|push_heap|pop_heap|qmake_heap|qpush_heap|qpop_heap)$%%),
group_by_regex("Sort dispatch macro", mod, %regex~qsort$%%)
)
document("Boost package for the builtin sort", mod, "sort_boost.rst", groups)
}
def document_module_enum_trait(_root : string) {
var mod = find_module("enum_trait")
var groups <- array<DocGroup>(
group_by_regex("Enumeration iteration", mod, %regex~(each|each_name|find_value)$%%),
group_by_regex("Enumeration conversion", mod, %regex~(string|to_enum|enum_to_table|bool|\!)$%%)
)
document("Enumeration traits", mod, "enum_trait.rst", groups)
}
def document_module_cpp_bind(_root : string) {
var mod = find_module("cpp_bind")
var groups <- array<DocGroup>(
group_by_regex("Generation of bindings", mod, %regex~(log_cpp_class_adapter)$%%)
)
document("C++ bindings generator", mod, "cpp_bind.rst", groups)