From 572f902f6c74546dafc34dc473dafa3fc8c910fe Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 14 Feb 2024 03:08:50 +0000 Subject: [PATCH] Update documentation Triggered by commit 318b4bc3f45e15c9293bf0f0c030f2456af87fb1. Co-authored-by: hidmic --- annotated.html | 136 +-- beluga_8hpp.html | 102 +- beluga_8hpp__incl.map | 100 +- beluga_8hpp__incl.md5 | 2 +- beluga_8hpp__incl.png | Bin 262798 -> 265955 bytes beluga_8hpp_source.html | 16 +- bresenham_8hpp_source.html | 9 +- circular__array_8hpp.html | 441 ++++++++ circular__array_8hpp__dep__incl.map | 5 + circular__array_8hpp__dep__incl.md5 | 1 + circular__array_8hpp__dep__incl.png | Bin 0 -> 10198 bytes circular__array_8hpp__incl.map | 10 + circular__array_8hpp__incl.md5 | 1 + circular__array_8hpp__incl.png | Bin 0 -> 23598 bytes circular__array_8hpp_source.html | 511 +++++++++ classbeluga_1_1CircularArray-members.html | 133 +++ classbeluga_1_1CircularArray.html | 1002 +++++++++++++++++ classbeluga_1_1IndexingIterator-members.html | 110 ++ classbeluga_1_1IndexingIterator.html | 463 ++++++++ classbeluga_1_1TupleContainer.html | 2 +- ...td_1_1tuple_3_01Types_8_8_8_01_4_01_4.html | 2 +- classbeluga_1_1TupleVector.html | 2 +- classes.html | 6 +- containers_8hpp.html | 132 +++ containers_8hpp__dep__incl.map | 4 + containers_8hpp__dep__incl.md5 | 1 + containers_8hpp__dep__incl.png | Bin 0 -> 6901 bytes containers_8hpp__incl.map | 29 + containers_8hpp__incl.md5 | 1 + containers_8hpp__incl.png | Bin 0 -> 123867 bytes containers_8hpp_source.html | 103 ++ ...0001_000006.html => dir_000001_000005.html | 4 +- dir_000001_000007.html | 4 +- dir_000001_000008.html | 4 +- dir_000001_000009.html | 4 +- dir_000001_000010.html | 4 +- dir_000001_000011.html | 4 +- dir_000001_000012.html | 76 ++ ...0001_000013.html => dir_000001_000014.html | 0 ...0002_000014.html => dir_000002_000015.html | 0 ...0002_000017.html => dir_000002_000018.html | 0 ...0003_000014.html => dir_000003_000015.html | 0 ...0003_000017.html => dir_000003_000018.html | 0 ...0010_000011.html => dir_000005_000017.html | 6 +- dir_000005_000018.html | 76 ++ ...0006_000015.html => dir_000007_000016.html | 0 ...0007_000003.html => dir_000008_000003.html | 0 dir_000008_000005.html | 76 ++ ...0007_000014.html => dir_000008_000015.html | 0 ...0007_000017.html => dir_000008_000018.html | 0 ...0009_000003.html => dir_000010_000003.html | 0 dir_000011_000012.html | 6 +- ...0011_000003.html => dir_000012_000003.html | 0 dir_000012_000013.html | 76 ++ ...0011_000015.html => dir_000012_000016.html | 0 ...0012_000015.html => dir_000013_000016.html | 0 ...0017_000014.html => dir_000018_000015.html | 0 dir_0ae0216c5b903435324487dd13dfdff9.html | 2 +- dir_0ae0216c5b903435324487dd13dfdff9_dep.map | 2 +- dir_0ae0216c5b903435324487dd13dfdff9_dep.md5 | 2 +- dir_0ee0838bbed77bc71495b9458bcc4b6b.html | 2 +- dir_0ee0838bbed77bc71495b9458bcc4b6b_dep.map | 2 +- dir_0ee0838bbed77bc71495b9458bcc4b6b_dep.md5 | 2 +- dir_1ad523cfdb7a3d7d09cddf672d6cd478.html | 83 +- dir_1ad523cfdb7a3d7d09cddf672d6cd478_dep.map | 77 +- dir_1ad523cfdb7a3d7d09cddf672d6cd478_dep.md5 | 2 +- dir_1ad523cfdb7a3d7d09cddf672d6cd478_dep.png | Bin 46689 -> 48112 bytes dir_3245ff25b92019e7f89fc2115bc7867e.html | 103 ++ dir_3245ff25b92019e7f89fc2115bc7867e_dep.map | 8 + dir_3245ff25b92019e7f89fc2115bc7867e_dep.md5 | 1 + dir_3245ff25b92019e7f89fc2115bc7867e_dep.png | Bin 0 -> 6370 bytes dir_500caef060b471cfdd05b62a42e3142c.html | 7 + dir_634c6b228f937c8a89fa81bc2f240134.html | 6 +- dir_634c6b228f937c8a89fa81bc2f240134_dep.map | 6 +- dir_634c6b228f937c8a89fa81bc2f240134_dep.md5 | 2 +- dir_7ddb7368080dbe1879dd7372dd1df3df.html | 6 +- dir_7ddb7368080dbe1879dd7372dd1df3df_dep.map | 6 +- dir_7ddb7368080dbe1879dd7372dd1df3df_dep.md5 | 2 +- dir_876c246173b27422a95ea0c3c06ba40d.html | 2 +- dir_876c246173b27422a95ea0c3c06ba40d_dep.map | 2 +- dir_876c246173b27422a95ea0c3c06ba40d_dep.md5 | 2 +- dir_8c67632ad66eb9bf379bf849f1aad5d2.html | 6 +- dir_8c67632ad66eb9bf379bf849f1aad5d2_dep.map | 6 +- dir_8c67632ad66eb9bf379bf849f1aad5d2_dep.md5 | 2 +- dir_97128df81ec2588083252ec20fc8a694.html | 2 +- dir_97128df81ec2588083252ec20fc8a694_dep.map | 2 +- dir_97128df81ec2588083252ec20fc8a694_dep.md5 | 2 +- dir_b127764096519c9b7578e91bdfa7d218.html | 25 +- dir_b127764096519c9b7578e91bdfa7d218_dep.map | 25 +- dir_b127764096519c9b7578e91bdfa7d218_dep.md5 | 2 +- dir_b127764096519c9b7578e91bdfa7d218_dep.png | Bin 15054 -> 20050 bytes dir_c03a81e29d2f9f088aa073fa974eabbc.html | 2 +- dir_c03a81e29d2f9f088aa073fa974eabbc_dep.map | 2 +- dir_c03a81e29d2f9f088aa073fa974eabbc_dep.md5 | 2 +- files.html | 144 +-- functions.html | 6 +- functions_b.html | 4 + functions_c.html | 30 +- functions_d.html | 5 +- functions_e.html | 7 +- functions_f.html | 9 + functions_func.html | 3 + functions_func_b.html | 4 + functions_func_c.html | 18 +- functions_func_d.html | 3 +- functions_func_e.html | 7 +- functions_func_f.html | 9 + functions_func_i.html | 3 + functions_func_m.html | 3 + functions_func_o.html | 50 +- functions_func_p.html | 12 +- functions_func_r.html | 6 + functions_func_s.html | 6 +- functions_i.html | 5 + functions_m.html | 3 + functions_o.html | 48 +- functions_p.html | 14 +- functions_r.html | 11 + functions_rela.html | 3 + functions_s.html | 9 +- functions_t.html | 1 + functions_type.html | 34 +- functions_v.html | 2 + hierarchy.html | 220 ++-- indexing__iterator_8hpp.html | 121 ++ indexing__iterator_8hpp__dep__incl.map | 6 + indexing__iterator_8hpp__dep__incl.md5 | 1 + indexing__iterator_8hpp__dep__incl.png | Bin 0 -> 14196 bytes indexing__iterator_8hpp__incl.map | 6 + indexing__iterator_8hpp__incl.md5 | 1 + indexing__iterator_8hpp__incl.png | Bin 0 -> 9207 bytes indexing__iterator_8hpp_source.html | 255 +++++ inherit_graph_14.md5 | 2 +- inherit_graph_17.map | 2 +- inherit_graph_17.md5 | 2 +- inherit_graph_17.png | Bin 1980 -> 2454 bytes inherit_graph_18.map | 3 +- inherit_graph_18.md5 | 2 +- inherit_graph_18.png | Bin 4065 -> 1980 bytes inherit_graph_19.map | 3 +- inherit_graph_19.md5 | 2 +- inherit_graph_19.png | Bin 2563 -> 4065 bytes inherit_graph_20.map | 2 +- inherit_graph_20.md5 | 2 +- inherit_graph_20.png | Bin 5780 -> 2563 bytes inherit_graph_21.map | 2 +- inherit_graph_21.md5 | 2 +- inherit_graph_21.png | Bin 2355 -> 5780 bytes inherit_graph_22.map | 2 +- inherit_graph_22.md5 | 2 +- inherit_graph_22.png | Bin 2595 -> 2355 bytes inherit_graph_23.map | 2 +- inherit_graph_23.md5 | 2 +- inherit_graph_23.png | Bin 2291 -> 2595 bytes inherit_graph_24.map | 2 +- inherit_graph_24.md5 | 2 +- inherit_graph_24.png | Bin 1919 -> 2291 bytes inherit_graph_25.map | 2 +- inherit_graph_25.md5 | 2 +- inherit_graph_25.png | Bin 1824 -> 1919 bytes inherit_graph_26.map | 3 +- inherit_graph_26.md5 | 2 +- inherit_graph_26.png | Bin 4627 -> 1824 bytes inherit_graph_27.map | 4 +- inherit_graph_27.md5 | 2 +- inherit_graph_27.png | Bin 10062 -> 4627 bytes inherit_graph_28.map | 4 +- inherit_graph_28.md5 | 2 +- inherit_graph_28.png | Bin 3428 -> 10062 bytes inherit_graph_29.map | 2 +- inherit_graph_29.md5 | 2 +- inherit_graph_29.png | Bin 2526 -> 2480 bytes inherit_graph_30.map | 3 +- inherit_graph_30.md5 | 2 +- inherit_graph_30.png | Bin 2575 -> 3428 bytes inherit_graph_31.map | 2 +- inherit_graph_31.md5 | 2 +- inherit_graph_31.png | Bin 1736 -> 2526 bytes inherit_graph_32.map | 2 +- inherit_graph_32.md5 | 2 +- inherit_graph_32.png | Bin 2521 -> 2575 bytes inherit_graph_33.map | 2 +- inherit_graph_33.md5 | 2 +- inherit_graph_33.png | Bin 2222 -> 1736 bytes inherit_graph_34.map | 2 +- inherit_graph_34.md5 | 2 +- inherit_graph_34.png | Bin 2505 -> 2521 bytes inherit_graph_35.map | 2 +- inherit_graph_35.md5 | 2 +- inherit_graph_35.png | Bin 3502 -> 2222 bytes inherit_graph_36.map | 2 +- inherit_graph_36.md5 | 2 +- inherit_graph_36.png | Bin 3218 -> 2505 bytes inherit_graph_37.map | 2 +- inherit_graph_37.md5 | 2 +- inherit_graph_37.png | Bin 3238 -> 3502 bytes inherit_graph_38.map | 2 +- inherit_graph_38.md5 | 2 +- inherit_graph_38.png | Bin 3284 -> 3218 bytes inherit_graph_39.map | 2 +- inherit_graph_39.md5 | 2 +- inherit_graph_39.png | Bin 2247 -> 3238 bytes inherit_graph_4.md5 | 2 +- inherit_graph_40.map | 2 +- inherit_graph_40.md5 | 2 +- inherit_graph_40.png | Bin 3551 -> 3284 bytes inherit_graph_41.map | 2 +- inherit_graph_41.md5 | 2 +- inherit_graph_41.png | Bin 5302 -> 2247 bytes inherit_graph_42.map | 2 +- inherit_graph_42.md5 | 2 +- inherit_graph_42.png | Bin 5047 -> 3551 bytes inherit_graph_43.map | 2 +- inherit_graph_43.md5 | 2 +- inherit_graph_43.png | Bin 5010 -> 5302 bytes inherit_graph_44.map | 2 +- inherit_graph_44.md5 | 2 +- inherit_graph_44.png | Bin 3000 -> 5047 bytes inherit_graph_45.map | 2 +- inherit_graph_45.md5 | 2 +- inherit_graph_45.png | Bin 4457 -> 5010 bytes inherit_graph_46.map | 2 +- inherit_graph_46.md5 | 2 +- inherit_graph_46.png | Bin 4829 -> 3000 bytes inherit_graph_47.map | 2 +- inherit_graph_47.md5 | 2 +- inherit_graph_47.png | Bin 1984 -> 4457 bytes inherit_graph_48.map | 2 +- inherit_graph_48.md5 | 2 +- inherit_graph_48.png | Bin 2871 -> 4829 bytes inherit_graph_49.map | 2 +- inherit_graph_49.md5 | 2 +- inherit_graph_49.png | Bin 3147 -> 1984 bytes inherit_graph_50.map | 2 +- inherit_graph_50.md5 | 2 +- inherit_graph_50.png | Bin 2675 -> 2871 bytes inherit_graph_51.map | 2 +- inherit_graph_51.md5 | 2 +- inherit_graph_51.png | Bin 2806 -> 3147 bytes inherit_graph_52.map | 2 +- inherit_graph_52.md5 | 2 +- inherit_graph_52.png | Bin 1974 -> 2675 bytes inherit_graph_53.map | 2 +- inherit_graph_53.md5 | 2 +- inherit_graph_53.png | Bin 2437 -> 2806 bytes inherit_graph_54.map | 2 +- inherit_graph_54.md5 | 2 +- inherit_graph_54.png | Bin 2490 -> 1974 bytes inherit_graph_55.map | 2 +- inherit_graph_55.md5 | 2 +- inherit_graph_55.png | Bin 2973 -> 2437 bytes inherit_graph_56.map | 2 +- inherit_graph_56.md5 | 2 +- inherit_graph_56.png | Bin 2281 -> 2490 bytes inherit_graph_57.map | 3 +- inherit_graph_57.md5 | 2 +- inherit_graph_57.png | Bin 5303 -> 2973 bytes inherit_graph_58.map | 2 +- inherit_graph_58.md5 | 2 +- inherit_graph_58.png | Bin 4263 -> 2281 bytes inherit_graph_59.map | 5 +- inherit_graph_59.md5 | 2 +- inherit_graph_59.png | Bin 4344 -> 5303 bytes inherit_graph_60.map | 2 +- inherit_graph_60.md5 | 2 +- inherit_graph_60.png | Bin 3366 -> 4263 bytes inherit_graph_61.map | 4 +- inherit_graph_61.md5 | 2 +- inherit_graph_61.png | Bin 3211 -> 4344 bytes inherit_graph_62.map | 2 +- inherit_graph_62.md5 | 2 +- inherit_graph_62.png | Bin 2988 -> 3366 bytes inherit_graph_63.map | 2 +- inherit_graph_63.md5 | 2 +- inherit_graph_63.png | Bin 2406 -> 3211 bytes inherit_graph_64.map | 2 +- inherit_graph_64.md5 | 2 +- inherit_graph_64.png | Bin 4552 -> 2988 bytes inherit_graph_65.map | 2 +- inherit_graph_65.md5 | 2 +- inherit_graph_65.png | Bin 3063 -> 2406 bytes inherit_graph_66.map | 2 +- inherit_graph_66.md5 | 2 +- inherit_graph_66.png | Bin 2403 -> 4552 bytes inherit_graph_67.map | 2 +- inherit_graph_67.md5 | 2 +- inherit_graph_67.png | Bin 4570 -> 3063 bytes inherit_graph_68.map | 2 +- inherit_graph_68.md5 | 2 +- inherit_graph_68.png | Bin 1984 -> 2403 bytes inherit_graph_69.map | 2 +- inherit_graph_69.md5 | 2 +- inherit_graph_69.png | Bin 2072 -> 4570 bytes inherit_graph_70.map | 2 +- inherit_graph_70.md5 | 2 +- inherit_graph_70.png | Bin 2822 -> 1984 bytes inherit_graph_71.map | 2 +- inherit_graph_71.md5 | 2 +- inherit_graph_71.png | Bin 2910 -> 2072 bytes inherit_graph_72.map | 2 +- inherit_graph_72.md5 | 2 +- inherit_graph_72.png | Bin 2543 -> 2822 bytes inherit_graph_73.map | 3 +- inherit_graph_73.md5 | 2 +- inherit_graph_73.png | Bin 9809 -> 2910 bytes inherit_graph_74.map | 2 +- inherit_graph_74.md5 | 2 +- inherit_graph_74.png | Bin 3788 -> 2543 bytes inherit_graph_75.map | 4 +- inherit_graph_75.md5 | 2 +- inherit_graph_75.png | Bin 2534 -> 14905 bytes inherit_graph_76.map | 3 +- inherit_graph_76.md5 | 2 +- inherit_graph_76.png | Bin 3910 -> 3788 bytes inherit_graph_77.map | 2 +- inherit_graph_77.md5 | 2 +- inherit_graph_77.png | Bin 4493 -> 2534 bytes inherit_graph_78.map | 3 +- inherit_graph_78.md5 | 2 +- inherit_graph_78.png | Bin 3536 -> 3910 bytes inherit_graph_79.map | 2 +- inherit_graph_79.md5 | 2 +- inherit_graph_79.png | Bin 2954 -> 4493 bytes inherit_graph_80.map | 2 +- inherit_graph_80.md5 | 2 +- inherit_graph_80.png | Bin 3011 -> 3536 bytes inherit_graph_81.map | 3 +- inherit_graph_81.md5 | 2 +- inherit_graph_81.png | Bin 6020 -> 2954 bytes inherit_graph_82.map | 3 +- inherit_graph_82.md5 | 2 +- inherit_graph_82.png | Bin 3105 -> 3011 bytes inherit_graph_83.map | 4 +- inherit_graph_83.md5 | 2 +- inherit_graph_83.png | Bin 6221 -> 6020 bytes inherit_graph_84.map | 3 +- inherit_graph_84.md5 | 2 +- inherit_graph_84.png | Bin 2514 -> 3105 bytes inherit_graph_85.map | 3 +- inherit_graph_85.md5 | 2 +- inherit_graph_85.png | Bin 2324 -> 6221 bytes inherit_graph_86.map | 2 +- inherit_graph_86.md5 | 2 +- inherit_graph_86.png | Bin 2221 -> 2514 bytes inherit_graph_87.map | 2 +- inherit_graph_87.md5 | 2 +- inherit_graph_87.png | Bin 1908 -> 2324 bytes inherit_graph_88.map | 2 +- inherit_graph_88.md5 | 2 +- inherit_graph_88.png | Bin 3637 -> 2221 bytes inherit_graph_89.map | 2 +- inherit_graph_89.md5 | 2 +- inherit_graph_89.png | Bin 3126 -> 1908 bytes inherit_graph_90.map | 3 +- inherit_graph_90.md5 | 2 +- inherit_graph_90.png | Bin 4862 -> 3637 bytes inherit_graph_91.map | 3 + inherit_graph_91.md5 | 1 + inherit_graph_91.png | Bin 0 -> 3126 bytes inherit_graph_92.map | 4 + inherit_graph_92.md5 | 1 + inherit_graph_92.png | Bin 0 -> 4862 bytes inherit_graph_93.map | 3 + inherit_graph_93.md5 | 1 + inherit_graph_93.png | Bin 0 -> 3841 bytes inherits.html | 166 +-- localization_8hpp.html | 6 +- localization_8hpp__incl.map | 6 +- localization_8hpp__incl.md5 | 2 +- localization_8hpp__incl.png | Bin 371093 -> 369767 bytes mixin_8hpp.html | 2 +- mixin_8hpp__incl.map | 2 +- mixin_8hpp__incl.md5 | 2 +- mixin_8hpp__incl.png | Bin 323323 -> 323097 bytes particle__traits_8hpp.html | 21 +- particle__traits_8hpp__dep__incl.map | 25 +- particle__traits_8hpp__dep__incl.md5 | 2 +- particle__traits_8hpp__dep__incl.png | Bin 153810 -> 152055 bytes primitives_8hpp.html | 25 +- primitives_8hpp__dep__incl.map | 33 +- primitives_8hpp__dep__incl.md5 | 2 +- primitives_8hpp__dep__incl.png | Bin 224840 -> 224396 bytes search/all_0.js | 5 +- search/all_1.js | 83 +- search/all_10.js | 93 +- search/all_11.js | 56 +- search/all_12.js | 12 +- search/all_13.js | 20 +- search/all_14.js | 26 +- search/all_15.js | 4 +- search/all_16.js | 4 +- search/all_17.js | 18 +- search/all_18.js | 16 +- search/all_2.js | 42 +- search/all_3.js | 30 +- search/all_4.js | 33 +- search/all_5.js | 23 +- search/all_6.js | 5 +- search/all_7.js | 12 +- search/all_8.js | 20 +- search/all_9.js | 23 +- search/all_a.js | 58 +- search/all_b.js | 47 +- search/all_c.js | 18 +- search/all_d.js | 72 +- search/all_e.js | 41 +- search/all_f.js | 52 +- search/classes_0.js | 8 +- search/classes_1.js | 28 +- search/classes_10.js | 20 +- search/classes_11.js | 4 +- search/classes_12.js | 4 +- search/classes_13.js | 6 +- search/classes_14.js | 2 +- search/classes_2.js | 5 +- search/classes_3.js | 8 +- search/classes_4.js | 8 +- search/classes_5.js | 4 +- search/classes_6.js | 6 +- search/classes_7.js | 5 +- search/classes_8.js | 4 +- search/classes_9.js | 22 +- search/classes_a.js | 14 +- search/classes_b.js | 14 +- search/classes_c.js | 16 +- search/classes_d.js | 10 +- search/classes_e.js | 12 +- search/classes_f.js | 32 +- search/enums_0.js | 2 +- search/enums_1.js | 2 +- search/enums_2.html | 37 + search/enums_2.js | 4 + search/enumvalues_0.js | 7 +- search/files_0.js | 4 +- search/files_1.js | 10 +- search/files_2.js | 5 +- search/files_3.js | 8 +- search/files_4.js | 14 +- search/files_5.js | 5 +- search/files_6.js | 13 +- search/files_7.js | 9 +- search/files_8.js | 8 +- search/files_9.js | 14 +- search/files_a.js | 10 +- search/files_b.js | 11 +- search/files_c.js | 7 +- search/files_d.html | 37 + search/files_d.js | 5 + search/files_e.html | 37 + search/files_e.js | 4 + search/functions_0.js | 9 +- search/functions_1.js | 11 +- search/functions_10.js | 25 +- search/functions_11.js | 16 +- search/functions_12.js | 8 +- search/functions_13.js | 6 +- search/functions_14.js | 8 +- search/functions_15.js | 16 +- search/functions_2.js | 21 +- search/functions_3.js | 8 +- search/functions_4.js | 15 +- search/functions_5.js | 19 +- search/functions_6.js | 5 +- search/functions_7.js | 4 +- search/functions_8.js | 11 +- search/functions_9.js | 4 +- search/functions_a.js | 10 +- search/functions_b.js | 15 +- search/functions_c.js | 10 +- search/functions_d.js | 38 +- search/functions_e.js | 17 +- search/functions_f.js | 22 +- search/pages_0.js | 36 +- search/related_0.js | 11 +- search/searchdata.js | 4 +- search/typedefs_0.js | 6 +- search/typedefs_1.js | 4 +- search/typedefs_2.js | 8 +- search/typedefs_3.js | 4 +- search/typedefs_4.js | 5 +- search/typedefs_5.js | 14 +- search/typedefs_6.js | 8 +- search/typedefs_7.js | 2 +- search/typedefs_8.js | 6 +- search/typedefs_9.js | 10 +- search/typedefs_a.js | 12 +- search/typedefs_b.js | 4 +- search/typedefs_c.js | 2 +- search/typedefs_d.js | 6 +- search/typedefs_e.js | 12 +- search/variables_0.js | 4 +- search/variables_1.js | 2 +- search/variables_10.js | 4 +- search/variables_11.js | 14 +- search/variables_2.js | 6 +- search/variables_3.js | 6 +- search/variables_4.js | 4 +- search/variables_5.js | 2 +- search/variables_6.js | 2 +- search/variables_7.js | 10 +- search/variables_8.js | 2 +- search/variables_9.js | 10 +- search/variables_a.js | 4 +- search/variables_b.js | 6 +- search/variables_c.js | 18 +- search/variables_d.js | 10 +- search/variables_e.js | 4 +- search/variables_f.js | 4 +- sophus__printers_8hpp_source.html | 3 +- storage_8hpp.html | 52 +- storage_8hpp__incl.map | 50 +- storage_8hpp__incl.md5 | 2 +- storage_8hpp__incl.png | Bin 121190 -> 125959 bytes storage_8hpp_source.html | 2 +- strongly__typed__numeric_8hpp.html | 25 +- strongly__typed__numeric_8hpp__dep__incl.map | 33 +- strongly__typed__numeric_8hpp__dep__incl.md5 | 2 +- strongly__typed__numeric_8hpp__dep__incl.png | Bin 209627 -> 209018 bytes ...3_01T_00_01N_00_01F_01_4_01_4-members.html | 84 ++ ...arArray_3_01T_00_01N_00_01F_01_4_01_4.html | 104 ++ ...arArray_3_01T_00_01N_00_01F_01_4_01_4.html | 111 ++ ...T_00_01N_00_01F_01_4_01_4__coll__graph.map | 4 + ...T_00_01N_00_01F_01_4_01_4__coll__graph.md5 | 1 + ...T_00_01N_00_01F_01_4_01_4__coll__graph.png | Bin 0 -> 6262 bytes ...0_01N_00_01F_01_4_01_4__inherit__graph.map | 4 + ...0_01N_00_01F_01_4_01_4__inherit__graph.md5 | 1 + ...0_01N_00_01F_01_4_01_4__inherit__graph.png | Bin 0 -> 6262 bytes tuple__traits_8hpp.html | 5 +- tuple__traits_8hpp__dep__incl.map | 15 +- tuple__traits_8hpp__dep__incl.md5 | 2 +- tuple__traits_8hpp__dep__incl.png | Bin 215482 -> 213700 bytes tuple__vector_8hpp.html | 61 +- tuple__vector_8hpp__dep__incl.map | 13 +- tuple__vector_8hpp__dep__incl.md5 | 2 +- tuple__vector_8hpp__dep__incl.png | Bin 21400 -> 22391 bytes tuple__vector_8hpp__incl.map | 40 +- tuple__vector_8hpp__incl.md5 | 2 +- tuple__vector_8hpp__incl.png | Bin 77607 -> 88438 bytes tuple__vector_8hpp_source.html | 8 +- type__traits_8hpp.html | 15 +- type__traits_8hpp__dep__incl.map | 15 +- type__traits_8hpp__dep__incl.md5 | 2 +- type__traits_8hpp__dep__incl.png | Bin 42942 -> 35589 bytes zip_8hpp.html | 15 +- zip_8hpp__dep__incl.map | 15 +- zip_8hpp__dep__incl.md5 | 2 +- zip_8hpp__dep__incl.png | Bin 31874 -> 28100 bytes 547 files changed, 6470 insertions(+), 1853 deletions(-) create mode 100644 circular__array_8hpp.html create mode 100644 circular__array_8hpp__dep__incl.map create mode 100644 circular__array_8hpp__dep__incl.md5 create mode 100644 circular__array_8hpp__dep__incl.png create mode 100644 circular__array_8hpp__incl.map create mode 100644 circular__array_8hpp__incl.md5 create mode 100644 circular__array_8hpp__incl.png create mode 100644 circular__array_8hpp_source.html create mode 100644 classbeluga_1_1CircularArray-members.html create mode 100644 classbeluga_1_1CircularArray.html create mode 100644 classbeluga_1_1IndexingIterator-members.html create mode 100644 classbeluga_1_1IndexingIterator.html create mode 100644 containers_8hpp.html create mode 100644 containers_8hpp__dep__incl.map create mode 100644 containers_8hpp__dep__incl.md5 create mode 100644 containers_8hpp__dep__incl.png create mode 100644 containers_8hpp__incl.map create mode 100644 containers_8hpp__incl.md5 create mode 100644 containers_8hpp__incl.png create mode 100644 containers_8hpp_source.html rename dir_000001_000006.html => dir_000001_000005.html (79%) create mode 100644 dir_000001_000012.html rename dir_000001_000013.html => dir_000001_000014.html (100%) rename dir_000002_000014.html => dir_000002_000015.html (100%) rename dir_000002_000017.html => dir_000002_000018.html (100%) rename dir_000003_000014.html => dir_000003_000015.html (100%) rename dir_000003_000017.html => dir_000003_000018.html (100%) rename dir_000010_000011.html => dir_000005_000017.html (82%) create mode 100644 dir_000005_000018.html rename dir_000006_000015.html => dir_000007_000016.html (100%) rename dir_000007_000003.html => dir_000008_000003.html (100%) create mode 100644 dir_000008_000005.html rename dir_000007_000014.html => dir_000008_000015.html (100%) rename dir_000007_000017.html => dir_000008_000018.html (100%) rename dir_000009_000003.html => dir_000010_000003.html (100%) rename dir_000011_000003.html => dir_000012_000003.html (100%) create mode 100644 dir_000012_000013.html rename dir_000011_000015.html => dir_000012_000016.html (100%) rename dir_000012_000015.html => dir_000013_000016.html (100%) rename dir_000017_000014.html => dir_000018_000015.html (100%) create mode 100644 dir_3245ff25b92019e7f89fc2115bc7867e.html create mode 100644 dir_3245ff25b92019e7f89fc2115bc7867e_dep.map create mode 100644 dir_3245ff25b92019e7f89fc2115bc7867e_dep.md5 create mode 100644 dir_3245ff25b92019e7f89fc2115bc7867e_dep.png create mode 100644 indexing__iterator_8hpp.html create mode 100644 indexing__iterator_8hpp__dep__incl.map create mode 100644 indexing__iterator_8hpp__dep__incl.md5 create mode 100644 indexing__iterator_8hpp__dep__incl.png create mode 100644 indexing__iterator_8hpp__incl.map create mode 100644 indexing__iterator_8hpp__incl.md5 create mode 100644 indexing__iterator_8hpp__incl.png create mode 100644 indexing__iterator_8hpp_source.html create mode 100644 inherit_graph_91.map create mode 100644 inherit_graph_91.md5 create mode 100644 inherit_graph_91.png create mode 100644 inherit_graph_92.map create mode 100644 inherit_graph_92.md5 create mode 100644 inherit_graph_92.png create mode 100644 inherit_graph_93.map create mode 100644 inherit_graph_93.md5 create mode 100644 inherit_graph_93.png create mode 100644 search/enums_2.html create mode 100644 search/enums_2.js create mode 100644 search/files_d.html create mode 100644 search/files_d.js create mode 100644 search/files_e.html create mode 100644 search/files_e.js create mode 100644 structstd_1_1tuple__element_3_01I_00_01beluga_1_1CircularArray_3_01T_00_01N_00_01F_01_4_01_4-members.html create mode 100644 structstd_1_1tuple__element_3_01I_00_01beluga_1_1CircularArray_3_01T_00_01N_00_01F_01_4_01_4.html create mode 100644 structstd_1_1tuple__size_3_01beluga_1_1CircularArray_3_01T_00_01N_00_01F_01_4_01_4.html create mode 100644 structstd_1_1tuple__size_3_01beluga_1_1CircularArray_3_01T_00_01N_00_01F_01_4_01_4__coll__graph.map create mode 100644 structstd_1_1tuple__size_3_01beluga_1_1CircularArray_3_01T_00_01N_00_01F_01_4_01_4__coll__graph.md5 create mode 100644 structstd_1_1tuple__size_3_01beluga_1_1CircularArray_3_01T_00_01N_00_01F_01_4_01_4__coll__graph.png create mode 100644 structstd_1_1tuple__size_3_01beluga_1_1CircularArray_3_01T_00_01N_00_01F_01_4_01_4__inherit__graph.map create mode 100644 structstd_1_1tuple__size_3_01beluga_1_1CircularArray_3_01T_00_01N_00_01F_01_4_01_4__inherit__graph.md5 create mode 100644 structstd_1_1tuple__size_3_01beluga_1_1CircularArray_3_01T_00_01N_00_01F_01_4_01_4__inherit__graph.png diff --git a/annotated.html b/annotated.html index 92cc0b660..16239c4ac 100644 --- a/annotated.html +++ b/annotated.html @@ -121,73 +121,77 @@  Cspatial_hash< Tuple< Types... >, std::enable_if_t<(std::is_arithmetic_v< Types > &&...), void > >Specialization for tuples  Cspatial_hash< Sophus::SE2d, void >  CThrunRecoveryProbabilityEstimatorRandom particle probability estimator - CBearingSensorModelInterfacePure abstract class representing the bearing sensor model interface - CLandmarkSensorModelInterfacePure abstract class representing a generic landmark sensor model - CLaserSensorModelInterface2dPure abstract class representing the laser sensor model interface - Ccompose_interfacesComposes multiple interfaces into a single interface type - CNullMixinInterfaceA null mixin interface. Meant to be the default value for an optional customization point - CNullMixinA null mixin that does nothing. Meant to be the default value for an optional customization point - CBaseParticleFilterInterfacePure abstract class representing the base particle filter interface - CBootstrapParticleFilterBase implementation of a particle filter - CRandomStateGeneratorA random state generator - CNaiveSamplerGeneration of samples from input particles - CAdaptiveSamplerParamParameters used to construct an AdaptiveSampler instance - CAdaptiveSamplerGeneration of samples from input particles with a recovery strategy - CFixedLimiterParamParameters used to construct a FixedLimiter instance - CFixedLimiterLimiter policy that takes a fixed number of particles - CKldLimiterParamParameters used to construct a KldLimiter instance - CKldLimiterLimiter policy that takes a number of particles defined by the KLD criteria - CStorageInterfacePure abstract class representing the storage interface - CStoragePolicyConfigurable storage policy - CDifferentialDriveModelParamParameters to construct a DifferentialDriveModel instance - CDifferentialDriveModelSampled odometry model for a differential drive - COmnidirectionalDriveModelParamParameters to construct an OmnidirectionalDriveModel instance - COmnidirectionalDriveModelSampled odometry model for an omnidirectional drive - CStationaryModelA stationary motion model - COdometryMotionModelInterface2dPure abstract class representing the odometry motion model interface - CpolicyForward declaration of policy - Cpolicy_baseImplementation detail for a policy base object - Cmultivariate_distribution_traitsForward declaration of the multivariate_distribution_traits class template - Cmultivariate_distribution_traits< T, std::enable_if_t< std::is_base_of_v< Eigen::EigenBase< T >, T > > >Specialization for types derived from Eigen::EigenBase - Cmultivariate_distribution_traits< T, std::enable_if_t< std::is_base_of_v< Sophus::SO2Base< T >, T > > >Specialization for types derived from Sophus::SO2Base - Cmultivariate_distribution_traits< T, std::enable_if_t< std::is_base_of_v< Sophus::SE2Base< T >, T > > >Specialization for types derived from Sophus::SE2Base - CMultivariateNormalDistributionParamMultivariate normal distribution parameter set class - CMultivariateNormalDistributionMultivariate normal distribution - CUniformFreeSpaceGridDistributionPrimary template for a uniform grid distribution - CUniformFreeSpaceGridDistribution< Sophus::SE2d >Specialization of uniform grid distribution for Sophus::SE2d - CBeamModelParamParameters used to construct a BeamSensorModel instance - CBeamSensorModelBeam sensor model for range finders - CBearingModelParamParameters used to construct a BearingSensorModel instance - CBearingSensorModelGeneric bearing sensor model, for both 2D and 3D state types - CBaseDenseGrid2Dense 2D grid base type - CLandmarkMapBasic 3D landmark map datatype - CBaseLaserScanLaser scan 2D base type - CBaseLinearGrid2Linear 2D grid base type - CBaseOccupancyGrid2Occupancy 2D grid base type - CBaseRegularGrid2Regularly spaced 2D grid base type - CValueGrid2Generic 2D linear value grid - CLandmarkModelParamParameters used to construct a LandmarkSensorModel instance (both 2D and 3D) - CLandmarkSensorModelGeneric landmark model for discrete detection sensors (both 2D and 3D) - CLikelihoodFieldModelParamParameters used to construct a LikelihoodFieldModel instance - CLikelihoodFieldModelLikelihood field sensor model for range finders - CTupleContainerPrimary template for a tuple of containers - CTupleContainer< InternalContainer, std::tuple< Types... > >An implementation of a tuple of containers, with an interface that looks like a container of tuples - CTupleVectorShorthand for a tuple of vectors with the default allocator - Cparticle_traitsCommon traits of all particle types. See Page requirements as well - CNumericHelper for creating strongly typed numeric types - Cis_tuple_likeMeta-function that returns true if T is a tuple-like type - Ctuple_indexMeta-function that returns the tuple index of the element whose type is T - Ctuple_index< T, TupleLike< Args... >, std::enable_if_t< is_tuple_like_v< std::decay_t< TupleLike< Args... > > > &&detail::tuple_index_found< T, Args... >()> >tuple_index specialization for tuples - Chas_single_elementMeta-function that returns true if there is a single element of type T in the tuple-like type - Chas_single_element< T, TupleLike< Args... >, std::enable_if_t< is_tuple_like_v< std::decay_t< TupleLike< Args... > > > &&detail::tuple_index_found< T, Args... >()> >has_single_element specialization for tuples - Cdecay_tuple_likeMeta-function that decays a tuple like type and its members - Cdecay_tuple_like< TupleLike< Args... >, std::enable_if_t< is_tuple_like_v< std::decay_t< TupleLike< Args... > > > > >decay_tuple_like specialization for tuples - CLandmarkMapBoundariesLandmark bearing detection data - CLandmarkPositionDetectionLandmark bearing detection data - CLandmarkBearingDetectionLandmark bearing detection data + CCircularArrayAn implementation of generic, non-threadsafe circular array + CTupleContainerPrimary template for a tuple of containers + CTupleContainer< InternalContainer, std::tuple< Types... > >An implementation of a tuple of containers, with an interface that looks like a container of tuples + CTupleVectorShorthand for a tuple of vectors with the default allocator + CBearingSensorModelInterfacePure abstract class representing the bearing sensor model interface + CLandmarkSensorModelInterfacePure abstract class representing a generic landmark sensor model + CLaserSensorModelInterface2dPure abstract class representing the laser sensor model interface + Ccompose_interfacesComposes multiple interfaces into a single interface type + CNullMixinInterfaceA null mixin interface. Meant to be the default value for an optional customization point + CNullMixinA null mixin that does nothing. Meant to be the default value for an optional customization point + CBaseParticleFilterInterfacePure abstract class representing the base particle filter interface + CBootstrapParticleFilterBase implementation of a particle filter + CRandomStateGeneratorA random state generator + CNaiveSamplerGeneration of samples from input particles + CAdaptiveSamplerParamParameters used to construct an AdaptiveSampler instance + CAdaptiveSamplerGeneration of samples from input particles with a recovery strategy + CFixedLimiterParamParameters used to construct a FixedLimiter instance + CFixedLimiterLimiter policy that takes a fixed number of particles + CKldLimiterParamParameters used to construct a KldLimiter instance + CKldLimiterLimiter policy that takes a number of particles defined by the KLD criteria + CStorageInterfacePure abstract class representing the storage interface + CStoragePolicyConfigurable storage policy + CDifferentialDriveModelParamParameters to construct a DifferentialDriveModel instance + CDifferentialDriveModelSampled odometry model for a differential drive + COmnidirectionalDriveModelParamParameters to construct an OmnidirectionalDriveModel instance + COmnidirectionalDriveModelSampled odometry model for an omnidirectional drive + CStationaryModelA stationary motion model + COdometryMotionModelInterface2dPure abstract class representing the odometry motion model interface + CpolicyForward declaration of policy + Cpolicy_baseImplementation detail for a policy base object + Cmultivariate_distribution_traitsForward declaration of the multivariate_distribution_traits class template + Cmultivariate_distribution_traits< T, std::enable_if_t< std::is_base_of_v< Eigen::EigenBase< T >, T > > >Specialization for types derived from Eigen::EigenBase + Cmultivariate_distribution_traits< T, std::enable_if_t< std::is_base_of_v< Sophus::SO2Base< T >, T > > >Specialization for types derived from Sophus::SO2Base + Cmultivariate_distribution_traits< T, std::enable_if_t< std::is_base_of_v< Sophus::SE2Base< T >, T > > >Specialization for types derived from Sophus::SE2Base + CMultivariateNormalDistributionParamMultivariate normal distribution parameter set class + CMultivariateNormalDistributionMultivariate normal distribution + CUniformFreeSpaceGridDistributionPrimary template for a uniform grid distribution + CUniformFreeSpaceGridDistribution< Sophus::SE2d >Specialization of uniform grid distribution for Sophus::SE2d + CBeamModelParamParameters used to construct a BeamSensorModel instance + CBeamSensorModelBeam sensor model for range finders + CBearingModelParamParameters used to construct a BearingSensorModel instance + CBearingSensorModelGeneric bearing sensor model, for both 2D and 3D state types + CBaseDenseGrid2Dense 2D grid base type + CLandmarkMapBasic 3D landmark map datatype + CBaseLaserScanLaser scan 2D base type + CBaseLinearGrid2Linear 2D grid base type + CBaseOccupancyGrid2Occupancy 2D grid base type + CBaseRegularGrid2Regularly spaced 2D grid base type + CValueGrid2Generic 2D linear value grid + CLandmarkModelParamParameters used to construct a LandmarkSensorModel instance (both 2D and 3D) + CLandmarkSensorModelGeneric landmark model for discrete detection sensors (both 2D and 3D) + CLikelihoodFieldModelParamParameters used to construct a LikelihoodFieldModel instance + CLikelihoodFieldModelLikelihood field sensor model for range finders + Cparticle_traitsCommon traits of all particle types. See Page requirements as well + CNumericHelper for creating strongly typed numeric types + Cis_tuple_likeMeta-function that returns true if T is a tuple-like type + Ctuple_indexMeta-function that returns the tuple index of the element whose type is T + Ctuple_index< T, TupleLike< Args... >, std::enable_if_t< is_tuple_like_v< std::decay_t< TupleLike< Args... > > > &&detail::tuple_index_found< T, Args... >()> >tuple_index specialization for tuples + Chas_single_elementMeta-function that returns true if there is a single element of type T in the tuple-like type + Chas_single_element< T, TupleLike< Args... >, std::enable_if_t< is_tuple_like_v< std::decay_t< TupleLike< Args... > > > &&detail::tuple_index_found< T, Args... >()> >has_single_element specialization for tuples + Cdecay_tuple_likeMeta-function that decays a tuple like type and its members + Cdecay_tuple_like< TupleLike< Args... >, std::enable_if_t< is_tuple_like_v< std::decay_t< TupleLike< Args... > > > > >decay_tuple_like specialization for tuples + CLandmarkMapBoundariesLandmark bearing detection data + CLandmarkPositionDetectionLandmark bearing detection data + CLandmarkBearingDetectionLandmark bearing detection data + CIndexingIteratorA random access iterator for any indexable container  Nstd - Cnumeric_limits< beluga::Numeric< T, PhantomType > >std::numeric_limits specialization for Numeric types - Chash< beluga::Numeric< T, PhantomType > >std::hash specialization for Numeric types + Ctuple_size< beluga::CircularArray< T, N, F > >std::tuple_size specialization for circular arrays + Ctuple_element< I, beluga::CircularArray< T, N, F > >std::tuple_element specialization for circular arrays + Cnumeric_limits< beluga::Numeric< T, PhantomType > >std::numeric_limits specialization for Numeric types + Chash< beluga::Numeric< T, PhantomType > >std::hash specialization for Numeric types diff --git a/beluga_8hpp.html b/beluga_8hpp.html index ba502a32b..466417570 100644 --- a/beluga_8hpp.html +++ b/beluga_8hpp.html @@ -76,13 +76,13 @@ More...

#include <beluga/actions.hpp>
#include <beluga/algorithm.hpp>
+#include <beluga/containers.hpp>
#include <beluga/mixin.hpp>
#include <beluga/motion.hpp>
#include <beluga/policies.hpp>
#include <beluga/primitives.hpp>
#include <beluga/random.hpp>
#include <beluga/sensor.hpp>
-#include <beluga/tuple_vector.hpp>
#include <beluga/type_traits.hpp>
#include <beluga/views.hpp>
@@ -90,56 +90,56 @@
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/beluga_8hpp__incl.map b/beluga_8hpp__incl.map index bc6f0df44..ae8d8b214 100644 --- a/beluga_8hpp__incl.map +++ b/beluga_8hpp__incl.map @@ -1,52 +1,52 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/beluga_8hpp__incl.md5 b/beluga_8hpp__incl.md5 index 7342aaa27..2a361a21b 100644 --- a/beluga_8hpp__incl.md5 +++ b/beluga_8hpp__incl.md5 @@ -1 +1 @@ -d11c011752a976d8feef1001b1368c17 \ No newline at end of file +af750808f9404fd8cf44174a6d207793 \ No newline at end of file diff --git a/beluga_8hpp__incl.png b/beluga_8hpp__incl.png index abd7789706ad9a4e4b1b09a8ddc9a3572ee128f4..715ec05a27bc0ca023194ac8073f68c70aca5432 100644 GIT binary patch literal 265955 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%0DWg>PDCWFOc&PL)U76 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

7bM(zeJ2S30~g!qwGcM$pmAB!D`cL_QFq1)JT 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

23 #include <beluga/actions.hpp>
24 #include <beluga/algorithm.hpp>
-
25 #include <beluga/mixin.hpp>
-
26 #include <beluga/motion.hpp>
-
27 #include <beluga/policies.hpp>
-
28 #include <beluga/primitives.hpp>
-
29 #include <beluga/random.hpp>
-
30 #include <beluga/sensor.hpp>
-
31 #include <beluga/tuple_vector.hpp>
+
25 #include <beluga/containers.hpp>
+
26 #include <beluga/mixin.hpp>
+
27 #include <beluga/motion.hpp>
+
28 #include <beluga/policies.hpp>
+
29 #include <beluga/primitives.hpp>
+
30 #include <beluga/random.hpp>
+
31 #include <beluga/sensor.hpp>
32 #include <beluga/type_traits.hpp>
33 #include <beluga/views.hpp>
34 
35 #endif
Implementation of useful range actions.
Includes all beluga algorithms.
+
Implementation of efficient containers.
Implementation of mixin utilities and extensions.
Includes all Beluga motion models.
Implementation of useful policies.
Implementation of library primitives to abstract member access.
Includes all Beluga random distributions.
Includes all Beluga sensor models and their interfaces.
-
Implementation of a tuple of containers.
Includes all Beluga type traits.
Implementation of useful container views.
diff --git a/bresenham_8hpp_source.html b/bresenham_8hpp_source.html index 611197c99..1c5d0a912 100644 --- a/bresenham_8hpp_source.html +++ b/bresenham_8hpp_source.html @@ -145,9 +145,9 @@
97 
98  if (xspan_ < yspan_) {
99  using std::swap;
-
100  swap(x_, y_);
-
101  swap(xspan_, yspan_);
-
102  swap(xstep_, ystep_);
+
100  swap(x_, y_);
+
101  swap(xspan_, yspan_);
+
102  swap(xstep_, ystep_);
103  reversed_ = true;
104  }
105 
@@ -224,7 +224,7 @@
184  void step_to(Integer x, Integer y) {
185  if (reversed_) {
186  using std::swap;
-
187  swap(x, y);
+
187  swap(x, y);
188  }
189  current_point_.x() = x;
190  current_point_.y() = y;
@@ -285,6 +285,7 @@
265 } // namespace beluga
266 
267 #endif
+
constexpr void swap(CircularArray< T, N, F > &a, CircularArray< T, N, G > &b)
Swaps arrays a and b.
Definition: circular_array.hpp:523
Bresenham's 2D line drawing iterator, one cell at a time.
Definition: bresenham.hpp:53
iterator()=default
Default constructor.
std::ptrdiff_t difference_type
Iterator difference type (as required by ranges::view_).
Definition: bresenham.hpp:68
diff --git a/circular__array_8hpp.html b/circular__array_8hpp.html new file mode 100644 index 000000000..5ceb650ae --- /dev/null +++ b/circular__array_8hpp.html @@ -0,0 +1,441 @@ + + + + + + + +Beluga: /__w/beluga/beluga/src/beluga/beluga/include/beluga/containers/circular_array.hpp File Reference + + + + + + + + + + +
+
+ + + + + + +
+
Beluga +
+
An extensible particle filter library.
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
circular_array.hpp File Reference
+
+
+ +

Implementation of a generic circular array container. +More...

+
#include <array>
+#include <cstdint>
+#include <iterator>
+#include <stdexcept>
+#include <type_traits>
+#include <utility>
+#include <beluga/utility/indexing_iterator.hpp>
+
+Include dependency graph for circular_array.hpp:
+
+
+ + + + + + + + + + +
+
+This graph shows which files directly or indirectly include this file:
+
+
+ + + + + +
+
+

Go to the source code of this file.

+ + + + + + + + + + + +

+Classes

class  beluga::CircularArray< T, N, F >
 An implementation of generic, non-threadsafe circular array. More...
 
struct  std::tuple_size< beluga::CircularArray< T, N, F > >
 std::tuple_size specialization for circular arrays. More...
 
struct  std::tuple_element< I, beluga::CircularArray< T, N, F > >
 std::tuple_element specialization for circular arrays. More...
 
+ + + + + +

+Typedefs

template<typename T , std::size_t N>
using beluga::RollingWindow = CircularArray< T, N, CircularArrayFeatureFlags::kRolloverOnWrite|CircularArrayFeatureFlags::kExtrapolateOnRead|CircularArrayFeatureFlags::kLayoutReversal >
 Convenient type alias for a circular array that behaves like a rolling window. More...
 
+ + + + +

+Enumerations

enum class  beluga::CircularArrayFeatureFlags : int { kNone = 0x00 +, kRolloverOnWrite = 0x01 +, kExtrapolateOnRead = 0x02 +, kLayoutReversal = 0x04 + }
 Feature flags for circular arrays. More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Functions

+constexpr CircularArrayFeatureFlags beluga::operator| (CircularArrayFeatureFlags lflag, CircularArrayFeatureFlags rflag)
 Bitwise OR operator overload to combine two feature flags in a single mask-like flag.
 
+constexpr bool beluga::operator& (CircularArrayFeatureFlags mask, CircularArrayFeatureFlags flag)
 Bitwise AND operator overload to check of the presence of a feature flag in a feature mask.
 
template<typename T , std::size_t N, CircularArrayFeatureFlags F>
CircularArray< T, N, F > & beluga::operator<< (CircularArray< T, N, F > &array, T value)
 Convenient stream operator overload to push a value to a circular array. More...
 
template<std::size_t I, class T , std::size_t N, CircularArrayFeatureFlags F>
constexpr T & beluga::get (CircularArray< T, N, F > &array) noexcept
 Gets an lvalue reference to the ith value in a given array. More...
 
template<std::size_t I, class T , std::size_t N, CircularArrayFeatureFlags F>
constexpr T && beluga::get (CircularArray< T, N, F > &&array) noexcept
 Gets an rvalue reference to the ith value in a given array. More...
 
template<std::size_t I, class T , std::size_t N, CircularArrayFeatureFlags F>
constexpr const T & beluga::get (const CircularArray< T, N, F > &array) noexcept
 Gets a constant lvalue reference to the ith value in a given array. More...
 
template<std::size_t I, class T , std::size_t N, CircularArrayFeatureFlags F>
constexpr const T && beluga::get (const CircularArray< T, N, F > &&array) noexcept
 Gets a constant rvalue reference to the ith value in a given array. More...
 
template<typename T , std::size_t N, CircularArrayFeatureFlags F, CircularArrayFeatureFlags G>
constexpr void beluga::swap (CircularArray< T, N, F > &a, CircularArray< T, N, G > &b)
 Swaps arrays a and b. More...
 
+

Detailed Description

+

Implementation of a generic circular array container.

+

Typedef Documentation

+ +

◆ RollingWindow

+ +
+
+
+template<typename T , std::size_t N>
+ + + + +
using beluga::RollingWindow = typedef CircularArray< T, N, CircularArrayFeatureFlags::kRolloverOnWrite | CircularArrayFeatureFlags::kExtrapolateOnRead | CircularArrayFeatureFlags::kLayoutReversal>
+
+ +

Convenient type alias for a circular array that behaves like a rolling window.

+

A rolling window automatically overwrites older values, it extrapolates its last value to always seem full, and it is accessed by the front.

+ +
+
+

Enumeration Type Documentation

+ +

◆ CircularArrayFeatureFlags

+ +
+
+ + + + + +
+ + + + +
enum beluga::CircularArrayFeatureFlags : int
+
+strong
+
+ +

Feature flags for circular arrays.

+ + + + +
Enumerator
kRolloverOnWrite 

! If enabled, older values in the array are overwritten by newer values if the array has reached its maximum size already.

+
kExtrapolateOnRead 

! If enabled, the back value is extrapolated for constant accesses up to the array maximum size.

+
kLayoutReversal 

! If enabled, the circular array memory layout is reversed so that values can be pushed to the front rather than the back of the array.

+
+ +
+
+

Function Documentation

+ +

◆ get() [1/4]

+ +
+
+
+template<std::size_t I, class T , std::size_t N, CircularArrayFeatureFlags F>
+ + + + + +
+ + + + + + + + +
constexpr T&& beluga::get (CircularArray< T, N, F > && array)
+
+constexprnoexcept
+
+ +

Gets an rvalue reference to the ith value in a given array.

+

This is an std::get overload that relies on argument-dependent lookup (ADL).

+ +
+
+ +

◆ get() [2/4]

+ +
+
+
+template<std::size_t I, class T , std::size_t N, CircularArrayFeatureFlags F>
+ + + + + +
+ + + + + + + + +
constexpr T& beluga::get (CircularArray< T, N, F > & array)
+
+constexprnoexcept
+
+ +

Gets an lvalue reference to the ith value in a given array.

+

This is an std::get overload that relies on argument-dependent lookup (ADL).

+ +
+
+ +

◆ get() [3/4]

+ +
+
+
+template<std::size_t I, class T , std::size_t N, CircularArrayFeatureFlags F>
+ + + + + +
+ + + + + + + + +
constexpr const T&& beluga::get (const CircularArray< T, N, F > && array)
+
+constexprnoexcept
+
+ +

Gets a constant rvalue reference to the ith value in a given array.

+

This is an std::get overload that relies on argument-dependent lookup (ADL).

+ +
+
+ +

◆ get() [4/4]

+ +
+
+
+template<std::size_t I, class T , std::size_t N, CircularArrayFeatureFlags F>
+ + + + + +
+ + + + + + + + +
constexpr const T& beluga::get (const CircularArray< T, N, F > & array)
+
+constexprnoexcept
+
+ +

Gets a constant lvalue reference to the ith value in a given array.

+

This is an std::get overload that relies on argument-dependent lookup (ADL).

+ +
+
+ +

◆ operator<<()

+ +
+
+
+template<typename T , std::size_t N, CircularArrayFeatureFlags F>
+ + + + + + + + + + + + + + + + + + +
CircularArray<T, N, F>& beluga::operator<< (CircularArray< T, N, F > & array,
value 
)
+
+ +

Convenient stream operator overload to push a value to a circular array.

+

Functionally equivalent to a push_back() (or push_front() if the layout reversal feature is enabled).

+ +
+
+ +

◆ swap()

+ +
+
+
+template<typename T , std::size_t N, CircularArrayFeatureFlags F, CircularArrayFeatureFlags G>
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
constexpr void beluga::swap (CircularArray< T, N, F > & a,
CircularArray< T, N, G > & b 
)
+
+constexpr
+
+ +

Swaps arrays a and b.

+

This is an std::swap overload that relies on argument-dependent lookup (ADL).

+ +
+
+
+ + + + diff --git a/circular__array_8hpp__dep__incl.map b/circular__array_8hpp__dep__incl.map new file mode 100644 index 000000000..d2d79fd21 --- /dev/null +++ b/circular__array_8hpp__dep__incl.map @@ -0,0 +1,5 @@ + + + + + diff --git a/circular__array_8hpp__dep__incl.md5 b/circular__array_8hpp__dep__incl.md5 new file mode 100644 index 000000000..7ab590331 --- /dev/null +++ b/circular__array_8hpp__dep__incl.md5 @@ -0,0 +1 @@ +e7293daa77f51ded48f9e090692e6b7f \ No newline at end of file diff --git a/circular__array_8hpp__dep__incl.png b/circular__array_8hpp__dep__incl.png new file mode 100644 index 0000000000000000000000000000000000000000..0ab20e5a9f4de993819f3d628a0703276e7d8029 GIT binary patch literal 10198 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 + + + + + + + + + diff --git a/circular__array_8hpp__incl.md5 b/circular__array_8hpp__incl.md5 new file mode 100644 index 000000000..c6e461be5 --- /dev/null +++ b/circular__array_8hpp__incl.md5 @@ -0,0 +1 @@ +07a993256575862ebb1ffc2bb4c5176e \ No newline at end of file diff --git a/circular__array_8hpp__incl.png b/circular__array_8hpp__incl.png new file mode 100644 index 0000000000000000000000000000000000000000..d115bcc640fac92fbf5d9797c9df780c8b7da4c1 GIT binary patch literal 23598 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�CDP<-lZ*w#mGct*w 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 + + + + + + +Beluga: /__w/beluga/beluga/src/beluga/beluga/include/beluga/containers/circular_array.hpp Source File + + + + + + + + + + +
+
+ + + + + + +
+
Beluga +
+
An extensible particle filter library.
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
circular_array.hpp
+
+
+Go to the documentation of this file.
1 // Copyright 2024 Ekumen, Inc.
+
2 //
+
3 // Licensed under the Apache License, Version 2.0 (the "License");
+
4 // you may not use this file except in compliance with the License.
+
5 // You may obtain a copy of the License at
+
6 //
+
7 // http://www.apache.org/licenses/LICENSE-2.0
+
8 //
+
9 // Unless required by applicable law or agreed to in writing, software
+
10 // distributed under the License is distributed on an "AS IS" BASIS,
+
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+
12 // See the License for the specific language governing permissions and
+
13 // limitations under the License.
+
14 
+
15 #ifndef BELUGA_CONTAINERS_CIRCULAR_ARRAY_HPP
+
16 #define BELUGA_CONTAINERS_CIRCULAR_ARRAY_HPP
+
17 
+
18 #include <array>
+
19 #include <cstdint>
+
20 #include <iterator>
+
21 #include <stdexcept>
+
22 #include <type_traits>
+
23 #include <utility>
+
24 
+ +
26 
+
32 namespace beluga {
+
33 
+
35 enum class CircularArrayFeatureFlags : int {
+
36  kNone = 0x00,
+
37  kRolloverOnWrite = 0x01,
+
39  kExtrapolateOnRead = 0x02,
+
41  kLayoutReversal = 0x04
+
43 };
+
44 
+ +
47  return static_cast<CircularArrayFeatureFlags>(
+
48  static_cast<typename std::underlying_type<CircularArrayFeatureFlags>::type>(lflag) |
+
49  static_cast<typename std::underlying_type<CircularArrayFeatureFlags>::type>(rflag));
+
50 }
+
51 
+ +
54  return static_cast<bool>(
+
55  static_cast<typename std::underlying_type<CircularArrayFeatureFlags>::type>(mask) &
+
56  static_cast<typename std::underlying_type<CircularArrayFeatureFlags>::type>(flag));
+
57 }
+
58 
+
60 
+
75 template <typename T, std::size_t N, CircularArrayFeatureFlags F = CircularArrayFeatureFlags::kNone>
+ +
77  public:
+
79  using value_type = T;
+
81  using size_type = std::size_t;
+
83  using difference_type = std::ptrdiff_t;
+ +
87  using const_reference = const value_type&;
+
89  using pointer = value_type*;
+
91  using const_pointer = const value_type*;
+
92 
+
94  using allocator_type = void;
+
95 
+ + +
101  using reverse_iterator = std::reverse_iterator<iterator>;
+
103  using const_reverse_iterator = std::reverse_iterator<const_iterator>;
+
104 
+
106 
+
109  CircularArray() = default;
+
110 
+
112 
+
122  template <
+
123  typename Iterator,
+
124  typename Sentinel,
+
125  typename = std::enable_if_t<std::is_same_v<T, typename std::iterator_traits<Iterator>::value_type>>>
+
126  CircularArray(Iterator first, Sentinel last) { // NOLINT(readability-non-const-parameter)
+
127  if constexpr (F & CircularArrayFeatureFlags::kLayoutReversal) {
+
128  tail_index_ = N - 1;
+
129  for (size_ = 0; size_ < N && first != last; ++size_, ++first) {
+
130  data_[tail_index_ - size_] = *first;
+
131  }
+
132  if constexpr (!(F & CircularArrayFeatureFlags::kRolloverOnWrite)) {
+
133  if (first != last) {
+
134  throw std::length_error{"Range does not fit in circular array"};
+
135  }
+
136  }
+
137  } else {
+
138  const auto n = static_cast<size_type>(std::distance(first, last));
+
139  if (n > N) {
+
140  if constexpr (!(F & CircularArrayFeatureFlags::kRolloverOnWrite)) {
+
141  throw std::length_error{"Range does not fit in circular array"};
+
142  } else {
+
143  std::advance(first, n - N);
+
144  }
+
145  }
+
146  for (size_ = 0; size_ < N && first != last; ++size_, ++first) {
+
147  data_[size_] = *first;
+
148  }
+
149  tail_index_ = size_ - 1;
+
150  }
+
151  }
+
152 
+
154 
+
162  template <std::size_t M, typename = std::enable_if_t<M >= 1 && M <= N>>
+
163  explicit CircularArray(T (&&data)[M]) : tail_index_(M - 1), size_(M) { // NOLINT(modernize-avoid-c-arrays)
+
164  if constexpr (F & CircularArrayFeatureFlags::kLayoutReversal) {
+
165  for (std::size_t i = 0; i < M; ++i)
+
166  data_[i] = data[M - i - 1];
+
167  } else {
+
168  for (std::size_t i = 0; i < M; ++i)
+
169  data_[i] = data[i];
+
170  }
+
171  }
+
172 
+
174  [[nodiscard]] constexpr iterator begin() noexcept { return iterator(this); }
+
176  [[nodiscard]] constexpr const_iterator begin() const noexcept { return const_iterator(this); }
+
178  [[nodiscard]] constexpr const_iterator cbegin() const noexcept { return const_iterator(this); }
+
179 
+
181  [[nodiscard]] constexpr iterator end() noexcept { return iterator(this, size()); }
+
183  [[nodiscard]] constexpr const_iterator end() const noexcept { return const_iterator(this, effective_size()); }
+
185  [[nodiscard]] constexpr const_iterator cend() const noexcept { return const_iterator(this, effective_size()); }
+
186 
+
188  [[nodiscard]] constexpr reverse_iterator rbegin() noexcept { return reverse_iterator(end()); }
+
190  [[nodiscard]] constexpr const_reverse_iterator rbegin() const noexcept { return const_reverse_iterator(end()); }
+
192  [[nodiscard]] constexpr const_reverse_iterator crbegin() const noexcept { return const_reverse_iterator(cend()); }
+
193 
+
195  [[nodiscard]] constexpr reverse_iterator rend() noexcept { return reverse_iterator(begin()); }
+
197  [[nodiscard]] constexpr const_reverse_iterator rend() const noexcept { return const_reverse_iterator(begin()); }
+
199  [[nodiscard]] constexpr const_reverse_iterator crend() const noexcept { return const_reverse_iterator(cbegin()); }
+
200 
+
202 
+
208  template <bool Enabled = !(F & CircularArrayFeatureFlags::kLayoutReversal)>
+
209  std::enable_if_t<Enabled> push_back(value_type value) {
+
210  static_assert(
+
211  !(F & CircularArrayFeatureFlags::kLayoutReversal),
+
212  "Cannot push_back() when the layout reversal feature is enabled.");
+
213  if constexpr (!(F & CircularArrayFeatureFlags::kRolloverOnWrite)) {
+
214  if (size_ == N) {
+
215  throw std::length_error{"Circular array reached its maximum size"};
+
216  }
+
217  }
+
218  if (++tail_index_ == N)
+
219  tail_index_ = 0;
+
220  data_[tail_index_] = std::move(value);
+
221  size_ = std::min(size_ + 1, N);
+
222  }
+
223 
+
225 
+
231  template <bool Enabled = F& CircularArrayFeatureFlags::kLayoutReversal>
+
232  std::enable_if_t<Enabled> push_front(value_type value) {
+
233  static_assert(
+
234  F & CircularArrayFeatureFlags::kLayoutReversal,
+
235  "Cannot push_front() when the layout reversal feature is not enabled.");
+
236  if constexpr (!(F & CircularArrayFeatureFlags::kRolloverOnWrite)) {
+
237  if (size_ == N) {
+
238  throw std::length_error{"Circular array reached its maximum size"};
+
239  }
+
240  }
+
241  if (++tail_index_ == N)
+
242  tail_index_ = 0;
+
243  data_[tail_index_] = std::move(value);
+
244  size_ = std::min(size_ + 1, N);
+
245  }
+
246 
+
248 
+
253  template <bool Enabled = F& CircularArrayFeatureFlags::kLayoutReversal>
+
254  std::enable_if_t<Enabled> pop_back() noexcept {
+
255  --size_;
+
256  }
+
257 
+
259 
+
264  template <bool Enabled = !(F & CircularArrayFeatureFlags::kLayoutReversal)>
+
265  std::enable_if_t<Enabled> pop_front() noexcept {
+
266  --size_;
+
267  }
+
268 
+
270 
+
273  [[nodiscard]] constexpr reference back() noexcept {
+
274  if constexpr (F & CircularArrayFeatureFlags::kLayoutReversal) {
+
275  return data_[head_index()];
+
276  } else {
+
277  return data_[tail_index_];
+
278  }
+
279  }
+
281 
+
284  [[nodiscard]] constexpr const_reference back() const noexcept {
+
285  if constexpr (F & CircularArrayFeatureFlags::kLayoutReversal) {
+
286  return data_[head_index()];
+
287  } else {
+
288  return data_[tail_index_];
+
289  }
+
290  }
+
291 
+
293 
+
296  [[nodiscard]] constexpr reference front() noexcept {
+
297  if constexpr (F & CircularArrayFeatureFlags::kLayoutReversal) {
+
298  return data_[tail_index_];
+
299  } else {
+
300  return data_[head_index()];
+
301  }
+
302  }
+
303 
+
305 
+
308  [[nodiscard]] constexpr const_reference front() const noexcept {
+
309  if constexpr (F & CircularArrayFeatureFlags::kLayoutReversal) {
+
310  return data_[tail_index_];
+
311  } else {
+
312  return data_[head_index()];
+
313  }
+
314  }
+
315 
+
317 
+
320  [[nodiscard]] constexpr reference at(size_type index) {
+
321  if (index >= effective_size()) {
+
322  throw std::out_of_range{"Index out of circular array range"};
+
323  }
+
324  return (*this)[index];
+
325  }
+
326 
+
328 
+
331  [[nodiscard]] constexpr const_reference at(size_type index) const {
+
332  if (index >= effective_size()) {
+
333  throw std::out_of_range{"Index out of circular array range"};
+
334  }
+
335  return (*this)[index];
+
336  }
+
337 
+
339 
+
342  [[nodiscard]] constexpr reference operator[](size_type index) noexcept {
+
343  if constexpr (F & CircularArrayFeatureFlags::kLayoutReversal) {
+
344  return data_[static_cast<size_type>(index > tail_index_) * N + tail_index_ - index];
+
345  } else {
+
346  return data_[static_cast<size_type>(size_ - index > tail_index_ + 1) * N + tail_index_ - (size_ - index - 1)];
+
347  }
+
348  }
+
349 
+
351 
+
354  [[nodiscard]] constexpr const_reference operator[](size_type index) const noexcept {
+
355  if constexpr (F & CircularArrayFeatureFlags::kExtrapolateOnRead) {
+
356  index = std::min(index, size_ - 1);
+
357  }
+
358  if constexpr (F & CircularArrayFeatureFlags::kLayoutReversal) {
+
359  return data_[static_cast<size_type>(index > tail_index_) * N + tail_index_ - index];
+
360  } else {
+
361  return data_[static_cast<size_type>(size_ - index > tail_index_ + 1) * N + tail_index_ - (size_ - index - 1)];
+
362  }
+
363  }
+
364 
+
366 
+
372  void fill(const T& value) {
+
373  while (size_ < N) {
+
374  tail_index_ = (tail_index_ + 1) % N;
+
375  data_[tail_index_] = value;
+
376  ++size_;
+
377  }
+
378  }
+
379 
+
381 
+
384  void clear() noexcept { size_ = 0; }
+
385 
+
387 
+
392  template <CircularArrayFeatureFlags G>
+
393  void swap(CircularArray<T, N, G>& other) noexcept(std::is_nothrow_swappable_v<T>) {
+
394  using std::swap;
+
395  swap(data_, other.data_);
+
396  swap(size_, other.size_);
+
397  swap(tail_index_, other.tail_index_);
+
398  }
+
399 
+
400  template <typename U, std::size_t M, CircularArrayFeatureFlags G>
+
401  friend class CircularArray;
+
402 
+
404 
+
408  [[nodiscard]] constexpr T* data() noexcept { return data_.data(); }
+
409 
+
411 
+
415  [[nodiscard]] constexpr const T* data() const noexcept { return data_.data(); }
+
416 
+
418  [[nodiscard]] constexpr bool full() const noexcept { return size_ == N; }
+
419 
+
421  [[nodiscard]] constexpr bool empty() const noexcept { return size_ == 0U; }
+
422 
+
424  [[nodiscard]] constexpr size_type size() const noexcept { return size_; }
+
425 
+
427  [[nodiscard]] constexpr size_type max_size() const noexcept { return N; }
+
428 
+
430 
+
436  [[nodiscard]] constexpr size_type effective_size() const noexcept {
+
437  if constexpr (F & CircularArrayFeatureFlags::kExtrapolateOnRead) {
+
438  return static_cast<size_type>(size_ > 0) * N;
+
439  } else {
+
440  return size_;
+
441  }
+
442  }
+
443 
+
444  private:
+
445  // Computes the head index of the array.
+
446  [[nodiscard]] constexpr size_type head_index() const noexcept {
+
447  return static_cast<size_type>(size_ > tail_index_ + 1) * N + tail_index_ - size_ + 1;
+
448  }
+
449 
+
450  std::array<T, N> data_;
+
451  size_type tail_index_{0U};
+
452  size_type size_{0U};
+
453 };
+
454 
+
456 
+
460 template <typename T, std::size_t N>
+ +
462  T,
+
463  N,
+
464  CircularArrayFeatureFlags::kRolloverOnWrite | CircularArrayFeatureFlags::kExtrapolateOnRead |
+
465  CircularArrayFeatureFlags::kLayoutReversal>;
+
466 
+
468 
+
472 template <typename T, std::size_t N, CircularArrayFeatureFlags F>
+ +
474  if constexpr (F & CircularArrayFeatureFlags::kLayoutReversal) {
+
475  array.push_front(std::move(value));
+
476  } else {
+
477  array.push_back(std::move(value));
+
478  }
+
479  return array;
+
480 }
+
481 
+
483 
+
486 template <std::size_t I, class T, std::size_t N, CircularArrayFeatureFlags F>
+
487 constexpr T& get(CircularArray<T, N, F>& array) noexcept {
+
488  return array[I];
+
489 }
+
490 
+
492 
+
495 template <std::size_t I, class T, std::size_t N, CircularArrayFeatureFlags F>
+
496 constexpr T&& get(CircularArray<T, N, F>&& array) noexcept {
+
497  return array[I];
+
498 }
+
499 
+
501 
+
504 template <std::size_t I, class T, std::size_t N, CircularArrayFeatureFlags F>
+
505 constexpr const T& get(const CircularArray<T, N, F>& array) noexcept {
+
506  return array[I];
+
507 }
+
508 
+
510 
+
513 template <std::size_t I, class T, std::size_t N, CircularArrayFeatureFlags F>
+
514 constexpr const T&& get(const CircularArray<T, N, F>&& array) noexcept {
+
515  return array[I];
+
516 }
+
517 
+
519 
+
522 template <typename T, std::size_t N, CircularArrayFeatureFlags F, CircularArrayFeatureFlags G>
+ +
524  a.swap(b);
+
525 }
+
526 
+
527 } // namespace beluga
+
528 
+
529 namespace std {
+
530 
+
532 template <typename T, std::size_t N, beluga::CircularArrayFeatureFlags F>
+
533 struct tuple_size<beluga::CircularArray<T, N, F>> : std::integral_constant<std::size_t, N> {};
+
534 
+
536 template <std::size_t I, typename T, std::size_t N, beluga::CircularArrayFeatureFlags F>
+
537 struct tuple_element<I, beluga::CircularArray<T, N, F>> {
+
538  using type = T;
+
539 };
+
540 
+
541 } // namespace std
+
542 
+
543 #endif
+
CircularArrayFeatureFlags
Feature flags for circular arrays.
Definition: circular_array.hpp:35
+ + + +
constexpr bool operator&(CircularArrayFeatureFlags mask, CircularArrayFeatureFlags flag)
Bitwise AND operator overload to check of the presence of a feature flag in a feature mask.
Definition: circular_array.hpp:53
+
constexpr CircularArrayFeatureFlags operator|(CircularArrayFeatureFlags lflag, CircularArrayFeatureFlags rflag)
Bitwise OR operator overload to combine two feature flags in a single mask-like flag.
Definition: circular_array.hpp:46
+
constexpr T & get(CircularArray< T, N, F > &array) noexcept
Gets an lvalue reference to the ith value in a given array.
Definition: circular_array.hpp:487
+
constexpr void swap(CircularArray< T, N, F > &a, CircularArray< T, N, G > &b)
Swaps arrays a and b.
Definition: circular_array.hpp:523
+
CircularArray< T, N, F > & operator<<(CircularArray< T, N, F > &array, T value)
Convenient stream operator overload to push a value to a circular array.
Definition: circular_array.hpp:473
+
An implementation of generic, non-threadsafe circular array.
Definition: circular_array.hpp:76
+
void swap(CircularArray< T, N, G > &other) noexcept(std::is_nothrow_swappable_v< T >)
Swaps array with another.
Definition: circular_array.hpp:393
+
CircularArray(Iterator first, Sentinel last)
Constructs array from a pair of iterators.
Definition: circular_array.hpp:126
+
constexpr const_iterator cend() const noexcept
Returns a constant iterator pointing past the back of the array.
Definition: circular_array.hpp:185
+
value_type & reference
Value reference type of the array.
Definition: circular_array.hpp:85
+
constexpr const_reference at(size_type index) const
Returns a constant reference to the array value at the given index.
Definition: circular_array.hpp:331
+
constexpr reference at(size_type index)
Returns a reference to the array value at the given index.
Definition: circular_array.hpp:320
+
constexpr size_type effective_size() const noexcept
Returns the effective array size.
Definition: circular_array.hpp:436
+
constexpr const_iterator begin() const noexcept
Returns a constant iterator pointing to the front of the array.
Definition: circular_array.hpp:176
+
const value_type * const_pointer
Constant value pointer type of the arra.y.
Definition: circular_array.hpp:91
+
std::enable_if_t< Enabled > pop_back() noexcept
Pops a value from the back of the array.
Definition: circular_array.hpp:254
+
constexpr size_type max_size() const noexcept
Returns the maximum array size.
Definition: circular_array.hpp:427
+
void clear() noexcept
Clears array.
Definition: circular_array.hpp:384
+
constexpr reference back() noexcept
Returns a reference to the value at the back of the array.
Definition: circular_array.hpp:273
+
constexpr const_reverse_iterator rbegin() const noexcept
Returns a constant reverse iterator pointing to the back of the array.
Definition: circular_array.hpp:190
+
std::enable_if_t< Enabled > pop_front() noexcept
Pops a value from the front of the array.
Definition: circular_array.hpp:265
+
value_type * pointer
Value pointer type of the array.
Definition: circular_array.hpp:89
+
constexpr const_reverse_iterator crend() const noexcept
Returns a constant reverse iterator pointing past the front of the array.
Definition: circular_array.hpp:199
+
IndexingIterator< CircularArray< T, N, F > > iterator
Iterator type of the array.
Definition: circular_array.hpp:97
+
std::enable_if_t< Enabled > push_back(value_type value)
Pushes a value to the back of the array.
Definition: circular_array.hpp:209
+
constexpr iterator end() noexcept
Returns an iterator pointing past the back of the array.
Definition: circular_array.hpp:181
+
constexpr const_reverse_iterator crbegin() const noexcept
Returns a constant reverse iterator pointing to the back of the array.
Definition: circular_array.hpp:192
+
constexpr const T * data() const noexcept
Returns a constant pointer to the underlying array data.
Definition: circular_array.hpp:415
+
constexpr bool full() const noexcept
Returns true if the array is full, false otherwise.
Definition: circular_array.hpp:418
+
std::ptrdiff_t difference_type
Size difference type of the array.
Definition: circular_array.hpp:83
+
CircularArray()=default
Default constructor.
+
constexpr bool empty() const noexcept
Returns true if the array is empty, false otherwise.
Definition: circular_array.hpp:421
+
constexpr const_reverse_iterator rend() const noexcept
Returns a constant reverse iterator pointing past the front of the array.
Definition: circular_array.hpp:197
+
constexpr const_reference front() const noexcept
Returns a constant reference to the value at the front of the array.
Definition: circular_array.hpp:308
+
constexpr reference operator[](size_type index) noexcept
Returns a reference to the array value at the given index.
Definition: circular_array.hpp:342
+
constexpr const_reference back() const noexcept
Returns a constant reference to the value at the back of the array.
Definition: circular_array.hpp:284
+
std::reverse_iterator< const_iterator > const_reverse_iterator
Constant reverse iterator type of the array.
Definition: circular_array.hpp:103
+
CircularArray(T(&&data)[M])
Constructs array from an aggregate.
Definition: circular_array.hpp:163
+
constexpr size_type size() const noexcept
Returns the current array size.
Definition: circular_array.hpp:424
+
constexpr reverse_iterator rbegin() noexcept
Returns a reverse iterator pointing to the back of the array.
Definition: circular_array.hpp:188
+
std::size_t size_type
Size type of the array.
Definition: circular_array.hpp:81
+
constexpr T * data() noexcept
Returns a pointer to the underlying array data.
Definition: circular_array.hpp:408
+
void fill(const T &value)
Fills array to its maximum size with a given value.
Definition: circular_array.hpp:372
+
std::enable_if_t< Enabled > push_front(value_type value)
Pushes a value at the front of the array.
Definition: circular_array.hpp:232
+
IndexingIterator< const CircularArray< T, N, F > > const_iterator
Constant iterator type of the array.
Definition: circular_array.hpp:99
+
constexpr reference front() noexcept
Returns a reference to the value at the front of the array.
Definition: circular_array.hpp:296
+
std::reverse_iterator< iterator > reverse_iterator
Reverse iterator type of the array.
Definition: circular_array.hpp:101
+
void allocator_type
Allocator type of the array (required in range-v3 10.0).
Definition: circular_array.hpp:94
+
constexpr iterator begin() noexcept
Returns an iterator pointing to the front of the array.
Definition: circular_array.hpp:174
+
T value_type
Value type of the array.
Definition: circular_array.hpp:79
+
constexpr const_reference operator[](size_type index) const noexcept
Returns a constant reference to the array value at the given index.
Definition: circular_array.hpp:354
+
constexpr const_iterator end() const noexcept
Returns a constant iterator pointing past the back of the array.
Definition: circular_array.hpp:183
+
const value_type & const_reference
Constant value reference type of the array.
Definition: circular_array.hpp:87
+
constexpr reverse_iterator rend() noexcept
Returns a reverse iterator pointing past the front of the array.
Definition: circular_array.hpp:195
+
constexpr const_iterator cbegin() const noexcept
Returns a constant iterator pointing to the front of the array.
Definition: circular_array.hpp:178
+
A random access iterator for any indexable container.
Definition: indexing_iterator.hpp:38
+
Implementation of a random access iterator for indexable containers.
+
T type
! Always T since circular arrays are homogeneous.
Definition: circular_array.hpp:538
+
+ + + + diff --git a/classbeluga_1_1CircularArray-members.html b/classbeluga_1_1CircularArray-members.html new file mode 100644 index 000000000..cfaf718cc --- /dev/null +++ b/classbeluga_1_1CircularArray-members.html @@ -0,0 +1,133 @@ + + + + + + + +Beluga: Member List + + + + + + + + + + +
+
+ + + + + + +
+
Beluga +
+
An extensible particle filter library.
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
beluga::CircularArray< T, N, F > Member List
+
+
+ +

This is the complete list of members for beluga::CircularArray< T, N, F >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
allocator_type typedefbeluga::CircularArray< T, N, F >
at(size_type index)beluga::CircularArray< T, N, F >inline
at(size_type index) constbeluga::CircularArray< T, N, F >inline
back() noexceptbeluga::CircularArray< T, N, F >inline
back() const noexceptbeluga::CircularArray< T, N, F >inline
begin() noexceptbeluga::CircularArray< T, N, F >inline
begin() const noexceptbeluga::CircularArray< T, N, F >inline
cbegin() const noexceptbeluga::CircularArray< T, N, F >inline
cend() const noexceptbeluga::CircularArray< T, N, F >inline
CircularArray (defined in beluga::CircularArray< T, N, F >)beluga::CircularArray< T, N, F >friend
CircularArray()=defaultbeluga::CircularArray< T, N, F >
CircularArray(Iterator first, Sentinel last)beluga::CircularArray< T, N, F >inline
CircularArray(T(&&data)[M])beluga::CircularArray< T, N, F >inlineexplicit
clear() noexceptbeluga::CircularArray< T, N, F >inline
const_iterator typedefbeluga::CircularArray< T, N, F >
const_pointer typedefbeluga::CircularArray< T, N, F >
const_reference typedefbeluga::CircularArray< T, N, F >
const_reverse_iterator typedefbeluga::CircularArray< T, N, F >
crbegin() const noexceptbeluga::CircularArray< T, N, F >inline
crend() const noexceptbeluga::CircularArray< T, N, F >inline
data() noexceptbeluga::CircularArray< T, N, F >inline
data() const noexceptbeluga::CircularArray< T, N, F >inline
difference_type typedefbeluga::CircularArray< T, N, F >
effective_size() const noexceptbeluga::CircularArray< T, N, F >inline
empty() const noexceptbeluga::CircularArray< T, N, F >inline
end() noexceptbeluga::CircularArray< T, N, F >inline
end() const noexceptbeluga::CircularArray< T, N, F >inline
fill(const T &value)beluga::CircularArray< T, N, F >inline
front() noexceptbeluga::CircularArray< T, N, F >inline
front() const noexceptbeluga::CircularArray< T, N, F >inline
full() const noexceptbeluga::CircularArray< T, N, F >inline
iterator typedefbeluga::CircularArray< T, N, F >
max_size() const noexceptbeluga::CircularArray< T, N, F >inline
operator[](size_type index) noexceptbeluga::CircularArray< T, N, F >inline
operator[](size_type index) const noexceptbeluga::CircularArray< T, N, F >inline
pointer typedefbeluga::CircularArray< T, N, F >
pop_back() noexceptbeluga::CircularArray< T, N, F >inline
pop_front() noexceptbeluga::CircularArray< T, N, F >inline
push_back(value_type value)beluga::CircularArray< T, N, F >inline
push_front(value_type value)beluga::CircularArray< T, N, F >inline
rbegin() noexceptbeluga::CircularArray< T, N, F >inline
rbegin() const noexceptbeluga::CircularArray< T, N, F >inline
reference typedefbeluga::CircularArray< T, N, F >
rend() noexceptbeluga::CircularArray< T, N, F >inline
rend() const noexceptbeluga::CircularArray< T, N, F >inline
reverse_iterator typedefbeluga::CircularArray< T, N, F >
size() const noexceptbeluga::CircularArray< T, N, F >inline
size_type typedefbeluga::CircularArray< T, N, F >
swap(CircularArray< T, N, G > &other) noexcept(std::is_nothrow_swappable_v< T >)beluga::CircularArray< T, N, F >inline
value_type typedefbeluga::CircularArray< T, N, F >
+ + + + diff --git a/classbeluga_1_1CircularArray.html b/classbeluga_1_1CircularArray.html new file mode 100644 index 000000000..8c2baa6c2 --- /dev/null +++ b/classbeluga_1_1CircularArray.html @@ -0,0 +1,1002 @@ + + + + + + + +Beluga: beluga::CircularArray< T, N, F > Class Template Reference + + + + + + + + + + +
+
+ + + + + + +
+
Beluga +
+
An extensible particle filter library.
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
beluga::CircularArray< T, N, F > Class Template Reference
+
+
+ +

An implementation of generic, non-threadsafe circular array. + More...

+ +

#include <circular_array.hpp>

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Types

+using value_type = T
 Value type of the array.
 
+using size_type = std::size_t
 Size type of the array.
 
+using difference_type = std::ptrdiff_t
 Size difference type of the array.
 
+using reference = value_type &
 Value reference type of the array.
 
+using const_reference = const value_type &
 Constant value reference type of the array.
 
+using pointer = value_type *
 Value pointer type of the array.
 
+using const_pointer = const value_type *
 Constant value pointer type of the arra.y.
 
+using allocator_type = void
 Allocator type of the array (required in range-v3 10.0).
 
+using iterator = IndexingIterator< CircularArray< T, N, F > >
 Iterator type of the array.
 
+using const_iterator = IndexingIterator< const CircularArray< T, N, F > >
 Constant iterator type of the array.
 
+using reverse_iterator = std::reverse_iterator< iterator >
 Reverse iterator type of the array.
 
+using const_reverse_iterator = std::reverse_iterator< const_iterator >
 Constant reverse iterator type of the array.
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 CircularArray ()=default
 Default constructor. More...
 
template<typename Iterator , typename Sentinel , typename = std::enable_if_t<std::is_same_v<T, typename std::iterator_traits<Iterator>::value_type>>>
 CircularArray (Iterator first, Sentinel last)
 Constructs array from a pair of iterators. More...
 
template<std::size_t M>
 CircularArray (T(&&data)[M])
 Constructs array from an aggregate. More...
 
+constexpr iterator begin () noexcept
 Returns an iterator pointing to the front of the array.
 
+constexpr const_iterator begin () const noexcept
 Returns a constant iterator pointing to the front of the array.
 
+constexpr const_iterator cbegin () const noexcept
 Returns a constant iterator pointing to the front of the array.
 
+constexpr iterator end () noexcept
 Returns an iterator pointing past the back of the array.
 
+constexpr const_iterator end () const noexcept
 Returns a constant iterator pointing past the back of the array.
 
+constexpr const_iterator cend () const noexcept
 Returns a constant iterator pointing past the back of the array.
 
+constexpr reverse_iterator rbegin () noexcept
 Returns a reverse iterator pointing to the back of the array.
 
+constexpr const_reverse_iterator rbegin () const noexcept
 Returns a constant reverse iterator pointing to the back of the array.
 
+constexpr const_reverse_iterator crbegin () const noexcept
 Returns a constant reverse iterator pointing to the back of the array.
 
+constexpr reverse_iterator rend () noexcept
 Returns a reverse iterator pointing past the front of the array.
 
+constexpr const_reverse_iterator rend () const noexcept
 Returns a constant reverse iterator pointing past the front of the array.
 
+constexpr const_reverse_iterator crend () const noexcept
 Returns a constant reverse iterator pointing past the front of the array.
 
template<bool Enabled = !(F & CircularArrayFeatureFlags::kLayoutReversal)>
std::enable_if_t< Enabled > push_back (value_type value)
 Pushes a value to the back of the array. More...
 
template<bool Enabled = F& CircularArrayFeatureFlags::kLayoutReversal>
std::enable_if_t< Enabled > push_front (value_type value)
 Pushes a value at the front of the array. More...
 
template<bool Enabled = F& CircularArrayFeatureFlags::kLayoutReversal>
std::enable_if_t< Enabled > pop_back () noexcept
 Pops a value from the back of the array. More...
 
template<bool Enabled = !(F & CircularArrayFeatureFlags::kLayoutReversal)>
std::enable_if_t< Enabled > pop_front () noexcept
 Pops a value from the front of the array. More...
 
constexpr reference back () noexcept
 Returns a reference to the value at the back of the array. More...
 
constexpr const_reference back () const noexcept
 Returns a constant reference to the value at the back of the array. More...
 
constexpr reference front () noexcept
 Returns a reference to the value at the front of the array. More...
 
constexpr const_reference front () const noexcept
 Returns a constant reference to the value at the front of the array. More...
 
constexpr reference at (size_type index)
 Returns a reference to the array value at the given index. More...
 
constexpr const_reference at (size_type index) const
 Returns a constant reference to the array value at the given index. More...
 
constexpr reference operator[] (size_type index) noexcept
 Returns a reference to the array value at the given index. More...
 
constexpr const_reference operator[] (size_type index) const noexcept
 Returns a constant reference to the array value at the given index. More...
 
void fill (const T &value)
 Fills array to its maximum size with a given value. More...
 
void clear () noexcept
 Clears array. More...
 
template<CircularArrayFeatureFlags G>
void swap (CircularArray< T, N, G > &other) noexcept(std::is_nothrow_swappable_v< T >)
 Swaps array with another. More...
 
constexpr T * data () noexcept
 Returns a pointer to the underlying array data. More...
 
constexpr const T * data () const noexcept
 Returns a constant pointer to the underlying array data. More...
 
+constexpr bool full () const noexcept
 Returns true if the array is full, false otherwise.
 
+constexpr bool empty () const noexcept
 Returns true if the array is empty, false otherwise.
 
+constexpr size_type size () const noexcept
 Returns the current array size.
 
+constexpr size_type max_size () const noexcept
 Returns the maximum array size.
 
constexpr size_type effective_size () const noexcept
 Returns the effective array size. More...
 
+

Detailed Description

+

template<typename T, std::size_t N, CircularArrayFeatureFlags F = CircularArrayFeatureFlags::kNone>
+class beluga::CircularArray< T, N, F >

+ +

An implementation of generic, non-threadsafe circular array.

+

Modelled after std::array. Its maximum size is fixed at compile-time. Most operations are O(1) but for a few that exhibit worse case O(N) (not considering the complexity of move-construction and move-assignment of array elements of type T). Additionally, it features optional indexing reversal (making it a LIFO rather than a FIFO data structure), optional back value extrapolation for constant read accesses, and optional rollover on write accesses (i.e. overwriting the oldest value when pushing to an array instance that is full).

+
Template Parameters
+ + + + +
TElement type. It must be default constructible, move constructible, and move assignable.
NMaximum size. It must be a positive integer.
FArray feature flags, to enable optional functionality. It defaults to none.
+
+
+

Constructor & Destructor Documentation

+ +

◆ CircularArray() [1/3]

+ +
+
+
+template<typename T , std::size_t N, CircularArrayFeatureFlags F = CircularArrayFeatureFlags::kNone>
+ + + + + +
+ + + + + + + +
beluga::CircularArray< T, N, F >::CircularArray ()
+
+default
+
+ +

Default constructor.

+

Array will be functionally empty but storage will be default initialized.

+ +
+
+ +

◆ CircularArray() [2/3]

+ +
+
+
+template<typename T , std::size_t N, CircularArrayFeatureFlags F = CircularArrayFeatureFlags::kNone>
+
+template<typename Iterator , typename Sentinel , typename = std::enable_if_t<std::is_same_v<T, typename std::iterator_traits<Iterator>::value_type>>>
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
beluga::CircularArray< T, N, F >::CircularArray (Iterator first,
Sentinel last 
)
+
+inline
+
+ +

Constructs array from a pair of iterators.

+

Functionally equivalent to repeated push_back() operations or push_front() operations in reverse if the layout reversal feature is enabled. That is, both range and array layouts match.

+
Parameters
+ + + +
firstIterator to the beginning of a range.
lastSentinel for the end of a range.
+
+
+
Exceptions
+ + +
std::length_errorIf the range does not fit in the array (and the rollover on write feature is not enabled).
+
+
+ +
+
+ +

◆ CircularArray() [3/3]

+ +
+
+
+template<typename T , std::size_t N, CircularArrayFeatureFlags F = CircularArrayFeatureFlags::kNone>
+
+template<std::size_t M>
+ + + + + +
+ + + + + + + + +
beluga::CircularArray< T, N, F >::CircularArray (T(&&) data[M])
+
+inlineexplicit
+
+ +

Constructs array from an aggregate.

+

Functionally equivalent to repeated push_back() operations or push_front() operations in reverse if the layout reversal feature is enabled. That is, both aggregate and array layouts match.

+
Parameters
+ + +
dataAggregate data to initialize the array with. Its size must be in the [1, N] interval.
+
+
+ +
+
+

Member Function Documentation

+ +

◆ at() [1/2]

+ +
+
+
+template<typename T , std::size_t N, CircularArrayFeatureFlags F = CircularArrayFeatureFlags::kNone>
+ + + + + +
+ + + + + + + + +
constexpr reference beluga::CircularArray< T, N, F >::at (size_type index)
+
+inlineconstexpr
+
+ +

Returns a reference to the array value at the given index.

+
Exceptions
+ + +
std::out_of_rangeIf index is past the array's effective size.
+
+
+ +
+
+ +

◆ at() [2/2]

+ +
+
+
+template<typename T , std::size_t N, CircularArrayFeatureFlags F = CircularArrayFeatureFlags::kNone>
+ + + + + +
+ + + + + + + + +
constexpr const_reference beluga::CircularArray< T, N, F >::at (size_type index) const
+
+inlineconstexpr
+
+ +

Returns a constant reference to the array value at the given index.

+
Exceptions
+ + +
std::out_of_rangeIf index is past the array effective size.
+
+
+ +
+
+ +

◆ back() [1/2]

+ +
+
+
+template<typename T , std::size_t N, CircularArrayFeatureFlags F = CircularArrayFeatureFlags::kNone>
+ + + + + +
+ + + + + + + +
constexpr const_reference beluga::CircularArray< T, N, F >::back () const
+
+inlineconstexprnoexcept
+
+ +

Returns a constant reference to the value at the back of the array.

+

Behavior is undefined when accessing the back of an empty array.

+ +
+
+ +

◆ back() [2/2]

+ +
+
+
+template<typename T , std::size_t N, CircularArrayFeatureFlags F = CircularArrayFeatureFlags::kNone>
+ + + + + +
+ + + + + + + +
constexpr reference beluga::CircularArray< T, N, F >::back ()
+
+inlineconstexprnoexcept
+
+ +

Returns a reference to the value at the back of the array.

+

Behavior is undefined when accessing the back of an empty array.

+ +
+
+ +

◆ clear()

+ +
+
+
+template<typename T , std::size_t N, CircularArrayFeatureFlags F = CircularArrayFeatureFlags::kNone>
+ + + + + +
+ + + + + + + +
void beluga::CircularArray< T, N, F >::clear ()
+
+inlinenoexcept
+
+ +

Clears array.

+

No value destructors are invoked.

+ +
+
+ +

◆ data() [1/2]

+ +
+
+
+template<typename T , std::size_t N, CircularArrayFeatureFlags F = CircularArrayFeatureFlags::kNone>
+ + + + + +
+ + + + + + + +
constexpr const T* beluga::CircularArray< T, N, F >::data () const
+
+inlineconstexprnoexcept
+
+ +

Returns a constant pointer to the underlying array data.

+

Note that a circular array does not feature a contiguous layout in memory. Indices and distances between them for the array do not map to its data.

+ +
+
+ +

◆ data() [2/2]

+ +
+
+
+template<typename T , std::size_t N, CircularArrayFeatureFlags F = CircularArrayFeatureFlags::kNone>
+ + + + + +
+ + + + + + + +
constexpr T* beluga::CircularArray< T, N, F >::data ()
+
+inlineconstexprnoexcept
+
+ +

Returns a pointer to the underlying array data.

+

Note that a circular array does not feature a contiguous layout in memory. Indices and distances between them for the array do not map to its data.

+ +
+
+ +

◆ effective_size()

+ +
+
+
+template<typename T , std::size_t N, CircularArrayFeatureFlags F = CircularArrayFeatureFlags::kNone>
+ + + + + +
+ + + + + + + +
constexpr size_type beluga::CircularArray< T, N, F >::effective_size () const
+
+inlineconstexprnoexcept
+
+ +

Returns the effective array size.

+

Nominally, the effective array size is equal to the array size. If the last value extrapolation feature is enabled, however, the effective array size can only be 0 or N, when the array is empty and when the array is non-empty respectively.

+ +
+
+ +

◆ fill()

+ +
+
+
+template<typename T , std::size_t N, CircularArrayFeatureFlags F = CircularArrayFeatureFlags::kNone>
+ + + + + +
+ + + + + + + + +
void beluga::CircularArray< T, N, F >::fill (const T & value)
+
+inline
+
+ +

Fills array to its maximum size with a given value.

+

Functionally equivalent to repeated push_back() operations or push_front() operations if the layout reversal feature is enabled until the array reaches its maximum size. Existing values are kept. Filling an array that is full is a no-op.

+ +
+
+ +

◆ front() [1/2]

+ +
+
+
+template<typename T , std::size_t N, CircularArrayFeatureFlags F = CircularArrayFeatureFlags::kNone>
+ + + + + +
+ + + + + + + +
constexpr const_reference beluga::CircularArray< T, N, F >::front () const
+
+inlineconstexprnoexcept
+
+ +

Returns a constant reference to the value at the front of the array.

+

Behavior is undefined when accessing the front of an empty array.

+ +
+
+ +

◆ front() [2/2]

+ +
+
+
+template<typename T , std::size_t N, CircularArrayFeatureFlags F = CircularArrayFeatureFlags::kNone>
+ + + + + +
+ + + + + + + +
constexpr reference beluga::CircularArray< T, N, F >::front ()
+
+inlineconstexprnoexcept
+
+ +

Returns a reference to the value at the front of the array.

+

Behavior is undefined when accessing the front of an empty array.

+ +
+
+ +

◆ operator[]() [1/2]

+ +
+
+
+template<typename T , std::size_t N, CircularArrayFeatureFlags F = CircularArrayFeatureFlags::kNone>
+ + + + + +
+ + + + + + + + +
constexpr const_reference beluga::CircularArray< T, N, F >::operator[] (size_type index) const
+
+inlineconstexprnoexcept
+
+ +

Returns a constant reference to the array value at the given index.

+

Behavior is undefined when index is greater than or equal to the array effective size.

+ +
+
+ +

◆ operator[]() [2/2]

+ +
+
+
+template<typename T , std::size_t N, CircularArrayFeatureFlags F = CircularArrayFeatureFlags::kNone>
+ + + + + +
+ + + + + + + + +
constexpr reference beluga::CircularArray< T, N, F >::operator[] (size_type index)
+
+inlineconstexprnoexcept
+
+ +

Returns a reference to the array value at the given index.

+

Behavior is undefined when index is greater than or equal to the array size.

+ +
+
+ +

◆ pop_back()

+ +
+
+
+template<typename T , std::size_t N, CircularArrayFeatureFlags F = CircularArrayFeatureFlags::kNone>
+
+template<bool Enabled = F& CircularArrayFeatureFlags::kLayoutReversal>
+ + + + + +
+ + + + + + + +
std::enable_if_t<Enabled> beluga::CircularArray< T, N, F >::pop_back ()
+
+inlinenoexcept
+
+ +

Pops a value from the back of the array.

+

Only available when the layout reversal feature is enabled. Behavior is undefined when popping from the back of an empty array. No destructors are invoked on the value popped.

+ +
+
+ +

◆ pop_front()

+ +
+
+
+template<typename T , std::size_t N, CircularArrayFeatureFlags F = CircularArrayFeatureFlags::kNone>
+
+template<bool Enabled = !(F & CircularArrayFeatureFlags::kLayoutReversal)>
+ + + + + +
+ + + + + + + +
std::enable_if_t<Enabled> beluga::CircularArray< T, N, F >::pop_front ()
+
+inlinenoexcept
+
+ +

Pops a value from the front of the array.

+

Only available when the layout reversal feature is not enabled. Behavior is undefined when popping from the front of an empty array. No destructors are invoked on the value popped.

+ +
+
+ +

◆ push_back()

+ +
+
+
+template<typename T , std::size_t N, CircularArrayFeatureFlags F = CircularArrayFeatureFlags::kNone>
+
+template<bool Enabled = !(F & CircularArrayFeatureFlags::kLayoutReversal)>
+ + + + + +
+ + + + + + + + +
std::enable_if_t<Enabled> beluga::CircularArray< T, N, F >::push_back (value_type value)
+
+inline
+
+ +

Pushes a value to the back of the array.

+

Only available when the layout reversal feature is not enabled.

+
Exceptions
+ + +
std::length_errorIf the array is full and the rollover on write feature is not enabled.
+
+
+ +
+
+ +

◆ push_front()

+ +
+
+
+template<typename T , std::size_t N, CircularArrayFeatureFlags F = CircularArrayFeatureFlags::kNone>
+
+template<bool Enabled = F& CircularArrayFeatureFlags::kLayoutReversal>
+ + + + + +
+ + + + + + + + +
std::enable_if_t<Enabled> beluga::CircularArray< T, N, F >::push_front (value_type value)
+
+inline
+
+ +

Pushes a value at the front of the array.

+

Only available when the layout reversal feature is enabled.

+
Exceptions
+ + +
std::length_errorIf the array is full and the rollover on write feature is not enabled.
+
+
+ +
+
+ +

◆ swap()

+ +
+
+
+template<typename T , std::size_t N, CircularArrayFeatureFlags F = CircularArrayFeatureFlags::kNone>
+
+template<CircularArrayFeatureFlags G>
+ + + + + +
+ + + + + + + + +
void beluga::CircularArray< T, N, F >::swap (CircularArray< T, N, G > & other)
+
+inlinenoexcept
+
+ +

Swaps array with another.

+

Arrays being swapped may not necessarily have the same features enabled. This is most relevant when arrays differ in layout direction, as swapping two such arrays effectively reverses their elements.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classbeluga_1_1IndexingIterator-members.html b/classbeluga_1_1IndexingIterator-members.html new file mode 100644 index 000000000..2a4604e45 --- /dev/null +++ b/classbeluga_1_1IndexingIterator-members.html @@ -0,0 +1,110 @@ + + + + + + + +Beluga: Member List + + + + + + + + + + +
+
+ + + + + + +
+
Beluga +
+
An extensible particle filter library.
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
beluga::IndexingIterator< Indexable, Index > Member List
+
+
+ +

This is the complete list of members for beluga::IndexingIterator< Indexable, Index >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
difference_type typedefbeluga::IndexingIterator< Indexable, Index >
IndexingIterator()=defaultbeluga::IndexingIterator< Indexable, Index >explicit
IndexingIterator(Indexable *indexable, Index cursor=Index{})beluga::IndexingIterator< Indexable, Index >inlineexplicit
IndexingIterator(Indexable &indexable, Index cursor=Index{})beluga::IndexingIterator< Indexable, Index >inlineexplicit
iterator_category typedefbeluga::IndexingIterator< Indexable, Index >
operator!=(const IndexingIterator &other) const noexceptbeluga::IndexingIterator< Indexable, Index >inline
operator*() const noexceptbeluga::IndexingIterator< Indexable, Index >inline
operator+(difference_type offset) const noexceptbeluga::IndexingIterator< Indexable, Index >inline
operator+(difference_type offset, const IndexingIterator &iterator)beluga::IndexingIterator< Indexable, Index >friend
operator++(int) noexceptbeluga::IndexingIterator< Indexable, Index >inline
operator++() noexceptbeluga::IndexingIterator< Indexable, Index >inline
operator+=(difference_type offset) noexceptbeluga::IndexingIterator< Indexable, Index >inline
operator-(difference_type offset) const noexceptbeluga::IndexingIterator< Indexable, Index >inline
operator-(const IndexingIterator &other) const noexceptbeluga::IndexingIterator< Indexable, Index >inline
operator--(int) noexceptbeluga::IndexingIterator< Indexable, Index >inline
operator--() noexceptbeluga::IndexingIterator< Indexable, Index >inline
operator-=(difference_type offset) noexceptbeluga::IndexingIterator< Indexable, Index >inline
operator->() const noexceptbeluga::IndexingIterator< Indexable, Index >inline
operator<(const IndexingIterator &other) const noexceptbeluga::IndexingIterator< Indexable, Index >inline
operator<=(const IndexingIterator &other) const noexceptbeluga::IndexingIterator< Indexable, Index >inline
operator==(const IndexingIterator &other) const noexceptbeluga::IndexingIterator< Indexable, Index >inline
operator>(const IndexingIterator &other) const noexceptbeluga::IndexingIterator< Indexable, Index >inline
operator>=(const IndexingIterator &other) const noexceptbeluga::IndexingIterator< Indexable, Index >inline
operator[](difference_type offset) const noexceptbeluga::IndexingIterator< Indexable, Index >inline
pointer typedefbeluga::IndexingIterator< Indexable, Index >
reference typedefbeluga::IndexingIterator< Indexable, Index >
value_type typedefbeluga::IndexingIterator< Indexable, Index >
+ + + + diff --git a/classbeluga_1_1IndexingIterator.html b/classbeluga_1_1IndexingIterator.html new file mode 100644 index 000000000..696b2a97a --- /dev/null +++ b/classbeluga_1_1IndexingIterator.html @@ -0,0 +1,463 @@ + + + + + + + +Beluga: beluga::IndexingIterator< Indexable, Index > Class Template Reference + + + + + + + + + + +
+
+ + + + + + +
+
Beluga +
+
An extensible particle filter library.
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
beluga::IndexingIterator< Indexable, Index > Class Template Reference
+
+
+ +

A random access iterator for any indexable container. + More...

+ +

#include <indexing_iterator.hpp>

+ + + + + + + + + + + + + + + + + +

+Public Types

+using value_type = std::remove_cv_t< std::remove_reference_t< decltype(std::declval< Indexable >()[std::declval< Index >()])> >
 Value type of the iterator.
 
+using reference = decltype(std::declval< Indexable >()[std::declval< Index >()])
 Value reference type of the iterator.
 
+using pointer = decltype(std::addressof(std::declval< Indexable >()[std::declval< Index >()]))
 Value pointer type of the iterator.
 
+using difference_type = std::make_signed_t< decltype(std::declval< Index >() - std::declval< Index >())>
 Signed difference type of the iterator.
 
+using iterator_category = std::random_access_iterator_tag
 Category of the iterator.
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

IndexingIterator ()=default
 Default constructor. Iterator will point nowhere.
 
IndexingIterator (Indexable *indexable, Index cursor=Index{})
 Constructs iterator given a pointer to an indexable container and a cursor index on it.
 
IndexingIterator (Indexable &indexable, Index cursor=Index{})
 Constructs iterator given a reference to an indexable container and a cursor index on it.
 
+IndexingIterator operator++ (int) noexcept
 Post-increments iterator position in the target container.
 
+IndexingIteratoroperator++ () noexcept
 Pre-increments iterator position in the target container.
 
+IndexingIterator operator-- (int) noexcept
 Post-decrements iterator position in the target container.
 
+IndexingIteratoroperator-- () noexcept
 Pre-decrements iterator position in the target container.
 
+IndexingIteratoroperator+= (difference_type offset) noexcept
 Forwards iterator position a given offset, in-place.
 
+IndexingIterator operator+ (difference_type offset) const noexcept
 Forwards iterator position a given offset, yielding a modified copy.
 
+IndexingIteratoroperator-= (difference_type offset) noexcept
 Rewinds iterator position a given offset, in-place.
 
+IndexingIterator operator- (difference_type offset) const noexcept
 Rewinds iterator position a given offset, yielding a modified copy.
 
+difference_type operator- (const IndexingIterator &other) const noexcept
 Computes the difference (i.e. the distance) between the positions of this iterator and another.
 
reference operator[] (difference_type offset) const noexcept
 Dereferences iterator at a given offset from its current position. More...
 
reference operator* () const noexcept
 Dereferences iterator at its current position. More...
 
pointer operator-> () const noexcept
 Dereferences iterator at its current position and yields a pointer to it. More...
 
bool operator< (const IndexingIterator &other) const noexcept
 Checks if iterator position is strictly before that of another. More...
 
bool operator<= (const IndexingIterator &other) const noexcept
 Checks if iterator position is before or equal to that of another. More...
 
bool operator> (const IndexingIterator &other) const noexcept
 Checks if iterator position is strictly after that of another. More...
 
bool operator>= (const IndexingIterator &other) const noexcept
 Checks if iterator position is after or equal to that of another. More...
 
bool operator== (const IndexingIterator &other) const noexcept
 Checks if iterator position is equal to that of another. More...
 
+bool operator!= (const IndexingIterator &other) const noexcept
 Checks if iterator position is not equal to that of another.
 
+ + + + +

+Friends

+IndexingIterator operator+ (difference_type offset, const IndexingIterator &iterator)
 Forwards iterator a given offset, yielding a modified copy.
 
+

Detailed Description

+

template<class Indexable, class Index = typename Indexable::size_type>
+class beluga::IndexingIterator< Indexable, Index >

+ +

A random access iterator for any indexable container.

+

It can provide a pair of iterators for any container type that supports subscripting with an integral-like index.

+
Template Parameters
+ + + +
IndexableContainer type, potentially const. It must support subscripting.
IndexContainer index type. It must be default constructible and integral-like. Defaults to the indexable container size type, if defined.
+
+
+

Member Function Documentation

+ +

◆ operator*()

+ +
+
+
+template<class Indexable , class Index = typename Indexable::size_type>
+ + + + + +
+ + + + + + + +
reference beluga::IndexingIterator< Indexable, Index >::operator* () const
+
+inlinenoexcept
+
+ +

Dereferences iterator at its current position.

+

Behavior is undefined if the iterator is past the limits of the target container.

+ +
+
+ +

◆ operator->()

+ +
+
+
+template<class Indexable , class Index = typename Indexable::size_type>
+ + + + + +
+ + + + + + + +
pointer beluga::IndexingIterator< Indexable, Index >::operator-> () const
+
+inlinenoexcept
+
+ +

Dereferences iterator at its current position and yields a pointer to it.

+

Behavior is undefined if the iterator is past the limits of the target container.

+ +
+
+ +

◆ operator<()

+ +
+
+
+template<class Indexable , class Index = typename Indexable::size_type>
+ + + + + +
+ + + + + + + + +
bool beluga::IndexingIterator< Indexable, Index >::operator< (const IndexingIterator< Indexable, Index > & other) const
+
+inlinenoexcept
+
+ +

Checks if iterator position is strictly before that of another.

+

Can only be true for iterators that have the same target container.

+ +
+
+ +

◆ operator<=()

+ +
+
+
+template<class Indexable , class Index = typename Indexable::size_type>
+ + + + + +
+ + + + + + + + +
bool beluga::IndexingIterator< Indexable, Index >::operator<= (const IndexingIterator< Indexable, Index > & other) const
+
+inlinenoexcept
+
+ +

Checks if iterator position is before or equal to that of another.

+

Can only be true for iterators that have the same target container.

+ +
+
+ +

◆ operator==()

+ +
+
+
+template<class Indexable , class Index = typename Indexable::size_type>
+ + + + + +
+ + + + + + + + +
bool beluga::IndexingIterator< Indexable, Index >::operator== (const IndexingIterator< Indexable, Index > & other) const
+
+inlinenoexcept
+
+ +

Checks if iterator position is equal to that of another.

+

Can only be true for iterators that have the same target container.

+ +
+
+ +

◆ operator>()

+ +
+
+
+template<class Indexable , class Index = typename Indexable::size_type>
+ + + + + +
+ + + + + + + + +
bool beluga::IndexingIterator< Indexable, Index >::operator> (const IndexingIterator< Indexable, Index > & other) const
+
+inlinenoexcept
+
+ +

Checks if iterator position is strictly after that of another.

+

Can only be true for iterators that have the same target container.

+ +
+
+ +

◆ operator>=()

+ +
+
+
+template<class Indexable , class Index = typename Indexable::size_type>
+ + + + + +
+ + + + + + + + +
bool beluga::IndexingIterator< Indexable, Index >::operator>= (const IndexingIterator< Indexable, Index > & other) const
+
+inlinenoexcept
+
+ +

Checks if iterator position is after or equal to that of another.

+

Can only be true for iterators that have the same target container.

+ +
+
+ +

◆ operator[]()

+ +
+
+
+template<class Indexable , class Index = typename Indexable::size_type>
+ + + + + +
+ + + + + + + + +
reference beluga::IndexingIterator< Indexable, Index >::operator[] (difference_type offset) const
+
+inlinenoexcept
+
+ +

Dereferences iterator at a given offset from its current position.

+

Behavior is undefined for offsets that take the iterator past the limits of the target container.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classbeluga_1_1TupleContainer.html b/classbeluga_1_1TupleContainer.html index 3815eb2c0..bfa2a4ea3 100644 --- a/classbeluga_1_1TupleContainer.html +++ b/classbeluga_1_1TupleContainer.html @@ -80,7 +80,7 @@

Primary template for a tuple of containers.


The documentation for this class was generated from the following file: diff --git a/classbeluga_1_1TupleContainer_3_01InternalContainer_00_01std_1_1tuple_3_01Types_8_8_8_01_4_01_4.html b/classbeluga_1_1TupleContainer_3_01InternalContainer_00_01std_1_1tuple_3_01Types_8_8_8_01_4_01_4.html index bf94a2333..8e2446784 100644 --- a/classbeluga_1_1TupleContainer_3_01InternalContainer_00_01std_1_1tuple_3_01Types_8_8_8_01_4_01_4.html +++ b/classbeluga_1_1TupleContainer_3_01InternalContainer_00_01std_1_1tuple_3_01Types_8_8_8_01_4_01_4.html @@ -401,7 +401,7 @@

tuple_vector.hpp +
  • /__w/beluga/beluga/src/beluga/beluga/include/beluga/containers/tuple_vector.hpp
  • diff --git a/classbeluga_1_1TupleVector.html b/classbeluga_1_1TupleVector.html index 5fdc61f95..f844e81b7 100644 --- a/classbeluga_1_1TupleVector.html +++ b/classbeluga_1_1TupleVector.html @@ -101,7 +101,7 @@

    Shorthand for a tuple of vectors with the default allocator.

    This is needed so we can define deduction guides for this type.


    The documentation for this class was generated from the following file: diff --git a/classes.html b/classes.html index bb0992537..3fa610c9f 100644 --- a/classes.html +++ b/classes.html @@ -77,7 +77,7 @@
    BaseDenseGrid2 (beluga)
    BaseLaserScan (beluga)
    BaseLinearGrid2 (beluga)
    BaseOccupancyGrid2 (beluga)
    BaseParticleFilterInterface (beluga)
    BaseRegularGrid2 (beluga)
    BeamModelParam (beluga)
    BeamSensorModel (beluga)
    BearingModelParam (beluga)
    BearingSensorModel (beluga)
    BearingSensorModelInterface (beluga)
    BootstrapParticleFilter (beluga)
    Bresenham2i (beluga)
    C
    -
    cluster_fn (beluga::cluster_detail)
    compose_interfaces (beluga)
    +
    CircularArray (beluga)
    cluster_fn (beluga::cluster_detail)
    compose_interfaces (beluga)
    D
    decay_tuple_like (beluga)
    decay_tuple_like< TupleLike< Args... >, std::enable_if_t< is_tuple_like_v< std::decay_t< TupleLike< Args... > > > > > (beluga)
    DifferentialDriveModel (beluga)
    DifferentialDriveModelParam (beluga)
    @@ -92,7 +92,7 @@
    has_single_element (beluga)
    has_single_element< T, TupleLike< Args... >, std::enable_if_t< is_tuple_like_v< std::decay_t< TupleLike< Args... > > > &&detail::tuple_index_found< T, Args... >()> > (beluga)
    hash< beluga::Numeric< T, PhantomType > > (std)
    I
    -
    is_tuple_like (beluga)
    Bresenham2i::Line::iterator (beluga)
    +
    IndexingIterator (beluga)
    is_tuple_like (beluga)
    Bresenham2i::Line::iterator (beluga)
    K
    KldLimiter (beluga)
    KldLimiterParam (beluga)
    @@ -119,7 +119,7 @@
    sample_base_fn (beluga::views::detail)
    sample_fn (beluga::views::detail)
    sample_view (beluga::views::detail)
    Bresenham2i::Line::iterator::sentinel (beluga)
    SimpleStateEstimator (beluga)
    SimpleStateEstimator< Mixin, Sophus::SE2d > (beluga)
    spatial_hash (beluga)
    spatial_hash< Sophus::SE2d, void > (beluga)
    spatial_hash< std::array< T, N >, std::enable_if_t< std::is_arithmetic_v< T >, void > > (beluga)
    spatial_hash< Tuple< Types... >, std::enable_if_t<(std::is_arithmetic_v< Types > &&...), void > > (beluga)
    state_fn (beluga::state_detail)
    StationaryModel (beluga)
    StorageInterface (beluga)
    StoragePolicy (beluga)
    T
    -
    take_evenly_fn (beluga::views::detail)
    take_while_kld_fn (beluga::views::detail)
    ThrunRecoveryProbabilityEstimator (beluga)
    tuple_index (beluga)
    tuple_index< T, TupleLike< Args... >, std::enable_if_t< is_tuple_like_v< std::decay_t< TupleLike< Args... > > > &&detail::tuple_index_found< T, Args... >()> > (beluga)
    TupleContainer (beluga)
    TupleContainer< InternalContainer, std::tuple< Types... > > (beluga)
    TupleVector (beluga)
    +
    take_evenly_fn (beluga::views::detail)
    take_while_kld_fn (beluga::views::detail)
    ThrunRecoveryProbabilityEstimator (beluga)
    tuple_element< I, beluga::CircularArray< T, N, F > > (std)
    tuple_index (beluga)
    tuple_index< T, TupleLike< Args... >, std::enable_if_t< is_tuple_like_v< std::decay_t< TupleLike< Args... > > > &&detail::tuple_index_found< T, Args... >()> > (beluga)
    tuple_size< beluga::CircularArray< T, N, F > > (std)
    TupleContainer (beluga)
    TupleContainer< InternalContainer, std::tuple< Types... > > (beluga)
    TupleVector (beluga)
    U
    UniformFreeSpaceGridDistribution (beluga)
    UniformFreeSpaceGridDistribution< Sophus::SE2d > (beluga)
    diff --git a/containers_8hpp.html b/containers_8hpp.html new file mode 100644 index 000000000..d2771c2d1 --- /dev/null +++ b/containers_8hpp.html @@ -0,0 +1,132 @@ + + + + + + + +Beluga: /__w/beluga/beluga/src/beluga/beluga/include/beluga/containers.hpp File Reference + + + + + + + + + + +
    +
    + + + + + + +
    +
    Beluga +
    +
    An extensible particle filter library.
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    +
    containers.hpp File Reference
    +
    +
    + +

    Implementation of efficient containers. +More...

    +
    +Include dependency graph for containers.hpp:
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +This graph shows which files directly or indirectly include this file:
    +
    +
    + + + + +
    +
    +

    Go to the source code of this file.

    +

    Detailed Description

    +

    Implementation of efficient containers.

    +
    + + + + diff --git a/containers_8hpp__dep__incl.map b/containers_8hpp__dep__incl.map new file mode 100644 index 000000000..d0948ce33 --- /dev/null +++ b/containers_8hpp__dep__incl.map @@ -0,0 +1,4 @@ + + + + diff --git a/containers_8hpp__dep__incl.md5 b/containers_8hpp__dep__incl.md5 new file mode 100644 index 000000000..1ba1185bc --- /dev/null +++ b/containers_8hpp__dep__incl.md5 @@ -0,0 +1 @@ +d97c4e483c7f5908142a8cf2506d497d \ No newline at end of file diff --git a/containers_8hpp__dep__incl.png b/containers_8hpp__dep__incl.png new file mode 100644 index 0000000000000000000000000000000000000000..a2e3773d72f1221af2c3ab3d5156a98f2f4d624b GIT binary patch literal 6901 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 ZA+h4$Yi(P20RE2!QBl-XD3`Mc`5!i)eq8_n literal 0 HcmV?d00001 diff --git a/containers_8hpp__incl.map b/containers_8hpp__incl.map new file mode 100644 index 000000000..4910828cf --- /dev/null +++ b/containers_8hpp__incl.map @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/containers_8hpp__incl.md5 b/containers_8hpp__incl.md5 new file mode 100644 index 000000000..19078932f --- /dev/null +++ b/containers_8hpp__incl.md5 @@ -0,0 +1 @@ +c223ae295b0df94dce1fe39812375206 \ No newline at end of file diff --git a/containers_8hpp__incl.png b/containers_8hpp__incl.png new file mode 100644 index 0000000000000000000000000000000000000000..b2fdfc6593a37b8388f4d2a649ddeb2857dd7f2d GIT binary patch literal 123867 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 z + + + + + + +Beluga: /__w/beluga/beluga/src/beluga/beluga/include/beluga/containers.hpp Source File + + + + + + + + + + +
    +
    + + + + + + +
    +
    Beluga +
    +
    An extensible particle filter library.
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    +
    containers.hpp
    +
    +
    +Go to the documentation of this file.
    1 // Copyright 2024 Ekumen, Inc.
    +
    2 //
    +
    3 // Licensed under the Apache License, Version 2.0 (the "License");
    +
    4 // you may not use this file except in compliance with the License.
    +
    5 // You may obtain a copy of the License at
    +
    6 //
    +
    7 // http://www.apache.org/licenses/LICENSE-2.0
    +
    8 //
    +
    9 // Unless required by applicable law or agreed to in writing, software
    +
    10 // distributed under the License is distributed on an "AS IS" BASIS,
    +
    11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +
    12 // See the License for the specific language governing permissions and
    +
    13 // limitations under the License.
    +
    14 
    +
    15 #ifndef BELUGA_CONTAINERS_HPP
    +
    16 #define BELUGA_CONTAINERS_HPP
    +
    17 
    + + +
    20 
    +
    26 #endif
    +
    Implementation of a generic circular array container.
    +
    Implementation of a tuple of containers.
    +
    + + + + diff --git a/dir_000001_000006.html b/dir_000001_000005.html similarity index 79% rename from dir_000001_000006.html rename to dir_000001_000005.html index 08b0e164b..799a2e8e5 100644 --- a/dir_000001_000006.html +++ b/dir_000001_000005.html @@ -5,7 +5,7 @@ -Beluga: /__w/beluga/beluga/src/beluga/beluga/include/beluga -> interfaces Relation +Beluga: /__w/beluga/beluga/src/beluga/beluga/include/beluga -> containers Relation @@ -67,7 +67,7 @@
    -

    beluga → interfaces Relation

    File in include/belugaIncludes file in include/beluga/interfaces
    sensor.hppbearing_sensor_model_interface.hpp
    sensor.hpplandmark_sensor_model_interface.hpp
    sensor.hpplaser_sensor_model_interface_2d.hpp
    +

    beluga → containers Relation

    File in include/belugaIncludes file in include/beluga/containers
    containers.hppcircular_array.hpp
    containers.hpptuple_vector.hpp
    mixin / storage.hpptuple_vector.hpp