From 6c4f9a7049c9a4a72ac26b1d2e5e4711dd6550b8 Mon Sep 17 00:00:00 2001 From: Andrew Johnson Date: Mon, 18 Dec 2023 15:20:05 -0600 Subject: [PATCH] 1.4.1 --- .nojekyll | 0 annotated.html | 170 ++ bc_s.png | Bin 0 -> 676 bytes bdwn.png | Bin 0 -> 147 bytes chancache_8cpp_source.html | 313 ++++ chancache_8h_source.html | 281 ++++ channel_8cpp_source.html | 346 ++++ channel_8h_source.html | 169 ++ class_as_write_pvt-members.html | 105 ++ class_as_write_pvt.html | 117 ++ classes.html | 142 ++ classweak__set-members.html | 121 ++ classweak__set.html | 515 ++++++ classweak__value__map-members.html | 123 ++ classweak__value__map.html | 518 ++++++ ..._value__map_1_1element__proxy-members.html | 113 ++ classweak__value__map_1_1element__proxy.html | 187 +++ closed.png | Bin 0 -> 132 bytes conf_8py_source.html | 177 ++ configparse_8cpp_source.html | 356 ++++ dbf__copy_8cpp_source.html | 344 ++++ demo_8cpp_source.html | 215 +++ dir_138aff360eb965c43b94267b8d1ce09e.html | 107 ++ dir_138aff360eb965c43b94267b8d1ce09e_dep.map | 3 + dir_138aff360eb965c43b94267b8d1ce09e_dep.md5 | 1 + dir_138aff360eb965c43b94267b8d1ce09e_dep.png | Bin 0 -> 1426 bytes dir_46f976b0973771c28afc7d2dbc59236d.html | 151 ++ dir_46f976b0973771c28afc7d2dbc59236d_dep.map | 3 + dir_46f976b0973771c28afc7d2dbc59236d_dep.md5 | 1 + dir_46f976b0973771c28afc7d2dbc59236d_dep.png | Bin 0 -> 962 bytes dir_aa611b0b6017302a0b5c69f5fe6608dd.html | 133 ++ dir_aa611b0b6017302a0b5c69f5fe6608dd_dep.map | 3 + dir_aa611b0b6017302a0b5c69f5fe6608dd_dep.md5 | 1 + dir_aa611b0b6017302a0b5c69f5fe6608dd_dep.png | Bin 0 -> 932 bytes dir_bdd9a5d540de89e9fe90efdfc6973a4f.html | 113 ++ dir_bdd9a5d540de89e9fe90efdfc6973a4f_dep.map | 3 + dir_bdd9a5d540de89e9fe90efdfc6973a4f_dep.md5 | 1 + dir_bdd9a5d540de89e9fe90efdfc6973a4f_dep.png | Bin 0 -> 802 bytes doxygen.css | 1357 ++++++++++++++++ doxygen.png | Bin 0 -> 3779 bytes dynsections.js | 104 ++ files.html | 145 ++ ftv2blank.png | Bin 0 -> 86 bytes ftv2cl.png | Bin 0 -> 453 bytes ftv2doc.png | Bin 0 -> 746 bytes ftv2folderclosed.png | Bin 0 -> 616 bytes ftv2folderopen.png | Bin 0 -> 597 bytes ftv2lastnode.png | Bin 0 -> 86 bytes ftv2link.png | Bin 0 -> 746 bytes ftv2mlastnode.png | Bin 0 -> 246 bytes ftv2mnode.png | Bin 0 -> 246 bytes ftv2mo.png | Bin 0 -> 403 bytes ftv2node.png | Bin 0 -> 86 bytes ftv2ns.png | Bin 0 -> 388 bytes ftv2plastnode.png | Bin 0 -> 229 bytes ftv2pnode.png | Bin 0 -> 229 bytes ftv2splitbar.png | Bin 0 -> 314 bytes ftv2vertline.png | Bin 0 -> 86 bytes functions.html | 265 +++ functions_func.html | 256 +++ functions_vars.html | 112 ++ graph_legend.html | 154 ++ graph_legend.md5 | 1 + graph_legend.png | Bin 0 -> 17685 bytes gwmain_8cpp_source.html | 448 +++++ helper_8h_source.html | 118 ++ hierarchy.html | 208 +++ imagedemo_8c_source.html | 140 ++ index.html | 148 ++ inherit_graph_0.map | 3 + inherit_graph_0.md5 | 1 + inherit_graph_0.png | Bin 0 -> 1237 bytes inherit_graph_1.map | 3 + inherit_graph_1.md5 | 1 + inherit_graph_1.png | Bin 0 -> 1202 bytes inherit_graph_10.map | 3 + inherit_graph_10.md5 | 1 + inherit_graph_10.png | Bin 0 -> 878 bytes inherit_graph_11.map | 3 + inherit_graph_11.md5 | 1 + inherit_graph_11.png | Bin 0 -> 1070 bytes inherit_graph_12.map | 3 + inherit_graph_12.md5 | 1 + inherit_graph_12.png | Bin 0 -> 767 bytes inherit_graph_13.map | 3 + inherit_graph_13.md5 | 1 + inherit_graph_13.png | Bin 0 -> 1738 bytes inherit_graph_14.map | 3 + inherit_graph_14.md5 | 1 + inherit_graph_14.png | Bin 0 -> 1099 bytes inherit_graph_15.map | 3 + inherit_graph_15.md5 | 1 + inherit_graph_15.png | Bin 0 -> 1870 bytes inherit_graph_16.map | 3 + inherit_graph_16.md5 | 1 + inherit_graph_16.png | Bin 0 -> 1570 bytes inherit_graph_17.map | 3 + inherit_graph_17.md5 | 1 + inherit_graph_17.png | Bin 0 -> 2003 bytes inherit_graph_18.map | 3 + inherit_graph_18.md5 | 1 + inherit_graph_18.png | Bin 0 -> 1651 bytes inherit_graph_19.map | 3 + inherit_graph_19.md5 | 1 + inherit_graph_19.png | Bin 0 -> 450 bytes inherit_graph_2.map | 3 + inherit_graph_2.md5 | 1 + inherit_graph_2.png | Bin 0 -> 1494 bytes inherit_graph_20.map | 3 + inherit_graph_20.md5 | 1 + inherit_graph_20.png | Bin 0 -> 815 bytes inherit_graph_21.map | 4 + inherit_graph_21.md5 | 1 + inherit_graph_21.png | Bin 0 -> 5385 bytes inherit_graph_22.map | 4 + inherit_graph_22.md5 | 1 + inherit_graph_22.png | Bin 0 -> 3834 bytes inherit_graph_23.map | 3 + inherit_graph_23.md5 | 1 + inherit_graph_23.png | Bin 0 -> 1839 bytes inherit_graph_24.map | 3 + inherit_graph_24.md5 | 1 + inherit_graph_24.png | Bin 0 -> 1489 bytes inherit_graph_25.map | 5 + inherit_graph_25.md5 | 1 + inherit_graph_25.png | Bin 0 -> 4262 bytes inherit_graph_26.map | 3 + inherit_graph_26.md5 | 1 + inherit_graph_26.png | Bin 0 -> 1553 bytes inherit_graph_27.map | 3 + inherit_graph_27.md5 | 1 + inherit_graph_27.png | Bin 0 -> 1695 bytes inherit_graph_28.map | 3 + inherit_graph_28.md5 | 1 + inherit_graph_28.png | Bin 0 -> 1701 bytes inherit_graph_29.map | 15 + inherit_graph_29.md5 | 1 + inherit_graph_29.png | Bin 0 -> 56073 bytes inherit_graph_3.map | 3 + inherit_graph_3.md5 | 1 + inherit_graph_3.png | Bin 0 -> 4385 bytes inherit_graph_30.map | 3 + inherit_graph_30.md5 | 1 + inherit_graph_30.png | Bin 0 -> 2325 bytes inherit_graph_31.map | 4 + inherit_graph_31.md5 | 1 + inherit_graph_31.png | Bin 0 -> 2921 bytes inherit_graph_32.map | 3 + inherit_graph_32.md5 | 1 + inherit_graph_32.png | Bin 0 -> 646 bytes inherit_graph_33.map | 4 + inherit_graph_33.md5 | 1 + inherit_graph_33.png | Bin 0 -> 2402 bytes inherit_graph_34.map | 3 + inherit_graph_34.md5 | 1 + inherit_graph_34.png | Bin 0 -> 656 bytes inherit_graph_35.map | 3 + inherit_graph_35.md5 | 1 + inherit_graph_35.png | Bin 0 -> 1921 bytes inherit_graph_36.map | 3 + inherit_graph_36.md5 | 1 + inherit_graph_36.png | Bin 0 -> 1537 bytes inherit_graph_37.map | 3 + inherit_graph_37.md5 | 1 + inherit_graph_37.png | Bin 0 -> 2988 bytes inherit_graph_38.map | 3 + inherit_graph_38.md5 | 1 + inherit_graph_38.png | Bin 0 -> 2752 bytes inherit_graph_39.map | 3 + inherit_graph_39.md5 | 1 + inherit_graph_39.png | Bin 0 -> 2636 bytes inherit_graph_4.map | 5 + inherit_graph_4.md5 | 1 + inherit_graph_4.png | Bin 0 -> 5599 bytes inherit_graph_40.map | 3 + inherit_graph_40.md5 | 1 + inherit_graph_40.png | Bin 0 -> 1136 bytes inherit_graph_41.map | 3 + inherit_graph_41.md5 | 1 + inherit_graph_41.png | Bin 0 -> 997 bytes inherit_graph_42.map | 3 + inherit_graph_42.md5 | 1 + inherit_graph_42.png | Bin 0 -> 2441 bytes inherit_graph_43.map | 3 + inherit_graph_43.md5 | 1 + inherit_graph_43.png | Bin 0 -> 2147 bytes inherit_graph_44.map | 3 + inherit_graph_44.md5 | 1 + inherit_graph_44.png | Bin 0 -> 1537 bytes inherit_graph_45.map | 3 + inherit_graph_45.md5 | 1 + inherit_graph_45.png | Bin 0 -> 2064 bytes inherit_graph_46.map | 3 + inherit_graph_46.md5 | 1 + inherit_graph_46.png | Bin 0 -> 2328 bytes inherit_graph_47.map | 3 + inherit_graph_47.md5 | 1 + inherit_graph_47.png | Bin 0 -> 2389 bytes inherit_graph_48.map | 3 + inherit_graph_48.md5 | 1 + inherit_graph_48.png | Bin 0 -> 2543 bytes inherit_graph_49.map | 3 + inherit_graph_49.md5 | 1 + inherit_graph_49.png | Bin 0 -> 3344 bytes inherit_graph_5.map | 3 + inherit_graph_5.md5 | 1 + inherit_graph_5.png | Bin 0 -> 2047 bytes inherit_graph_50.map | 3 + inherit_graph_50.md5 | 1 + inherit_graph_50.png | Bin 0 -> 3740 bytes inherit_graph_51.map | 3 + inherit_graph_51.md5 | 1 + inherit_graph_51.png | Bin 0 -> 3353 bytes inherit_graph_52.map | 3 + inherit_graph_52.md5 | 1 + inherit_graph_52.png | Bin 0 -> 3170 bytes inherit_graph_6.map | 3 + inherit_graph_6.md5 | 1 + inherit_graph_6.png | Bin 0 -> 1231 bytes inherit_graph_7.map | 3 + inherit_graph_7.md5 | 1 + inherit_graph_7.png | Bin 0 -> 3193 bytes inherit_graph_8.map | 3 + inherit_graph_8.md5 | 1 + inherit_graph_8.png | Bin 0 -> 1655 bytes inherit_graph_9.map | 4 + inherit_graph_9.md5 | 1 + inherit_graph_9.png | Bin 0 -> 5178 bytes inherits.html | 314 ++++ jquery.js | 39 + mainpage_8h_source.html | 100 ++ moncache_8cpp_source.html | 484 ++++++ nav_f.png | Bin 0 -> 153 bytes nav_g.png | Bin 0 -> 108 bytes nav_h.png | Bin 0 -> 98 bytes open.png | Bin 0 -> 123 bytes pages.html | 97 ++ pdb_8cpp_source.html | 936 +++++++++++ pdb_8h_source.html | 196 +++ pdbgroup_8cpp_source.html | 587 +++++++ pdbgroup_8h_source.html | 334 ++++ pdbsingle_8cpp_source.html | 604 +++++++ pdbsingle_8h_source.html | 269 +++ pva2pva_8h_source.html | 115 ++ pvahelper_8h_source.html | 474 ++++++ pvalink_8cpp_source.html | 456 ++++++ pvalink_8h_source.html | 360 +++++ pvalink__channel_8cpp_source.html | 535 ++++++ pvalink__jlif_8cpp_source.html | 424 +++++ pvalink__link_8cpp_source.html | 256 +++ pvalink__lset_8cpp_source.html | 626 +++++++ pvalink__null_8cpp_source.html | 116 ++ pvif_8cpp_source.html | 1440 +++++++++++++++++ pvif_8h_source.html | 536 ++++++ qsrv_8cpp_source.html | 249 +++ qsrv_page.html | 316 ++++ qsrvpage_8h_source.html | 100 ++ release_notes.html | 210 +++ sb_8h_source.html | 116 ++ search/all_61.html | 26 + search/all_61.js | 7 + search/all_62.html | 26 + search/all_62.js | 6 + search/all_63.html | 26 + search/all_63.js | 11 + search/all_64.html | 26 + search/all_64.js | 8 + search/all_65.html | 26 + search/all_65.js | 6 + search/all_66.html | 26 + search/all_66.js | 6 + search/all_67.html | 26 + search/all_67.js | 8 + search/all_69.html | 26 + search/all_69.js | 5 + search/all_6a.html | 26 + search/all_6a.js | 4 + search/all_6c.html | 26 + search/all_6c.js | 9 + search/all_6d.html | 26 + search/all_6d.js | 6 + search/all_6e.html | 26 + search/all_6e.js | 5 + search/all_6f.html | 26 + search/all_6f.js | 7 + search/all_70.html | 26 + search/all_70.js | 25 + search/all_71.html | 26 + search/all_71.js | 4 + search/all_72.html | 26 + search/all_72.js | 5 + search/all_73.html | 26 + search/all_73.js | 9 + search/all_74.html | 26 + search/all_74.js | 14 + search/all_76.html | 26 + search/all_76.js | 4 + search/all_77.html | 26 + search/all_77.js | 13 + search/all_78.html | 26 + search/all_78.js | 4 + search/classes_61.html | 26 + search/classes_61.js | 7 + search/classes_62.html | 26 + search/classes_62.js | 6 + search/classes_63.html | 26 + search/classes_63.js | 8 + search/classes_64.html | 26 + search/classes_64.js | 7 + search/classes_65.html | 26 + search/classes_65.js | 4 + search/classes_66.html | 26 + search/classes_66.js | 5 + search/classes_67.html | 26 + search/classes_67.js | 7 + search/classes_69.html | 26 + search/classes_69.js | 4 + search/classes_6a.html | 26 + search/classes_6a.js | 4 + search/classes_6c.html | 26 + search/classes_6c.js | 5 + search/classes_6d.html | 26 + search/classes_6d.js | 5 + search/classes_6e.html | 26 + search/classes_6e.js | 4 + search/classes_70.html | 26 + search/classes_70.js | 22 + search/classes_73.html | 26 + search/classes_73.js | 7 + search/classes_74.html | 26 + search/classes_74.js | 13 + search/classes_76.html | 26 + search/classes_76.js | 4 + search/classes_77.html | 26 + search/classes_77.js | 13 + search/classes_78.html | 26 + search/classes_78.js | 4 + search/close.png | Bin 0 -> 273 bytes search/functions_63.html | 26 + search/functions_63.js | 5 + search/functions_64.html | 26 + search/functions_64.js | 4 + search/functions_65.html | 26 + search/functions_65.js | 5 + search/functions_66.html | 26 + search/functions_66.js | 4 + search/functions_67.html | 26 + search/functions_67.js | 4 + search/functions_69.html | 26 + search/functions_69.js | 4 + search/functions_6c.html | 26 + search/functions_6c.js | 6 + search/functions_6d.html | 26 + search/functions_6d.js | 4 + search/functions_6e.html | 26 + search/functions_6e.js | 4 + search/functions_6f.html | 26 + search/functions_6f.js | 7 + search/functions_70.html | 26 + search/functions_70.js | 5 + search/functions_72.html | 26 + search/functions_72.js | 4 + search/functions_73.html | 26 + search/functions_73.js | 5 + search/functions_77.html | 26 + search/functions_77.js | 5 + search/mag_sel.png | Bin 0 -> 563 bytes search/nomatches.html | 12 + search/pages_70.html | 26 + search/pages_70.js | 4 + search/pages_71.html | 26 + search/pages_71.js | 4 + search/pages_72.html | 26 + search/pages_72.js | 4 + search/pages_74.html | 26 + search/pages_74.js | 4 + search/search.css | 271 ++++ search/search.js | 803 +++++++++ search/search_l.png | Bin 0 -> 604 bytes search/search_m.png | Bin 0 -> 158 bytes search/search_r.png | Bin 0 -> 612 bytes search/variables_63.html | 26 + search/variables_63.js | 4 + search/variables_66.html | 26 + search/variables_66.js | 4 + search/variables_6c.html | 26 + search/variables_6c.js | 4 + server_8cpp_source.html | 424 +++++ server_8h_source.html | 158 ++ soft_main_8cpp_source.html | 381 +++++ struct_a_s_c_l_i_e_n_t-members.html | 107 ++ struct_a_s_c_l_i_e_n_t.html | 128 ++ struct_a_s_cred-members.html | 105 ++ struct_a_s_cred.html | 128 ++ struct_base_channel-members.html | 117 ++ struct_base_channel.html | 180 +++ struct_base_channel__coll__graph.map | 2 + struct_base_channel__coll__graph.md5 | 1 + struct_base_channel__coll__graph.png | Bin 0 -> 3585 bytes struct_base_channel__inherit__graph.map | 5 + struct_base_channel__inherit__graph.md5 | 1 + struct_base_channel__inherit__graph.png | Bin 0 -> 9916 bytes ...base_channel_provider_factory-members.html | 110 ++ struct_base_channel_provider_factory.html | 158 ++ ..._channel_provider_factory__coll__graph.map | 2 + ..._channel_provider_factory__coll__graph.md5 | 1 + ..._channel_provider_factory__coll__graph.png | Bin 0 -> 6133 bytes ...annel_provider_factory__inherit__graph.map | 2 + ...annel_provider_factory__inherit__graph.md5 | 1 + ...annel_provider_factory__inherit__graph.png | Bin 0 -> 6133 bytes struct_base_monitor-members.html | 121 ++ struct_base_monitor.html | 293 ++++ struct_base_monitor_1_1no__overflow.html | 108 ++ struct_base_monitor__coll__graph.map | 2 + struct_base_monitor__coll__graph.md5 | 1 + struct_base_monitor__coll__graph.png | Bin 0 -> 3691 bytes struct_base_monitor__inherit__graph.map | 4 + struct_base_monitor__inherit__graph.md5 | 1 + struct_base_monitor__inherit__graph.png | Bin 0 -> 8182 bytes struct_channel_cache-members.html | 113 ++ struct_channel_cache.html | 170 ++ ..._channel_cache_1_1cache_clean-members.html | 108 ++ struct_channel_cache_1_1cache_clean.html | 140 ++ ...nnel_cache_1_1cache_clean__coll__graph.map | 3 + ...nnel_cache_1_1cache_clean__coll__graph.md5 | 1 + ...nnel_cache_1_1cache_clean__coll__graph.png | Bin 0 -> 6492 bytes ...l_cache_1_1cache_clean__inherit__graph.map | 2 + ...l_cache_1_1cache_clean__inherit__graph.md5 | 1 + ...l_cache_1_1cache_clean__inherit__graph.png | Bin 0 -> 3394 bytes struct_channel_cache__coll__graph.map | 3 + struct_channel_cache__coll__graph.md5 | 1 + struct_channel_cache__coll__graph.png | Bin 0 -> 7481 bytes struct_channel_cache_entry-members.html | 116 ++ struct_channel_cache_entry.html | 182 +++ ...l_cache_entry_1_1_c_requester-members.html | 112 ++ ...t_channel_cache_entry_1_1_c_requester.html | 156 ++ ...che_entry_1_1_c_requester__coll__graph.map | 2 + ...che_entry_1_1_c_requester__coll__graph.md5 | 1 + ...che_entry_1_1_c_requester__coll__graph.png | Bin 0 -> 5591 bytes ..._entry_1_1_c_requester__inherit__graph.map | 2 + ..._entry_1_1_c_requester__inherit__graph.md5 | 1 + ..._entry_1_1_c_requester__inherit__graph.png | Bin 0 -> 5591 bytes struct_channel_cache_entry__coll__graph.map | 6 + struct_channel_cache_entry__coll__graph.md5 | 1 + struct_channel_cache_entry__coll__graph.png | Bin 0 -> 20691 bytes struct_d_b_c_h-members.html | 111 ++ struct_d_b_c_h.html | 140 ++ struct_d_b_event-members.html | 112 ++ struct_d_b_event.html | 142 ++ struct_d_b_scan_locker-members.html | 105 ++ struct_d_b_scan_locker.html | 124 ++ struct_field_name-members.html | 112 ++ struct_field_name.html | 156 ++ struct_field_name_1_1_component-members.html | 111 ++ struct_field_name_1_1_component.html | 134 ++ struct_g_w_channel-members.html | 127 ++ struct_g_w_channel.html | 217 +++ struct_g_w_channel__coll__graph.map | 2 + struct_g_w_channel__coll__graph.md5 | 1 + struct_g_w_channel__coll__graph.png | Bin 0 -> 2768 bytes struct_g_w_channel__inherit__graph.map | 2 + struct_g_w_channel__inherit__graph.md5 | 1 + struct_g_w_channel__inherit__graph.png | Bin 0 -> 2768 bytes ...t_g_w_server_channel_provider-members.html | 111 ++ struct_g_w_server_channel_provider.html | 160 ++ ...w_server_channel_provider__coll__graph.map | 4 + ...w_server_channel_provider__coll__graph.md5 | 1 + ...w_server_channel_provider__coll__graph.png | Bin 0 -> 24844 bytes ...erver_channel_provider__inherit__graph.map | 2 + ...erver_channel_provider__inherit__graph.md5 | 1 + ...erver_channel_provider__inherit__graph.png | Bin 0 -> 11522 bytes struct_group_config-members.html | 106 ++ struct_group_config.html | 148 ++ struct_group_config_1_1_field-members.html | 112 ++ struct_group_config_1_1_field.html | 137 ++ struct_group_config_1_1_group-members.html | 112 ++ struct_group_config_1_1_group.html | 142 ++ struct_local_f_l-members.html | 105 ++ struct_local_f_l.html | 124 ++ struct_monitor_cache_entry-members.html | 124 ++ struct_monitor_cache_entry.html | 217 +++ struct_monitor_cache_entry__coll__graph.map | 8 + struct_monitor_cache_entry__coll__graph.md5 | 1 + struct_monitor_cache_entry__coll__graph.png | Bin 0 -> 28435 bytes ...ct_monitor_cache_entry__inherit__graph.map | 2 + ...ct_monitor_cache_entry__inherit__graph.md5 | 1 + ...ct_monitor_cache_entry__inherit__graph.png | Bin 0 -> 3699 bytes struct_monitor_user-members.html | 126 ++ struct_monitor_user.html | 206 +++ struct_monitor_user__coll__graph.map | 2 + struct_monitor_user__coll__graph.md5 | 1 + struct_monitor_user__coll__graph.png | Bin 0 -> 2397 bytes struct_monitor_user__inherit__graph.map | 2 + struct_monitor_user__inherit__graph.md5 | 1 + struct_monitor_user__inherit__graph.png | Bin 0 -> 2397 bytes struct_p_d_b_group_channel-members.html | 126 ++ struct_p_d_b_group_channel.html | 215 +++ struct_p_d_b_group_channel__coll__graph.map | 4 + struct_p_d_b_group_channel__coll__graph.md5 | 1 + struct_p_d_b_group_channel__coll__graph.png | Bin 0 -> 13428 bytes ...ct_p_d_b_group_channel__inherit__graph.map | 3 + ...ct_p_d_b_group_channel__inherit__graph.md5 | 1 + ...ct_p_d_b_group_channel__inherit__graph.png | Bin 0 -> 10102 bytes struct_p_d_b_group_monitor-members.html | 127 ++ struct_p_d_b_group_monitor.html | 251 +++ struct_p_d_b_group_monitor__coll__graph.map | 3 + struct_p_d_b_group_monitor__coll__graph.md5 | 1 + struct_p_d_b_group_monitor__coll__graph.png | Bin 0 -> 5657 bytes ...ct_p_d_b_group_monitor__inherit__graph.map | 3 + ...ct_p_d_b_group_monitor__inherit__graph.md5 | 1 + ...ct_p_d_b_group_monitor__inherit__graph.png | Bin 0 -> 5657 bytes struct_p_d_b_group_p_v-members.html | 132 ++ struct_p_d_b_group_p_v.html | 232 +++ struct_p_d_b_group_p_v_1_1_info-members.html | 119 ++ struct_p_d_b_group_p_v_1_1_info.html | 165 ++ ..._p_d_b_group_p_v_1_1_info__coll__graph.map | 5 + ..._p_d_b_group_p_v_1_1_info__coll__graph.md5 | 1 + ..._p_d_b_group_p_v_1_1_info__coll__graph.png | Bin 0 -> 9818 bytes struct_p_d_b_group_p_v__coll__graph.map | 3 + struct_p_d_b_group_p_v__coll__graph.md5 | 1 + struct_p_d_b_group_p_v__coll__graph.png | Bin 0 -> 2706 bytes struct_p_d_b_group_p_v__inherit__graph.map | 3 + struct_p_d_b_group_p_v__inherit__graph.md5 | 1 + struct_p_d_b_group_p_v__inherit__graph.png | Bin 0 -> 2706 bytes struct_p_d_b_group_put-members.html | 120 ++ struct_p_d_b_group_put.html | 191 +++ struct_p_d_b_group_put__coll__graph.map | 2 + struct_p_d_b_group_put__coll__graph.md5 | 1 + struct_p_d_b_group_put__coll__graph.png | Bin 0 -> 7946 bytes struct_p_d_b_group_put__inherit__graph.map | 2 + struct_p_d_b_group_put__inherit__graph.md5 | 1 + struct_p_d_b_group_put__inherit__graph.png | Bin 0 -> 7946 bytes struct_p_d_b_p_v-members.html | 107 ++ struct_p_d_b_p_v.html | 135 ++ struct_p_d_b_p_v__inherit__graph.map | 4 + struct_p_d_b_p_v__inherit__graph.md5 | 1 + struct_p_d_b_p_v__inherit__graph.png | Bin 0 -> 4602 bytes struct_p_d_b_provider-members.html | 120 ++ struct_p_d_b_provider.html | 199 +++ struct_p_d_b_provider__coll__graph.map | 3 + struct_p_d_b_provider__coll__graph.md5 | 1 + struct_p_d_b_provider__coll__graph.png | Bin 0 -> 19060 bytes struct_p_d_b_provider__inherit__graph.map | 2 + struct_p_d_b_provider__inherit__graph.md5 | 1 + struct_p_d_b_provider__inherit__graph.png | Bin 0 -> 11363 bytes struct_p_d_b_single_channel-members.html | 126 ++ struct_p_d_b_single_channel.html | 215 +++ struct_p_d_b_single_channel__coll__graph.map | 5 + struct_p_d_b_single_channel__coll__graph.md5 | 1 + struct_p_d_b_single_channel__coll__graph.png | Bin 0 -> 16713 bytes ...t_p_d_b_single_channel__inherit__graph.map | 3 + ...t_p_d_b_single_channel__inherit__graph.md5 | 1 + ...t_p_d_b_single_channel__inherit__graph.png | Bin 0 -> 10400 bytes struct_p_d_b_single_monitor-members.html | 126 ++ struct_p_d_b_single_monitor.html | 248 +++ struct_p_d_b_single_monitor__coll__graph.map | 3 + struct_p_d_b_single_monitor__coll__graph.md5 | 1 + struct_p_d_b_single_monitor__coll__graph.png | Bin 0 -> 5864 bytes ...t_p_d_b_single_monitor__inherit__graph.map | 3 + ...t_p_d_b_single_monitor__inherit__graph.md5 | 1 + ...t_p_d_b_single_monitor__inherit__graph.png | Bin 0 -> 5864 bytes struct_p_d_b_single_p_v-members.html | 135 ++ struct_p_d_b_single_p_v.html | 236 +++ struct_p_d_b_single_p_v__coll__graph.map | 5 + struct_p_d_b_single_p_v__coll__graph.md5 | 1 + struct_p_d_b_single_p_v__coll__graph.png | Bin 0 -> 9145 bytes struct_p_d_b_single_p_v__inherit__graph.map | 3 + struct_p_d_b_single_p_v__inherit__graph.md5 | 1 + struct_p_d_b_single_p_v__inherit__graph.png | Bin 0 -> 2813 bytes struct_p_d_b_single_put-members.html | 123 ++ struct_p_d_b_single_put.html | 199 +++ struct_p_d_b_single_put__coll__graph.map | 2 + struct_p_d_b_single_put__coll__graph.md5 | 1 + struct_p_d_b_single_put__coll__graph.png | Bin 0 -> 7372 bytes struct_p_d_b_single_put__inherit__graph.map | 2 + struct_p_d_b_single_put__inherit__graph.md5 | 1 + struct_p_d_b_single_put__inherit__graph.png | Bin 0 -> 7372 bytes struct_p_v_i_f-members.html | 111 ++ struct_p_v_i_f.html | 259 +++ struct_p_v_i_f_builder-members.html | 108 ++ struct_p_v_i_f_builder.html | 157 ++ struct_p_v_i_f_builder__inherit__graph.map | 3 + struct_p_v_i_f_builder__inherit__graph.md5 | 1 + struct_p_v_i_f_builder__inherit__graph.png | Bin 0 -> 2945 bytes struct_s_b-members.html | 105 ++ struct_s_b.html | 125 ++ struct_scalar_accessor-members.html | 107 ++ struct_scalar_accessor.html | 140 ++ struct_scalar_builder-members.html | 110 ++ struct_scalar_builder.html | 156 ++ struct_scalar_builder__coll__graph.map | 3 + struct_scalar_builder__coll__graph.md5 | 1 + struct_scalar_builder__coll__graph.png | Bin 0 -> 2927 bytes struct_scalar_builder__inherit__graph.map | 3 + struct_scalar_builder__inherit__graph.md5 | 1 + struct_scalar_builder__inherit__graph.png | Bin 0 -> 2927 bytes struct_server_config-members.html | 112 ++ struct_server_config.html | 152 ++ ..._test_channel_field_requester-members.html | 108 ++ struct_test_channel_field_requester.html | 140 ++ ...t_channel_field_requester__coll__graph.map | 2 + ...t_channel_field_requester__coll__graph.md5 | 1 + ...t_channel_field_requester__coll__graph.png | Bin 0 -> 4607 bytes ...hannel_field_requester__inherit__graph.map | 2 + ...hannel_field_requester__inherit__graph.md5 | 1 + ...hannel_field_requester__inherit__graph.png | Bin 0 -> 4607 bytes ...ct_test_channel_get_requester-members.html | 114 ++ struct_test_channel_get_requester.html | 159 ++ ...est_channel_get_requester__coll__graph.map | 2 + ...est_channel_get_requester__coll__graph.md5 | 1 + ...est_channel_get_requester__coll__graph.png | Bin 0 -> 4998 bytes ..._channel_get_requester__inherit__graph.map | 2 + ..._channel_get_requester__inherit__graph.md5 | 1 + ..._channel_get_requester__inherit__graph.png | Bin 0 -> 4998 bytes ...est_channel_monitor_requester-members.html | 117 ++ struct_test_channel_monitor_requester.html | 168 ++ ...channel_monitor_requester__coll__graph.map | 2 + ...channel_monitor_requester__coll__graph.md5 | 1 + ...channel_monitor_requester__coll__graph.png | Bin 0 -> 4810 bytes ...nnel_monitor_requester__inherit__graph.map | 2 + ...nnel_monitor_requester__inherit__graph.md5 | 1 + ...nnel_monitor_requester__inherit__graph.png | Bin 0 -> 4810 bytes ...ct_test_channel_put_requester-members.html | 117 ++ struct_test_channel_put_requester.html | 168 ++ ...est_channel_put_requester__coll__graph.map | 2 + ...est_channel_put_requester__coll__graph.md5 | 1 + ...est_channel_put_requester__coll__graph.png | Bin 0 -> 4790 bytes ..._channel_put_requester__inherit__graph.map | 2 + ..._channel_put_requester__inherit__graph.md5 | 1 + ..._channel_put_requester__inherit__graph.png | Bin 0 -> 4790 bytes struct_test_channel_requester-members.html | 112 ++ struct_test_channel_requester.html | 153 ++ ...ct_test_channel_requester__coll__graph.map | 2 + ...ct_test_channel_requester__coll__graph.md5 | 1 + ...ct_test_channel_requester__coll__graph.png | Bin 0 -> 3660 bytes ...test_channel_requester__inherit__graph.map | 2 + ...test_channel_requester__inherit__graph.md5 | 1 + ...test_channel_requester__inherit__graph.png | Bin 0 -> 3660 bytes struct_test_i_o_c-members.html | 106 ++ struct_test_i_o_c.html | 124 ++ struct_test_p_v-members.html | 117 ++ struct_test_p_v.html | 178 ++ struct_test_p_v__coll__graph.map | 3 + struct_test_p_v__coll__graph.md5 | 1 + struct_test_p_v__coll__graph.png | Bin 0 -> 4070 bytes struct_test_p_v_channel-members.html | 127 ++ struct_test_p_v_channel.html | 215 +++ struct_test_p_v_channel__coll__graph.map | 4 + struct_test_p_v_channel__coll__graph.md5 | 1 + struct_test_p_v_channel__coll__graph.png | Bin 0 -> 9805 bytes struct_test_p_v_channel__inherit__graph.map | 3 + struct_test_p_v_channel__inherit__graph.md5 | 1 + struct_test_p_v_channel__inherit__graph.png | Bin 0 -> 5451 bytes struct_test_p_v_monitor-members.html | 119 ++ struct_test_p_v_monitor.html | 181 +++ struct_test_p_v_monitor__coll__graph.map | 2 + struct_test_p_v_monitor__coll__graph.md5 | 1 + struct_test_p_v_monitor__coll__graph.png | Bin 0 -> 3743 bytes struct_test_p_v_monitor__inherit__graph.map | 2 + struct_test_p_v_monitor__inherit__graph.md5 | 1 + struct_test_p_v_monitor__inherit__graph.png | Bin 0 -> 3743 bytes struct_test_provider-members.html | 116 ++ struct_test_provider.html | 180 +++ struct_test_provider__coll__graph.map | 3 + struct_test_provider__coll__graph.md5 | 1 + struct_test_provider__coll__graph.png | Bin 0 -> 11219 bytes struct_test_provider__inherit__graph.map | 2 + struct_test_provider__inherit__graph.md5 | 1 + struct_test_provider__inherit__graph.png | Bin 0 -> 6600 bytes struct_work_queue-members.html | 107 ++ struct_work_queue.html | 146 ++ struct_work_queue__coll__graph.map | 2 + struct_work_queue__coll__graph.md5 | 1 + struct_work_queue__coll__graph.png | Bin 0 -> 3709 bytes struct_work_queue__inherit__graph.map | 2 + struct_work_queue__inherit__graph.md5 | 1 + struct_work_queue__inherit__graph.png | Bin 0 -> 3709 bytes structjlif.html | 104 ++ structpdb_info_iterator-members.html | 109 ++ structpdb_info_iterator.html | 136 ++ structpdb_record_info-members.html | 105 ++ structpdb_record_info.html | 124 ++ structpdb_record_iterator-members.html | 111 ++ structpdb_record_iterator.html | 139 ++ structpvalink_1_1pva_global__t-members.html | 116 ++ structpvalink_1_1pva_global__t.html | 158 ++ ...ink_1_1pva_global__t_1_1_scan-members.html | 108 ++ structpvalink_1_1pva_global__t_1_1_scan.html | 122 ++ ...tpvalink_1_1pva_global__t__coll__graph.map | 3 + ...tpvalink_1_1pva_global__t__coll__graph.md5 | 1 + ...tpvalink_1_1pva_global__t__coll__graph.png | Bin 0 -> 6154 bytes structpvalink_1_1pva_link-members.html | 156 ++ structpvalink_1_1pva_link.html | 273 ++++ ...pvalink_1_1pva_link_1_1_value-members.html | 114 ++ structpvalink_1_1pva_link_1_1_value.html | 150 ++ ...ink_1_1pva_link_1_1_value__coll__graph.map | 3 + ...ink_1_1pva_link_1_1_value__coll__graph.md5 | 1 + ...ink_1_1pva_link_1_1_value__coll__graph.png | Bin 0 -> 3326 bytes structpvalink_1_1pva_link__coll__graph.map | 3 + structpvalink_1_1pva_link__coll__graph.md5 | 1 + structpvalink_1_1pva_link__coll__graph.png | Bin 0 -> 4282 bytes structpvalink_1_1pva_link__inherit__graph.map | 3 + structpvalink_1_1pva_link__inherit__graph.md5 | 1 + structpvalink_1_1pva_link__inherit__graph.png | Bin 0 -> 4282 bytes ...ctpvalink_1_1pva_link_channel-members.html | 135 ++ structpvalink_1_1pva_link_channel.html | 239 +++ ...va_link_channel_1_1_after_put-members.html | 108 ++ ...ink_1_1pva_link_channel_1_1_after_put.html | 141 ++ ...ink_channel_1_1_after_put__coll__graph.map | 2 + ...ink_channel_1_1_after_put__coll__graph.md5 | 1 + ...ink_channel_1_1_after_put__coll__graph.png | Bin 0 -> 4698 bytes ..._channel_1_1_after_put__inherit__graph.map | 2 + ..._channel_1_1_after_put__inherit__graph.md5 | 1 + ..._channel_1_1_after_put__inherit__graph.png | Bin 0 -> 4698 bytes ...va_link_channel_1_1_link_sort-members.html | 106 ++ ...ink_1_1pva_link_channel_1_1_link_sort.html | 119 ++ ...alink_1_1pva_link_channel__coll__graph.map | 2 + ...alink_1_1pva_link_channel__coll__graph.md5 | 1 + ...alink_1_1pva_link_channel__coll__graph.png | Bin 0 -> 16822 bytes ...nk_1_1pva_link_channel__inherit__graph.map | 2 + ...nk_1_1pva_link_channel__inherit__graph.md5 | 1 + ...nk_1_1pva_link_channel__inherit__graph.png | Bin 0 -> 16822 bytes structpvalink_1_1pva_link_config-members.html | 130 ++ structpvalink_1_1pva_link_config.html | 190 +++ ...valink_1_1pva_link_config__coll__graph.map | 2 + ...valink_1_1pva_link_config__coll__graph.md5 | 1 + ...valink_1_1pva_link_config__coll__graph.png | Bin 0 -> 2843 bytes ...ink_1_1pva_link_config__inherit__graph.map | 3 + ...ink_1_1pva_link_config__inherit__graph.md5 | 1 + ...ink_1_1pva_link_config__inherit__graph.png | Bin 0 -> 4314 bytes structweak__set_1_1_x_iterator-members.html | 111 ++ structweak__set_1_1_x_iterator.html | 154 ++ ...tweak__set_1_1_x_iterator__coll__graph.map | 3 + ...tweak__set_1_1_x_iterator__coll__graph.md5 | 1 + ...tweak__set_1_1_x_iterator__coll__graph.png | Bin 0 -> 4163 bytes sync_off.png | Bin 0 -> 853 bytes sync_on.png | Bin 0 -> 845 bytes tab_a.png | Bin 0 -> 142 bytes tab_b.png | Bin 0 -> 169 bytes tab_h.png | Bin 0 -> 177 bytes tab_s.png | Bin 0 -> 184 bytes tabs.css | 60 + testmon_8cpp_source.html | 474 ++++++ todo.html | 94 ++ tpool_8cpp_source.html | 234 +++ tpool_8h_source.html | 152 ++ uniondbrbuf-members.html | 111 ++ uniondbrbuf.html | 141 ++ utilities_8cpp_source.html | 744 +++++++++ utilities_8h_source.html | 435 +++++ utilitiesx_8cpp_source.html | 101 ++ weakmap_8h_source.html | 317 ++++ weakset_8h_source.html | 324 ++++ 753 files changed, 44262 insertions(+) create mode 100644 .nojekyll create mode 100644 annotated.html create mode 100644 bc_s.png create mode 100644 bdwn.png create mode 100644 chancache_8cpp_source.html create mode 100644 chancache_8h_source.html create mode 100644 channel_8cpp_source.html create mode 100644 channel_8h_source.html create mode 100644 class_as_write_pvt-members.html create mode 100644 class_as_write_pvt.html create mode 100644 classes.html create mode 100644 classweak__set-members.html create mode 100644 classweak__set.html create mode 100644 classweak__value__map-members.html create mode 100644 classweak__value__map.html create mode 100644 classweak__value__map_1_1element__proxy-members.html create mode 100644 classweak__value__map_1_1element__proxy.html create mode 100644 closed.png create mode 100644 conf_8py_source.html create mode 100644 configparse_8cpp_source.html create mode 100644 dbf__copy_8cpp_source.html create mode 100644 demo_8cpp_source.html create mode 100644 dir_138aff360eb965c43b94267b8d1ce09e.html create mode 100644 dir_138aff360eb965c43b94267b8d1ce09e_dep.map create mode 100644 dir_138aff360eb965c43b94267b8d1ce09e_dep.md5 create mode 100644 dir_138aff360eb965c43b94267b8d1ce09e_dep.png create mode 100644 dir_46f976b0973771c28afc7d2dbc59236d.html create mode 100644 dir_46f976b0973771c28afc7d2dbc59236d_dep.map create mode 100644 dir_46f976b0973771c28afc7d2dbc59236d_dep.md5 create mode 100644 dir_46f976b0973771c28afc7d2dbc59236d_dep.png create mode 100644 dir_aa611b0b6017302a0b5c69f5fe6608dd.html create mode 100644 dir_aa611b0b6017302a0b5c69f5fe6608dd_dep.map create mode 100644 dir_aa611b0b6017302a0b5c69f5fe6608dd_dep.md5 create mode 100644 dir_aa611b0b6017302a0b5c69f5fe6608dd_dep.png create mode 100644 dir_bdd9a5d540de89e9fe90efdfc6973a4f.html create mode 100644 dir_bdd9a5d540de89e9fe90efdfc6973a4f_dep.map create mode 100644 dir_bdd9a5d540de89e9fe90efdfc6973a4f_dep.md5 create mode 100644 dir_bdd9a5d540de89e9fe90efdfc6973a4f_dep.png create mode 100644 doxygen.css create mode 100644 doxygen.png create mode 100644 dynsections.js create mode 100644 files.html create mode 100644 ftv2blank.png create mode 100644 ftv2cl.png create mode 100644 ftv2doc.png create mode 100644 ftv2folderclosed.png create mode 100644 ftv2folderopen.png create mode 100644 ftv2lastnode.png create mode 100644 ftv2link.png create mode 100644 ftv2mlastnode.png create mode 100644 ftv2mnode.png create mode 100644 ftv2mo.png create mode 100644 ftv2node.png create mode 100644 ftv2ns.png create mode 100644 ftv2plastnode.png create mode 100644 ftv2pnode.png create mode 100644 ftv2splitbar.png create mode 100644 ftv2vertline.png create mode 100644 functions.html create mode 100644 functions_func.html create mode 100644 functions_vars.html create mode 100644 graph_legend.html create mode 100644 graph_legend.md5 create mode 100644 graph_legend.png create mode 100644 gwmain_8cpp_source.html create mode 100644 helper_8h_source.html create mode 100644 hierarchy.html create mode 100644 imagedemo_8c_source.html create mode 100644 index.html create mode 100644 inherit_graph_0.map create mode 100644 inherit_graph_0.md5 create mode 100644 inherit_graph_0.png create mode 100644 inherit_graph_1.map create mode 100644 inherit_graph_1.md5 create mode 100644 inherit_graph_1.png create mode 100644 inherit_graph_10.map create mode 100644 inherit_graph_10.md5 create mode 100644 inherit_graph_10.png create mode 100644 inherit_graph_11.map create mode 100644 inherit_graph_11.md5 create mode 100644 inherit_graph_11.png create mode 100644 inherit_graph_12.map create mode 100644 inherit_graph_12.md5 create mode 100644 inherit_graph_12.png create mode 100644 inherit_graph_13.map create mode 100644 inherit_graph_13.md5 create mode 100644 inherit_graph_13.png create mode 100644 inherit_graph_14.map create mode 100644 inherit_graph_14.md5 create mode 100644 inherit_graph_14.png create mode 100644 inherit_graph_15.map create mode 100644 inherit_graph_15.md5 create mode 100644 inherit_graph_15.png create mode 100644 inherit_graph_16.map create mode 100644 inherit_graph_16.md5 create mode 100644 inherit_graph_16.png create mode 100644 inherit_graph_17.map create mode 100644 inherit_graph_17.md5 create mode 100644 inherit_graph_17.png create mode 100644 inherit_graph_18.map create mode 100644 inherit_graph_18.md5 create mode 100644 inherit_graph_18.png create mode 100644 inherit_graph_19.map create mode 100644 inherit_graph_19.md5 create mode 100644 inherit_graph_19.png create mode 100644 inherit_graph_2.map create mode 100644 inherit_graph_2.md5 create mode 100644 inherit_graph_2.png create mode 100644 inherit_graph_20.map create mode 100644 inherit_graph_20.md5 create mode 100644 inherit_graph_20.png create mode 100644 inherit_graph_21.map create mode 100644 inherit_graph_21.md5 create mode 100644 inherit_graph_21.png create mode 100644 inherit_graph_22.map create mode 100644 inherit_graph_22.md5 create mode 100644 inherit_graph_22.png create mode 100644 inherit_graph_23.map create mode 100644 inherit_graph_23.md5 create mode 100644 inherit_graph_23.png create mode 100644 inherit_graph_24.map create mode 100644 inherit_graph_24.md5 create mode 100644 inherit_graph_24.png create mode 100644 inherit_graph_25.map create mode 100644 inherit_graph_25.md5 create mode 100644 inherit_graph_25.png create mode 100644 inherit_graph_26.map create mode 100644 inherit_graph_26.md5 create mode 100644 inherit_graph_26.png create mode 100644 inherit_graph_27.map create mode 100644 inherit_graph_27.md5 create mode 100644 inherit_graph_27.png create mode 100644 inherit_graph_28.map create mode 100644 inherit_graph_28.md5 create mode 100644 inherit_graph_28.png create mode 100644 inherit_graph_29.map create mode 100644 inherit_graph_29.md5 create mode 100644 inherit_graph_29.png create mode 100644 inherit_graph_3.map create mode 100644 inherit_graph_3.md5 create mode 100644 inherit_graph_3.png create mode 100644 inherit_graph_30.map create mode 100644 inherit_graph_30.md5 create mode 100644 inherit_graph_30.png create mode 100644 inherit_graph_31.map create mode 100644 inherit_graph_31.md5 create mode 100644 inherit_graph_31.png create mode 100644 inherit_graph_32.map create mode 100644 inherit_graph_32.md5 create mode 100644 inherit_graph_32.png create mode 100644 inherit_graph_33.map create mode 100644 inherit_graph_33.md5 create mode 100644 inherit_graph_33.png create mode 100644 inherit_graph_34.map create mode 100644 inherit_graph_34.md5 create mode 100644 inherit_graph_34.png create mode 100644 inherit_graph_35.map create mode 100644 inherit_graph_35.md5 create mode 100644 inherit_graph_35.png create mode 100644 inherit_graph_36.map create mode 100644 inherit_graph_36.md5 create mode 100644 inherit_graph_36.png create mode 100644 inherit_graph_37.map create mode 100644 inherit_graph_37.md5 create mode 100644 inherit_graph_37.png create mode 100644 inherit_graph_38.map create mode 100644 inherit_graph_38.md5 create mode 100644 inherit_graph_38.png create mode 100644 inherit_graph_39.map create mode 100644 inherit_graph_39.md5 create mode 100644 inherit_graph_39.png create mode 100644 inherit_graph_4.map create mode 100644 inherit_graph_4.md5 create mode 100644 inherit_graph_4.png create mode 100644 inherit_graph_40.map create mode 100644 inherit_graph_40.md5 create mode 100644 inherit_graph_40.png create mode 100644 inherit_graph_41.map create mode 100644 inherit_graph_41.md5 create mode 100644 inherit_graph_41.png create mode 100644 inherit_graph_42.map create mode 100644 inherit_graph_42.md5 create mode 100644 inherit_graph_42.png create mode 100644 inherit_graph_43.map create mode 100644 inherit_graph_43.md5 create mode 100644 inherit_graph_43.png create mode 100644 inherit_graph_44.map create mode 100644 inherit_graph_44.md5 create mode 100644 inherit_graph_44.png create mode 100644 inherit_graph_45.map create mode 100644 inherit_graph_45.md5 create mode 100644 inherit_graph_45.png create mode 100644 inherit_graph_46.map create mode 100644 inherit_graph_46.md5 create mode 100644 inherit_graph_46.png create mode 100644 inherit_graph_47.map create mode 100644 inherit_graph_47.md5 create mode 100644 inherit_graph_47.png create mode 100644 inherit_graph_48.map create mode 100644 inherit_graph_48.md5 create mode 100644 inherit_graph_48.png create mode 100644 inherit_graph_49.map create mode 100644 inherit_graph_49.md5 create mode 100644 inherit_graph_49.png create mode 100644 inherit_graph_5.map create mode 100644 inherit_graph_5.md5 create mode 100644 inherit_graph_5.png create mode 100644 inherit_graph_50.map create mode 100644 inherit_graph_50.md5 create mode 100644 inherit_graph_50.png create mode 100644 inherit_graph_51.map create mode 100644 inherit_graph_51.md5 create mode 100644 inherit_graph_51.png create mode 100644 inherit_graph_52.map create mode 100644 inherit_graph_52.md5 create mode 100644 inherit_graph_52.png create mode 100644 inherit_graph_6.map create mode 100644 inherit_graph_6.md5 create mode 100644 inherit_graph_6.png create mode 100644 inherit_graph_7.map create mode 100644 inherit_graph_7.md5 create mode 100644 inherit_graph_7.png create mode 100644 inherit_graph_8.map create mode 100644 inherit_graph_8.md5 create mode 100644 inherit_graph_8.png create mode 100644 inherit_graph_9.map create mode 100644 inherit_graph_9.md5 create mode 100644 inherit_graph_9.png create mode 100644 inherits.html create mode 100644 jquery.js create mode 100644 mainpage_8h_source.html create mode 100644 moncache_8cpp_source.html create mode 100644 nav_f.png create mode 100644 nav_g.png create mode 100644 nav_h.png create mode 100644 open.png create mode 100644 pages.html create mode 100644 pdb_8cpp_source.html create mode 100644 pdb_8h_source.html create mode 100644 pdbgroup_8cpp_source.html create mode 100644 pdbgroup_8h_source.html create mode 100644 pdbsingle_8cpp_source.html create mode 100644 pdbsingle_8h_source.html create mode 100644 pva2pva_8h_source.html create mode 100644 pvahelper_8h_source.html create mode 100644 pvalink_8cpp_source.html create mode 100644 pvalink_8h_source.html create mode 100644 pvalink__channel_8cpp_source.html create mode 100644 pvalink__jlif_8cpp_source.html create mode 100644 pvalink__link_8cpp_source.html create mode 100644 pvalink__lset_8cpp_source.html create mode 100644 pvalink__null_8cpp_source.html create mode 100644 pvif_8cpp_source.html create mode 100644 pvif_8h_source.html create mode 100644 qsrv_8cpp_source.html create mode 100644 qsrv_page.html create mode 100644 qsrvpage_8h_source.html create mode 100644 release_notes.html create mode 100644 sb_8h_source.html create mode 100644 search/all_61.html create mode 100644 search/all_61.js create mode 100644 search/all_62.html create mode 100644 search/all_62.js create mode 100644 search/all_63.html create mode 100644 search/all_63.js create mode 100644 search/all_64.html create mode 100644 search/all_64.js create mode 100644 search/all_65.html create mode 100644 search/all_65.js create mode 100644 search/all_66.html create mode 100644 search/all_66.js create mode 100644 search/all_67.html create mode 100644 search/all_67.js create mode 100644 search/all_69.html create mode 100644 search/all_69.js create mode 100644 search/all_6a.html create mode 100644 search/all_6a.js create mode 100644 search/all_6c.html create mode 100644 search/all_6c.js create mode 100644 search/all_6d.html create mode 100644 search/all_6d.js create mode 100644 search/all_6e.html create mode 100644 search/all_6e.js create mode 100644 search/all_6f.html create mode 100644 search/all_6f.js create mode 100644 search/all_70.html create mode 100644 search/all_70.js create mode 100644 search/all_71.html create mode 100644 search/all_71.js create mode 100644 search/all_72.html create mode 100644 search/all_72.js create mode 100644 search/all_73.html create mode 100644 search/all_73.js create mode 100644 search/all_74.html create mode 100644 search/all_74.js create mode 100644 search/all_76.html create mode 100644 search/all_76.js create mode 100644 search/all_77.html create mode 100644 search/all_77.js create mode 100644 search/all_78.html create mode 100644 search/all_78.js create mode 100644 search/classes_61.html create mode 100644 search/classes_61.js create mode 100644 search/classes_62.html create mode 100644 search/classes_62.js create mode 100644 search/classes_63.html create mode 100644 search/classes_63.js create mode 100644 search/classes_64.html create mode 100644 search/classes_64.js create mode 100644 search/classes_65.html create mode 100644 search/classes_65.js create mode 100644 search/classes_66.html create mode 100644 search/classes_66.js create mode 100644 search/classes_67.html create mode 100644 search/classes_67.js create mode 100644 search/classes_69.html create mode 100644 search/classes_69.js create mode 100644 search/classes_6a.html create mode 100644 search/classes_6a.js create mode 100644 search/classes_6c.html create mode 100644 search/classes_6c.js create mode 100644 search/classes_6d.html create mode 100644 search/classes_6d.js create mode 100644 search/classes_6e.html create mode 100644 search/classes_6e.js create mode 100644 search/classes_70.html create mode 100644 search/classes_70.js create mode 100644 search/classes_73.html create mode 100644 search/classes_73.js create mode 100644 search/classes_74.html create mode 100644 search/classes_74.js create mode 100644 search/classes_76.html create mode 100644 search/classes_76.js create mode 100644 search/classes_77.html create mode 100644 search/classes_77.js create mode 100644 search/classes_78.html create mode 100644 search/classes_78.js create mode 100644 search/close.png create mode 100644 search/functions_63.html create mode 100644 search/functions_63.js create mode 100644 search/functions_64.html create mode 100644 search/functions_64.js create mode 100644 search/functions_65.html create mode 100644 search/functions_65.js create mode 100644 search/functions_66.html create mode 100644 search/functions_66.js create mode 100644 search/functions_67.html create mode 100644 search/functions_67.js create mode 100644 search/functions_69.html create mode 100644 search/functions_69.js create mode 100644 search/functions_6c.html create mode 100644 search/functions_6c.js create mode 100644 search/functions_6d.html create mode 100644 search/functions_6d.js create mode 100644 search/functions_6e.html create mode 100644 search/functions_6e.js create mode 100644 search/functions_6f.html create mode 100644 search/functions_6f.js create mode 100644 search/functions_70.html create mode 100644 search/functions_70.js create mode 100644 search/functions_72.html create mode 100644 search/functions_72.js create mode 100644 search/functions_73.html create mode 100644 search/functions_73.js create mode 100644 search/functions_77.html create mode 100644 search/functions_77.js create mode 100644 search/mag_sel.png create mode 100644 search/nomatches.html create mode 100644 search/pages_70.html create mode 100644 search/pages_70.js create mode 100644 search/pages_71.html create mode 100644 search/pages_71.js create mode 100644 search/pages_72.html create mode 100644 search/pages_72.js create mode 100644 search/pages_74.html create mode 100644 search/pages_74.js create mode 100644 search/search.css create mode 100644 search/search.js create mode 100644 search/search_l.png create mode 100644 search/search_m.png create mode 100644 search/search_r.png create mode 100644 search/variables_63.html create mode 100644 search/variables_63.js create mode 100644 search/variables_66.html create mode 100644 search/variables_66.js create mode 100644 search/variables_6c.html create mode 100644 search/variables_6c.js create mode 100644 server_8cpp_source.html create mode 100644 server_8h_source.html create mode 100644 soft_main_8cpp_source.html create mode 100644 struct_a_s_c_l_i_e_n_t-members.html create mode 100644 struct_a_s_c_l_i_e_n_t.html create mode 100644 struct_a_s_cred-members.html create mode 100644 struct_a_s_cred.html create mode 100644 struct_base_channel-members.html create mode 100644 struct_base_channel.html create mode 100644 struct_base_channel__coll__graph.map create mode 100644 struct_base_channel__coll__graph.md5 create mode 100644 struct_base_channel__coll__graph.png create mode 100644 struct_base_channel__inherit__graph.map create mode 100644 struct_base_channel__inherit__graph.md5 create mode 100644 struct_base_channel__inherit__graph.png create mode 100644 struct_base_channel_provider_factory-members.html create mode 100644 struct_base_channel_provider_factory.html create mode 100644 struct_base_channel_provider_factory__coll__graph.map create mode 100644 struct_base_channel_provider_factory__coll__graph.md5 create mode 100644 struct_base_channel_provider_factory__coll__graph.png create mode 100644 struct_base_channel_provider_factory__inherit__graph.map create mode 100644 struct_base_channel_provider_factory__inherit__graph.md5 create mode 100644 struct_base_channel_provider_factory__inherit__graph.png create mode 100644 struct_base_monitor-members.html create mode 100644 struct_base_monitor.html create mode 100644 struct_base_monitor_1_1no__overflow.html create mode 100644 struct_base_monitor__coll__graph.map create mode 100644 struct_base_monitor__coll__graph.md5 create mode 100644 struct_base_monitor__coll__graph.png create mode 100644 struct_base_monitor__inherit__graph.map create mode 100644 struct_base_monitor__inherit__graph.md5 create mode 100644 struct_base_monitor__inherit__graph.png create mode 100644 struct_channel_cache-members.html create mode 100644 struct_channel_cache.html create mode 100644 struct_channel_cache_1_1cache_clean-members.html create mode 100644 struct_channel_cache_1_1cache_clean.html create mode 100644 struct_channel_cache_1_1cache_clean__coll__graph.map create mode 100644 struct_channel_cache_1_1cache_clean__coll__graph.md5 create mode 100644 struct_channel_cache_1_1cache_clean__coll__graph.png create mode 100644 struct_channel_cache_1_1cache_clean__inherit__graph.map create mode 100644 struct_channel_cache_1_1cache_clean__inherit__graph.md5 create mode 100644 struct_channel_cache_1_1cache_clean__inherit__graph.png create mode 100644 struct_channel_cache__coll__graph.map create mode 100644 struct_channel_cache__coll__graph.md5 create mode 100644 struct_channel_cache__coll__graph.png create mode 100644 struct_channel_cache_entry-members.html create mode 100644 struct_channel_cache_entry.html create mode 100644 struct_channel_cache_entry_1_1_c_requester-members.html create mode 100644 struct_channel_cache_entry_1_1_c_requester.html create mode 100644 struct_channel_cache_entry_1_1_c_requester__coll__graph.map create mode 100644 struct_channel_cache_entry_1_1_c_requester__coll__graph.md5 create mode 100644 struct_channel_cache_entry_1_1_c_requester__coll__graph.png create mode 100644 struct_channel_cache_entry_1_1_c_requester__inherit__graph.map create mode 100644 struct_channel_cache_entry_1_1_c_requester__inherit__graph.md5 create mode 100644 struct_channel_cache_entry_1_1_c_requester__inherit__graph.png create mode 100644 struct_channel_cache_entry__coll__graph.map create mode 100644 struct_channel_cache_entry__coll__graph.md5 create mode 100644 struct_channel_cache_entry__coll__graph.png create mode 100644 struct_d_b_c_h-members.html create mode 100644 struct_d_b_c_h.html create mode 100644 struct_d_b_event-members.html create mode 100644 struct_d_b_event.html create mode 100644 struct_d_b_scan_locker-members.html create mode 100644 struct_d_b_scan_locker.html create mode 100644 struct_field_name-members.html create mode 100644 struct_field_name.html create mode 100644 struct_field_name_1_1_component-members.html create mode 100644 struct_field_name_1_1_component.html create mode 100644 struct_g_w_channel-members.html create mode 100644 struct_g_w_channel.html create mode 100644 struct_g_w_channel__coll__graph.map create mode 100644 struct_g_w_channel__coll__graph.md5 create mode 100644 struct_g_w_channel__coll__graph.png create mode 100644 struct_g_w_channel__inherit__graph.map create mode 100644 struct_g_w_channel__inherit__graph.md5 create mode 100644 struct_g_w_channel__inherit__graph.png create mode 100644 struct_g_w_server_channel_provider-members.html create mode 100644 struct_g_w_server_channel_provider.html create mode 100644 struct_g_w_server_channel_provider__coll__graph.map create mode 100644 struct_g_w_server_channel_provider__coll__graph.md5 create mode 100644 struct_g_w_server_channel_provider__coll__graph.png create mode 100644 struct_g_w_server_channel_provider__inherit__graph.map create mode 100644 struct_g_w_server_channel_provider__inherit__graph.md5 create mode 100644 struct_g_w_server_channel_provider__inherit__graph.png create mode 100644 struct_group_config-members.html create mode 100644 struct_group_config.html create mode 100644 struct_group_config_1_1_field-members.html create mode 100644 struct_group_config_1_1_field.html create mode 100644 struct_group_config_1_1_group-members.html create mode 100644 struct_group_config_1_1_group.html create mode 100644 struct_local_f_l-members.html create mode 100644 struct_local_f_l.html create mode 100644 struct_monitor_cache_entry-members.html create mode 100644 struct_monitor_cache_entry.html create mode 100644 struct_monitor_cache_entry__coll__graph.map create mode 100644 struct_monitor_cache_entry__coll__graph.md5 create mode 100644 struct_monitor_cache_entry__coll__graph.png create mode 100644 struct_monitor_cache_entry__inherit__graph.map create mode 100644 struct_monitor_cache_entry__inherit__graph.md5 create mode 100644 struct_monitor_cache_entry__inherit__graph.png create mode 100644 struct_monitor_user-members.html create mode 100644 struct_monitor_user.html create mode 100644 struct_monitor_user__coll__graph.map create mode 100644 struct_monitor_user__coll__graph.md5 create mode 100644 struct_monitor_user__coll__graph.png create mode 100644 struct_monitor_user__inherit__graph.map create mode 100644 struct_monitor_user__inherit__graph.md5 create mode 100644 struct_monitor_user__inherit__graph.png create mode 100644 struct_p_d_b_group_channel-members.html create mode 100644 struct_p_d_b_group_channel.html create mode 100644 struct_p_d_b_group_channel__coll__graph.map create mode 100644 struct_p_d_b_group_channel__coll__graph.md5 create mode 100644 struct_p_d_b_group_channel__coll__graph.png create mode 100644 struct_p_d_b_group_channel__inherit__graph.map create mode 100644 struct_p_d_b_group_channel__inherit__graph.md5 create mode 100644 struct_p_d_b_group_channel__inherit__graph.png create mode 100644 struct_p_d_b_group_monitor-members.html create mode 100644 struct_p_d_b_group_monitor.html create mode 100644 struct_p_d_b_group_monitor__coll__graph.map create mode 100644 struct_p_d_b_group_monitor__coll__graph.md5 create mode 100644 struct_p_d_b_group_monitor__coll__graph.png create mode 100644 struct_p_d_b_group_monitor__inherit__graph.map create mode 100644 struct_p_d_b_group_monitor__inherit__graph.md5 create mode 100644 struct_p_d_b_group_monitor__inherit__graph.png create mode 100644 struct_p_d_b_group_p_v-members.html create mode 100644 struct_p_d_b_group_p_v.html create mode 100644 struct_p_d_b_group_p_v_1_1_info-members.html create mode 100644 struct_p_d_b_group_p_v_1_1_info.html create mode 100644 struct_p_d_b_group_p_v_1_1_info__coll__graph.map create mode 100644 struct_p_d_b_group_p_v_1_1_info__coll__graph.md5 create mode 100644 struct_p_d_b_group_p_v_1_1_info__coll__graph.png create mode 100644 struct_p_d_b_group_p_v__coll__graph.map create mode 100644 struct_p_d_b_group_p_v__coll__graph.md5 create mode 100644 struct_p_d_b_group_p_v__coll__graph.png create mode 100644 struct_p_d_b_group_p_v__inherit__graph.map create mode 100644 struct_p_d_b_group_p_v__inherit__graph.md5 create mode 100644 struct_p_d_b_group_p_v__inherit__graph.png create mode 100644 struct_p_d_b_group_put-members.html create mode 100644 struct_p_d_b_group_put.html create mode 100644 struct_p_d_b_group_put__coll__graph.map create mode 100644 struct_p_d_b_group_put__coll__graph.md5 create mode 100644 struct_p_d_b_group_put__coll__graph.png create mode 100644 struct_p_d_b_group_put__inherit__graph.map create mode 100644 struct_p_d_b_group_put__inherit__graph.md5 create mode 100644 struct_p_d_b_group_put__inherit__graph.png create mode 100644 struct_p_d_b_p_v-members.html create mode 100644 struct_p_d_b_p_v.html create mode 100644 struct_p_d_b_p_v__inherit__graph.map create mode 100644 struct_p_d_b_p_v__inherit__graph.md5 create mode 100644 struct_p_d_b_p_v__inherit__graph.png create mode 100644 struct_p_d_b_provider-members.html create mode 100644 struct_p_d_b_provider.html create mode 100644 struct_p_d_b_provider__coll__graph.map create mode 100644 struct_p_d_b_provider__coll__graph.md5 create mode 100644 struct_p_d_b_provider__coll__graph.png create mode 100644 struct_p_d_b_provider__inherit__graph.map create mode 100644 struct_p_d_b_provider__inherit__graph.md5 create mode 100644 struct_p_d_b_provider__inherit__graph.png create mode 100644 struct_p_d_b_single_channel-members.html create mode 100644 struct_p_d_b_single_channel.html create mode 100644 struct_p_d_b_single_channel__coll__graph.map create mode 100644 struct_p_d_b_single_channel__coll__graph.md5 create mode 100644 struct_p_d_b_single_channel__coll__graph.png create mode 100644 struct_p_d_b_single_channel__inherit__graph.map create mode 100644 struct_p_d_b_single_channel__inherit__graph.md5 create mode 100644 struct_p_d_b_single_channel__inherit__graph.png create mode 100644 struct_p_d_b_single_monitor-members.html create mode 100644 struct_p_d_b_single_monitor.html create mode 100644 struct_p_d_b_single_monitor__coll__graph.map create mode 100644 struct_p_d_b_single_monitor__coll__graph.md5 create mode 100644 struct_p_d_b_single_monitor__coll__graph.png create mode 100644 struct_p_d_b_single_monitor__inherit__graph.map create mode 100644 struct_p_d_b_single_monitor__inherit__graph.md5 create mode 100644 struct_p_d_b_single_monitor__inherit__graph.png create mode 100644 struct_p_d_b_single_p_v-members.html create mode 100644 struct_p_d_b_single_p_v.html create mode 100644 struct_p_d_b_single_p_v__coll__graph.map create mode 100644 struct_p_d_b_single_p_v__coll__graph.md5 create mode 100644 struct_p_d_b_single_p_v__coll__graph.png create mode 100644 struct_p_d_b_single_p_v__inherit__graph.map create mode 100644 struct_p_d_b_single_p_v__inherit__graph.md5 create mode 100644 struct_p_d_b_single_p_v__inherit__graph.png create mode 100644 struct_p_d_b_single_put-members.html create mode 100644 struct_p_d_b_single_put.html create mode 100644 struct_p_d_b_single_put__coll__graph.map create mode 100644 struct_p_d_b_single_put__coll__graph.md5 create mode 100644 struct_p_d_b_single_put__coll__graph.png create mode 100644 struct_p_d_b_single_put__inherit__graph.map create mode 100644 struct_p_d_b_single_put__inherit__graph.md5 create mode 100644 struct_p_d_b_single_put__inherit__graph.png create mode 100644 struct_p_v_i_f-members.html create mode 100644 struct_p_v_i_f.html create mode 100644 struct_p_v_i_f_builder-members.html create mode 100644 struct_p_v_i_f_builder.html create mode 100644 struct_p_v_i_f_builder__inherit__graph.map create mode 100644 struct_p_v_i_f_builder__inherit__graph.md5 create mode 100644 struct_p_v_i_f_builder__inherit__graph.png create mode 100644 struct_s_b-members.html create mode 100644 struct_s_b.html create mode 100644 struct_scalar_accessor-members.html create mode 100644 struct_scalar_accessor.html create mode 100644 struct_scalar_builder-members.html create mode 100644 struct_scalar_builder.html create mode 100644 struct_scalar_builder__coll__graph.map create mode 100644 struct_scalar_builder__coll__graph.md5 create mode 100644 struct_scalar_builder__coll__graph.png create mode 100644 struct_scalar_builder__inherit__graph.map create mode 100644 struct_scalar_builder__inherit__graph.md5 create mode 100644 struct_scalar_builder__inherit__graph.png create mode 100644 struct_server_config-members.html create mode 100644 struct_server_config.html create mode 100644 struct_test_channel_field_requester-members.html create mode 100644 struct_test_channel_field_requester.html create mode 100644 struct_test_channel_field_requester__coll__graph.map create mode 100644 struct_test_channel_field_requester__coll__graph.md5 create mode 100644 struct_test_channel_field_requester__coll__graph.png create mode 100644 struct_test_channel_field_requester__inherit__graph.map create mode 100644 struct_test_channel_field_requester__inherit__graph.md5 create mode 100644 struct_test_channel_field_requester__inherit__graph.png create mode 100644 struct_test_channel_get_requester-members.html create mode 100644 struct_test_channel_get_requester.html create mode 100644 struct_test_channel_get_requester__coll__graph.map create mode 100644 struct_test_channel_get_requester__coll__graph.md5 create mode 100644 struct_test_channel_get_requester__coll__graph.png create mode 100644 struct_test_channel_get_requester__inherit__graph.map create mode 100644 struct_test_channel_get_requester__inherit__graph.md5 create mode 100644 struct_test_channel_get_requester__inherit__graph.png create mode 100644 struct_test_channel_monitor_requester-members.html create mode 100644 struct_test_channel_monitor_requester.html create mode 100644 struct_test_channel_monitor_requester__coll__graph.map create mode 100644 struct_test_channel_monitor_requester__coll__graph.md5 create mode 100644 struct_test_channel_monitor_requester__coll__graph.png create mode 100644 struct_test_channel_monitor_requester__inherit__graph.map create mode 100644 struct_test_channel_monitor_requester__inherit__graph.md5 create mode 100644 struct_test_channel_monitor_requester__inherit__graph.png create mode 100644 struct_test_channel_put_requester-members.html create mode 100644 struct_test_channel_put_requester.html create mode 100644 struct_test_channel_put_requester__coll__graph.map create mode 100644 struct_test_channel_put_requester__coll__graph.md5 create mode 100644 struct_test_channel_put_requester__coll__graph.png create mode 100644 struct_test_channel_put_requester__inherit__graph.map create mode 100644 struct_test_channel_put_requester__inherit__graph.md5 create mode 100644 struct_test_channel_put_requester__inherit__graph.png create mode 100644 struct_test_channel_requester-members.html create mode 100644 struct_test_channel_requester.html create mode 100644 struct_test_channel_requester__coll__graph.map create mode 100644 struct_test_channel_requester__coll__graph.md5 create mode 100644 struct_test_channel_requester__coll__graph.png create mode 100644 struct_test_channel_requester__inherit__graph.map create mode 100644 struct_test_channel_requester__inherit__graph.md5 create mode 100644 struct_test_channel_requester__inherit__graph.png create mode 100644 struct_test_i_o_c-members.html create mode 100644 struct_test_i_o_c.html create mode 100644 struct_test_p_v-members.html create mode 100644 struct_test_p_v.html create mode 100644 struct_test_p_v__coll__graph.map create mode 100644 struct_test_p_v__coll__graph.md5 create mode 100644 struct_test_p_v__coll__graph.png create mode 100644 struct_test_p_v_channel-members.html create mode 100644 struct_test_p_v_channel.html create mode 100644 struct_test_p_v_channel__coll__graph.map create mode 100644 struct_test_p_v_channel__coll__graph.md5 create mode 100644 struct_test_p_v_channel__coll__graph.png create mode 100644 struct_test_p_v_channel__inherit__graph.map create mode 100644 struct_test_p_v_channel__inherit__graph.md5 create mode 100644 struct_test_p_v_channel__inherit__graph.png create mode 100644 struct_test_p_v_monitor-members.html create mode 100644 struct_test_p_v_monitor.html create mode 100644 struct_test_p_v_monitor__coll__graph.map create mode 100644 struct_test_p_v_monitor__coll__graph.md5 create mode 100644 struct_test_p_v_monitor__coll__graph.png create mode 100644 struct_test_p_v_monitor__inherit__graph.map create mode 100644 struct_test_p_v_monitor__inherit__graph.md5 create mode 100644 struct_test_p_v_monitor__inherit__graph.png create mode 100644 struct_test_provider-members.html create mode 100644 struct_test_provider.html create mode 100644 struct_test_provider__coll__graph.map create mode 100644 struct_test_provider__coll__graph.md5 create mode 100644 struct_test_provider__coll__graph.png create mode 100644 struct_test_provider__inherit__graph.map create mode 100644 struct_test_provider__inherit__graph.md5 create mode 100644 struct_test_provider__inherit__graph.png create mode 100644 struct_work_queue-members.html create mode 100644 struct_work_queue.html create mode 100644 struct_work_queue__coll__graph.map create mode 100644 struct_work_queue__coll__graph.md5 create mode 100644 struct_work_queue__coll__graph.png create mode 100644 struct_work_queue__inherit__graph.map create mode 100644 struct_work_queue__inherit__graph.md5 create mode 100644 struct_work_queue__inherit__graph.png create mode 100644 structjlif.html create mode 100644 structpdb_info_iterator-members.html create mode 100644 structpdb_info_iterator.html create mode 100644 structpdb_record_info-members.html create mode 100644 structpdb_record_info.html create mode 100644 structpdb_record_iterator-members.html create mode 100644 structpdb_record_iterator.html create mode 100644 structpvalink_1_1pva_global__t-members.html create mode 100644 structpvalink_1_1pva_global__t.html create mode 100644 structpvalink_1_1pva_global__t_1_1_scan-members.html create mode 100644 structpvalink_1_1pva_global__t_1_1_scan.html create mode 100644 structpvalink_1_1pva_global__t__coll__graph.map create mode 100644 structpvalink_1_1pva_global__t__coll__graph.md5 create mode 100644 structpvalink_1_1pva_global__t__coll__graph.png create mode 100644 structpvalink_1_1pva_link-members.html create mode 100644 structpvalink_1_1pva_link.html create mode 100644 structpvalink_1_1pva_link_1_1_value-members.html create mode 100644 structpvalink_1_1pva_link_1_1_value.html create mode 100644 structpvalink_1_1pva_link_1_1_value__coll__graph.map create mode 100644 structpvalink_1_1pva_link_1_1_value__coll__graph.md5 create mode 100644 structpvalink_1_1pva_link_1_1_value__coll__graph.png create mode 100644 structpvalink_1_1pva_link__coll__graph.map create mode 100644 structpvalink_1_1pva_link__coll__graph.md5 create mode 100644 structpvalink_1_1pva_link__coll__graph.png create mode 100644 structpvalink_1_1pva_link__inherit__graph.map create mode 100644 structpvalink_1_1pva_link__inherit__graph.md5 create mode 100644 structpvalink_1_1pva_link__inherit__graph.png create mode 100644 structpvalink_1_1pva_link_channel-members.html create mode 100644 structpvalink_1_1pva_link_channel.html create mode 100644 structpvalink_1_1pva_link_channel_1_1_after_put-members.html create mode 100644 structpvalink_1_1pva_link_channel_1_1_after_put.html create mode 100644 structpvalink_1_1pva_link_channel_1_1_after_put__coll__graph.map create mode 100644 structpvalink_1_1pva_link_channel_1_1_after_put__coll__graph.md5 create mode 100644 structpvalink_1_1pva_link_channel_1_1_after_put__coll__graph.png create mode 100644 structpvalink_1_1pva_link_channel_1_1_after_put__inherit__graph.map create mode 100644 structpvalink_1_1pva_link_channel_1_1_after_put__inherit__graph.md5 create mode 100644 structpvalink_1_1pva_link_channel_1_1_after_put__inherit__graph.png create mode 100644 structpvalink_1_1pva_link_channel_1_1_link_sort-members.html create mode 100644 structpvalink_1_1pva_link_channel_1_1_link_sort.html create mode 100644 structpvalink_1_1pva_link_channel__coll__graph.map create mode 100644 structpvalink_1_1pva_link_channel__coll__graph.md5 create mode 100644 structpvalink_1_1pva_link_channel__coll__graph.png create mode 100644 structpvalink_1_1pva_link_channel__inherit__graph.map create mode 100644 structpvalink_1_1pva_link_channel__inherit__graph.md5 create mode 100644 structpvalink_1_1pva_link_channel__inherit__graph.png create mode 100644 structpvalink_1_1pva_link_config-members.html create mode 100644 structpvalink_1_1pva_link_config.html create mode 100644 structpvalink_1_1pva_link_config__coll__graph.map create mode 100644 structpvalink_1_1pva_link_config__coll__graph.md5 create mode 100644 structpvalink_1_1pva_link_config__coll__graph.png create mode 100644 structpvalink_1_1pva_link_config__inherit__graph.map create mode 100644 structpvalink_1_1pva_link_config__inherit__graph.md5 create mode 100644 structpvalink_1_1pva_link_config__inherit__graph.png create mode 100644 structweak__set_1_1_x_iterator-members.html create mode 100644 structweak__set_1_1_x_iterator.html create mode 100644 structweak__set_1_1_x_iterator__coll__graph.map create mode 100644 structweak__set_1_1_x_iterator__coll__graph.md5 create mode 100644 structweak__set_1_1_x_iterator__coll__graph.png create mode 100644 sync_off.png create mode 100644 sync_on.png create mode 100644 tab_a.png create mode 100644 tab_b.png create mode 100644 tab_h.png create mode 100644 tab_s.png create mode 100644 tabs.css create mode 100644 testmon_8cpp_source.html create mode 100644 todo.html create mode 100644 tpool_8cpp_source.html create mode 100644 tpool_8h_source.html create mode 100644 uniondbrbuf-members.html create mode 100644 uniondbrbuf.html create mode 100644 utilities_8cpp_source.html create mode 100644 utilities_8h_source.html create mode 100644 utilitiesx_8cpp_source.html create mode 100644 weakmap_8h_source.html create mode 100644 weakset_8h_source.html diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 0000000..e69de29 diff --git a/annotated.html b/annotated.html new file mode 100644 index 0000000..826422f --- /dev/null +++ b/annotated.html @@ -0,0 +1,170 @@ + + + + + + +pva2pva: Class List + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + +
+ +
+ All Classes Functions Variables Pages
+ + +
+ +
+ +
+
+
Class List
+
+
+
Here are the classes, structs, unions and interfaces with brief descriptions:
+
+ + + + diff --git a/bc_s.png b/bc_s.png new file mode 100644 index 0000000000000000000000000000000000000000..224b29aa9847d5a4b3902efd602b7ddf7d33e6c2 GIT binary patch literal 676 zcmV;V0$crwP)y__>=_9%My z{n931IS})GlGUF8K#6VIbs%684A^L3@%PlP2>_sk`UWPq@f;rU*V%rPy_ekbhXT&s z(GN{DxFv}*vZp`F>S!r||M`I*nOwwKX+BC~3P5N3-)Y{65c;ywYiAh-1*hZcToLHK ztpl1xomJ+Yb}K(cfbJr2=GNOnT!UFA7Vy~fBz8?J>XHsbZoDad^8PxfSa0GDgENZS zuLCEqzb*xWX2CG*b&5IiO#NzrW*;`VC9455M`o1NBh+(k8~`XCEEoC1Ybwf;vr4K3 zg|EB<07?SOqHp9DhLpS&bzgo70I+ghB_#)K7H%AMU3v}xuyQq9&Bm~++VYhF09a+U zl7>n7Jjm$K#b*FONz~fj;I->Bf;ule1prFN9FovcDGBkpg>)O*-}eLnC{6oZHZ$o% zXKW$;0_{8hxHQ>l;_*HATI(`7t#^{$(zLe}h*mqwOc*nRY9=?Sx4OOeVIfI|0V(V2 zBrW#G7Ss9wvzr@>H*`r>zE z+e8bOBgqIgldUJlG(YUDviMB`9+DH8n-s9SXRLyJHO1!=wY^79WYZMTa(wiZ!zP66 zA~!21vmF3H2{ngD;+`6j#~6j;$*f*G_2ZD1E;9(yaw7d-QnSCpK(cR1zU3qU0000< KMNUMnLSTYoA~SLT literal 0 HcmV?d00001 diff --git a/bdwn.png b/bdwn.png new file mode 100644 index 0000000000000000000000000000000000000000..940a0b950443a0bb1b216ac03c45b8a16c955452 GIT binary patch literal 147 zcmeAS@N?(olHy`uVBq!ia0vp^>_E)H!3HEvS)PKZC{Gv1kP61Pb5HX&C2wk~_T + + + + + +pva2pva: p2pApp/chancache.cpp Source File + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
chancache.cpp
+
+
+
1 #include <stdio.h>
+
2 
+
3 #include <epicsAtomic.h>
+
4 #include <errlog.h>
+
5 
+
6 #include <epicsMutex.h>
+
7 #include <epicsTimer.h>
+
8 
+
9 #include <pv/epicsException.h>
+
10 #include <pv/serverContext.h>
+
11 #include <pv/pvAccess.h>
+
12 
+
13 #define epicsExportSharedSymbols
+
14 #include "pva2pva.h"
+
15 #include "helper.h"
+
16 #include "chancache.h"
+
17 #include "channel.h"
+
18 
+
19 namespace pvd = epics::pvData;
+
20 namespace pva = epics::pvAccess;
+
21 
+
22 size_t ChannelCacheEntry::num_instances;
+
23 
+
24 ChannelCacheEntry::ChannelCacheEntry(ChannelCache* c, const std::string& n)
+
25  :channelName(n), cache(c), dropPoke(true)
+
26 {
+
27  epicsAtomicIncrSizeT(&num_instances);
+
28 }
+
29 
+
30 ChannelCacheEntry::~ChannelCacheEntry()
+
31 {
+
32  // Should *not* be holding cache->cacheLock
+
33  if(channel.get())
+
34  channel->destroy(); // calls channelStateChange() w/ DESTROY
+
35  epicsAtomicDecrSizeT(&num_instances);
+
36 }
+
37 
+
38 std::string
+
39 ChannelCacheEntry::CRequester::getRequesterName()
+
40 {
+
41  return "GWClient";
+
42 }
+
43 
+
44 size_t ChannelCacheEntry::CRequester::num_instances;
+
45 
+
46 ChannelCacheEntry::CRequester::CRequester(const ChannelCacheEntry::shared_pointer& p)
+
47  :chan(p)
+
48 {
+
49  epicsAtomicIncrSizeT(&num_instances);
+
50 }
+
51 
+
52 ChannelCacheEntry::CRequester::~CRequester()
+
53 {
+
54  epicsAtomicDecrSizeT(&num_instances);
+
55 }
+
56 
+
57 // for ChannelRequester
+
58 void
+
59 ChannelCacheEntry::CRequester::channelCreated(const pvd::Status& status,
+
60  pva::Channel::shared_pointer const & channel)
+
61 {}
+
62 
+
63 void
+
64 ChannelCacheEntry::CRequester::channelStateChange(pva::Channel::shared_pointer const & channel,
+
65  pva::Channel::ConnectionState connectionState)
+
66 {
+
67  ChannelCacheEntry::shared_pointer chan(this->chan.lock());
+
68  if(!chan)
+
69  return;
+
70 
+
71  {
+
72  Guard G(chan->cache->cacheLock);
+
73 
+
74  assert(chan->channel.get()==channel.get());
+
75 
+
76  switch(connectionState)
+
77  {
+
78  case pva::Channel::DISCONNECTED:
+
79  case pva::Channel::DESTROYED:
+
80  // Drop from cache
+
81  chan->cache->entries.erase(chan->channelName);
+
82  // keep 'chan' as a reference so that actual destruction doesn't happen which cacheLock is held
+
83  break;
+
84  default:
+
85  break;
+
86  }
+
87  }
+
88 
+
89  // fanout notification
+
90  ChannelCacheEntry::interested_t::vector_type interested(chan->interested.lock_vector()); // Copy
+
91 
+
92  FOREACH(ChannelCacheEntry::interested_t::vector_type::const_iterator, it, end, interested)
+
93  {
+
94  GWChannel *chan = it->get();
+
95  pva::ChannelRequester::shared_pointer req(chan->requester.lock());
+
96  if(req)
+
97  req->channelStateChange(*it, connectionState);
+
98  }
+
99 }
+
100 
+
101 
+
102 struct ChannelCache::cacheClean : public epicsTimerNotify
+
103 {
+
104  ChannelCache *cache;
+
105  cacheClean(ChannelCache *c) : cache(c) {}
+
106  epicsTimerNotify::expireStatus expire(const epicsTime &currentTime)
+
107  {
+
108  // keep a reference to any cache entrys being removed so they
+
109  // aren't destroyed while cacheLock is held
+
110  std::set<ChannelCacheEntry::shared_pointer> cleaned;
+
111 
+
112  {
+
113  Guard G(cache->cacheLock);
+
114  cache->cleanerRuns++;
+
115 
+
116  ChannelCache::entries_t::iterator cur=cache->entries.begin(), next, end=cache->entries.end();
+
117  while(cur!=end) {
+
118  next = cur;
+
119  ++next;
+
120 
+
121  if(!cur->second->dropPoke && cur->second->interested.empty()) {
+
122  cleaned.insert(cur->second);
+
123  cache->entries.erase(cur);
+
124  cache->cleanerDust++;
+
125  } else {
+
126  cur->second->dropPoke = false;
+
127  }
+
128 
+
129  cur = next;
+
130  }
+
131  }
+
132  return epicsTimerNotify::expireStatus(epicsTimerNotify::restart, 30.0);
+
133  }
+
134 };
+
135 
+
136 ChannelCache::ChannelCache(const pva::ChannelProvider::shared_pointer& prov)
+
137  :provider(prov)
+
138  ,timerQueue(&epicsTimerQueueActive::allocate(1, epicsThreadPriorityCAServerLow-2))
+
139  ,cleaner(new cacheClean(this))
+
140  ,cleanerRuns(0)
+
141  ,cleanerDust(0)
+
142 {
+
143  if(!provider)
+
144  throw std::logic_error("Missing 'pva' provider");
+
145  assert(timerQueue);
+
146  cleanTimer = &timerQueue->createTimer();
+
147  cleanTimer->start(*cleaner, 30.0);
+
148 }
+
149 
+
150 ChannelCache::~ChannelCache()
+
151 {
+
152  entries_t E;
+
153  {
+
154  Guard G(cacheLock);
+
155 
+
156  cleanTimer->destroy();
+
157  timerQueue->release();
+
158  delete cleaner;
+
159 
+
160  entries_t E;
+
161  E.swap(entries);
+
162  }
+
163 }
+
164 
+
165 ChannelCacheEntry::shared_pointer
+
166 ChannelCache::lookup(const std::string& newName)
+
167 {
+
168  ChannelCacheEntry::shared_pointer ret;
+
169 
+
170  Guard G(cacheLock);
+
171 
+
172  entries_t::const_iterator it = entries.find(newName);
+
173 
+
174  if(it==entries.end()) {
+
175  // first request, create ChannelCacheEntry
+
176  //TODO: async lookup
+
177 
+
178  ChannelCacheEntry::shared_pointer ent(new ChannelCacheEntry(this, newName));
+
179  ent->requester.reset(new ChannelCacheEntry::CRequester(ent));
+
180 
+
181  entries[newName] = ent;
+
182 
+
183  pva::Channel::shared_pointer M;
+
184  {
+
185  // unlock to call createChannel()
+
186  epicsGuardRelease<epicsMutex> U(G);
+
187 
+
188  M = provider->createChannel(newName, ent->requester);
+
189  if(!M)
+
190  THROW_EXCEPTION2(std::runtime_error, "Failed to createChannel");
+
191  }
+
192  ent->channel = M;
+
193 
+
194  if(M->isConnected())
+
195  ret = ent; // immediate connect, mostly for unit-tests (thus delayed connect not covered)
+
196 
+
197  } else if(it->second->channel && it->second->channel->isConnected()) {
+
198  // another request, and hey we're connected this time
+
199 
+
200  ret = it->second;
+
201  it->second->dropPoke = true;
+
202 
+
203  } else {
+
204  // not connected yet, but a client is still interested
+
205  it->second->dropPoke = true;
+
206  }
+
207 
+
208  return ret;
+
209 }
+
Definition: chancache.h:132
+
Definition: chancache.h:103
+ + + +
+ + + + diff --git a/chancache_8h_source.html b/chancache_8h_source.html new file mode 100644 index 0000000..1aa6774 --- /dev/null +++ b/chancache_8h_source.html @@ -0,0 +1,281 @@ + + + + + + +pva2pva: p2pApp/chancache.h Source File + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
chancache.h
+
+
+
1 #ifndef CHANCACHE_H
+
2 #define CHANCACHE_H
+
3 
+
4 #include <string>
+
5 #include <map>
+
6 #include <set>
+
7 #include <deque>
+
8 
+
9 #include <epicsMutex.h>
+
10 #include <epicsTimer.h>
+
11 
+
12 #include <pv/pvAccess.h>
+
13 
+
14 #include "weakmap.h"
+
15 #include "weakset.h"
+
16 
+
17 struct ChannelCache;
+
18 struct ChannelCacheEntry;
+
19 struct MonitorUser;
+
20 struct GWChannel;
+
21 
+
22 struct MonitorCacheEntry : public epics::pvData::MonitorRequester
+
23 {
+
24  POINTER_DEFINITIONS(MonitorCacheEntry);
+
25  static size_t num_instances;
+
26  weak_pointer weakref;
+
27 
+
28  ChannelCacheEntry * const chan;
+
29 
+
30  const size_t bufferSize; // DS requested buffer size
+
31 
+
32  // to avoid yet another mutex borrow interested.mutex() for our members
+
33  inline epicsMutex& mutex() const { return interested.mutex(); }
+
34 
+
35  typedef std::vector<epicsUInt8> pvrequest_t;
+
36 
+
37  bool havedata; // set when initial update is received
+
38  bool done; // set when unlisten() is received
+
39  size_t nwakeups; // # of upstream monitorEvent() calls
+
40  size_t nevents; // # of upstream events poll()'d
+
41 
+
42  epics::pvData::StructureConstPtr typedesc;
+
46  epics::pvData::MonitorElement::shared_pointer lastelem;
+
47  epics::pvData::MonitorPtr mon;
+
48  epics::pvData::Status startresult;
+
49 
+ +
51  interested_t interested;
+
52 
+
53  MonitorCacheEntry(ChannelCacheEntry *ent, const epics::pvData::PVStructure::shared_pointer& pvr);
+
54  virtual ~MonitorCacheEntry();
+
55 
+
56  virtual void monitorConnect(epics::pvData::Status const & status,
+
57  epics::pvData::MonitorPtr const & monitor,
+
58  epics::pvData::StructureConstPtr const & structure);
+
59  virtual void monitorEvent(epics::pvData::MonitorPtr const & monitor);
+
60  virtual void unlisten(epics::pvData::MonitorPtr const & monitor);
+
61 
+
62  virtual std::string getRequesterName();
+
63 };
+
64 
+
65 struct MonitorUser : public epics::pvData::Monitor
+
66 {
+
67  POINTER_DEFINITIONS(MonitorUser);
+
68  static size_t num_instances;
+
69  weak_pointer weakref;
+
70 
+
71  inline epicsMutex& mutex() const { return entry->mutex(); }
+
72 
+
73  MonitorCacheEntry::shared_pointer entry;
+
74  epics::pvData::MonitorRequester::weak_pointer req;
+
75  std::tr1::weak_ptr<GWChannel> srvchan;
+
76 
+
77  // guards queues and member variables
+
78  bool initial;
+
79  bool running;
+
80  bool inoverflow;
+
81  size_t nwakeups; // # of monitorEvent() calls to req
+
82  size_t nevents; // total # events queued
+
83  size_t ndropped; // # of events drop because our queue was full
+
84 
+
85  std::deque<epics::pvData::MonitorElementPtr> filled, empty;
+
86  std::set<epics::pvData::MonitorElementPtr> inuse;
+
87 
+
88  epics::pvData::MonitorElementPtr overflowElement;
+
89 
+
90  MonitorUser(const MonitorCacheEntry::shared_pointer&);
+
91  virtual ~MonitorUser();
+
92 
+
93  virtual void destroy();
+
94 
+
95  virtual epics::pvData::Status start();
+
96  virtual epics::pvData::Status stop();
+
97  virtual epics::pvData::MonitorElementPtr poll();
+
98  virtual void release(epics::pvData::MonitorElementPtr const & monitorElement);
+
99 
+
100  virtual std::string getRequesterName();
+
101 };
+
102 
+ +
104 {
+
105  POINTER_DEFINITIONS(ChannelCacheEntry);
+
106  static size_t num_instances;
+
107 
+
108  const std::string channelName;
+
109  ChannelCache * const cache;
+
110 
+
111  // to avoid yet another mutex borrow interested.mutex() for our members
+
112  inline epicsMutex& mutex() const { return interested.mutex(); }
+
113 
+
114  // clientChannel
+
115  epics::pvAccess::Channel::shared_pointer channel;
+
116  epics::pvAccess::ChannelRequester::shared_pointer requester;
+
117 
+
118  bool dropPoke;
+
119 
+ +
121  interested_t interested;
+
122 
+
123  typedef MonitorCacheEntry::pvrequest_t pvrequest_t;
+ +
125  mon_entries_t mon_entries;
+
126 
+
127  ChannelCacheEntry(ChannelCache*, const std::string& n);
+
128  virtual ~ChannelCacheEntry();
+
129 
+
130  // this exists as a seperate object to prevent a reference loop
+
131  // ChannelCacheEntry -> pva::Channel -> CRequester
+
132  struct CRequester : public epics::pvAccess::ChannelRequester
+
133  {
+
134  static size_t num_instances;
+
135 
+
136  CRequester(const ChannelCacheEntry::shared_pointer& p);
+
137  virtual ~CRequester();
+
138  ChannelCacheEntry::weak_pointer chan;
+
139  // for Requester
+
140  virtual std::string getRequesterName();
+
141  // for ChannelRequester
+
142  virtual void channelCreated(const epics::pvData::Status& status,
+
143  epics::pvAccess::Channel::shared_pointer const & channel);
+
144  virtual void channelStateChange(epics::pvAccess::Channel::shared_pointer const & channel,
+
145  epics::pvAccess::Channel::ConnectionState connectionState);
+
146  };
+
147 };
+
148 
+ +
152 {
+
153  typedef std::map<std::string, ChannelCacheEntry::shared_pointer > entries_t;
+
154 
+
155  // cacheLock should not be held while calling *Requester methods
+
156  epicsMutex cacheLock;
+
157 
+
158  entries_t entries;
+
159 
+
160  epics::pvAccess::ChannelProvider::shared_pointer provider; // client Provider
+
161 
+
162  epicsTimerQueueActive *timerQueue;
+
163  epicsTimer *cleanTimer;
+
164  struct cacheClean;
+
165  cacheClean *cleaner;
+
166  size_t cleanerRuns;
+
167  size_t cleanerDust;
+
168 
+
169  ChannelCache(const epics::pvAccess::ChannelProvider::shared_pointer& prov);
+
170  ~ChannelCache();
+
171 
+
172  ChannelCacheEntry::shared_pointer lookup(const std::string& name);
+
173 };
+
174 
+
175 #endif // CHANCACHE_H
+
176 
+
epics::pvData::MonitorElement::shared_pointer lastelem
Definition: chancache.h:46
+
Definition: chancache.h:132
+
Definition: chancache.h:103
+ + +
epicsMutex & mutex() const
Definition: weakset.h:199
+ + +
Definition: chancache.h:22
+ + +
+ + + + diff --git a/channel_8cpp_source.html b/channel_8cpp_source.html new file mode 100644 index 0000000..0699055 --- /dev/null +++ b/channel_8cpp_source.html @@ -0,0 +1,346 @@ + + + + + + +pva2pva: p2pApp/channel.cpp Source File + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
channel.cpp
+
+
+
1 
+
2 #include <epicsAtomic.h>
+
3 
+
4 #include <epicsTimer.h>
+
5 #include <epicsMutex.h>
+
6 #include <epicsGuard.h>
+
7 #include <epicsEndian.h>
+
8 
+
9 #include <pv/iocshelper.h>
+
10 
+
11 #include <pv/pvAccess.h>
+
12 
+
13 #define epicsExportSharedSymbols
+
14 #include "helper.h"
+
15 #include "pva2pva.h"
+
16 #include "channel.h"
+
17 
+
18 namespace pva = epics::pvAccess;
+
19 namespace pvd = epics::pvData;
+
20 
+
21 int p2pReadOnly = 0;
+
22 
+
23 size_t GWChannel::num_instances;
+
24 
+
25 GWChannel::GWChannel(const ChannelCacheEntry::shared_pointer& e,
+
26  const epics::pvAccess::ChannelProvider::weak_pointer& srvprov,
+
27  const epics::pvAccess::ChannelRequester::weak_pointer &r,
+
28  const std::string& addr)
+
29  :entry(e)
+
30  ,requester(r)
+
31  ,address(addr)
+
32  ,server_provder(srvprov)
+
33 {
+
34  epicsAtomicIncrSizeT(&num_instances);
+
35 }
+
36 
+
37 GWChannel::~GWChannel()
+
38 {
+
39  epicsAtomicDecrSizeT(&num_instances);
+
40 }
+
41 
+
42 std::string
+
43 GWChannel::getRequesterName()
+
44 {
+
45  return "GWChannel";
+
46 }
+
47 
+
48 void
+
49 GWChannel::destroy()
+
50 {}
+
51 
+
52 std::tr1::shared_ptr<pva::ChannelProvider>
+
53 GWChannel::getProvider()
+
54 {
+
55  return pva::ChannelProvider::shared_pointer(server_provder);
+
56 }
+
57 
+
58 std::string
+
59 GWChannel::getRemoteAddress()
+
60 {
+
61  // pass through address of origin server (information leak?)
+
62  return entry->channel->getRemoteAddress();
+
63 }
+
64 
+
65 pva::Channel::ConnectionState
+
66 GWChannel::getConnectionState()
+
67 {
+
68  return entry->channel->getConnectionState();
+
69 }
+
70 
+
71 std::string
+
72 GWChannel::getChannelName()
+
73 {
+
74  return entry->channelName;
+
75 }
+
76 
+
77 std::tr1::shared_ptr<pva::ChannelRequester>
+
78 GWChannel::getChannelRequester()
+
79 {
+
80  return pva::ChannelRequester::shared_pointer(requester);
+
81 }
+
82 
+
83 
+
84 void
+
85 GWChannel::getField(pva::GetFieldRequester::shared_pointer const & requester,
+
86  std::string const & subField)
+
87 {
+
88  //TODO: cache for top level field?
+
89  entry->channel->getField(requester, subField);
+
90 }
+
91 
+
92 pva::AccessRights
+
93 GWChannel::getAccessRights(pvd::PVField::shared_pointer const & pvField)
+
94 {
+
95  return entry->channel->getAccessRights(pvField);
+
96 }
+
97 
+
98 pva::ChannelProcess::shared_pointer
+
99 GWChannel::createChannelProcess(
+
100  pva::ChannelProcessRequester::shared_pointer const & channelProcessRequester,
+
101  pvd::PVStructure::shared_pointer const & pvRequest)
+
102 {
+
103  if(!p2pReadOnly)
+
104  return entry->channel->createChannelProcess(channelProcessRequester, pvRequest);
+
105  else
+
106  return Channel::createChannelProcess(channelProcessRequester, pvRequest);
+
107 }
+
108 
+
109 pva::ChannelGet::shared_pointer
+
110 GWChannel::createChannelGet(
+
111  pva::ChannelGetRequester::shared_pointer const & channelGetRequester,
+
112  pvd::PVStructure::shared_pointer const & pvRequest)
+
113 {
+
114  return entry->channel->createChannelGet(channelGetRequester, pvRequest);
+
115 }
+
116 
+
117 pva::ChannelPut::shared_pointer
+
118 GWChannel::createChannelPut(
+
119  pva::ChannelPutRequester::shared_pointer const & channelPutRequester,
+
120  pvd::PVStructure::shared_pointer const & pvRequest)
+
121 {
+
122  //TODO: allow ChannelPut::get()
+
123  if(!p2pReadOnly)
+
124  return entry->channel->createChannelPut(channelPutRequester, pvRequest);
+
125  else
+
126  return Channel::createChannelPut(channelPutRequester, pvRequest);
+
127 }
+
128 
+
129 pva::ChannelPutGet::shared_pointer
+
130 GWChannel::createChannelPutGet(
+
131  pva::ChannelPutGetRequester::shared_pointer const & channelPutGetRequester,
+
132  pvd::PVStructure::shared_pointer const & pvRequest)
+
133 {
+
134  if(!p2pReadOnly)
+
135  return entry->channel->createChannelPutGet(channelPutGetRequester, pvRequest);
+
136  else
+
137  return Channel::createChannelPutGet(channelPutGetRequester, pvRequest);
+
138 }
+
139 
+
140 pva::ChannelRPC::shared_pointer
+
141 GWChannel::createChannelRPC(
+
142  pva::ChannelRPCRequester::shared_pointer const & channelRPCRequester,
+
143  pvd::PVStructure::shared_pointer const & pvRequest)
+
144 {
+
145  if(!p2pReadOnly)
+
146  return entry->channel->createChannelRPC(channelRPCRequester, pvRequest);
+
147  else
+
148  return Channel::createChannelRPC(channelRPCRequester, pvRequest);
+
149 }
+
150 
+
151 namespace {
+
152 struct noclean {
+
153  void operator()(MonitorCacheEntry *) {}
+
154 };
+
155 }
+
156 
+
157 pvd::Monitor::shared_pointer
+
158 GWChannel::createMonitor(
+
159  pvd::MonitorRequester::shared_pointer const & monitorRequester,
+
160  pvd::PVStructure::shared_pointer const & pvRequest)
+
161 {
+
162  ChannelCacheEntry::pvrequest_t ser;
+
163  // serialize request struct to string using host byte order (only used for local comparison)
+
164  pvd::serializeToVector(pvRequest.get(), EPICS_BYTE_ORDER, ser);
+
165 
+
166  MonitorCacheEntry::shared_pointer ment;
+
167  MonitorUser::shared_pointer mon;
+
168 
+
169  pvd::Status startresult;
+
170  pvd::StructureConstPtr typedesc;
+
171 
+
172  try {
+
173  {
+
174  Guard G(entry->mutex());
+
175 
+
176  // TODO: no-cache/no-share flag in pvRequest
+
177 
+
178  ment = entry->mon_entries.find(ser);
+
179  if(!ment) {
+
180  ment.reset(new MonitorCacheEntry(entry.get(), pvRequest));
+
181  entry->mon_entries[ser] = ment; // ref. wrapped
+
182  ment->weakref = ment;
+
183 
+
184  // We've added an incomplete entry (no Monitor)
+
185  // so MonitorUser must check validity before de-ref.
+
186  // in this case we use !!typedesc as this also indicates
+
187  // that the upstream monitor is connected
+
188  pvd::MonitorPtr M;
+
189  {
+
190  UnGuard U(G);
+
191 
+
192  M = entry->channel->createMonitor(ment, pvRequest);
+
193  }
+
194  ment->mon = M;
+
195  }
+
196  }
+
197 
+
198  Guard G(ment->mutex());
+
199 
+
200  mon.reset(new MonitorUser(ment));
+
201  ment->interested.insert(mon);
+
202  mon->weakref = mon;
+
203  mon->srvchan = shared_pointer(weakref);
+
204  mon->req = monitorRequester;
+
205 
+
206  typedesc = ment->typedesc;
+
207  startresult = ment->startresult;
+
208 
+
209  } catch(std::exception& e) {
+
210  mon.reset();
+
211  std::cerr<<"Exception in GWChannel::createMonitor()\n"
+
212  "is "<<e.what()<<"\n";
+
213  startresult = pvd::Status(pvd::Status::STATUSTYPE_FATAL, "Error during GWChannel setup");
+
214  }
+
215 
+
216  // unlock for callback
+
217 
+
218  if(typedesc || !startresult.isSuccess()) {
+
219  // upstream monitor already connected, or never will be.
+
220  monitorRequester->monitorConnect(startresult, mon, typedesc);
+
221  }
+
222 
+
223  return mon;
+
224 }
+
225 
+
226 pva::ChannelArray::shared_pointer
+
227 GWChannel::createChannelArray(
+
228  pva::ChannelArrayRequester::shared_pointer const & channelArrayRequester,
+
229  pvd::PVStructure::shared_pointer const & pvRequest)
+
230 {
+
231  return entry->channel->createChannelArray(channelArrayRequester, pvRequest);
+
232 }
+
233 
+
234 
+
235 void
+
236 GWChannel::printInfo(std::ostream& out)
+
237 {
+
238  out<<"GWChannel for "<<entry->channelName<<"\n";
+
239 }
+
240 
+
241 
+
242 void registerReadOnly()
+
243 {
+
244  epics::iocshVariable<int, &p2pReadOnly>("p2pReadOnly");
+
245 }
+
Definition: chancache.h:22
+ +
+ + + + diff --git a/channel_8h_source.html b/channel_8h_source.html new file mode 100644 index 0000000..f13a535 --- /dev/null +++ b/channel_8h_source.html @@ -0,0 +1,169 @@ + + + + + + +pva2pva: p2pApp/channel.h Source File + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
channel.h
+
+
+
1 #ifndef CHANNEL_H
+
2 #define CHANNEL_H
+
3 
+
4 #include <pv/pvAccess.h>
+
5 
+
6 #include "chancache.h"
+
7 
+
8 struct GWChannel : public epics::pvAccess::Channel
+
9 {
+
10  POINTER_DEFINITIONS(GWChannel);
+
11  static size_t num_instances;
+
12  weak_pointer weakref;
+
13 
+
14  const ChannelCacheEntry::shared_pointer entry;
+
15  const requester_type::weak_pointer requester;
+
16  const std::string address; // address of client on GW server side
+
17  const epics::pvAccess::ChannelProvider::weak_pointer server_provder;
+
18 
+
19  GWChannel(const ChannelCacheEntry::shared_pointer& e,
+
20  const epics::pvAccess::ChannelProvider::weak_pointer& srvprov,
+
21  const requester_type::weak_pointer&,
+
22  const std::string& addr);
+
23  virtual ~GWChannel();
+
24 
+
25 
+
26  // for Requester
+
27  virtual std::string getRequesterName();
+
28 
+
29  // for Destroyable
+
30  virtual void destroy();
+
31 
+
32  // for Channel
+
33  virtual std::tr1::shared_ptr<epics::pvAccess::ChannelProvider> getProvider();
+
34  virtual std::string getRemoteAddress();
+
35 
+
36  virtual ConnectionState getConnectionState();
+
37  virtual std::string getChannelName();
+
38  virtual std::tr1::shared_ptr<epics::pvAccess::ChannelRequester> getChannelRequester();
+
39 
+
40  virtual void getField(epics::pvAccess::GetFieldRequester::shared_pointer const & requester,
+
41  std::string const & subField);
+
42  virtual epics::pvAccess::AccessRights getAccessRights(epics::pvData::PVField::shared_pointer const & pvField);
+
43  virtual epics::pvAccess::ChannelProcess::shared_pointer createChannelProcess(
+
44  epics::pvAccess::ChannelProcessRequester::shared_pointer const & channelProcessRequester,
+
45  epics::pvData::PVStructure::shared_pointer const & pvRequest);
+
46  virtual epics::pvAccess::ChannelGet::shared_pointer createChannelGet(
+
47  epics::pvAccess::ChannelGetRequester::shared_pointer const & channelGetRequester,
+
48  epics::pvData::PVStructure::shared_pointer const & pvRequest);
+
49  virtual epics::pvAccess::ChannelPut::shared_pointer createChannelPut(
+
50  epics::pvAccess::ChannelPutRequester::shared_pointer const & channelPutRequester,
+
51  epics::pvData::PVStructure::shared_pointer const & pvRequest);
+
52  virtual epics::pvAccess::ChannelPutGet::shared_pointer createChannelPutGet(
+
53  epics::pvAccess::ChannelPutGetRequester::shared_pointer const & channelPutGetRequester,
+
54  epics::pvData::PVStructure::shared_pointer const & pvRequest);
+
55  virtual epics::pvAccess::ChannelRPC::shared_pointer createChannelRPC(
+
56  epics::pvAccess::ChannelRPCRequester::shared_pointer const & channelRPCRequester,
+
57  epics::pvData::PVStructure::shared_pointer const & pvRequest);
+
58  virtual epics::pvData::Monitor::shared_pointer createMonitor(
+
59  epics::pvData::MonitorRequester::shared_pointer const & monitorRequester,
+
60  epics::pvData::PVStructure::shared_pointer const & pvRequest);
+
61  virtual epics::pvAccess::ChannelArray::shared_pointer createChannelArray(
+
62  epics::pvAccess::ChannelArrayRequester::shared_pointer const & channelArrayRequester,
+
63  epics::pvData::PVStructure::shared_pointer const & pvRequest);
+
64 
+
65  virtual void printInfo(std::ostream& out);
+
66 
+
67 };
+
68 
+
69 #endif // CHANNEL_H
+ +
+ + + + diff --git a/class_as_write_pvt-members.html b/class_as_write_pvt-members.html new file mode 100644 index 0000000..772b0a4 --- /dev/null +++ b/class_as_write_pvt-members.html @@ -0,0 +1,105 @@ + + + + + + +pva2pva: Member List + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ +
+
+
+
AsWritePvt Member List
+
+
+ +

This is the complete list of members for AsWritePvt, including all inherited members.

+ + + + + +
AsWritePvt() (defined in AsWritePvt)AsWritePvtinline
AsWritePvt(void *pvt) (defined in AsWritePvt)AsWritePvtinlineexplicit
swap(AsWritePvt &o) (defined in AsWritePvt)AsWritePvtinline
~AsWritePvt() (defined in AsWritePvt)AsWritePvtinline
+ + + + diff --git a/class_as_write_pvt.html b/class_as_write_pvt.html new file mode 100644 index 0000000..bda8a9d --- /dev/null +++ b/class_as_write_pvt.html @@ -0,0 +1,117 @@ + + + + + + +pva2pva: AsWritePvt Class Reference + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ +
+
+ +
+
AsWritePvt Class Reference
+
+
+ + + + + + +

+Public Member Functions

AsWritePvt (void *pvt)
 
+void swap (AsWritePvt &o)
 
+

Detailed Description

+
+

Definition at line 77 of file pdb.h.

+

The documentation for this class was generated from the following file: +
+ + + + diff --git a/classes.html b/classes.html new file mode 100644 index 0000000..ed393ee --- /dev/null +++ b/classes.html @@ -0,0 +1,142 @@ + + + + + + +pva2pva: Class Index + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + +
+ + + + +
+ +
+ +
+
+
Class Index
+
+
+
A | B | C | D | E | F | G | I | J | L | M | N | P | S | T | W | X
+ + + + + + + + + + + + + + + + + + + + + + + + +
  A  
+
DBEvent   
  L  
+
pdbRecordIterator   TestChannelMonitorRequester   
dbrbuf   PDBSingleChannel   TestChannelPutRequester   
pvaLinkChannel::AfterPut (pvalink)   DBScanLocker   pvaLinkChannel::LinkSort (pvalink)   PDBSingleMonitor   TestChannelRequester   
ASCLIENT   
  E  
+
LocalFL   PDBSinglePut   TestIOC   
ASCred   
  M  
+
PDBSinglePV   TestProvider   
AsWritePvt   weak_value_map::element_proxy   pvaGlobal_t (pvalink)   TestPV   
  B  
+
  F  
+
MonitorCacheEntry   pvaLink (pvalink)   TestPVChannel   
MonitorUser   pvaLinkChannel (pvalink)   TestPVMonitor   
BaseChannel   GroupConfig::Field   
  N  
+
pvaLinkConfig (pvalink)   
  W  
+
BaseChannelProviderFactory   FieldName   PVIF   
BaseMonitor   
  G  
+
BaseMonitor::no_overflow   PVIFBuilder   weak_set   
  C  
+
  P  
+
  S  
+
weak_value_map   
GroupConfig::Group   WorkQueue   
ChannelCache::cacheClean   GroupConfig   PDBGroupChannel   SB   
  X  
+
ChannelCache   GWChannel   PDBGroupMonitor   ScalarAccessor   
ChannelCacheEntry   GWServerChannelProvider   PDBGroupPut   ScalarBuilder   weak_set::XIterator   
FieldName::Component   
  I  
+
PDBGroupPV   ServerConfig   
ChannelCacheEntry::CRequester   pdbInfoIterator   
  T  
+
  D  
+
PDBGroupPV::Info   PDBProvider   
  J  
+
PDBPV   TestChannelFieldRequester   
DBCH   pdbRecordInfo   TestChannelGetRequester   
jlif   
+
A | B | C | D | E | F | G | I | J | L | M | N | P | S | T | W | X
+
+ + + + diff --git a/classweak__set-members.html b/classweak__set-members.html new file mode 100644 index 0000000..74b2c43 --- /dev/null +++ b/classweak__set-members.html @@ -0,0 +1,121 @@ + + + + + + +pva2pva: Member List + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ +
+
+
+
weak_set< T > Member List
+
+
+ +

This is the complete list of members for weak_set< T >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + +
clear()weak_set< T >inline
empty() const weak_set< T >inline
erase(value_pointer &v)weak_set< T >inline
guard_type typedef (defined in weak_set< T >)weak_set< T >
insert(value_pointer &)weak_set< T >
iterator typedef (defined in weak_set< T >)weak_set< T >
lock_set() const weak_set< T >
lock_vector() const weak_set< T >
lock_vector(vector_type &) const (defined in weak_set< T >)weak_set< T >
mutex() const weak_set< T >inline
mutex_type typedef (defined in weak_set< T >)weak_set< T >
release_type typedef (defined in weak_set< T >)weak_set< T >
set_type typedef (defined in weak_set< T >)weak_set< T >
size() const weak_set< T >inline
swap(weak_set &O)weak_set< T >inline
value_pointer typedef (defined in weak_set< T >)weak_set< T >
value_type typedef (defined in weak_set< T >)weak_set< T >
value_weak_pointer typedef (defined in weak_set< T >)weak_set< T >
vector_type typedef (defined in weak_set< T >)weak_set< T >
weak_set()weak_set< T >inline
+ + + + diff --git a/classweak__set.html b/classweak__set.html new file mode 100644 index 0000000..5eb4c27 --- /dev/null +++ b/classweak__set.html @@ -0,0 +1,515 @@ + + + + + + +pva2pva: weak_set< T > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ +
+
+ +
+
weak_set< T > Class Template Reference
+
+
+ +

a std::set-ish container where entries are removed when ref. counts fall to zero + More...

+ +

#include <weakset.h>

+ + + + + +

+Classes

struct  XIterator
 an iterator-ish object which also locks the set during iteration More...
 
+ + + + + + + + + + + + + + + + + + + +

+Public Types

+typedef T value_type
 
+typedef std::tr1::shared_ptr< T > value_pointer
 
+typedef std::tr1::weak_ptr< T > value_weak_pointer
 
+typedef std::set< value_pointer > set_type
 
+typedef std::vector
+< value_pointer > 
vector_type
 
+typedef epicsMutex mutex_type
 
+typedef epicsGuard< epicsMutex > guard_type
 
+typedef epicsGuardRelease
+< epicsMutex > 
release_type
 
+typedef XIterator iterator
 
+ + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

weak_set ()
 Construct a new empty set.
 
void swap (weak_set &O)
 
void clear ()
 
bool empty () const
 
size_t size () const
 
void insert (value_pointer &)
 
size_t erase (value_pointer &v)
 
set_type lock_set () const
 
vector_type lock_vector () const
 
+void lock_vector (vector_type &) const
 
epicsMutex & mutex () const
 
+

Detailed Description

+

template<typename T>
+class weak_set< T >

+ +

a std::set-ish container where entries are removed when ref. counts fall to zero

+

A container of ref. counted (by shared_ptr) entries where an entry may be present zero or one times in the set.

+

Meant to be used in situations where an object must hold some weak references of entries which it can iterate.

+

Note that the insert() method replaces the reference pass to it with a "wrapped" reference which removes from the set then releases the original ref. The reference passed in must be unique() or std::invalid_argument is thrown. While this can't be enforced, no weak_ptr to this object should exist.

+

A reference loop will exist if the object owning the weak_set also holds strong references to entries in this set.

+
Note
With the exception of swap() all methods are thread-safe
+
Warning
Use caution when storing types deriving from enabled_shared_from_this<> As the implict weak reference they contain will not be wrapped.
struct Owner;
+
struct Entry {
+
shared_ptr<Owner> O;
+
};
+
struct Owner {
+ +
};
+
shared_ptr<Entry> build(const shared_ptr<Owner>& own) {
+
shared_ptr<Owner> N(new Entry);
+
N.O = own;
+
own.S.insert(N); // modifies 'N'
+
return N;
+
}
+
void example()
+
{
+
shared_ptr<Owner> O(new Owner);
+
shared_ptr<Entry> E(build(O));
+
assert(!O.S.empty());
+
E.reset(); // Entry is removed from the set and free'd
+
assert(O.S.empty());
+
}
+
+ +

Definition at line 57 of file weakset.h.

+

Member Function Documentation

+ +
+
+
+template<typename T>
+ + + + + +
+ + + + + + + +
void weak_set< T >::clear ()
+
+inline
+
+

Remove all (weak) entries from the set

+
Note
Thread safe
+ +

Definition at line 151 of file weakset.h.

+
151  {
+
152  guard_type G(_data->mutex);
+
153  return _data->store.clear();
+
154  }
+
+
+
+ +
+
+
+template<typename T>
+ + + + + +
+ + + + + + + +
bool weak_set< T >::empty () const
+
+inline
+
+

Test if set is empty

+
Note
Thread safe
+
Warning
see size()
+ +

Definition at line 159 of file weakset.h.

+
159  {
+
160  guard_type G(_data->mutex);
+
161  return _data->store.empty();
+
162  }
+
+
+
+ +
+
+
+template<typename T>
+ + + + + +
+ + + + + + + + +
size_t weak_set< T >::erase (value_pointer & v)
+
+inline
+
+

Remove any (weak) ref to this object from the set

+
Returns
the number of objects removed (0 or 1)
+ +

Definition at line 180 of file weakset.h.

+
180  {
+
181  guard_type G(_data->mutex);
+
182  return _data->store.erase(v);
+
183  }
+
+
+
+ +
+
+
+template<typename T >
+ + + + + + + + +
void weak_set< T >::insert (value_pointer & v)
+
+

Insert a new entry into the set The callers shared_ptr must be unique() and is (transparently) replaced with another

+ +

Definition at line 227 of file weakset.h.

+
228 {
+
229  if(!v.unique())
+
230  throw std::invalid_argument("Only unique() references may be inserted");
+
231 
+
232  guard_type G(_data->mutex);
+
233  typename store_t::const_iterator it = _data->store.find(v);
+
234  if(it==_data->store.end()) { // new object
+
235 
+
236  // wrapped strong ref. which removes from our map
+
237  value_pointer chainptr(v.get(), dtor(_data, v));
+
238 
+
239  _data->store.insert(chainptr);
+
240 
+
241  v.swap(chainptr); // we only keep the chained pointer
+
242  } else {
+
243  // already stored, no-op
+
244 
+
245  // paranoia, if already inserted then this should be a wrapped ref.
+
246  // but not sure how to check this so update arg. with known wrapped ref.
+
247  v = value_pointer(*it); // could throw bad_weak_ptr, but really never should
+
248  }
+
249 }
+
+
+
+ +
+
+
+template<typename T >
+ + + + + + + +
weak_set< T >::set_type weak_set< T >::lock_set () const
+
+

Return a set of strong references to all entries

+
Note
that this allocates a new std::set and copies all entries
+ +

Definition at line 253 of file weakset.h.

+
254 {
+
255  set_type ret;
+
256  guard_type G(_data->mutex);
+
257  for(typename store_t::const_iterator it=_data->store.begin(),
+
258  end=_data->store.end(); it!=end; ++it)
+
259  {
+
260  value_pointer P(it->lock());
+
261  if(P) ret.insert(P);
+
262  }
+
263  return ret;
+
264 }
+
+
+
+ +
+
+
+template<typename T >
+ + + + + + + +
weak_set< T >::vector_type weak_set< T >::lock_vector () const
+
+

Return a vector of strong references to all entries Useful for iteration

+
Note
that this allocates a new std::set and copies all entries
+ +

Definition at line 268 of file weakset.h.

+
269 {
+
270  vector_type ret;
+
271  lock_vector(ret);
+
272  return ret;
+
273 }
+
vector_type lock_vector() const
Definition: weakset.h:268
+
+
+
+ +
+
+
+template<typename T>
+ + + + + +
+ + + + + + + +
epicsMutex& weak_set< T >::mutex () const
+
+inline
+
+

Access to the weak_set internal lock for use with batch operations.

+
Warning
Use caution when swap()ing while holding this lock!
+ +

Definition at line 199 of file weakset.h.

+
199  {
+
200  return _data->mutex;
+
201  }
+
+
+
+ +
+
+
+template<typename T>
+ + + + + +
+ + + + + + + +
size_t weak_set< T >::size () const
+
+inline
+
+

number of entries in the set at this moment

+
Note
Thread safe
+
Warning
May be momentarily inaccurate (larger) due to dead refs. which have not yet been removed.
+ +

Definition at line 168 of file weakset.h.

+
168  {
+
169  guard_type G(_data->mutex);
+
170  return _data->store.size();
+
171  }
+
+
+
+ +
+
+
+template<typename T>
+ + + + + +
+ + + + + + + + +
void weak_set< T >::swap (weak_set< T > & O)
+
+inline
+
+

exchange the two sets.

+
Warning
Not thread safe (exchanges mutexes as well)
+ +

Definition at line 145 of file weakset.h.

+
145  {
+
146  _data.swap(O._data);
+
147  }
+
+
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classweak__value__map-members.html b/classweak__value__map-members.html new file mode 100644 index 0000000..4b84f2a --- /dev/null +++ b/classweak__value__map-members.html @@ -0,0 +1,123 @@ + + + + + + +pva2pva: Member List + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ +
+
+
+
weak_value_map< K, V, C > Member List
+
+
+ +

This is the complete list of members for weak_value_map< K, V, C >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + +
clear()weak_value_map< K, V, C >inline
empty() const weak_value_map< K, V, C >inline
find(const K &k) const weak_value_map< K, V, C >inline
guard_type typedef (defined in weak_value_map< K, V, C >)weak_value_map< K, V, C >
insert(const K &k, value_pointer &v)weak_value_map< K, V, C >inline
key_type typedef (defined in weak_value_map< K, V, C >)weak_value_map< K, V, C >
lock_map() const weak_value_map< K, V, C >inline
lock_map_type typedef (defined in weak_value_map< K, V, C >)weak_value_map< K, V, C >
lock_vector() const weak_value_map< K, V, C >inline
lock_vector_type typedef (defined in weak_value_map< K, V, C >)weak_value_map< K, V, C >
mutex() const weak_value_map< K, V, C >inline
mutex_type typedef (defined in weak_value_map< K, V, C >)weak_value_map< K, V, C >
operator[](const K &k) (defined in weak_value_map< K, V, C >)weak_value_map< K, V, C >inline
operator[](const K &k) const (defined in weak_value_map< K, V, C >)weak_value_map< K, V, C >inline
release_type typedef (defined in weak_value_map< K, V, C >)weak_value_map< K, V, C >
set_type typedef (defined in weak_value_map< K, V, C >)weak_value_map< K, V, C >
size() const weak_value_map< K, V, C >inline
swap(weak_value_map &O)weak_value_map< K, V, C >inline
value_pointer typedef (defined in weak_value_map< K, V, C >)weak_value_map< K, V, C >
value_type typedef (defined in weak_value_map< K, V, C >)weak_value_map< K, V, C >
value_weak_pointer typedef (defined in weak_value_map< K, V, C >)weak_value_map< K, V, C >
weak_value_map()weak_value_map< K, V, C >inline
+ + + + diff --git a/classweak__value__map.html b/classweak__value__map.html new file mode 100644 index 0000000..8ac01ba --- /dev/null +++ b/classweak__value__map.html @@ -0,0 +1,518 @@ + + + + + + +pva2pva: weak_value_map< K, V, C > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ +
+
+ +
+
weak_value_map< K, V, C > Class Template Reference
+
+
+ +

An associative map where a weak_ptr to the value is stored. + More...

+ +

#include <weakmap.h>

+ + + + +

+Classes

class  element_proxy
 
+ + + + + + + + + + + + + + + + + + + + + +

+Public Types

+typedef K key_type
 
+typedef V value_type
 
+typedef std::tr1::shared_ptr< V > value_pointer
 
+typedef std::tr1::weak_ptr< V > value_weak_pointer
 
+typedef std::set< value_pointer > set_type
 
+typedef epicsMutex mutex_type
 
+typedef epicsGuard< epicsMutex > guard_type
 
+typedef epicsGuardRelease
+< epicsMutex > 
release_type
 
+typedef std::map< K,
+value_pointer, C > 
lock_map_type
 
+typedef std::vector< std::pair
+< K, value_pointer > > 
lock_vector_type
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

weak_value_map ()
 Construct a new empty set.
 
void swap (weak_value_map &O)
 
void clear ()
 
bool empty () const
 
size_t size () const
 
+element_proxy operator[] (const K &k)
 
+value_pointer operator[] (const K &k) const
 
value_pointer find (const K &k) const
 
value_pointer insert (const K &k, value_pointer &v)
 
+lock_map_type lock_map () const
 Return an equivalent map with strong value references.
 
lock_vector_type lock_vector () const
 
epicsMutex & mutex () const
 
+

Detailed Description

+

template<typename K, typename V, typename C = std::less<K>>
+class weak_value_map< K, V, C >

+ +

An associative map where a weak_ptr to the value is stored.

+

Acts like std::map<K, weak_ptr<V> > where entries are automatically removed when no longer referenced.

+

Meant to be used in situations where an object must hold some weak references of entries which it can iterate.

+

Note that insert() and operator[] w/ assignment replaces the reference pass in with a "wrapped" reference which removes from the set then releases the original ref. The reference passed in must be unique() or std::invalid_argument is thrown. While this can't be enforced, no weak_ptr to this object should exist.

+

A reference loop will exist if the object owning the weak_set also holds strong references to entries in this set.

+
Note
With the exception of swap() all methods are thread-safe
+
Warning
Use caution when storing types deriving from enabled_shared_from_this<> As the implict weak reference they contain will not be wrapped.
struct Owner;
+
struct Entry {
+
shared_ptr<Owner> O;
+
};
+
struct Owner {
+
weak_map<string, Entry> M;
+
};
+
shared_ptr<Entry> build(const shared_ptr<Owner>& own, const std::string& k) {
+
shared_ptr<Owner> N(new Entry);
+
N.O = own;
+
own.M[k] = N; // modifies 'N'
+
return N;
+
}
+
void example()
+
{
+
shared_ptr<Owner> O(new Owner);
+
shared_ptr<Entry> E(build(O, "test"));
+
assert(!O.M.empty());
+
assert(O.M["test"]==E);
+
E.reset(); // Entry is removed from the set and free'd
+
assert(O.M.empty());
+
}
+
+ +

Definition at line 59 of file weakmap.h.

+

Member Function Documentation

+ +
+
+
+template<typename K, typename V, typename C = std::less<K>>
+ + + + + +
+ + + + + + + +
void weak_value_map< K, V, C >::clear ()
+
+inline
+
+

Remove all (weak) entries from the set

+
Note
Thread safe
+ +

Definition at line 130 of file weakmap.h.

+
130  {
+
131  guard_type G(_data->mutex);
+
132  return _data->store.clear();
+
133  }
+
+
+
+ +
+
+
+template<typename K, typename V, typename C = std::less<K>>
+ + + + + +
+ + + + + + + +
bool weak_value_map< K, V, C >::empty () const
+
+inline
+
+

Test if set is empty at this moment

+
Note
Thread safe
+
Warning
see size()
+ +

Definition at line 138 of file weakmap.h.

+
138  {
+
139  guard_type G(_data->mutex);
+
140  return _data->store.empty();
+
141  }
+
+
+
+ +
+
+
+template<typename K, typename V, typename C = std::less<K>>
+ + + + + +
+ + + + + + + + +
value_pointer weak_value_map< K, V, C >::find (const K & k) const
+
+inline
+
+

Lookup key 'k'

+
Returns
a strong reference or nullptr if 'k' is not present
+ +

Definition at line 215 of file weakmap.h.

+
216  {
+
217  value_pointer ret;
+
218  guard_type G(_data->mutex);
+
219  typename store_t::const_iterator it(_data->store.find(k));
+
220  if(it!=_data->store.end()) {
+
221  // may be nullptr if we race destruction
+
222  // as ref. count falls to zero before we can remove it
+
223  ret = it->second.lock();
+
224  }
+
225  return ret;
+
226  }
+
+
+
+ +
+
+
+template<typename K, typename V, typename C = std::less<K>>
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
value_pointer weak_value_map< K, V, C >::insert (const K & k,
value_pointer & v 
)
+
+inline
+
+

Insert or replace

+
Returns
previous value of key k (may be nullptr).
+ +

Definition at line 230 of file weakmap.h.

+
231  {
+
232  value_pointer ret;
+
233  guard_type G(_data->mutex);
+
234  typename store_t::const_iterator it = _data->store.find(k);
+
235  if(it!=_data->store.end())
+
236  ret = it->second.lock();
+
237  (*this)[k] = v;
+
238  return ret;
+
239  }
+
+
+
+ +
+
+
+template<typename K, typename V, typename C = std::less<K>>
+ + + + + +
+ + + + + + + +
lock_vector_type weak_value_map< K, V, C >::lock_vector () const
+
+inline
+
+

Return a vector of pairs of keys and strong value references. useful for iteration

+ +

Definition at line 259 of file weakmap.h.

+
260  {
+
261  lock_vector_type ret;
+
262  guard_type G(_data->mutex);
+
263  ret.reserve(_data->store.size());
+
264  for(typename store_t::const_iterator it = _data->store.begin(),
+
265  end = _data->store.end(); it!=end; ++it)
+
266  {
+
267  value_pointer P(it->second.lock());
+
268  if(P) ret.push_back(std::make_pair(it->first, P));
+
269  }
+
270  return ret;
+
271  }
+
+
+
+ +
+
+
+template<typename K, typename V, typename C = std::less<K>>
+ + + + + +
+ + + + + + + +
epicsMutex& weak_value_map< K, V, C >::mutex () const
+
+inline
+
+

Access to the weak_set internal lock for use with batch operations.

+
Warning
Use caution when swap()ing while holding this lock!
+ +

Definition at line 276 of file weakmap.h.

+
276  {
+
277  return _data->mutex;
+
278  }
+
+
+
+ +
+
+
+template<typename K, typename V, typename C = std::less<K>>
+ + + + + +
+ + + + + + + +
size_t weak_value_map< K, V, C >::size () const
+
+inline
+
+

number of entries in the set at this moment

+
Note
Thread safe
+
Warning
May be momentarily inaccurate (larger) due to dead refs. which have not yet been removed.
+ +

Definition at line 147 of file weakmap.h.

+
147  {
+
148  guard_type G(_data->mutex);
+
149  return _data->store.size();
+
150  }
+
+
+
+ +
+
+
+template<typename K, typename V, typename C = std::less<K>>
+ + + + + +
+ + + + + + + + +
void weak_value_map< K, V, C >::swap (weak_value_map< K, V, C > & O)
+
+inline
+
+

exchange the two sets.

+
Warning
Not thread safe (exchanges mutexes as well)
+ +

Definition at line 124 of file weakmap.h.

+
124  {
+
125  _data.swap(O._data);
+
126  }
+
+
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classweak__value__map_1_1element__proxy-members.html b/classweak__value__map_1_1element__proxy-members.html new file mode 100644 index 0000000..8d331f4 --- /dev/null +++ b/classweak__value__map_1_1element__proxy-members.html @@ -0,0 +1,113 @@ + + + + + + +pva2pva: Member List + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
weak_value_map< K, V, C >::element_proxy Member List
+
+ + + + + diff --git a/classweak__value__map_1_1element__proxy.html b/classweak__value__map_1_1element__proxy.html new file mode 100644 index 0000000..cfef5a0 --- /dev/null +++ b/classweak__value__map_1_1element__proxy.html @@ -0,0 +1,187 @@ + + + + + + +pva2pva: weak_value_map< K, V, C >::element_proxy Class Reference + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
weak_value_map< K, V, C >::element_proxy Class Reference
+
+
+ +

#include <weakmap.h>

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

+Public Member Functions

value_pointer & operator= (value_pointer &v)
 
+V & operator* () const
 Support: *map[k].
 
+V * operator-> () const
 Support: map[k]->mem.
 
operator value_pointer () const
 Support: value_pointer V(map[k])
 
+bool operator== (const value_pointer &v) const
 
+bool operator!= (const value_pointer &v) const
 
+ + + +

+Friends

+class weak_value_map
 
+

Detailed Description

+

template<typename K, typename V, typename C = std::less<K>>
+class weak_value_map< K, V, C >::element_proxy

+ +

proxy class for lookup of non-const Supports assignment and deref. implicitly castable to value_pointer (aka shared_ptr<V>)

+ +

Definition at line 155 of file weakmap.h.

+

Member Function Documentation

+ +
+
+
+template<typename K, typename V, typename C = std::less<K>>
+ + + + + +
+ + + + + + + + +
value_pointer& weak_value_map< K, V, C >::element_proxy::operator= (value_pointer & v)
+
+inline
+
+

Support: map[k] = v The value_pointer passed in will be replaced with a wrapped reference

+
Returns
the argument
+ +

Definition at line 166 of file weakmap.h.

+
167  {
+
168  if(!v.unique())
+
169  throw std::invalid_argument("Only unique() references may be inserted");
+
170  value_pointer chainptr(v.get(), dtor(M._data, k, v));
+
171  M._data->store[k] = chainptr;
+
172  v.swap(chainptr);
+
173  return v;
+
174  }
+
+
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/closed.png b/closed.png new file mode 100644 index 0000000000000000000000000000000000000000..98cc2c909da37a6df914fbf67780eebd99c597f5 GIT binary patch literal 132 zcmeAS@N?(olHy`uVBq!ia0vp^oFL4>1|%O$WD@{V-kvUwAr*{o@8{^CZMh(5KoB^r_<4^zF@3)Cp&&t3hdujKf f*?bjBoY!V+E))@{xMcbjXe@)LtDnm{r-UW|*e5JT literal 0 HcmV?d00001 diff --git a/conf_8py_source.html b/conf_8py_source.html new file mode 100644 index 0000000..9686d06 --- /dev/null +++ b/conf_8py_source.html @@ -0,0 +1,177 @@ + + + + + + +pva2pva: documentation/conf.py Source File + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
conf.py
+
+
+
1 # Configuration file for the Sphinx documentation builder.
+
2 #
+
3 # This file only contains a selection of the most common options. For a full
+
4 # list see the documentation:
+
5 # http://www.sphinx-doc.org/en/master/config
+
6 
+
7 # -- Path setup --------------------------------------------------------------
+
8 
+
9 # If extensions (or modules to document with autodoc) are in another directory,
+
10 # add these directories to sys.path here. If the directory is relative to the
+
11 # documentation root, use os.path.abspath to make it absolute, like shown here.
+
12 #
+
13 # import os
+
14 # import sys
+
15 # sys.path.insert(0, os.path.abspath('.'))
+
16 
+
17 
+
18 # -- Project information -----------------------------------------------------
+
19 
+
20 project = 'EPICS Documentation'
+
21 copyright = '2019, EPICS Controls.'
+
22 author = 'EPICS'
+
23 
+
24 
+
25 # -- General configuration ---------------------------------------------------
+
26 
+
27 # Add any Sphinx extension module names here, as strings. They can be
+
28 # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
+
29 # ones.
+
30 extensions = [
+
31  'sphinx.ext.intersphinx',
+
32 ]
+
33 
+
34 # Add any paths that contain templates here, relative to this directory.
+
35 templates_path = ['_templates']
+
36 
+
37 # List of patterns, relative to source directory, that match files and
+
38 # directories to ignore when looking for source files.
+
39 # This pattern also affects html_static_path and html_extra_path.
+
40 exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store']
+
41 
+
42 # Intersphinx links to subprojects
+
43 intersphinx_mapping = {
+
44  'how-tos': ('https://docs.epics-controls.org/projects/how-tos/en/latest', None),
+
45 }
+
46 
+
47 
+
48 # -- Options for HTML output -------------------------------------------------
+
49 
+
50 # The theme to use for HTML and HTML Help pages. See the documentation for
+
51 # a list of builtin themes.
+
52 #
+
53 html_theme = 'sphinx_rtd_theme'
+
54 
+
55 
+
56 # Add any paths that contain custom static files (such as style sheets) here,
+
57 # relative to this directory. They are copied after the builtin static files,
+
58 # so a file named "default.css" will overwrite the builtin "default.css".
+
59 html_static_path = ['_static']
+
60 
+
61 html_css_files = [
+
62  'css/custom.css',
+
63 ]
+
64 
+
65 master_doc = 'index'
+
66 
+
67 html_theme_options = {
+
68  'logo_only': True,
+
69 }
+
70 html_logo = "images/EPICS_white_logo_v02.png"
+
71 
+
72 html_extra_path = ['../html']
+
73 
+
74 
+
75 # -- Run Doxygen ------------------------------------------------------------
+
76 
+
77 import subprocess
+
78 subprocess.call('cd ..; mkdir -p html/doxygen; doxygen', shell=True)
+
+ + + + diff --git a/configparse_8cpp_source.html b/configparse_8cpp_source.html new file mode 100644 index 0000000..b72f648 --- /dev/null +++ b/configparse_8cpp_source.html @@ -0,0 +1,356 @@ + + + + + + +pva2pva: pdbApp/configparse.cpp Source File + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
configparse.cpp
+
+
+
1 
+
2 #include <sstream>
+
3 
+
4 #include <dbAccess.h>
+
5 
+
6 #include <dbAccess.h>
+
7 #include <dbChannel.h>
+
8 #include <dbStaticLib.h>
+
9 #include <dbEvent.h>
+
10 #include <dbLock.h>
+
11 
+
12 #include <pv/pvIntrospect.h>
+
13 #include <pv/pvAccess.h>
+
14 #include <pv/configuration.h>
+
15 #include <pv/json.h>
+
16 
+
17 #include "pdbgroup.h"
+
18 
+
19 namespace {
+
20 
+
21 namespace pvd = epics::pvData;
+
22 using pvd::yajl::integer_arg;
+
23 using pvd::yajl::size_arg;
+
24 
+
25 typedef std::map<std::string, pvd::AnyScalar> options_t;
+
26 typedef std::map<std::string, options_t> config_t;
+
27 
+
28 struct context {
+
29  const std::string chanprefix;
+
30  std::string msg;
+
31  std::string group, field, key;
+
32  unsigned depth; // number of '{'s
+
33  // depth 0 - invalid
+
34  // depth 1 - top Object
+
35  // depth 2 - Group
+
36  // depth 3 - field
+
37 
+
38  context(const std::string& chanprefix, GroupConfig& conf)
+
39  :chanprefix(chanprefix)
+
40  ,depth(0u)
+
41  ,conf(conf)
+
42  {}
+
43 
+
44  GroupConfig& conf;
+
45 
+
46  void can_assign()
+
47  {
+
48  if(depth<2 || depth>3)
+
49  throw std::runtime_error("Can't assign value in this context");
+
50  }
+
51 
+
52  void assign(const pvd::AnyScalar& value) {
+
53  can_assign();
+
54  GroupConfig::Group& grp = conf.groups[group];
+
55 
+
56  if(depth==2) {
+
57  if(field=="+atomic") {
+
58  grp.atomic = value.as<pvd::boolean>();
+
59  grp.atomic_set = true;
+
60 
+
61  } else if(field=="+id") {
+
62  grp.id = value.as<std::string>();
+
63 
+
64  } else {
+
65  conf.warning += "Unknown group option ";
+
66  conf.warning += field;
+
67  }
+
68  field.clear();
+
69 
+
70  } else if(depth==3) {
+
71  GroupConfig::Field& fld = grp.fields[field];
+
72 
+
73  if(key=="+type") {
+
74  fld.type = value.ref<std::string>();
+
75 
+
76  } else if(key=="+channel") {
+
77  fld.channel = chanprefix + value.ref<std::string>();
+
78 
+
79  } else if(key=="+id") {
+
80  fld.id = value.ref<std::string>();
+
81 
+
82  } else if(key=="+trigger") {
+
83  fld.trigger = value.ref<std::string>();
+
84 
+
85  } else if(key=="+putorder") {
+
86  fld.putorder = value.as<pvd::int32>();
+
87 
+
88  } else {
+
89  conf.warning += "Unknown group field option ";
+
90  conf.warning += field;
+
91  }
+
92  key.clear();
+
93  }
+
94  }
+
95 };
+
96 
+
97 #define TRY context *self = (context*)ctx; try
+
98 
+
99 #define CATCH() catch(std::exception& e) { if(self->msg.empty()) self->msg = e.what(); return 0; }
+
100 
+
101 int conf_null(void * ctx)
+
102 {
+
103  TRY {
+
104  self->assign(pvd::AnyScalar());
+
105  return 1;
+
106  }CATCH()
+
107 }
+
108 
+
109 
+
110 int conf_boolean(void * ctx, int boolVal)
+
111 {
+
112  TRY {
+
113  self->assign(pvd::AnyScalar(pvd::boolean(boolVal)));
+
114  return 1;
+
115  }CATCH()
+
116 }
+
117 
+
118 int conf_integer(void * ctx, integer_arg integerVal)
+
119 {
+
120  TRY {
+
121  self->assign(pvd::AnyScalar(pvd::int64(integerVal)));
+
122  return 1;
+
123  }CATCH()
+
124 }
+
125 
+
126 int conf_double(void * ctx, double doubleVal)
+
127 {
+
128  TRY {
+
129  self->assign(pvd::AnyScalar(doubleVal));
+
130  return 1;
+
131  }CATCH()
+
132 }
+
133 
+
134 int conf_string(void * ctx, const unsigned char * stringVal,
+
135  size_arg stringLen)
+
136 {
+
137  TRY {
+
138  std::string val((const char*)stringVal, stringLen);
+
139  self->assign(pvd::AnyScalar(val));
+
140  return 1;
+
141  }CATCH()
+
142 }
+
143 
+
144 int conf_start_map(void * ctx)
+
145 {
+
146  TRY {
+
147  self->depth++;
+
148  if(self->depth>3)
+
149  throw std::runtime_error("Group field def. can't contain Object (too deep)");
+
150  return 1;
+
151  }CATCH()
+
152 }
+
153 
+
154 int conf_map_key(void * ctx, const unsigned char * key,
+
155  size_arg stringLen)
+
156 {
+
157  TRY {
+
158  if(stringLen==0 && self->depth!=2)
+
159  throw std::runtime_error("empty group or key name not allowed");
+
160 
+
161  std::string name((const char*)key, stringLen);
+
162 
+
163  if(self->depth==1)
+
164  self->group.swap(name);
+
165  else if(self->depth==2)
+
166  self->field.swap(name);
+
167  else if(self->depth==3)
+
168  self->key.swap(name);
+
169  else
+
170  throw std::logic_error("Too deep!!");
+
171 
+
172  return 1;
+
173  }CATCH()
+
174 }
+
175 
+
176 int conf_end_map(void * ctx)
+
177 {
+
178  TRY {
+
179  assert(self->key.empty()); // cleared in assign()
+
180 
+
181  if(self->depth==3)
+
182  self->key.clear();
+
183  else if(self->depth==2)
+
184  self->field.clear();
+
185  else if(self->depth==1)
+
186  self->group.clear();
+
187  else
+
188  throw std::logic_error("Invalid depth");
+
189  self->depth--;
+
190 
+
191  return 1;
+
192  }CATCH()
+
193 }
+
194 
+
195 yajl_callbacks conf_cbs = {
+
196  &conf_null,
+
197  &conf_boolean,
+
198  &conf_integer,
+
199  &conf_double,
+
200  NULL, // number
+
201  &conf_string,
+
202  &conf_start_map,
+
203  &conf_map_key,
+
204  &conf_end_map,
+
205  NULL, // start_array,
+
206  NULL, // end_array,
+
207 };
+
208 
+
209 struct handler {
+
210  yajl_handle handle;
+
211  handler(yajl_handle handle) :handle(handle)
+
212  {
+
213  if(!handle)
+
214  throw std::runtime_error("Failed to allocate yajl handle");
+
215  }
+
216  ~handler() {
+
217  yajl_free(handle);
+
218  }
+
219  operator yajl_handle() { return handle; }
+
220 };
+
221 
+
222 }// namespace
+
223 
+
224 void GroupConfig::parse(const char *txt,
+
225  const char *recname,
+
226  GroupConfig& result)
+
227 {
+
228 #ifndef EPICS_YAJL_VERSION
+
229  yajl_parser_config conf;
+
230  memset(&conf, 0, sizeof(conf));
+
231  conf.allowComments = 1;
+
232  conf.checkUTF8 = 1;
+
233 #endif
+
234 
+
235  std::istringstream strm(txt);
+
236 
+
237  std::string chanprefix;
+
238  if(recname) {
+
239  chanprefix = recname;
+
240  chanprefix += '.';
+
241  }
+
242  context ctxt(chanprefix, result);
+
243 
+
244 #ifndef EPICS_YAJL_VERSION
+
245  handler handle(yajl_alloc(&conf_cbs, &conf, NULL, &ctxt));
+
246 #else
+
247  handler handle(yajl_alloc(&conf_cbs, NULL, &ctxt));
+
248 
+
249  yajl_config(handle, yajl_allow_comments, 1);
+
250 #endif
+
251 
+
252  if(!pvd::yajl_parse_helper(strm, handle))
+
253  throw std::runtime_error(ctxt.msg);
+
254 }
+ + + +
+ + + + diff --git a/dbf__copy_8cpp_source.html b/dbf__copy_8cpp_source.html new file mode 100644 index 0000000..6b4f1ee --- /dev/null +++ b/dbf__copy_8cpp_source.html @@ -0,0 +1,344 @@ + + + + + + +pva2pva: pdbApp/dbf_copy.cpp Source File + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
dbf_copy.cpp
+
+
+
1 
+
2 #include <epicsStdio.h>
+
3 #include <dbAccess.h>
+
4 #include <dbChannel.h>
+
5 #include <dbStaticLib.h>
+
6 #include <dbLock.h>
+
7 #include <dbEvent.h>
+
8 #include <epicsString.h>
+
9 #include <epicsVersion.h>
+
10 
+
11 #include <pv/status.h>
+
12 #include <pv/bitSet.h>
+
13 #include <pv/pvData.h>
+
14 #include <pv/anyscalar.h>
+
15 
+
16 #include "pvif.h"
+
17 
+
18 namespace pvd = epics::pvData;
+
19 
+
20 // note that we handle DBF_ENUM differently than in pvif.cpp
+
21 static
+
22 pvd::ScalarType DBR2PVD(short dbr)
+
23 {
+
24  switch(dbr) {
+
25 #define CASE(BASETYPE, PVATYPE, DBFTYPE, PVACODE) case DBR_##DBFTYPE: return pvd::pv##PVACODE;
+
26 #define CASE_SKIP_BOOL
+
27 #define CASE_REAL_INT64
+
28 #include "pv/typemap.h"
+
29 #undef CASE_SKIP_BOOL
+
30 #undef CASE_REAL_INT64
+
31 #undef CASE
+
32  case DBF_ENUM: return pvd::pvUShort;
+
33  case DBF_STRING: return pvd::pvString;
+
34  }
+
35  throw std::invalid_argument("Unsupported DBR code");
+
36 }
+
37 
+
38 long copyPVD2DBF(const pvd::PVField::const_shared_pointer& inraw,
+
39  void *outbuf, short outdbf, long *outnReq)
+
40 {
+
41  long nreq = outnReq ? *outnReq : 1;
+
42  if(!inraw || nreq <= 0 || INVALID_DB_REQ(outdbf)) return S_db_errArg;
+
43 
+
44  pvd::ScalarType outpvd = DBR2PVD(outdbf);
+
45 
+
46  pvd::PVField::const_shared_pointer in(inraw);
+
47 
+
48  if(outdbf != DBF_STRING && in->getField()->getType() == pvd::structure) {
+
49  // assume NTEnum.
+
50  // index to string not requested, so attempt to treat .index as plain integer
+
51  in = static_cast<const pvd::PVStructure*>(in.get())->getSubField("index");
+
52  if(!in) return S_db_errArg;
+
53  }
+
54 
+
55  if(in->getField()->getType() == pvd::structure) {
+
56  assert(outdbf == DBF_STRING);
+
57  char *outsbuf = (char*)outbuf;
+
58 
+
59  // maybe NTEnum
+
60  // try index -> string
+
61  const pvd::PVStructure* sin = static_cast<const pvd::PVStructure*>(in.get());
+
62 
+
63  pvd::PVScalar::const_shared_pointer index(sin->getSubField<pvd::PVScalar>("index"));
+
64  if(!index) return S_db_badField; // Not NTEnum, don't know how to handle...
+
65 
+
66  // we will have an answer.
+
67  if(outnReq)
+
68  *outnReq = 1;
+
69 
+
70  pvd::uint16 ival = index->getAs<pvd::uint16>();
+
71 
+
72 
+
73  pvd::PVStringArray::const_shared_pointer choices(sin->getSubField<pvd::PVStringArray>("choices"));
+
74 
+
75  if(choices) {
+
76  pvd::PVStringArray::const_svector strs(choices->view());
+
77 
+
78  if(ival < strs.size()) {
+
79  // found it!
+
80 
+
81  const std::string& sval = strs[ival];
+
82  size_t slen = std::min(sval.size(), size_t(MAX_STRING_SIZE-1));
+
83  memcpy(outbuf, sval.c_str(), slen);
+
84  outsbuf[slen] = '\0';
+
85  return 0;
+
86  }
+
87  }
+
88  // didn't find it. either no choices or index is out of range
+
89 
+
90  // print numeric index
+
91  epicsSnprintf(outsbuf, MAX_STRING_SIZE, "%u", ival);
+
92  return 0;
+
93 
+
94  } else if(in->getField()->getType() == pvd::scalarArray) {
+
95  const pvd::PVScalarArray* sarr = static_cast<const pvd::PVScalarArray*>(in.get());
+
96  pvd::shared_vector<const void> arr;
+
97  sarr->getAs(arr);
+
98  size_t elemsize = pvd::ScalarTypeFunc::elementSize(arr.original_type());
+
99 
+
100  arr.slice(0, nreq*elemsize);
+
101  nreq = arr.size()/elemsize;
+
102 
+
103  if(outdbf == DBF_STRING) {
+
104  char *outsbuf = (char*)outbuf;
+
105 
+
106  // allocate a temp buffer of string[], ick...
+
107  pvd::shared_vector<std::string> strs(nreq); // alloc
+
108 
+
109  pvd::castUnsafeV(nreq, pvd::pvString, strs.data(), arr.original_type(), arr.data());
+
110 
+
111  for(long i =0; i<nreq; i++, outsbuf += MAX_STRING_SIZE) {
+
112  size_t slen = std::min(strs[i].size(), size_t(MAX_STRING_SIZE-1));
+
113  memcpy(outsbuf, strs[i].c_str(), slen);
+
114  outsbuf[slen] = '\0';
+
115  }
+
116 
+
117  } else {
+
118  pvd::castUnsafeV(nreq, outpvd, outbuf, arr.original_type(), arr.data());
+
119  }
+
120 
+
121  if(outnReq)
+
122  *outnReq = nreq;
+
123  return 0;
+
124 
+
125  } else if(in->getField()->getType() == pvd::scalar) {
+
126  char *outsbuf = (char*)outbuf;
+
127  const pvd::PVScalar* sval = static_cast<const pvd::PVScalar*>(in.get());
+
128  pvd::AnyScalar val;
+
129  sval->getAs(val);
+
130 
+
131  if(outdbf == DBF_STRING && val.type()==pvd::pvString) {
+
132  // std::string to char*
+
133  size_t len = std::min(val.as<std::string>().size(), size_t(MAX_STRING_SIZE-1));
+
134 
+
135  memcpy(outbuf, val.as<std::string>().c_str(), len);
+
136  outsbuf[len] = '\0';
+
137 
+
138  } else if(outdbf == DBF_STRING) {
+
139  // non-string to char*
+
140  std::string temp;
+
141 
+
142  pvd::castUnsafeV(1, pvd::pvString, &temp, val.type(), val.unsafe());
+
143 
+
144  size_t len = std::min(temp.size(), size_t(MAX_STRING_SIZE-1));
+
145 
+
146  memcpy(outbuf, temp.c_str(), len);
+
147  outsbuf[len] = '\0';
+
148 
+
149  } else {
+
150  // non-string to any
+
151  pvd::castUnsafeV(1, outpvd, outbuf, val.type(), val.unsafe());
+
152  }
+
153 
+
154  if(outnReq)
+
155  *outnReq = 1;
+
156  return 0;
+
157 
+
158  } else {
+
159  // struct array or other strangeness which I don't know how to handle
+
160  return S_dbLib_badField;
+
161  }
+
162 }
+
163 
+
164 long copyDBF2PVD(const pvd::shared_vector<const void> &inbuf,
+
165  const pvd::PVField::shared_pointer& outraw,
+
166  pvd::BitSet& changed,
+
167  const pvd::PVStringArray::const_svector &choices)
+
168 {
+
169 
+
170  pvd::ScalarType inpvd = inbuf.original_type();
+
171  size_t incnt = inbuf.size()/pvd::ScalarTypeFunc::elementSize(inpvd);
+
172 
+
173  if(!outraw) return S_db_errArg;
+
174 
+
175  pvd::PVField::shared_pointer out(outraw);
+
176 
+
177  if(inpvd != pvd::pvString && out->getField()->getType() == pvd::structure) {
+
178  // assume NTEnum.
+
179  // string to index not requested, so attempt to treat .index as plain integer
+
180  out = static_cast<pvd::PVStructure*>(out.get())->getSubField("index");
+
181  if(!out) return S_db_errArg;
+
182  }
+
183 
+
184  if(out->getField()->getType() == pvd::structure) {
+
185  assert(inpvd == pvd::pvString);
+
186 
+
187  if(incnt==0)
+
188  return S_db_errArg; // Need at least one string
+
189 
+
190  const pvd::shared_vector<const std::string> insbuf(pvd::static_shared_vector_cast<const std::string>(inbuf));
+
191  const std::string& instr(insbuf[0]);
+
192 
+
193  // assume NTEnum
+
194  // try string to index, then parse
+
195  pvd::PVStructure* sout = static_cast<pvd::PVStructure*>(out.get());
+
196 
+
197  pvd::PVScalar::shared_pointer index(sout->getSubField<pvd::PVScalar>("index"));
+
198  if(!index) return S_db_badField; // Not NTEnum, don't know how to handle...
+
199 
+
200  pvd::uint16 result = pvd::uint16(-1);
+
201  bool match = false;
+
202 
+
203  for(size_t i=0, N=std::min(size_t(0xffff), choices.size()); i<N; i++) {
+
204  if(choices[i] == instr) {
+
205  match = true;
+
206  result = pvd::uint16(i);
+
207  }
+
208  }
+
209 
+
210  if(!match) {
+
211  // no choice string matched, so try to parse as integer
+
212 
+
213  try{
+
214  result = pvd::castUnsafe<pvd::uint16>(instr);
+
215  }catch(std::exception&){
+
216  return S_db_errArg;
+
217  }
+
218  }
+
219 
+
220  index->putFrom(result);
+
221 
+
222  out = index;
+
223 
+
224  } else if(out->getField()->getType() == pvd::scalarArray) {
+
225  pvd::PVScalarArray* sarr = static_cast<pvd::PVScalarArray*>(out.get());
+
226 
+
227  sarr->putFrom(inbuf);
+
228 
+
229  } else if(out->getField()->getType() == pvd::scalar) {
+
230  pvd::PVScalar* sval = static_cast<pvd::PVScalar*>(out.get());
+
231 
+
232  if(incnt==0) return S_db_errArg;
+
233 
+
234  pvd::AnyScalar val(inpvd, inbuf.data());
+
235 
+
236  sval->putFrom(val);
+
237 
+
238  } else {
+
239  // struct array or other strangeness which I don't know how to handle
+
240  return S_db_badField;
+
241  }
+
242 
+
243  changed.set(out->getFieldOffset());
+
244  return 0;
+
245 }
+
+ + + + diff --git a/demo_8cpp_source.html b/demo_8cpp_source.html new file mode 100644 index 0000000..69b5c0b --- /dev/null +++ b/demo_8cpp_source.html @@ -0,0 +1,215 @@ + + + + + + +pva2pva: pdbApp/demo.cpp Source File + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
demo.cpp
+
+
+
1 
+
2 #include <epicsMath.h>
+
3 #include <dbAccess.h>
+
4 #include <dbScan.h>
+
5 #include <dbLink.h>
+
6 #include <recGbl.h>
+
7 #include <alarm.h>
+
8 
+
9 #include <longinRecord.h>
+
10 #include <waveformRecord.h>
+
11 #include <menuFtype.h>
+
12 
+
13 #include <epicsExport.h>
+
14 
+
15 namespace {
+
16 
+
17 // pi/180
+
18 static const double pi_180 = 0.017453292519943295;
+
19 
+
20 int dummy;
+
21 
+
22 long init_spin(waveformRecord *prec)
+
23 {
+
24  if(prec->ftvl==menuFtypeDOUBLE)
+
25  prec->dpvt = &dummy;
+
26  return 0;
+
27 }
+
28 
+
29 long process_spin(waveformRecord *prec)
+
30 {
+
31  if(prec->dpvt != &dummy) {
+
32  (void)recGblSetSevr(prec, COMM_ALARM, INVALID_ALARM);
+
33  return 0;
+
34  }
+
35 
+
36  const double freq = 360.0*pi_180/100; // rad/sample
+
37  double phase = 0;
+
38  double *val = static_cast<double*>(prec->bptr);
+
39 
+
40  long ret = dbGetLink(&prec->inp, DBF_DOUBLE, &phase, 0, 0);
+
41  if(ret) {
+
42  (void)recGblSetSevr(prec, LINK_ALARM, INVALID_ALARM);
+
43  return ret;
+
44  }
+
45 
+
46  phase *= pi_180; // deg -> rad
+
47 
+
48  for(size_t i=0, N=prec->nelm; i<N; i++)
+
49  val[i] = sin(freq*i+phase);
+
50 
+
51  prec->nord = prec->nelm;
+
52 
+
53 #ifdef DBRutag
+
54  prec->utag = (prec->utag+1u)&0x7fffffff;
+
55 #endif
+
56 
+
57  return 0;
+
58 }
+
59 
+
60 long process_repeat(waveformRecord *prec)
+
61 {
+
62  long ret;
+
63  if(prec->ftvl!=menuFtypeULONG) {
+
64  recGblSetSevr(prec, READ_ALARM, INVALID_ALARM);
+
65  return S_db_badDbrtype;
+
66  }
+
67 
+
68  epicsUInt32 iv=0;
+
69  if(!!(ret = dbGetLink(&prec->inp, DBF_ULONG, &iv, NULL, NULL))) {
+
70  recGblSetSevr(prec, READ_ALARM, INVALID_ALARM);
+
71  return ret;
+
72  }
+
73 
+
74  epicsUInt32 *val = (epicsUInt32*)prec->bptr;
+
75  for(size_t i=0, N=prec->nelm; i<N; i++) {
+
76  val[i] = iv;
+
77  }
+
78 
+
79  prec->nord = iv;
+
80 
+
81  return 0;
+
82 }
+
83 
+
84 long process_utag(longinRecord *prec)
+
85 {
+
86  long status = dbGetLink(&prec->inp, DBR_LONG, &prec->val, 0, 0);
+
87 #ifdef DBRutag
+
88  prec->utag = prec->val;
+
89 #else
+
90  (void)recGblSetSevr(prec, COMM_ALARM, INVALID_ALARM);
+
91 #endif
+
92  return status;
+
93 }
+
94 
+
95 template<typename REC>
+
96 struct dset5
+
97 {
+
98  long count;
+
99  long (*report)(int);
+
100  long (*init)(int);
+
101  long (*init_record)(REC *);
+
102  long (*get_ioint_info)(int, REC *, IOSCANPVT*);
+
103  long (*process)(REC *);
+
104 };
+
105 
+
106 dset5<waveformRecord> devWfPDBDemo = {5,0,0,&init_spin,0,&process_spin};
+
107 dset5<waveformRecord> devWfPDBDemoRepeat = {5,0,0,0,0,&process_repeat};
+
108 dset5<longinRecord> devLoPDBUTag = {5,0,0,0,0,&process_utag};
+
109 
+
110 } // namespace
+
111 
+
112 extern "C" {
+
113 epicsExportAddress(dset, devWfPDBDemo);
+
114 epicsExportAddress(dset, devWfPDBDemoRepeat);
+
115 epicsExportAddress(dset, devLoPDBUTag);
+
116 }
+
+ + + + diff --git a/dir_138aff360eb965c43b94267b8d1ce09e.html b/dir_138aff360eb965c43b94267b8d1ce09e.html new file mode 100644 index 0000000..5e0758b --- /dev/null +++ b/dir_138aff360eb965c43b94267b8d1ce09e.html @@ -0,0 +1,107 @@ + + + + + + +pva2pva: documentation Directory Reference + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + +
+ +
+ + +
+
+
+
documentation Directory Reference
+
+
+
+Directory dependency graph for documentation:
+
+
documentation
+ + +
+ + + + +

+Files

file  conf.py [code]
 
+
+ + + + diff --git a/dir_138aff360eb965c43b94267b8d1ce09e_dep.map b/dir_138aff360eb965c43b94267b8d1ce09e_dep.map new file mode 100644 index 0000000..d242842 --- /dev/null +++ b/dir_138aff360eb965c43b94267b8d1ce09e_dep.map @@ -0,0 +1,3 @@ + + + diff --git a/dir_138aff360eb965c43b94267b8d1ce09e_dep.md5 b/dir_138aff360eb965c43b94267b8d1ce09e_dep.md5 new file mode 100644 index 0000000..e0fe439 --- /dev/null +++ b/dir_138aff360eb965c43b94267b8d1ce09e_dep.md5 @@ -0,0 +1 @@ +4d7e5d296be37a928a2c3a5c39e80340 \ No newline at end of file diff --git a/dir_138aff360eb965c43b94267b8d1ce09e_dep.png b/dir_138aff360eb965c43b94267b8d1ce09e_dep.png new file mode 100644 index 0000000000000000000000000000000000000000..3b8c8c810a08c4aee42b68323752353bdc9f815e GIT binary patch literal 1426 zcma*nc{tk#7zgklZB%uk#mZErQ&&4w)^1f%M;8r?x=UBLA}DpuSyHkdL@-IEqwba< z5vj9vrRs<~bwp^ZDXj#l#H~7!>HgTWfA&0k-sgS4e|(?k{qvJ*XM+ICsK@{S0JgG( zJM3oE?!u%ccW>Vrht1uP@0H&7GxzW5+i`JzAW z8)W71-d-s`P3e$lrQ{?J(6K27a3{As2MLeTDdGa<$R7|t0@!li+I63Nc!9bZprS>tI4m#hH$z)9XvHHrY zs?u^x&Fqzjxowh3M_~<;W@z+}^$X)wLo+jjKH-%PCxU`0p7);zdj*Q^`PyHtdXrc| zAOMf+jAf0Z^%VWD>MqJM3Z413laoF{sWvDbeROqWOs7BJvEr>!cu9A#3CZd3L~vq^ za3gfm!O1=xr*ZuJ`OG<_0Rt#v3A9t@%gU|;G?eWLb8FA1VIbh{y~5vpAD40a@$wx|HgxC3fbV$1w&BvduJ_Klx5k5kFvC2HYciOy@3Ph7bBW!Lq|~!w?X|!U`j4uqRZ_MCqNDxa zcMn3}jzx$VREXUELOP$#d$mX(9c^!y01nF3P6Ri+UVMzvXQy0gvC)uMxcv~jwkeL@ zNziM>elEGgv|V^BZq9B#>-goVsa7y}5Q;@CiXnW) zPcPEayKSw@Dyh_r)Ko@{VB5{b1q`UlqJ$ozUP56;Mw6=S&5%VUqkQvf(=hJ9iF+M_ zu!&4a^-}Cbi6jPcA3$cU%yg}>$d{Hq8y|m2tlf&tME&Yj6v}DKXH(rXvW#J{JwURV z*Nqz){j;A%r}zujfWhfiOpcjCy|}YQ7g53!e(>!HHqp-Rb8vJCJoCCd5sp7ZB8>6n zmbNeyUHiB#lnDn}$n>-i*M+&}5xYl&Hk;j;F`~`q{-Ln7y literal 0 HcmV?d00001 diff --git a/dir_46f976b0973771c28afc7d2dbc59236d.html b/dir_46f976b0973771c28afc7d2dbc59236d.html new file mode 100644 index 0000000..bb93e7b --- /dev/null +++ b/dir_46f976b0973771c28afc7d2dbc59236d.html @@ -0,0 +1,151 @@ + + + + + + +pva2pva: pdbApp Directory Reference + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + +
+ +
+ + +
+
+
+
pdbApp Directory Reference
+
+
+
+Directory dependency graph for pdbApp:
+
+
pdbApp
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Files

file  configparse.cpp [code]
 
file  dbf_copy.cpp [code]
 
file  demo.cpp [code]
 
file  imagedemo.c [code]
 
file  pdb.cpp [code]
 
file  pdb.h [code]
 
file  pdbgroup.cpp [code]
 
file  pdbgroup.h [code]
 
file  pdbsingle.cpp [code]
 
file  pdbsingle.h [code]
 
 
 
 
 
 
 
 
file  pvif.cpp [code]
 
file  pvif.h [code]
 
file  qsrv.cpp [code]
 
file  softMain.cpp [code]
 
file  tpool.cpp [code]
 
file  tpool.h [code]
 
+
+ + + + diff --git a/dir_46f976b0973771c28afc7d2dbc59236d_dep.map b/dir_46f976b0973771c28afc7d2dbc59236d_dep.map new file mode 100644 index 0000000..c31ba95 --- /dev/null +++ b/dir_46f976b0973771c28afc7d2dbc59236d_dep.map @@ -0,0 +1,3 @@ + + + diff --git a/dir_46f976b0973771c28afc7d2dbc59236d_dep.md5 b/dir_46f976b0973771c28afc7d2dbc59236d_dep.md5 new file mode 100644 index 0000000..12b3ff2 --- /dev/null +++ b/dir_46f976b0973771c28afc7d2dbc59236d_dep.md5 @@ -0,0 +1 @@ +bd163614b44dd8222685dd3ce3de05b9 \ No newline at end of file diff --git a/dir_46f976b0973771c28afc7d2dbc59236d_dep.png b/dir_46f976b0973771c28afc7d2dbc59236d_dep.png new file mode 100644 index 0000000000000000000000000000000000000000..316dbe673ff0fa425f9ed84d09d02a62758b7aed GIT binary patch literal 962 zcmV;z13mnSP)S|h5cNe0z7qU1C3T=y zSibOY;tZQFL=2W8OeGLUy)bqg-YLWoLCG-@An)zhY#c&K9Fg|2m-Thi7OIul4s;hg%DTju%2E!PuRI58wsxG$G>+6*OfV{jylEj;v zpP!XkE-yPBY-wrtymaSeL{3^SYeD2kb!Tm%5j%$Ux~%o{vssah@W;?#B3*#jgJDSIH5#%*tZ z6$k{0iFdiH2??Y_L-a2n>t+QIqOH1<| z9nXr3%PT7%x3@PNjibA}wuyA3-32Hv|`xR|6P zi;ERCHH}JTZD!`ZkdRO=RdRAlRFs4yafRaH>C9|zy9B+dT;TlXfL^aJDJePU z?vmANPED2iVk?R_vp3VRyGt(bNTA>Ce@(_<+~>PfD_ZYK@aimH+?%07*qoM6N<$g0H5)L;wH) literal 0 HcmV?d00001 diff --git a/dir_aa611b0b6017302a0b5c69f5fe6608dd.html b/dir_aa611b0b6017302a0b5c69f5fe6608dd.html new file mode 100644 index 0000000..8beca74 --- /dev/null +++ b/dir_aa611b0b6017302a0b5c69f5fe6608dd.html @@ -0,0 +1,133 @@ + + + + + + +pva2pva: p2pApp Directory Reference + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + +
+ +
+ + +
+
+
+
p2pApp Directory Reference
+
+
+
+Directory dependency graph for p2pApp:
+
+
p2pApp
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Files

file  chancache.cpp [code]
 
file  chancache.h [code]
 
file  channel.cpp [code]
 
file  channel.h [code]
 
file  gwmain.cpp [code]
 
file  helper.h [code]
 
file  moncache.cpp [code]
 
file  pva2pva.h [code]
 
file  server.cpp [code]
 
file  server.h [code]
 
file  testmon.cpp [code]
 
file  utilitiesx.cpp [code]
 
file  weakmap.h [code]
 
file  weakset.h [code]
 
+
+ + + + diff --git a/dir_aa611b0b6017302a0b5c69f5fe6608dd_dep.map b/dir_aa611b0b6017302a0b5c69f5fe6608dd_dep.map new file mode 100644 index 0000000..4e339c9 --- /dev/null +++ b/dir_aa611b0b6017302a0b5c69f5fe6608dd_dep.map @@ -0,0 +1,3 @@ + + + diff --git a/dir_aa611b0b6017302a0b5c69f5fe6608dd_dep.md5 b/dir_aa611b0b6017302a0b5c69f5fe6608dd_dep.md5 new file mode 100644 index 0000000..0ac1cb3 --- /dev/null +++ b/dir_aa611b0b6017302a0b5c69f5fe6608dd_dep.md5 @@ -0,0 +1 @@ +39540a6dfad90207eeccb1e903c8d9a0 \ No newline at end of file diff --git a/dir_aa611b0b6017302a0b5c69f5fe6608dd_dep.png b/dir_aa611b0b6017302a0b5c69f5fe6608dd_dep.png new file mode 100644 index 0000000000000000000000000000000000000000..7b000ac5074eab9b4c50c11d04da956cfe47ebb2 GIT binary patch literal 932 zcmV;V16%xwP)LtUX1lt4g`px~+InruooN=jO)A>sqYXq5(RYaSpz4kcMIr9LoWdsvhtCTmQh zX*=^{4zu6>`S$xWv&%BG%b{r+KuJon3rHHsIecJ&2S-OoCX>nU_b02Gt0Ox*yP~2Z zC`1RK*Xxs1*p-7}7#&Q|nEQM_002e(Z%_M)30-TeJR}J3eU6;N2XYP{$T@r<=kS4? z!v}H>AILd;Am_I;d!cO9yx3xXq+uJc3EoQToqCCC5&soG98@A2OZ=<8*Hru+>xtZ`{Scu)Z%jMv5 zIVRJjL{gBSpVim*;`sRZ-#w8gRt09aVCMas;6IrgSj6CqA%nvQqOg+ejY5sM3VcXyb+Uau)DyX*0| z&1P$H@x4e&lGOTqK9MMc%jHy8KL7v(4tvmErge3_G8l-nz1{PfBL!n4UgtR8?Q%KR)~thr{S6II zz21F=;th@uq^73Y?cbReR=K!1=XU>;$(qvAZZJ(Id*XE3ZMOBWdX`{pU>8eRsjqLU ztE)LU_$`$-_VnQE>#K){2kq^Rfg0u(4N>Cw%gV|}nVDH + + + + + +pva2pva: common Directory Reference + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + +
+ +
+ + +
+
+
+
common Directory Reference
+
+
+
+Directory dependency graph for common:
+
+
common
+ + +
+ + + + + + + + + + +

+Files

file  pvahelper.h [code]
 
file  sb.h [code]
 
file  utilities.cpp [code]
 
file  utilities.h [code]
 
+
+ + + + diff --git a/dir_bdd9a5d540de89e9fe90efdfc6973a4f_dep.map b/dir_bdd9a5d540de89e9fe90efdfc6973a4f_dep.map new file mode 100644 index 0000000..2bd78d4 --- /dev/null +++ b/dir_bdd9a5d540de89e9fe90efdfc6973a4f_dep.map @@ -0,0 +1,3 @@ + + + diff --git a/dir_bdd9a5d540de89e9fe90efdfc6973a4f_dep.md5 b/dir_bdd9a5d540de89e9fe90efdfc6973a4f_dep.md5 new file mode 100644 index 0000000..56e514d --- /dev/null +++ b/dir_bdd9a5d540de89e9fe90efdfc6973a4f_dep.md5 @@ -0,0 +1 @@ +415a2e4a9767d2d3b960388655ebead4 \ No newline at end of file diff --git a/dir_bdd9a5d540de89e9fe90efdfc6973a4f_dep.png b/dir_bdd9a5d540de89e9fe90efdfc6973a4f_dep.png new file mode 100644 index 0000000000000000000000000000000000000000..88b3ffd5bd78ad91774275b65395ba9e1e583958 GIT binary patch literal 802 zcmV+-1Ks?IP)9@JmF#6~_~7V4!>As7U4%tY$SB!8EN5yxNSn)^Y$&&f-w3;v?P^Ze z@Atun?|u2+m+yz;e#r0cC_xYaORf}qfTBUn@q@`dNT<_&zdxJJ7HgWqp-?DlYip0C zgdBW6Uy%kYI1IxG$2oS*GnotkB$JnIwV#{wwzYAhB)<1KF~<*LjvvGvKZrSg5Oe$> z=J-L(@q?J-2QkMF$>y0%#^HETRaK_f%iG%@r&9YUpGxg_bUb0%>y?%2!NH!x!!!Vt zmQvHxE|bZq*UKj-9Ujm7>S|4S`L)r}L3Gxc1*f&0nVB}3j9P7}(>Zod_1x`9kH-T5 z$)u3yH$42RqM|Yo*jQfPtf?_|cJ`pW&DL61S04<91Az^r@pfO|OSF?|wLXl+4xG++ z0MOL*AQn5An0NyKTU%fMq~Nr+jg9vsk?&JeZvh}2{+54cm&+qE6$C-DIm_O1yJu0n zy7~#liNp_@rdL)%DDQU9YPBpHad9z-3Pkbx`sXtX^0Zx8_#kQ})tmu|#N$z&PLE=P z!DuiT0bp-0kb|1LHS4|tWw=P_e@9RX-iQTU7IDJ&vB1NMxOC}i04DSy`AxR z6aZv0S#vYj-~TikjqrTPZhvmGwO(+t!nH+6Ht*^hFq%E4CyJ~gW(9o}?b!_al zLZPa!zthrUF`F&j-2;DRz5=xc04n#*0k7A~aolBnx+Ho>g8Y-g4`PlV#2i0}Ierjx z{2=D|LCo=knBxaA$Bz?so#*Fg{{0*UWo>Qsglz8S`_j@9!${tN|1VIh)uJa2lt8{+ g!VO}MANZR81Q}3L+NuLI82|tP07*qoM6N<$g3A|!p8x;= literal 0 HcmV?d00001 diff --git a/doxygen.css b/doxygen.css new file mode 100644 index 0000000..4699e69 --- /dev/null +++ b/doxygen.css @@ -0,0 +1,1357 @@ +/* The standard CSS for doxygen 1.8.5 */ + +body, table, div, p, dl { + font: 400 14px/22px Roboto,sans-serif; +} + +/* @group Heading Levels */ + +h1.groupheader { + font-size: 150%; +} + +.title { + font: 400 14px/28px Roboto,sans-serif; + font-size: 150%; + font-weight: bold; + margin: 10px 2px; +} + +h2.groupheader { + border-bottom: 1px solid #879ECB; + color: #354C7B; + font-size: 150%; + font-weight: normal; + margin-top: 1.75em; + padding-top: 8px; + padding-bottom: 4px; + width: 100%; +} + +h3.groupheader { + font-size: 100%; +} + +h1, h2, h3, h4, h5, h6 { + -webkit-transition: text-shadow 0.5s linear; + -moz-transition: text-shadow 0.5s linear; + -ms-transition: text-shadow 0.5s linear; + -o-transition: text-shadow 0.5s linear; + transition: text-shadow 0.5s linear; + margin-right: 15px; +} + +h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow { + text-shadow: 0 0 15px cyan; +} + +dt { + font-weight: bold; +} + +div.multicol { + -moz-column-gap: 1em; + -webkit-column-gap: 1em; + -moz-column-count: 3; + -webkit-column-count: 3; +} + +p.startli, p.startdd, p.starttd { + margin-top: 2px; +} + +p.endli { + margin-bottom: 0px; +} + +p.enddd { + margin-bottom: 4px; +} + +p.endtd { + margin-bottom: 2px; +} + +/* @end */ + +caption { + font-weight: bold; +} + +span.legend { + font-size: 70%; + text-align: center; +} + +h3.version { + font-size: 90%; + text-align: center; +} + +div.qindex, div.navtab{ + background-color: #EBEFF6; + border: 1px solid #A3B4D7; + text-align: center; +} + +div.qindex, div.navpath { + width: 100%; + line-height: 140%; +} + +div.navtab { + margin-right: 15px; +} + +/* @group Link Styling */ + +a { + color: #3D578C; + font-weight: normal; + text-decoration: none; +} + +.contents a:visited { + color: #4665A2; +} + +a:hover { + text-decoration: underline; +} + +a.qindex { + font-weight: bold; +} + +a.qindexHL { + font-weight: bold; + background-color: #9CAFD4; + color: #ffffff; + border: 1px double #869DCA; +} + +.contents a.qindexHL:visited { + color: #ffffff; +} + +a.el { + font-weight: bold; +} + +a.elRef { +} + +a.code, a.code:visited, a.line, a.line:visited { + color: #4665A2; +} + +a.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited { + color: #4665A2; +} + +/* @end */ + +dl.el { + margin-left: -1cm; +} + +pre.fragment { + border: 1px solid #C4CFE5; + background-color: #FBFCFD; + padding: 4px 6px; + margin: 4px 8px 4px 2px; + overflow: auto; + word-wrap: break-word; + font-size: 9pt; + line-height: 125%; + font-family: monospace, fixed; + font-size: 105%; +} + +div.fragment { + padding: 0px; + margin: 0px; + background-color: #FBFCFD; + border: 1px solid #C4CFE5; +} + +div.line { + font-family: monospace, fixed; + font-size: 13px; + min-height: 13px; + line-height: 1.0; + text-wrap: unrestricted; + white-space: -moz-pre-wrap; /* Moz */ + white-space: -pre-wrap; /* Opera 4-6 */ + white-space: -o-pre-wrap; /* Opera 7 */ + white-space: pre-wrap; /* CSS3 */ + word-wrap: break-word; /* IE 5.5+ */ + text-indent: -53px; + padding-left: 53px; + padding-bottom: 0px; + margin: 0px; + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +div.line.glow { + background-color: cyan; + box-shadow: 0 0 10px cyan; +} + + +span.lineno { + padding-right: 4px; + text-align: right; + border-right: 2px solid #0F0; + background-color: #E8E8E8; + white-space: pre; +} +span.lineno a { + background-color: #D8D8D8; +} + +span.lineno a:hover { + background-color: #C8C8C8; +} + +div.ah { + background-color: black; + font-weight: bold; + color: #ffffff; + margin-bottom: 3px; + margin-top: 3px; + padding: 0.2em; + border: solid thin #333; + border-radius: 0.5em; + -webkit-border-radius: .5em; + -moz-border-radius: .5em; + box-shadow: 2px 2px 3px #999; + -webkit-box-shadow: 2px 2px 3px #999; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; + background-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#000),color-stop(0.3, #444)); + background-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000); +} + +div.groupHeader { + margin-left: 16px; + margin-top: 12px; + font-weight: bold; +} + +div.groupText { + margin-left: 16px; + font-style: italic; +} + +body { + background-color: white; + color: black; + margin: 0; +} + +div.contents { + margin-top: 10px; + margin-left: 12px; + margin-right: 8px; +} + +td.indexkey { + background-color: #EBEFF6; + font-weight: bold; + border: 1px solid #C4CFE5; + margin: 2px 0px 2px 0; + padding: 2px 10px; + white-space: nowrap; + vertical-align: top; +} + +td.indexvalue { + background-color: #EBEFF6; + border: 1px solid #C4CFE5; + padding: 2px 10px; + margin: 2px 0px; +} + +tr.memlist { + background-color: #EEF1F7; +} + +p.formulaDsp { + text-align: center; +} + +img.formulaDsp { + +} + +img.formulaInl { + vertical-align: middle; +} + +div.center { + text-align: center; + margin-top: 0px; + margin-bottom: 0px; + padding: 0px; +} + +div.center img { + border: 0px; +} + +address.footer { + text-align: right; + padding-right: 12px; +} + +img.footer { + border: 0px; + vertical-align: middle; +} + +/* @group Code Colorization */ + +span.keyword { + color: #008000 +} + +span.keywordtype { + color: #604020 +} + +span.keywordflow { + color: #e08000 +} + +span.comment { + color: #800000 +} + +span.preprocessor { + color: #806020 +} + +span.stringliteral { + color: #002080 +} + +span.charliteral { + color: #008080 +} + +span.vhdldigit { + color: #ff00ff +} + +span.vhdlchar { + color: #000000 +} + +span.vhdlkeyword { + color: #700070 +} + +span.vhdllogic { + color: #ff0000 +} + +blockquote { + background-color: #F7F8FB; + border-left: 2px solid #9CAFD4; + margin: 0 24px 0 4px; + padding: 0 12px 0 16px; +} + +/* @end */ + +/* +.search { + color: #003399; + font-weight: bold; +} + +form.search { + margin-bottom: 0px; + margin-top: 0px; +} + +input.search { + font-size: 75%; + color: #000080; + font-weight: normal; + background-color: #e8eef2; +} +*/ + +td.tiny { + font-size: 75%; +} + +.dirtab { + padding: 4px; + border-collapse: collapse; + border: 1px solid #A3B4D7; +} + +th.dirtab { + background: #EBEFF6; + font-weight: bold; +} + +hr { + height: 0px; + border: none; + border-top: 1px solid #4A6AAA; +} + +hr.footer { + height: 1px; +} + +/* @group Member Descriptions */ + +table.memberdecls { + border-spacing: 0px; + padding: 0px; +} + +.memberdecls td, .fieldtable tr { + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +.memberdecls td.glow, .fieldtable tr.glow { + background-color: cyan; + box-shadow: 0 0 15px cyan; +} + +.mdescLeft, .mdescRight, +.memItemLeft, .memItemRight, +.memTemplItemLeft, .memTemplItemRight, .memTemplParams { + background-color: #F9FAFC; + border: none; + margin: 4px; + padding: 1px 0 0 8px; +} + +.mdescLeft, .mdescRight { + padding: 0px 8px 4px 8px; + color: #555; +} + +.memSeparator { + border-bottom: 1px solid #DEE4F0; + line-height: 1px; + margin: 0px; + padding: 0px; +} + +.memItemLeft, .memTemplItemLeft { + white-space: nowrap; +} + +.memItemRight { + width: 100%; +} + +.memTemplParams { + color: #4665A2; + white-space: nowrap; + font-size: 80%; +} + +/* @end */ + +/* @group Member Details */ + +/* Styles for detailed member documentation */ + +.memtemplate { + font-size: 80%; + color: #4665A2; + font-weight: normal; + margin-left: 9px; +} + +.memnav { + background-color: #EBEFF6; + border: 1px solid #A3B4D7; + text-align: center; + margin: 2px; + margin-right: 15px; + padding: 2px; +} + +.mempage { + width: 100%; +} + +.memitem { + padding: 0; + margin-bottom: 10px; + margin-right: 5px; + -webkit-transition: box-shadow 0.5s linear; + -moz-transition: box-shadow 0.5s linear; + -ms-transition: box-shadow 0.5s linear; + -o-transition: box-shadow 0.5s linear; + transition: box-shadow 0.5s linear; + display: table !important; + width: 100%; +} + +.memitem.glow { + box-shadow: 0 0 15px cyan; +} + +.memname { + font-weight: bold; + margin-left: 6px; +} + +.memname td { + vertical-align: bottom; +} + +.memproto, dl.reflist dt { + border-top: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + padding: 6px 0px 6px 0px; + color: #253555; + font-weight: bold; + text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); + background-image:url('nav_f.png'); + background-repeat:repeat-x; + background-color: #E2E8F2; + /* opera specific markup */ + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + border-top-right-radius: 4px; + border-top-left-radius: 4px; + /* firefox specific markup */ + -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; + -moz-border-radius-topright: 4px; + -moz-border-radius-topleft: 4px; + /* webkit specific markup */ + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + -webkit-border-top-right-radius: 4px; + -webkit-border-top-left-radius: 4px; + +} + +.memdoc, dl.reflist dd { + border-bottom: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + padding: 6px 10px 2px 10px; + background-color: #FBFCFD; + border-top-width: 0; + background-image:url('nav_g.png'); + background-repeat:repeat-x; + background-color: #FFFFFF; + /* opera specific markup */ + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + /* firefox specific markup */ + -moz-border-radius-bottomleft: 4px; + -moz-border-radius-bottomright: 4px; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; + /* webkit specific markup */ + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +dl.reflist dt { + padding: 5px; +} + +dl.reflist dd { + margin: 0px 0px 10px 0px; + padding: 5px; +} + +.paramkey { + text-align: right; +} + +.paramtype { + white-space: nowrap; +} + +.paramname { + color: #602020; + white-space: nowrap; +} +.paramname em { + font-style: normal; +} +.paramname code { + line-height: 14px; +} + +.params, .retval, .exception, .tparams { + margin-left: 0px; + padding-left: 0px; +} + +.params .paramname, .retval .paramname { + font-weight: bold; + vertical-align: top; +} + +.params .paramtype { + font-style: italic; + vertical-align: top; +} + +.params .paramdir { + font-family: "courier new",courier,monospace; + vertical-align: top; +} + +table.mlabels { + border-spacing: 0px; +} + +td.mlabels-left { + width: 100%; + padding: 0px; +} + +td.mlabels-right { + vertical-align: bottom; + padding: 0px; + white-space: nowrap; +} + +span.mlabels { + margin-left: 8px; +} + +span.mlabel { + background-color: #728DC1; + border-top:1px solid #5373B4; + border-left:1px solid #5373B4; + border-right:1px solid #C4CFE5; + border-bottom:1px solid #C4CFE5; + text-shadow: none; + color: white; + margin-right: 4px; + padding: 2px 3px; + border-radius: 3px; + font-size: 7pt; + white-space: nowrap; + vertical-align: middle; +} + + + +/* @end */ + +/* these are for tree view when not used as main index */ + +div.directory { + margin: 10px 0px; + border-top: 1px solid #A8B8D9; + border-bottom: 1px solid #A8B8D9; + width: 100%; +} + +.directory table { + border-collapse:collapse; +} + +.directory td { + margin: 0px; + padding: 0px; + vertical-align: top; +} + +.directory td.entry { + white-space: nowrap; + padding-right: 6px; + padding-top: 3px; +} + +.directory td.entry a { + outline:none; +} + +.directory td.entry a img { + border: none; +} + +.directory td.desc { + width: 100%; + padding-left: 6px; + padding-right: 6px; + padding-top: 3px; + border-left: 1px solid rgba(0,0,0,0.05); +} + +.directory tr.even { + padding-left: 6px; + background-color: #F7F8FB; +} + +.directory img { + vertical-align: -30%; +} + +.directory .levels { + white-space: nowrap; + width: 100%; + text-align: right; + font-size: 9pt; +} + +.directory .levels span { + cursor: pointer; + padding-left: 2px; + padding-right: 2px; + color: #3D578C; +} + +div.dynheader { + margin-top: 8px; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +address { + font-style: normal; + color: #2A3D61; +} + +table.doxtable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.doxtable td, table.doxtable th { + border: 1px solid #2D4068; + padding: 3px 7px 2px; +} + +table.doxtable th { + background-color: #374F7F; + color: #FFFFFF; + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +table.fieldtable { + /*width: 100%;*/ + margin-bottom: 10px; + border: 1px solid #A8B8D9; + border-spacing: 0px; + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + border-radius: 4px; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; + -webkit-box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); + box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); +} + +.fieldtable td, .fieldtable th { + padding: 3px 7px 2px; +} + +.fieldtable td.fieldtype, .fieldtable td.fieldname { + white-space: nowrap; + border-right: 1px solid #A8B8D9; + border-bottom: 1px solid #A8B8D9; + vertical-align: top; +} + +.fieldtable td.fieldname { + padding-top: 3px; +} + +.fieldtable td.fielddoc { + border-bottom: 1px solid #A8B8D9; + /*width: 100%;*/ +} + +.fieldtable td.fielddoc p:first-child { + margin-top: 0px; +} + +.fieldtable td.fielddoc p:last-child { + margin-bottom: 2px; +} + +.fieldtable tr:last-child td { + border-bottom: none; +} + +.fieldtable th { + background-image:url('nav_f.png'); + background-repeat:repeat-x; + background-color: #E2E8F2; + font-size: 90%; + color: #253555; + padding-bottom: 4px; + padding-top: 5px; + text-align:left; + -moz-border-radius-topleft: 4px; + -moz-border-radius-topright: 4px; + -webkit-border-top-left-radius: 4px; + -webkit-border-top-right-radius: 4px; + border-top-left-radius: 4px; + border-top-right-radius: 4px; + border-bottom: 1px solid #A8B8D9; +} + + +.tabsearch { + top: 0px; + left: 10px; + height: 36px; + background-image: url('tab_b.png'); + z-index: 101; + overflow: hidden; + font-size: 13px; +} + +.navpath ul +{ + font-size: 11px; + background-image:url('tab_b.png'); + background-repeat:repeat-x; + background-position: 0 -5px; + height:30px; + line-height:30px; + color:#8AA0CC; + border:solid 1px #C2CDE4; + overflow:hidden; + margin:0px; + padding:0px; +} + +.navpath li +{ + list-style-type:none; + float:left; + padding-left:10px; + padding-right:15px; + background-image:url('bc_s.png'); + background-repeat:no-repeat; + background-position:right; + color:#364D7C; +} + +.navpath li.navelem a +{ + height:32px; + display:block; + text-decoration: none; + outline: none; + color: #283A5D; + font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; + text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); + text-decoration: none; +} + +.navpath li.navelem a:hover +{ + color:#6884BD; +} + +.navpath li.footer +{ + list-style-type:none; + float:right; + padding-left:10px; + padding-right:15px; + background-image:none; + background-repeat:no-repeat; + background-position:right; + color:#364D7C; + font-size: 8pt; +} + + +div.summary +{ + float: right; + font-size: 8pt; + padding-right: 5px; + width: 50%; + text-align: right; +} + +div.summary a +{ + white-space: nowrap; +} + +div.ingroups +{ + font-size: 8pt; + width: 50%; + text-align: left; +} + +div.ingroups a +{ + white-space: nowrap; +} + +div.header +{ + background-image:url('nav_h.png'); + background-repeat:repeat-x; + background-color: #F9FAFC; + margin: 0px; + border-bottom: 1px solid #C4CFE5; +} + +div.headertitle +{ + padding: 5px 5px 5px 10px; +} + +dl +{ + padding: 0 0 0 10px; +} + +/* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug */ +dl.section +{ + margin-left: 0px; + padding-left: 0px; +} + +dl.note +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #D0C000; +} + +dl.warning, dl.attention +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #FF0000; +} + +dl.pre, dl.post, dl.invariant +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #00D000; +} + +dl.deprecated +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #505050; +} + +dl.todo +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #00C0E0; +} + +dl.test +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #3030E0; +} + +dl.bug +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #C08050; +} + +dl.section dd { + margin-bottom: 6px; +} + + +#projectlogo +{ + text-align: center; + vertical-align: bottom; + border-collapse: separate; +} + +#projectlogo img +{ + border: 0px none; +} + +#projectname +{ + font: 300% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 2px 0px; +} + +#projectbrief +{ + font: 120% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 0px; +} + +#projectnumber +{ + font: 50% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 0px; +} + +#titlearea +{ + padding: 0px; + margin: 0px; + width: 100%; + border-bottom: 1px solid #5373B4; +} + +.image +{ + text-align: center; +} + +.dotgraph +{ + text-align: center; +} + +.mscgraph +{ + text-align: center; +} + +.caption +{ + font-weight: bold; +} + +div.zoom +{ + border: 1px solid #90A5CE; +} + +dl.citelist { + margin-bottom:50px; +} + +dl.citelist dt { + color:#334975; + float:left; + font-weight:bold; + margin-right:10px; + padding:5px; +} + +dl.citelist dd { + margin:2px 0; + padding:5px 0; +} + +div.toc { + padding: 14px 25px; + background-color: #F4F6FA; + border: 1px solid #D8DFEE; + border-radius: 7px 7px 7px 7px; + float: right; + height: auto; + margin: 0 20px 10px 10px; + width: 200px; +} + +div.toc li { + background: url("bdwn.png") no-repeat scroll 0 5px transparent; + font: 10px/1.2 Verdana,DejaVu Sans,Geneva,sans-serif; + margin-top: 5px; + padding-left: 10px; + padding-top: 2px; +} + +div.toc h3 { + font: bold 12px/1.2 Arial,FreeSans,sans-serif; + color: #4665A2; + border-bottom: 0 none; + margin: 0; +} + +div.toc ul { + list-style: none outside none; + border: medium none; + padding: 0px; +} + +div.toc li.level1 { + margin-left: 0px; +} + +div.toc li.level2 { + margin-left: 15px; +} + +div.toc li.level3 { + margin-left: 30px; +} + +div.toc li.level4 { + margin-left: 45px; +} + +.inherit_header { + font-weight: bold; + color: gray; + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.inherit_header td { + padding: 6px 0px 2px 5px; +} + +.inherit { + display: none; +} + +tr.heading h2 { + margin-top: 12px; + margin-bottom: 4px; +} + +/* tooltip related style info */ + +.ttc { + position: absolute; + display: none; +} + +#powerTip { + cursor: default; + white-space: nowrap; + background-color: white; + border: 1px solid gray; + border-radius: 4px 4px 4px 4px; + box-shadow: 1px 1px 7px gray; + display: none; + font-size: smaller; + max-width: 80%; + opacity: 0.9; + padding: 1ex 1em 1em; + position: absolute; + z-index: 2147483647; +} + +#powerTip div.ttdoc { + color: grey; + font-style: italic; +} + +#powerTip div.ttname a { + font-weight: bold; +} + +#powerTip div.ttname { + font-weight: bold; +} + +#powerTip div.ttdeci { + color: #006318; +} + +#powerTip div { + margin: 0px; + padding: 0px; + font: 12px/16px Roboto,sans-serif; +} + +#powerTip:before, #powerTip:after { + content: ""; + position: absolute; + margin: 0px; +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.s:after, #powerTip.s:before, +#powerTip.w:after, #powerTip.w:before, +#powerTip.e:after, #powerTip.e:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.nw:after, #powerTip.nw:before, +#powerTip.sw:after, #powerTip.sw:before { + border: solid transparent; + content: " "; + height: 0; + width: 0; + position: absolute; +} + +#powerTip.n:after, #powerTip.s:after, +#powerTip.w:after, #powerTip.e:after, +#powerTip.nw:after, #powerTip.ne:after, +#powerTip.sw:after, #powerTip.se:after { + border-color: rgba(255, 255, 255, 0); +} + +#powerTip.n:before, #powerTip.s:before, +#powerTip.w:before, #powerTip.e:before, +#powerTip.nw:before, #powerTip.ne:before, +#powerTip.sw:before, #powerTip.se:before { + border-color: rgba(128, 128, 128, 0); +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.nw:after, #powerTip.nw:before { + top: 100%; +} + +#powerTip.n:after, #powerTip.ne:after, #powerTip.nw:after { + border-top-color: #ffffff; + border-width: 10px; + margin: 0px -10px; +} +#powerTip.n:before { + border-top-color: #808080; + border-width: 11px; + margin: 0px -11px; +} +#powerTip.n:after, #powerTip.n:before { + left: 50%; +} + +#powerTip.nw:after, #powerTip.nw:before { + right: 14px; +} + +#powerTip.ne:after, #powerTip.ne:before { + left: 14px; +} + +#powerTip.s:after, #powerTip.s:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.sw:after, #powerTip.sw:before { + bottom: 100%; +} + +#powerTip.s:after, #powerTip.se:after, #powerTip.sw:after { + border-bottom-color: #ffffff; + border-width: 10px; + margin: 0px -10px; +} + +#powerTip.s:before, #powerTip.se:before, #powerTip.sw:before { + border-bottom-color: #808080; + border-width: 11px; + margin: 0px -11px; +} + +#powerTip.s:after, #powerTip.s:before { + left: 50%; +} + +#powerTip.sw:after, #powerTip.sw:before { + right: 14px; +} + +#powerTip.se:after, #powerTip.se:before { + left: 14px; +} + +#powerTip.e:after, #powerTip.e:before { + left: 100%; +} +#powerTip.e:after { + border-left-color: #ffffff; + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.e:before { + border-left-color: #808080; + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +#powerTip.w:after, #powerTip.w:before { + right: 100%; +} +#powerTip.w:after { + border-right-color: #ffffff; + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.w:before { + border-right-color: #808080; + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +@media print +{ + #top { display: none; } + #side-nav { display: none; } + #nav-path { display: none; } + body { overflow:visible; } + h1, h2, h3, h4, h5, h6 { page-break-after: avoid; } + .summary { display: none; } + .memitem { page-break-inside: avoid; } + #doc-content + { + margin-left:0 !important; + height:auto !important; + width:auto !important; + overflow:inherit; + display:inline; + } +} + diff --git a/doxygen.png b/doxygen.png new file mode 100644 index 0000000000000000000000000000000000000000..3ff17d807fd8aa003bed8bb2a69e8f0909592fd1 GIT binary patch literal 3779 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 literal 0 HcmV?d00001 diff --git a/dynsections.js b/dynsections.js new file mode 100644 index 0000000..2f15470 --- /dev/null +++ b/dynsections.js @@ -0,0 +1,104 @@ +function toggleVisibility(linkObj) +{ + var base = $(linkObj).attr('id'); + var summary = $('#'+base+'-summary'); + var content = $('#'+base+'-content'); + var trigger = $('#'+base+'-trigger'); + var src=$(trigger).attr('src'); + if (content.is(':visible')===true) { + content.hide(); + summary.show(); + $(linkObj).addClass('closed').removeClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png'); + } else { + content.show(); + summary.hide(); + $(linkObj).removeClass('closed').addClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-10)+'open.png'); + } + return false; +} + +function updateStripes() +{ + $('table.directory tr'). + removeClass('even').filter(':visible:even').addClass('even'); +} +function toggleLevel(level) +{ + $('table.directory tr').each(function(){ + var l = this.id.split('_').length-1; + var i = $('#img'+this.id.substring(3)); + var a = $('#arr'+this.id.substring(3)); + if (l + + + + + +pva2pva: File List + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + +
+ + + + +
+ +
+ +
+
+
File List
+
+
+
Here is a list of all documented files with brief descriptions:
+
[detail level 12]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
o-common
|o*pvahelper.h
|o*sb.h
|o*utilities.cpp
|\*utilities.h
o-documentation
|\*conf.py
o-p2pApp
|o*chancache.cpp
|o*chancache.h
|o*channel.cpp
|o*channel.h
|o*gwmain.cpp
|o*helper.h
|o*moncache.cpp
|o*pva2pva.h
|o*server.cpp
|o*server.h
|o*testmon.cpp
|o*utilitiesx.cpp
|o*weakmap.h
|\*weakset.h
\-pdbApp
 o*configparse.cpp
 o*dbf_copy.cpp
 o*demo.cpp
 o*imagedemo.c
 o*pdb.cpp
 o*pdb.h
 o*pdbgroup.cpp
 o*pdbgroup.h
 o*pdbsingle.cpp
 o*pdbsingle.h
 o*pvalink.cpp
 o*pvalink.h
 o*pvalink_channel.cpp
 o*pvalink_jlif.cpp
 o*pvalink_link.cpp
 o*pvalink_lset.cpp
 o*pvalink_null.cpp
 o*pvif.cpp
 o*pvif.h
 o*qsrv.cpp
 o*softMain.cpp
 o*tpool.cpp
 \*tpool.h
+
+
+ + + + diff --git a/ftv2blank.png b/ftv2blank.png new file mode 100644 index 0000000000000000000000000000000000000000..63c605bb4c3d941c921a4b6cfa74951e946bcb48 GIT binary patch literal 86 zcmeAS@N?(olHy`uVBq!ia0vp^0zfRr!3HExu9B$%QnH>djv*C{Z|`mdau^P8_z}#X h?B8GEpdi4(BFDx$je&7RrDQEg&ePS;Wt~$(69Dh@6T1Ka literal 0 HcmV?d00001 diff --git a/ftv2cl.png b/ftv2cl.png new file mode 100644 index 0000000000000000000000000000000000000000..132f6577bf7f085344904602815a260d29f55d9b GIT binary patch literal 453 zcmV;$0XqJPP)VBF;ev;toEj8_OB0EQg5eYilIj#JZG_m^33l3^k4mtzx!TVD?g)Y$ zrvwRDSqT!wLIM$dWCIa$vtxE|mzbTzu-y&$FvF6WA2a{Wr1g}`WdPT-0JzEZ0IxAv z-Z+ejZc&H;I5-pb_SUB}04j0^V)3t{`z<7asDl2Tw3w3sP%)0^8$bhEg)IOTBcRXv zFfq~3&gvJ$F-U7mpBW8z1GY~HK&7h4^YI~Orv~wLnC0PP_dAkv;nzX{9Q|8Gv=2ca z@v)c9T;D#h`TZ2X&&$ff2wedmot995de~-s3I)yauahg;7qn*?1n?F$e+PwP37}~; z1NKUk7reVK^7A;$QRW7qAx40HHUZ<|k3U%nz(Ec`#i+q9K!dgcROAlCS?`L= v>#=f?wF5ZND!1uAfQsk;KN^4&*8~0npJiJ%2dj9(00000NkvXXu0mjfWVFf_ literal 0 HcmV?d00001 diff --git a/ftv2doc.png b/ftv2doc.png new file mode 100644 index 0000000000000000000000000000000000000000..17edabff95f7b8da13c9516a04efe05493c29501 GIT binary patch literal 746 zcmV7=@pnbNXRFEm&G8P!&WHG=d)>K?YZ1bzou)2{$)) zumDct!>4SyxL;zgaG>wy`^Hv*+}0kUfCrz~BCOViSb$_*&;{TGGn2^x9K*!Sf0=lV zpP=7O;GA0*Jm*tTYj$IoXvimpnV4S1Z5f$p*f$Db2iq2zrVGQUz~yq`ahn7ck(|CE z7Gz;%OP~J6)tEZWDzjhL9h2hdfoU2)Nd%T<5Kt;Y0XLt&<@6pQx!nw*5`@bq#?l*?3z{Hlzoc=Pr>oB5(9i6~_&-}A(4{Q$>c>%rV&E|a(r&;?i5cQB=} zYSDU5nXG)NS4HEs0it2AHe2>shCyr7`6@4*6{r@8fXRbTA?=IFVWAQJL&H5H{)DpM#{W(GL+Idzf^)uRV@oB8u$ z8v{MfJbTiiRg4bza<41NAzrl{=3fl_D+$t+^!xlQ8S}{UtY`e z;;&9UhyZqQRN%2pot{*Ei0*4~hSF_3AH2@fKU!$NSflS>{@tZpDT4`M2WRTTVH+D? z)GFlEGGHe?koB}i|1w45!BF}N_q&^HJ&-tyR{(afC6H7|aml|tBBbv}55C5DNP8p3 z)~jLEO4Z&2hZmP^i-e%(@d!(E|KRafiU8Q5u(wU((j8un3OR*Hvj+t literal 0 HcmV?d00001 diff --git a/ftv2folderclosed.png b/ftv2folderclosed.png new file mode 100644 index 0000000000000000000000000000000000000000..bb8ab35edce8e97554e360005ee9fc5bffb36e66 GIT binary patch literal 616 zcmV-u0+;=XP)a9#ETzayK)T~Jw&MMH>OIr#&;dC}is*2Mqdf&akCc=O@`qC+4i z5Iu3w#1M@KqXCz8TIZd1wli&kkl2HVcAiZ8PUn5z_kG@-y;?yK06=cA0U%H0PH+kU zl6dp}OR(|r8-RG+YLu`zbI}5TlOU6ToR41{9=uz^?dGTNL;wIMf|V3`d1Wj3y!#6` zBLZ?xpKR~^2x}?~zA(_NUu3IaDB$tKma*XUdOZN~c=dLt_h_k!dbxm_*ibDM zlFX`g{k$X}yIe%$N)cn1LNu=q9_CS)*>A zsX_mM4L@`(cSNQKMFc$RtYbx{79#j-J7hk*>*+ZZhM4Hw?I?rsXCi#mRWJ=-0LGV5a-WR0Qgt<|Nqf)C-@80`5gIz45^_20000IqP)X=#(TiCT&PiIIVc55T}TU}EUh*{q$|`3@{d>{Tc9Bo>e= zfmF3!f>fbI9#GoEHh0f`i5)wkLpva0ztf%HpZneK?w-7AK@b4Itw{y|Zd3k!fH?q2 zlhckHd_V2M_X7+)U&_Xcfvtw60l;--DgZmLSw-Y?S>)zIqMyJ1#FwLU*%bl38ok+! zh78H87n`ZTS;uhzAR$M`zZ`bVhq=+%u9^$5jDplgxd44}9;IRqUH1YHH|@6oFe%z( zo4)_>E$F&^P-f(#)>(TrnbE>Pefs9~@iN=|)Rz|V`sGfHNrJ)0gJb8xx+SBmRf@1l zvuzt=vGfI)<-F9!o&3l?>9~0QbUDT(wFdnQPv%xdD)m*g%!20>Bc9iYmGAp<9YAa( z0QgYgTWqf1qN++Gqp z8@AYPTB3E|6s=WLG?xw0tm|U!o=&zd+H0oRYE;Dbx+Na9s^STqX|Gnq%H8s(nGDGJ j8vwW|`Ts`)fSK|Kx=IK@RG@g200000NkvXXu0mjfauFEA literal 0 HcmV?d00001 diff --git a/ftv2lastnode.png b/ftv2lastnode.png new file mode 100644 index 0000000000000000000000000000000000000000..63c605bb4c3d941c921a4b6cfa74951e946bcb48 GIT binary patch literal 86 zcmeAS@N?(olHy`uVBq!ia0vp^0zfRr!3HExu9B$%QnH>djv*C{Z|`mdau^P8_z}#X h?B8GEpdi4(BFDx$je&7RrDQEg&ePS;Wt~$(69Dh@6T1Ka literal 0 HcmV?d00001 diff --git a/ftv2link.png b/ftv2link.png new file mode 100644 index 0000000000000000000000000000000000000000..17edabff95f7b8da13c9516a04efe05493c29501 GIT binary patch literal 746 zcmV7=@pnbNXRFEm&G8P!&WHG=d)>K?YZ1bzou)2{$)) zumDct!>4SyxL;zgaG>wy`^Hv*+}0kUfCrz~BCOViSb$_*&;{TGGn2^x9K*!Sf0=lV zpP=7O;GA0*Jm*tTYj$IoXvimpnV4S1Z5f$p*f$Db2iq2zrVGQUz~yq`ahn7ck(|CE z7Gz;%OP~J6)tEZWDzjhL9h2hdfoU2)Nd%T<5Kt;Y0XLt&<@6pQx!nw*5`@bq#?l*?3z{Hlzoc=Pr>oB5(9i6~_&-}A(4{Q$>c>%rV&E|a(r&;?i5cQB=} zYSDU5nXG)NS4HEs0it2AHe2>shCyr7`6@4*6{r@8fXRbTA?=IFVWAQJL&H5H{)DpM#{W(GL+Idzf^)uRV@oB8u$ z8v{MfJbTiiRg4bza<41NAzrl{=3fl_D+$t+^!xlQ8S}{UtY`e z;;&9UhyZqQRN%2pot{*Ei0*4~hSF_3AH2@fKU!$NSflS>{@tZpDT4`M2WRTTVH+D? z)GFlEGGHe?koB}i|1w45!BF}N_q&^HJ&-tyR{(afC6H7|aml|tBBbv}55C5DNP8p3 z)~jLEO4Z&2hZmP^i-e%(@d!(E|KRafiU8Q5u(wU((j8un3OR*Hvj+t literal 0 HcmV?d00001 diff --git a/ftv2mlastnode.png b/ftv2mlastnode.png new file mode 100644 index 0000000000000000000000000000000000000000..0b63f6d38c4b9ec907b820192ebe9724ed6eca22 GIT binary patch literal 246 zcmVkw!R34#Lv2LOS^S2tZA31X++9RY}n zChwn@Z)Wz*WWHH{)HDtJnq&A2hk$b-y(>?@z0iHr41EKCGp#T5?07*qoM6N<$f(V3Pvj6}9 literal 0 HcmV?d00001 diff --git a/ftv2mnode.png b/ftv2mnode.png new file mode 100644 index 0000000000000000000000000000000000000000..0b63f6d38c4b9ec907b820192ebe9724ed6eca22 GIT binary patch literal 246 zcmVkw!R34#Lv2LOS^S2tZA31X++9RY}n zChwn@Z)Wz*WWHH{)HDtJnq&A2hk$b-y(>?@z0iHr41EKCGp#T5?07*qoM6N<$f(V3Pvj6}9 literal 0 HcmV?d00001 diff --git a/ftv2mo.png b/ftv2mo.png new file mode 100644 index 0000000000000000000000000000000000000000..4bfb80f76e65815989a9350ad79d8ce45380e2b1 GIT binary patch literal 403 zcmV;E0c`$>P)${!fXv7NWJ%@%u4(KapRY>T6_x;E zxE7kt!}Tiw8@d9Sd`rTGum>z#Q14vIm`wm1#-byD1muMi02@YNO5LRF0o!Y{`a!Ya z{^&p0Su|s705&2QxmqdexG+-zNKL3f@8gTQSJrKByfo+oNJ^-{|Mn||Q5SDwjQVsS zr1}7o5-QMs>gYIMD>GRw@$lT`z4r-_m{5U#cR{urD_)TOeY)(UD|qZ^&y`IVijqk~ xs(9-kWFr7E^!lgi8GsFK5kOY_{Xbgf0^etEU%fLevs?fG002ovPDHLkV1nB&vX1}& literal 0 HcmV?d00001 diff --git a/ftv2node.png b/ftv2node.png new file mode 100644 index 0000000000000000000000000000000000000000..63c605bb4c3d941c921a4b6cfa74951e946bcb48 GIT binary patch literal 86 zcmeAS@N?(olHy`uVBq!ia0vp^0zfRr!3HExu9B$%QnH>djv*C{Z|`mdau^P8_z}#X h?B8GEpdi4(BFDx$je&7RrDQEg&ePS;Wt~$(69Dh@6T1Ka literal 0 HcmV?d00001 diff --git a/ftv2ns.png b/ftv2ns.png new file mode 100644 index 0000000000000000000000000000000000000000..72e3d71c2892d6f00e259facebc88b45f6db2e35 GIT binary patch literal 388 zcmV-~0ek+5P)f+++#cT|!CkD&4pnIkeMEUEM*>`*9>+Juji$!h-mW%M^8s9957{3nvbrz^&=u<~TAUrFROkmt%^F~Ez+-c53Lv%iH3d38!Rv?K zrb&MYAhp;Gf<}wS;9ZZq2@;!uYG;=Z>~GKE^{HD4keu}lnyqhc>kWX^tQn|warJ~h zT+rtMkdz6aHoN%z(o|&wpu@@OpJnF_z{PA)6(FHw02iHslz^(N{4*+K9)QJHR87wT iTyp>aXaF{u2lxRou|^4tux6eB0000^P)R?RzRoKvklcaQ%HF6%rK2&ZgO(-ihJ_C zzrKgp4jgO( fd_(yg|3PpEQb#9`a?Pz_00000NkvXXu0mjftR`5K literal 0 HcmV?d00001 diff --git a/ftv2pnode.png b/ftv2pnode.png new file mode 100644 index 0000000000000000000000000000000000000000..c6ee22f937a07d1dbfc27c669d11f8ed13e2f152 GIT binary patch literal 229 zcmV^P)R?RzRoKvklcaQ%HF6%rK2&ZgO(-ihJ_C zzrKgp4jgO( fd_(yg|3PpEQb#9`a?Pz_00000NkvXXu0mjftR`5K literal 0 HcmV?d00001 diff --git a/ftv2splitbar.png b/ftv2splitbar.png new file mode 100644 index 0000000000000000000000000000000000000000..fe895f2c58179b471a22d8320b39a4bd7312ec8e GIT binary patch literal 314 zcmeAS@N?(olHy`uVBq!ia0vp^Yzz!63>-{AmhX=Jf(#6djGiuzAr*{o?=JLmPLyc> z_*`QK&+BH@jWrYJ7>r6%keRM@)Qyv8R=enp0jiI>aWlGyB58O zFVR20d+y`K7vDw(hJF3;>dD*3-?v=<8M)@x|EEGLnJsniYK!2U1 Y!`|5biEc?d1`HDhPgg&ebxsLQ02F6;9RL6T literal 0 HcmV?d00001 diff --git a/ftv2vertline.png b/ftv2vertline.png new file mode 100644 index 0000000000000000000000000000000000000000..63c605bb4c3d941c921a4b6cfa74951e946bcb48 GIT binary patch literal 86 zcmeAS@N?(olHy`uVBq!ia0vp^0zfRr!3HExu9B$%QnH>djv*C{Z|`mdau^P8_z}#X h?B8GEpdi4(BFDx$je&7RrDQEg&ePS;Wt~$(69Dh@6T1Ka literal 0 HcmV?d00001 diff --git a/functions.html b/functions.html new file mode 100644 index 0000000..fc01ed3 --- /dev/null +++ b/functions.html @@ -0,0 +1,265 @@ + + + + + + +pva2pva: Class Members + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- c -

+ + +

- d -

+ + +

- e -

+ + +

- f -

+ + +

- g -

+ + +

- i -

+ + +

- l -

+ + +

- m -

+ + +

- n -

+ + +

- o -

+ + +

- p -

+ + +

- r -

+ + +

- s -

+ + +

- w -

+
+ + + + diff --git a/functions_func.html b/functions_func.html new file mode 100644 index 0000000..77b8ded --- /dev/null +++ b/functions_func.html @@ -0,0 +1,256 @@ + + + + + + +pva2pva: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+  + +

- c -

+ + +

- d -

+ + +

- e -

+ + +

- f -

+ + +

- g -

+ + +

- i -

+ + +

- l -

+ + +

- m -

+ + +

- n -

+ + +

- o -

+ + +

- p -

+ + +

- r -

+ + +

- s -

+ + +

- w -

+
+ + + + diff --git a/functions_vars.html b/functions_vars.html new file mode 100644 index 0000000..7acba93 --- /dev/null +++ b/functions_vars.html @@ -0,0 +1,112 @@ + + + + + + +pva2pva: Class Members - Variables + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + +
+ + + + +
+ +
+ +
+
+ + + + diff --git a/graph_legend.html b/graph_legend.html new file mode 100644 index 0000000..29f0841 --- /dev/null +++ b/graph_legend.html @@ -0,0 +1,154 @@ + + + + + + +pva2pva: Graph Legend + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + +
+ + + + +
+ +
+ +
+
+
Graph Legend
+
+
+

This page explains how to interpret the graphs that are generated by doxygen.

+

Consider the following example:

+
/*! Invisible class because of truncation */
+
class Invisible { };
+
+
/*! Truncated class, inheritance relation is hidden */
+
class Truncated : public Invisible { };
+
+
/* Class not documented with doxygen comments */
+
class Undocumented { };
+
+
/*! Class that is inherited using public inheritance */
+
class PublicBase : public Truncated { };
+
+
/*! A template class */
+
template<class T> class Templ { };
+
+
/*! Class that is inherited using protected inheritance */
+
class ProtectedBase { };
+
+
/*! Class that is inherited using private inheritance */
+
class PrivateBase { };
+
+
/*! Class that is used by the Inherited class */
+
class Used { };
+
+
/*! Super class that inherits a number of other classes */
+
class Inherited : public PublicBase,
+
protected ProtectedBase,
+
private PrivateBase,
+
public Undocumented,
+
public Templ<int>
+
{
+
private:
+
Used *m_usedClass;
+
};
+

This will result in the following graph:

+
+ +
+

The boxes in the above graph have the following meaning:

+
    +
  • +A filled gray box represents the struct or class for which the graph is generated.
  • +
  • +A box with a black border denotes a documented struct or class.
  • +
  • +A box with a grey border denotes an undocumented struct or class.
  • +
  • +A box with a red border denotes a documented struct or class forwhich not all inheritance/containment relations are shown. A graph is truncated if it does not fit within the specified boundaries.
  • +
+

The arrows have the following meaning:

+
    +
  • +A dark blue arrow is used to visualize a public inheritance relation between two classes.
  • +
  • +A dark green arrow is used for protected inheritance.
  • +
  • +A dark red arrow is used for private inheritance.
  • +
  • +A purple dashed arrow is used if a class is contained or used by another class. The arrow is labeled with the variable(s) through which the pointed class or struct is accessible.
  • +
  • +A yellow dashed arrow denotes a relation between a template instance and the template class it was instantiated from. The arrow is labeled with the template parameters of the instance.
  • +
+
+ + + + diff --git a/graph_legend.md5 b/graph_legend.md5 new file mode 100644 index 0000000..a06ed05 --- /dev/null +++ b/graph_legend.md5 @@ -0,0 +1 @@ +387ff8eb65306fa251338d3c9bd7bfff \ No newline at end of file diff --git a/graph_legend.png b/graph_legend.png new file mode 100644 index 0000000000000000000000000000000000000000..e9010977cfe1f7152671abbf73ee79628a9189f4 GIT binary patch literal 17685 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 + + + + + +pva2pva: p2pApp/gwmain.cpp Source File + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
gwmain.cpp
+
+
+
1 
+
2 #include <iostream>
+
3 #include <fstream>
+
4 #include <stdexcept>
+
5 #include <map>
+
6 
+
7 #if !defined(_WIN32)
+
8 #include <signal.h>
+
9 #define USE_SIGNAL
+
10 #endif
+
11 
+
12 #include <epicsStdlib.h>
+
13 #include <epicsGetopt.h>
+
14 #include <iocsh.h>
+
15 #include <epicsTimer.h>
+
16 #include <libComRegister.h>
+
17 
+
18 #include <pv/json.h>
+
19 
+
20 #include <pv/pvAccess.h>
+
21 #include <pv/clientFactory.h>
+
22 #include <pv/configuration.h>
+
23 #include <pv/serverContext.h>
+
24 #include <pv/reftrack.h>
+
25 #include <pv/iocreftrack.h>
+
26 #include <pv/iocshelper.h>
+
27 #include <pv/logger.h>
+
28 
+
29 #include "server.h"
+
30 #include "pva2pva.h"
+
31 
+
32 namespace pvd = epics::pvData;
+
33 namespace pva = epics::pvAccess;
+
34 
+
35 extern int p2pReadOnly;
+
36 
+
37 namespace {
+
38 
+
39 pvd::StructureConstPtr schema(pvd::getFieldCreate()->createFieldBuilder()
+
40  ->add("version", pvd::pvUInt)
+
41  ->add("readOnly", pvd::pvBoolean)
+
42  ->addNestedStructureArray("clients")
+
43  ->add("name", pvd::pvString)
+
44  ->add("provider", pvd::pvString)
+
45  ->add("addrlist", pvd::pvString)
+
46  ->add("autoaddrlist", pvd::pvBoolean)
+
47  ->add("serverport", pvd::pvUShort)
+
48  ->add("bcastport", pvd::pvUShort)
+
49  ->endNested()
+
50  ->addNestedStructureArray("servers")
+
51  ->add("name", pvd::pvString)
+
52  ->addArray("clients", pvd::pvString)
+
53  ->add("interface", pvd::pvString)
+
54  ->add("addrlist", pvd::pvString)
+
55  ->add("autoaddrlist", pvd::pvBoolean)
+
56  ->add("serverport", pvd::pvUShort)
+
57  ->add("bcastport", pvd::pvUShort)
+
58  ->add("control_prefix", pvd::pvString)
+
59  ->endNested()
+
60  ->createStructure());
+
61 
+
62 
+
63 void usage(const char *me)
+
64 {
+
65  std::cerr<<"Usage: "<<me<<" [-vhiIC] <config file>\n";
+
66 }
+
67 
+
68 void getargs(ServerConfig& arg, int argc, char *argv[])
+
69 {
+
70  int opt;
+
71  bool checkonly = false;
+
72 
+
73  while( (opt=getopt(argc, argv, "qvhiIC"))!=-1)
+
74  {
+
75  switch(opt) {
+
76  case 'q':
+
77  arg.debug--;
+
78  break;
+
79  case 'v':
+
80  arg.debug++;
+
81  break;
+
82  case 'I':
+
83  arg.interactive = true;
+
84  break;
+
85  case 'i':
+
86  arg.interactive = false;
+
87  break;
+
88  case 'C':
+
89  checkonly = true;
+
90  break;
+
91  default:
+
92  std::cerr<<"Unknown argument -"<<char(opt)<<"\n";
+
93  case 'h':
+
94  usage(argv[0]);
+
95  exit(1);
+
96  }
+
97  }
+
98 
+
99  if(optind!=argc-1) {
+
100  std::cerr<<"Exactly one positional argument expected\n";
+
101  usage(argv[0]);
+
102  exit(1);
+
103  }
+
104 
+
105  arg.conf = pvd::getPVDataCreate()->createPVStructure(schema);
+
106  std::ifstream strm(argv[optind]);
+
107  pvd::parseJSON(strm, arg.conf);
+
108 
+
109  p2pReadOnly = arg.conf->getSubFieldT<pvd::PVScalar>("readOnly")->getAs<pvd::boolean>();
+
110 
+
111  unsigned version = arg.conf->getSubFieldT<pvd::PVUInt>("version")->get();
+
112  if(version==0) {
+
113  std::cerr<<"Warning: config file missing \"version\" key. Assuming 1\n";
+
114  } else if(version!=1) {
+
115  std::cerr<<"config file version mis-match. expect 1 found "<<version<<"\n";
+
116  exit(1);
+
117  }
+
118  if(arg.conf->getSubFieldT<pvd::PVStructureArray>("clients")->view().empty()) {
+
119  std::cerr<<"No clients configured\n";
+
120  exit(1);
+
121  }
+
122  if(arg.conf->getSubFieldT<pvd::PVStructureArray>("servers")->view().empty()) {
+
123  std::cerr<<"No servers configured\n";
+
124  exit(1);
+
125  }
+
126 
+
127  if(checkonly) {
+
128  std::cerr<<"Config file OK\n";
+
129  exit(0);
+
130  }
+
131 }
+
132 
+
133 GWServerChannelProvider::shared_pointer configure_client(ServerConfig& arg, const pvd::PVStructurePtr& conf)
+
134 {
+
135  std::string name(conf->getSubFieldT<pvd::PVString>("name")->get());
+
136  std::string provider(conf->getSubFieldT<pvd::PVString>("provider")->get());
+
137 
+
138  LOG(pva::logLevelInfo, "Configure client '%s' with provider '%s'", name.c_str(), provider.c_str());
+
139 
+
140  pva::Configuration::shared_pointer C(pva::ConfigurationBuilder()
+
141  .add("EPICS_PVA_ADDR_LIST", conf->getSubFieldT<pvd::PVString>("addrlist")->get())
+
142  .add("EPICS_PVA_AUTO_ADDR_LIST", conf->getSubFieldT<pvd::PVScalar>("autoaddrlist")->getAs<std::string>())
+
143  .add("EPICS_PVA_SERVER_PORT", conf->getSubFieldT<pvd::PVScalar>("serverport")->getAs<pvd::uint16>())
+
144  .add("EPICS_PVA_BROADCAST_PORT", conf->getSubFieldT<pvd::PVScalar>("bcastport")->getAs<pvd::uint16>())
+
145  .add("EPICS_PVA_DEBUG", arg.debug>=5 ? 5 : 0)
+
146  .push_map()
+
147  .build());
+
148 
+
149  pva::ChannelProvider::shared_pointer base(pva::ChannelProviderRegistry::clients()->createProvider(provider, C));
+
150  if(!base)
+
151  throw std::runtime_error("Can't create ChannelProvider");
+
152 
+
153  GWServerChannelProvider::shared_pointer ret(new GWServerChannelProvider(base));
+
154  return ret;
+
155 }
+
156 
+
157 pva::ServerContext::shared_pointer configure_server(ServerConfig& arg, const pvd::PVStructurePtr& conf)
+
158 {
+
159  std::string name(conf->getSubFieldT<pvd::PVString>("name")->get());
+
160 
+
161  LOG(pva::logLevelInfo, "Configure server '%s'", name.c_str());
+
162 
+
163  pva::Configuration::shared_pointer C(pva::ConfigurationBuilder()
+
164  .add("EPICS_PVAS_INTF_ADDR_LIST", conf->getSubFieldT<pvd::PVString>("interface")->get())
+
165  .add("EPICS_PVAS_BEACON_ADDR_LIST", conf->getSubFieldT<pvd::PVString>("addrlist")->get())
+
166  .add("EPICS_PVAS_AUTO_BEACON_ADDR_LIST", conf->getSubFieldT<pvd::PVScalar>("autoaddrlist")->getAs<std::string>())
+
167  .add("EPICS_PVAS_SERVER_PORT", conf->getSubFieldT<pvd::PVScalar>("serverport")->getAs<pvd::uint16>())
+
168  .add("EPICS_PVAS_BROADCAST_PORT", conf->getSubFieldT<pvd::PVScalar>("bcastport")->getAs<pvd::uint16>())
+
169  .add("EPICS_PVA_DEBUG", arg.debug>=5 ? 5 : 0)
+
170  .push_map()
+
171  .build());
+
172 
+
173  pvd::PVStringArray::shared_pointer clients(conf->getSubFieldT<pvd::PVStringArray>("clients"));
+
174  pvd::PVStringArray::const_svector names(clients->view());
+
175  std::vector<pva::ChannelProvider::shared_pointer> providers;
+
176 
+
177  for(pvd::PVStringArray::const_svector::const_iterator it(names.begin()), end(names.end()); it!=end; ++it)
+
178  {
+
179  ServerConfig::clients_t::const_iterator it2(arg.clients.find(*it));
+
180  if(it2==arg.clients.end())
+
181  throw std::runtime_error("Server references non-existant client");
+
182  providers.push_back(it2->second);
+
183  }
+
184 
+
185  pva::ServerContext::shared_pointer ret(pva::ServerContext::create(pva::ServerContext::Config()
+
186  .config(C)
+
187  .providers(providers)));
+
188  return ret;
+
189 }
+
190 
+
191 volatile int quit;
+
192 epicsEvent done;
+
193 
+
194 #ifdef USE_SIGNAL
+
195 void sigdone(int num)
+
196 {
+
197  (void)num;
+
198  quit = 1;
+
199  done.signal();
+
200 }
+
201 #endif
+
202 
+
203 ServerConfig* volatile theserver;
+
204 
+
205 void iocsh_drop(const char *client, const char *channel)
+
206 {
+
207  if(!theserver)
+
208  return;
+
209  try {
+
210  theserver->drop(client, channel);
+
211  }catch(std::exception& e){
+
212  std::cout<<"Error: "<<e.what()<<"\n";
+
213  }
+
214 }
+
215 
+
216 void gwsr(int lvl, const char *server)
+
217 {
+
218  if(!theserver)
+
219  return;
+
220  try {
+
221  theserver->status_server(lvl, server);
+
222  }catch(std::exception& e){
+
223  std::cout<<"Error: "<<e.what()<<"\n";
+
224  }
+
225 }
+
226 
+
227 void gwcr(int lvl, const char *client, const char *channel)
+
228 {
+
229  if(!theserver)
+
230  return;
+
231  try {
+
232  theserver->status_client(lvl, client, channel);
+
233  }catch(std::exception& e){
+
234  std::cout<<"Error: "<<e.what()<<"\n";
+
235  }
+
236 }
+
237 
+
238 }// namespace
+
239 
+
240 int main(int argc, char *argv[])
+
241 {
+
242  try {
+
243  pva::refTrackRegistrar();
+
244 
+
245  epics::iocshRegister<const char*, const char*, &iocsh_drop>("drop", "client", "channel");
+
246  epics::iocshRegister<int, const char*, &gwsr>("gwsr", "level", "channel");
+
247  epics::iocshRegister<int, const char*, const char*, &gwcr>("gwcr", "level", "client", "channel");
+
248 
+
249  libComRegister();
+
250  registerReadOnly();
+
251  epics::registerRefCounter("ChannelCacheEntry", &ChannelCacheEntry::num_instances);
+
252  epics::registerRefCounter("ChannelCacheEntry::CRequester", &ChannelCacheEntry::CRequester::num_instances);
+
253  epics::registerRefCounter("GWChannel", &GWChannel::num_instances);
+
254  epics::registerRefCounter("MonitorCacheEntry", &MonitorCacheEntry::num_instances);
+
255  epics::registerRefCounter("MonitorUser", &MonitorUser::num_instances);
+
256 
+
257  ServerConfig arg;
+
258  theserver = &arg;
+
259  getargs(arg, argc, argv);
+
260 
+
261  if(arg.debug>0)
+
262  std::cout<<"Notice: This p2p gateway prototype has been superceded by the p4p.gw gateway\n"
+
263  " which has exciting new features including granular access control,\n"
+
264  " and status PVs including bandwidth usage reports.\n"
+
265  " p2p is considered deprecated by its author, and will receive\n"
+
266  " minimal maintainance effort going forward.\n"
+
267  " Users are encouraged to migrate to p4p.gw.\n"
+
268  "\n"
+
269  " https://mdavidsaver.github.io/p4p/gw.html\n"
+
270  "\n";
+
271 
+
272  pva::pvAccessLogLevel lvl;
+
273  if(arg.debug<0)
+
274  lvl = pva::logLevelError;
+
275  else if(arg.debug==0)
+
276  lvl = pva::logLevelWarn;
+
277  else if(arg.debug==1)
+
278  lvl = pva::logLevelInfo;
+
279  else if(arg.debug==2)
+
280  lvl = pva::logLevelDebug;
+
281  else if(arg.debug==3)
+
282  lvl = pva::logLevelTrace;
+
283  else if(arg.debug>=4)
+
284  lvl = pva::logLevelAll;
+
285  SET_LOG_LEVEL(lvl);
+
286 
+
287  pva::ClientFactory::start();
+
288 
+
289  pvd::PVStructureArray::const_svector arr;
+
290 
+
291  arr = arg.conf->getSubFieldT<pvd::PVStructureArray>("clients")->view();
+
292 
+
293  for(size_t i=0; i<arr.size(); i++) {
+
294  if(!arr[i]) continue;
+
295  const pvd::PVStructurePtr& client = arr[i];
+
296 
+
297  std::string name(client->getSubFieldT<pvd::PVString>("name")->get());
+
298  if(name.empty())
+
299  throw std::runtime_error("Client with empty name not allowed");
+
300 
+
301  ServerConfig::clients_t::const_iterator it(arg.clients.find(name));
+
302  if(it!=arg.clients.end())
+
303  throw std::runtime_error(std::string("Duplicate client name not allowed : ")+name);
+
304 
+
305  arg.clients[name] = configure_client(arg, client);
+
306  }
+
307 
+
308  arr = arg.conf->getSubFieldT<pvd::PVStructureArray>("servers")->view();
+
309 
+
310  for(size_t i=0; i<arr.size(); i++) {
+
311  if(!arr[i]) continue;
+
312  const pvd::PVStructurePtr& server = arr[i];
+
313 
+
314  std::string name(server->getSubFieldT<pvd::PVString>("name")->get());
+
315  if(name.empty())
+
316  throw std::runtime_error("Server with empty name not allowed");
+
317 
+
318  ServerConfig::servers_t::const_iterator it(arg.servers.find(name));
+
319  if(it!=arg.servers.end())
+
320  throw std::runtime_error(std::string("Duplicate server name not allowed : ")+name);
+
321 
+
322  arg.servers[name] = configure_server(arg, server);
+
323  }
+
324 
+
325  int ret = 0;
+
326  if(arg.interactive) {
+
327  ret = iocsh(NULL);
+
328  } else {
+
329 #ifdef USE_SIGNAL
+
330  signal(SIGINT, sigdone);
+
331  signal(SIGTERM, sigdone);
+
332  signal(SIGQUIT, sigdone);
+
333 #endif
+
334 
+
335  while(!quit) {
+
336  done.wait();
+
337  }
+
338  }
+
339 
+
340  theserver = 0;
+
341 
+
342  return ret;
+
343  }catch(std::exception& e){
+
344  std::cerr<<"Fatal Error : "<<e.what()<<"\n";
+
345  return 1;
+
346  }
+
347 }
+ + +
+ + + + diff --git a/helper_8h_source.html b/helper_8h_source.html new file mode 100644 index 0000000..a99e497 --- /dev/null +++ b/helper_8h_source.html @@ -0,0 +1,118 @@ + + + + + + +pva2pva: p2pApp/helper.h Source File + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
helper.h
+
+
+
1 #ifndef HELPER_H
+
2 #define HELPER_H
+
3 
+
4 #include <memory>
+
5 
+
6 #define FOREACH(ITERTYPE, IT,END,C) for(ITERTYPE IT=(C).begin(), END=(C).end(); IT!=END; ++IT)
+
7 
+
8 namespace p2p {
+
9 #if __cplusplus>=201103L
+
10 template<typename T>
+
11 using auto_ptr = std::unique_ptr<T>;
+
12 #define PTRMOVE(AUTO) std::move(AUTO)
+
13 #else
+
14 using std::auto_ptr;
+
15 #define PTRMOVE(AUTO) (AUTO)
+
16 #endif
+
17 }
+
18 
+
19 #endif // HELPER_H
+
+ + + + diff --git a/hierarchy.html b/hierarchy.html new file mode 100644 index 0000000..127b1c9 --- /dev/null +++ b/hierarchy.html @@ -0,0 +1,208 @@ + + + + + + +pva2pva: Class Hierarchy + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + +
+ + + + +
+ +
+ +
+
+
Class Hierarchy
+
+
+
+

Go to the graphical class hierarchy

+This inheritance list is sorted roughly, but not completely, alphabetically:
+
[detail level 123]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
oCASCLIENT
oCASCred
oCAsWritePvt
oCChannel
|oCBaseChannel
|\CGWChannel
oCChannelCache
oCChannelCacheEntry
oCChannelFind
|oCGWServerChannelProvider
|\CPDBProvider
oCChannelGetRequester
|\CTestChannelGetRequester
oCChannelProvider
|oCGWServerChannelProvider
|oCPDBProvider
|\CTestProvider
oCChannelProviderFactory
|\CBaseChannelProviderFactory< CP >
oCChannelPut
|oCPDBGroupPut
|\CPDBSinglePut
oCChannelPutRequester
|\CTestChannelPutRequester
oCChannelRequester
|oCChannelCacheEntry::CRequester
|\CTestChannelRequester
oCFieldName::Component
oCDBCH
oCDBEvent
oCdbrbuf
oCDBScanLocker
oCweak_value_map< K, V, C >::element_proxy
oCenable_shared_from_this
|oCGWServerChannelProvider
|oCPDBGroupChannel
|oCPDBGroupPut
|oCPDBProvider
|oCPDBSingleChannel
|oCPDBSinglePut
|oCpvalink::pvaLinkChannel
|\CTestProvider
oCepicsThreadRunable
|oCpvalink::pvaLinkChannel
|oCpvalink::pvaLinkChannel::AfterPut
|\CWorkQueue
oCepicsTimerNotify
|\CChannelCache::cacheClean
oCGroupConfig::Field
oCFieldName
oCGetFieldRequester
|\CTestChannelFieldRequester
oCGroupConfig::Group
oCGroupConfig
oCPDBGroupPV::Info
oCjlif
oCjlink
|\Cpvalink::pvaLinkConfig
oCpvalink::pvaLinkChannel::LinkSort
oCLocalFL
oCMonitor
|\CBaseMonitor
oCMonitor
|oCMonitorUser
|\CTestPVMonitor
oCMonitorCallback
|\Cpvalink::pvaLinkChannel
oCMonitorRequester
|oCMonitorCacheEntry
|\CTestChannelMonitorRequester
oCBaseMonitor::no_overflow
oCpdbInfoIterator
oCPDBPV
|oCPDBGroupPV
|\CPDBSinglePV
oCpdbRecordInfo
oCpdbRecordIterator
oCPutCallback
|\Cpvalink::pvaLinkChannel
oCpvalink::pvaGlobal_t
oCPVIF
oCPVIFBuilder
|\CScalarBuilder
oCSB
oCScalarAccessor< T >
oCServerConfig
oCTestIOC
oCTestPV
oCweak_set< T >Std::set-ish container where entries are removed when ref. counts fall to zero
oCweak_set< GWChannel >
oCweak_set< MonitorUser >
oCweak_set< TestPVChannel >
oCweak_set< TestPVMonitor >
oCweak_value_map< K, V, C >An associative map where a weak_ptr to the value is stored
oCweak_value_map< pvrequest_t, MonitorCacheEntry >
oCweak_value_map< std::string, PDBPV >
oCweak_value_map< std::string, TestPV >
\Cweak_set< T >::XIteratorIterator-ish object which also locks the set during iteration
+
+
+ + + + diff --git a/imagedemo_8c_source.html b/imagedemo_8c_source.html new file mode 100644 index 0000000..f751e13 --- /dev/null +++ b/imagedemo_8c_source.html @@ -0,0 +1,140 @@ + + + + + + +pva2pva: pdbApp/imagedemo.c Source File + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
imagedemo.c
+
+
+
1 
+
2 #include <stdlib.h>
+
3 
+
4 #include <epicsMath.h>
+
5 #include <dbAccess.h>
+
6 #include <dbScan.h>
+
7 #include <recGbl.h>
+
8 #include <alarm.h>
+
9 #include <registryFunction.h>
+
10 
+
11 #include <aSubRecord.h>
+
12 
+
13 #include <epicsExport.h>
+
14 
+
21 static
+
22 long QSRV_image_demo(aSubRecord *prec)
+
23 {
+
24  epicsUInt32 H = *(epicsUInt32*)prec->a,
+
25  W = *(epicsUInt32*)prec->b;
+
26  epicsUInt16 *I = (epicsUInt16*)prec->vala;
+
27  epicsUInt32 i, j;
+
28 
+
29  if(W*H>prec->nova) {
+
30  (void)recGblSetSevr(prec, READ_ALARM, INVALID_ALARM);
+
31  return 0;
+
32  }
+
33 
+
34  for(i=0; i<W; i++) {
+
35  for(j=0; j<H; j++) {
+
36  if(i%50==49 || j%50==49)
+
37  I[i*H+j] = 65535;
+
38  else
+
39  I[i*H+j] = ((epicsUInt32)j)*65535/H;
+
40  }
+
41  }
+
42 
+
43  prec->neva = W*H;
+
44  return 0;
+
45 }
+
46 
+
47 epicsRegisterFunction(QSRV_image_demo);
+
+ + + + diff --git a/index.html b/index.html new file mode 100644 index 0000000..7e88b75 --- /dev/null +++ b/index.html @@ -0,0 +1,148 @@ + + + + + + +pva2pva: pva2pva Home of QSRV and pvAccess 2 pvAccess gateway + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + +
+ + + + +
+ +
+ +
+
+
pva2pva Home of QSRV and pvAccess 2 pvAccess gateway
+
+
+
+

+QSRV

+

QSRV is a network server using the PVAccess protocol which runs inside an EPICS IOC process and allows clients to make requests to access the Process Variables (PVs) within.

+

Documentation of QSRV Configuration including Group PV definitions , Access Security and PVAccess Links configuration.

+ +

+Building

+

To build the latest from version control

+
git clone --recursive --branch core/master https://github.com/epics-base/epics-base.git
+
cd epics-base
+
make
+

+Quick Start

+

The pva2pva module builds an executable 'softIocPVA' which function like the 'softIoc' executable built by EPICS Base, with QSRV included as well.

+
cd modules/pva2pva
+
cat <<EOF > p2pexample.db
+
record(calc, "p2p:example:counter") {
+
field(INPA, "p2p:example:counter")
+
field(CALC, "A+1")
+
field(SCAN, "1 second")
+
}
+
EOF
+
./bin/linux-x86_64/softIocPVA -d p2pexample.db
+

Then in another shell run:

+
cd modules/pvAccess
+
./bin/linux-x86_64/pvget p2p:example:counter
+

+Adding QSRV to your IOC

+

QSRV is added to an IOC just like any other EPICS support module. In the Makefile which produces an IOC executable (eg. "myiocname") add:

+
PROD_HOST += myiocname
+
# include QSRV
+
myiocname_DBD += base.dbd
+
myiocname_DBD += PVAServerRegister.dbd
+
myiocname_DBD += qsrv.dbd
+
myiocname_LIBS += qsrv
+
myiocname_LIBS += $(EPICS_BASE_PVA_CORE_LIBS)
+
myiocname_LIBS += $(EPICS_BASE_IOC_LIBS)
+

Now run your IOC and QSRV starts automatically.

+

+Status monitoring

+

In a running IOC w/ QSRV, run the "pvasr" in the IOC shell and verify that "QSRV" is among the "PROVIDER_NAMES".

+
epics> pvasr
+
VERSION : pvAccess Server v6.0.0-SNAPSHOT
+
PROVIDER_NAMES : QSRV,
+
BEACON_ADDR_LIST :
+
AUTO_BEACON_ADDR_LIST : 1
+
BEACON_PERIOD : 15
+
BROADCAST_PORT : 5076
+
SERVER_PORT : 5075
+
RCV_BUFFER_SIZE : 16384
+
IGNORE_ADDR_LIST:
+
INTF_ADDR_LIST : 0.0.0.0
+
+ + + + diff --git a/inherit_graph_0.map b/inherit_graph_0.map new file mode 100644 index 0000000..fd60004 --- /dev/null +++ b/inherit_graph_0.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_0.md5 b/inherit_graph_0.md5 new file mode 100644 index 0000000..e638fae --- /dev/null +++ b/inherit_graph_0.md5 @@ -0,0 +1 @@ +006a52c9b2eee557f754631f5c7b750b \ No newline at end of file diff --git a/inherit_graph_0.png b/inherit_graph_0.png new file mode 100644 index 0000000000000000000000000000000000000000..05a06fd998f0a4f89e51002f7ec07bdff8d5d8df GIT binary patch literal 1237 zcmV;`1SP?<7=LupXYhb>*}1( z=X*Zi&-Z=4=W{-14e|T^fCPe&-<`m}22v?lNTpyQm4byrJUKl*?dt0C`Fy`Co9{zH zLc++%2+{IlPi<{&>2$iUP3b#wad9y^IvQZ4ydH<5=$GX4eL+#Qva&M3NY*J>NTpyQ zm4by-3YOrN>g(%65G3GLdVhc4+S;0wltib~1p>j)&=9fb*x%nTDJhAMk7qC#xw*M( zYiqcR!C)AT#(*g#5=l!-3wF%qa*>zB#Kd4O1VN-yDe=OVmX@ZbCICQwem?Sw#KgoP z)*HN1TCJAFVg+;+_4V}*hr?hnoSdBW_V!LrPAU`%%(cC}&ExUX)6-2RlhtbF^Z5k@ z1$%pY@G~kDiYo$6r<0hB*=&A&35ufFV3|yomzRefZ*Ol0vEDbj1Q>RAcaM&a%x1Gl zByzjm$;rt8fXBy2qtUpsvclnT004P;c>@CjDwRqumjeJ~GFf|jdw+jF79k@e!{u_R z)#{0f3CKz5bb4%T?3=FI+S=ykW{1N;rBaD@27`ee&}cL&mHJng!w}@2(rUFrp-?Ck zrlh3c{TGEoq0wk#V`DcrH<+cOq5`{t=jZ1e8yonegfTfeiHZ1m+S}VBA|mkH@GA&X zDV-B%c3JF3WZ9g(r&k7E~nE;r_aBO{qi zCj6vrZEeJIQ&?DtyTZc4G#btD@bKZ`VQ?#Ymtd5#*=(1WmxYCe4-XGTMMXP1J4Z)H zm`fxQIUJ7l^>wjWY%-ZR98PO%D*(Xf^C1ZG$y@{K)cpKB(aY!a>+0&TLjEfVMk%dU z`}Fk0WHPB#YIb%u007%oXJ=>2%gZ4lAv_+hv$Jz!V`FY^POVlSA0MZsrFlG_tE($w zoTa5D;=XtntWM$JH3(;LaPZ*ZV0Lykh(*22hn0GMenwGrYHG^=C*9rMm{M-HyQ-?n z>-FM;F(G_DUs6&Mhr#*6GuXlVH8(*B+g z?SV*N{A(euKR02 + + diff --git a/inherit_graph_1.md5 b/inherit_graph_1.md5 new file mode 100644 index 0000000..ea7fad1 --- /dev/null +++ b/inherit_graph_1.md5 @@ -0,0 +1 @@ +19bf3bf8f78c6a4d1d70ea7acc84ba2f \ No newline at end of file diff --git a/inherit_graph_1.png b/inherit_graph_1.png new file mode 100644 index 0000000000000000000000000000000000000000..b8a9a4f37df83fcaa25ad189c4b442675d3dd475 GIT binary patch literal 1202 zcmV;j1Wo&iP)Z1?-e{XVxn^L)S0^V}!Yw%1?x zywB&J^LgKM?mg!o9~g##C*k|m34AtQ!|sm98OFJk)oQg`t^Sf!J_4aoC=?2v71t3~ ztJM$$ePT)<2n0dz2hVkc0RU_^TcuKcN=hF~VPWBW(c|7>uVHt`YxqxSYislI@#*R5 zaTXsQ9%^c8=yW=fNK8#l?ds~X+wExW-rgRc&kqX=Ba_J-4o9oiV(YrGv9YSE3d4`YHjA0Hn#H8sg(vX+(>q{?70uvo0v*x32``IVIwHk+N5 zm9@RS{Wm%MG4PKdD>eKZY;A4%`S~p`F9QIMkB<@Y<>dv3!|8N7G)%2lCnhE$*K9Vs zp`pR0yYljKXT{-g*lf06_AZe~Dl04hKjx=iu#d1pq2O}4TrM{{IvQQKaX4H+K)~SO z;LXhqq7)Pq7z_pgz}eXu1VJK^$hi@jOxE1o3;?*kz9y5&i;Ihqk&!x`?&RboCnqN` zFp$Au3=9k)!EKXB_$=9Os0{M zk@oiXv9Ynk!$W~UP+eWUyStl_kufwhgfZ{mnFjBHAPA4gUtL|wl9Q7G03wkHhT+-SSrUo#UkzF;768Eh{yq%D8jXg@WTI74skEe|L?V&! z`FvE&%*_1MDXmZ_USD4+6bgYrNJ&Wn03d^WdV0FBu;A+2y18Xq6;@9#I6 zOiU)zYPBN9P&67%c6K&eq|s;q0JGVAbaX`dPG4W2)oQ)Gyo`y7K_lbh;;?0o#jwNS zP^naMxg33L4Gj&5VYAs>R8;i%_=pB0e(ZKTolZ|kNN`!hhKGj<1Oi(0^Ya4$gocJv zsno0Qtgo;4_V$K{haVmuqLHVkrx-E^0MnFST3W*6@ppH3sIs}a2>{sM-hO*~W3gE2 z>FHXn_Tu6~uh;YW{N&_hBy4SM4Ufmy)zuk|#?8&m+S*z?9&a!h&?$|4pC29`LPA11 zJ3DW0Z*@8yg+dt}9X&WW`1b9aTrR)4xfvZD_4oJ3Hl?u`E-Nd`&CPWYqoSfD5(x~$ zPft%Gk%-A;`uqDwL_}0nR9Gw)G)%A8^LV`A;NYO3AP$FvE?~}vVHh?VjcI9V0RaIt z8m+s#8xdz_W@2Mwi9}*vUY=Ac#b($C{_)fj`K5BF-$NHK-o3QD<2CH=cn!Nd9%uL` z$F%3?=k9S9e|~;WrBYp0myL*6EdGkzJ_@l|{EMBI+v9QXu-CA=<8g-n0sa0eqqubl Q%>V!Z07*qoM6N<$f_ + + diff --git a/inherit_graph_10.md5 b/inherit_graph_10.md5 new file mode 100644 index 0000000..5a26b4d --- /dev/null +++ b/inherit_graph_10.md5 @@ -0,0 +1 @@ +2f46d8bfcf499913c5da18134990582b \ No newline at end of file diff --git a/inherit_graph_10.png b/inherit_graph_10.png new file mode 100644 index 0000000000000000000000000000000000000000..f446964a02eca7dd45d86ad4e3c31835f79483ed GIT binary patch literal 878 zcmV-!1CjiRP)rfoV&$$iNLFRV0t5GgE4fGNF*jECS+OuDL1MynM~8u(>%|U&R-)Y ziee}f%C;#j2!%qTDAFA!^PloiB_++x%|}N^M6%gz;c%FKPe|}c?d|Q@*ck3#TwK)G*Voq8?(gplg5Y+$ zyhZ)$Hu-{r$ZtiZwMgsZ@Ha0fe+S)!<@k?bkn|YqEtE-!tnW5F?<>l|V{{oeZ$Ls5BGMSWRITnlg z{r-Z20z8p0sZ=VNOacJj-rfR%fYoYsI-L;0g@px=#{&TH`Fx6^1cSjyByx6krbUo+ zRF2sA_&Ce59LM$d_g7R@93LN>&1RzZ^z^VS%d%{Bb@loA`QF|h9+rlNhSSs2%gf8w z*4CDmmaD6)!^15g$$)Eh=Hy7lat5R)>ig? zXb-)q34*{d8hoK;ABJHBL7=lh#rQv_FN|P%BWHvC2D+X7dG|)gYybcN07*qoM6N<$ Ef)V + + diff --git a/inherit_graph_11.md5 b/inherit_graph_11.md5 new file mode 100644 index 0000000..b0bc89d --- /dev/null +++ b/inherit_graph_11.md5 @@ -0,0 +1 @@ +c99081f3f37a407e610617427b30e12e \ No newline at end of file diff --git a/inherit_graph_11.png b/inherit_graph_11.png new file mode 100644 index 0000000000000000000000000000000000000000..9967c0e5df409e984d98d26c153ed893769867f4 GIT binary patch literal 1070 zcmV+}1kwA6P)FYai_Ass zfYV2}=lJ|*&hyNfkwcOsU@=+W9l$q}(a&z!uAfWq`2GH&p`k<~@mhq6lWsaXI+84G&;N{mc9YTn`>54w&c7%W z3X8?^@bEx+1p)!(Ehs4H?(V+7zlSc3M#FiJNF+*)4yG`?|KsE1!C>(A_I7S=?(*_d zr_&JxL3uF@gWiROh4b@stJO-mMn^}3G|tY>zN!EK0DxAj^>{oCCVuk#`!D3=zq7M*b8|Dv z{`U5EdV0FHw$|3x_VX25TU%{58*CEWR*VorAEiHL@c}k_y;cx%|a2yv1 z1hccVQmGU{koNZWmzS4@hK4{OfTAdqlM6{>X=y3R@+sxzTf*=+b7l((3KlQ@r z+%E&|>gpOC9IULY)M~ZxQc5HenM~&Odf|XTAV6)Rr0w<<81Db4rzaf8!{M;o?QU*v zMi9hoHdEesJdWcyj^j5sH&&}vB9T;7RM02Vfv?*}qcIkX+3j|V#R5k*Ha0#!K2AK`>-E|>T8^u%H@%1f_*JRYyQy87VY;79cj0B~_} z0loeG{kgfh&(F`)Qb$Ke27>`X5V>4FH8n+&WHcIu7ZDCHo6TcmV?#GYhe-k>L oj^5>vng9RUOh!MuVY~i+03Y;#6KwHuBLDyZ07*qoM6N<$f=;*uK>z>% literal 0 HcmV?d00001 diff --git a/inherit_graph_12.map b/inherit_graph_12.map new file mode 100644 index 0000000..643b90f --- /dev/null +++ b/inherit_graph_12.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_12.md5 b/inherit_graph_12.md5 new file mode 100644 index 0000000..7dafa4a --- /dev/null +++ b/inherit_graph_12.md5 @@ -0,0 +1 @@ +6501511ae6aadfcefd600391f2807354 \ No newline at end of file diff --git a/inherit_graph_12.png b/inherit_graph_12.png new file mode 100644 index 0000000000000000000000000000000000000000..17ad1f714687e63300df9f70dfeb35ab2067fdf2 GIT binary patch literal 767 zcmVR=RxQ+0`(owOuYgrY4}>F6LRI&>=vad9d|r4ZakUDrMKD64t*8_S7b$7A<_-agKi7Nx!3N1Qo$v5|<~)R8 zes(B|0=5X=Zx66$I3ISiZ9W3#;`Q~_?RNkC{QTB5OMoB+9?P^CU?g92_intYv(%*{n*X5{X1+v$@;t z(oKq@?(Xhj7=|DSMbW`v@bU2>5{U|hf?O^y7K_t?mzNh11V=w>GMR$G;Mv((tyV)2 zH#awWy&l7`_xE=I0JK`|a5z+})gTDk?RJ~Z*6DPZ8>a(29?#?PpeX8aIMiyj z$z)pH2cQ@{K0Z!#SPuO#$Lz52{$Le2A9lm}up7>Y-OTtuop__gW*UtK48zRMn2$sv x5eNj+FSXc=Mx$XacPQ@r51Zk9*v+>2`~ec_^_D78GhF}x002ovPDHLkV1jBpXrKT9 literal 0 HcmV?d00001 diff --git a/inherit_graph_13.map b/inherit_graph_13.map new file mode 100644 index 0000000..efd06ca --- /dev/null +++ b/inherit_graph_13.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_13.md5 b/inherit_graph_13.md5 new file mode 100644 index 0000000..0834ee2 --- /dev/null +++ b/inherit_graph_13.md5 @@ -0,0 +1 @@ +f0ddaf3b618e706a9bb1a699d0564f3c \ No newline at end of file diff --git a/inherit_graph_13.png b/inherit_graph_13.png new file mode 100644 index 0000000000000000000000000000000000000000..5cc3d666112bc5cdab13143cb532df3d10f0f0c1 GIT binary patch literal 1738 zcmV;*1~vJKP)& zU^55_G7yCRDG7~D9F@X^!lYlrvLOUbDqAACm2DxS!HPDMrggWrT+%8pZTJ1-@ZNW= zW$(M}#_M}Of1Ue0=iKKx-+S+K?ztO-AP7K1A%Fbt1par>ic<}(IMvXKQ%zFLvB_jI znM}VWmBj~>$<*m|B9SQC7<-SKOr}SV9#NOnqUQSb>vp?6#u$5#0|4Z5`HdSlC`oCN z!(cGJHPUsQYG}o&hE|+vXvL`}LB-dsS;P1Xkw|p#;K5)pNP1BeCB5nC>DATMGcz;L z6$}QC9z7}&iP&s*Nl8g-Yil?hUVwQ3z~yrL`uY+ZYqQzJV)25c@k0{7$F*85hGEmw z(-$vZbi3Vhxg5uF(%aqL4ZTLA(dl$HG&DfFMx%N9^y$r;H{EV`V`F1yXJ=DW)6Y)g zKSkn-v)Sy7jEtz6NIzJ2?4olbY_)~%nP2K5jGF*i4tz`%v635UZfl}e#d zKs8^!e7S4aE)Ity7K;rA0|3D5^>Vq~d-v|GSh2!twI(7K@ipb;<>lq&#E)3LdbPn| zh_)CEh7B7wz&3&)(IN8l^WVIA16>x2rJ$gI#bT9~mNqptjgF2&yVvVowrp8vXXoqJ zuXQ>dkH^DtJQNBoUApx2>C+g7SuB?1aFEaEU%h%2!!Q<$rO{}}8O;L#pr@xN*0@lLcXV__D-P>8hG8z3>(HS? zD_5?Zo125)a5(I6I9gg-ii?W@0CjbB1VOa7w{P3F4R(k`BInMXd;9h+j^odsJ&Qyl z@LA#Ucz5pH@%#M%0H@OlJ6BazojP?YuHs!?T^l!UBoFKB>(y#?+(1^VRUi;lRaK>= zqy&RO=rx=U4CLrPEJNI_ppuw05UQ%&YnGsqNv?& z7YGDSr&FO&$Ye5^Om^(pvF`5f>gwtvM~+NRPD&&aIF`X+)YjI*=kNCI+ch;ckw_#z zKcC5DlIPFK$$$8r4HwQI1>ehYj}WU*Ki6BCt{l~YqwWZ6+F zl>mTnIGmlGegFP_a!7M?^Zxz&T`reat93XWxw*LjfN1&RezJ%mJ3BjiS$4bKIXO9T z0|5Z|e7@0W92y!@DwQggN+OZ)`Fw#u@Z!Y_*wf?jkS}A=*Z$v<_{#a=!-qg1;Pd%x zHk(qZL=Z%y(U9Kv@81Ukfj}Ve>eZ`;h6X;Lzjp1~l9CdMM6!GLZmZQgJv}`#GNRFF zii?X23JNMJDu#xJj7Fp1?{8~s)9dwVX=%Y=5YFx6$B$>uoN>F|p-^a^l*pivva&Ll z%hlG_HZwER-`{`X!UeTj9XAjFV9AmtOeS;d)~%J5m4^=>1_12Xv14|2wzaj@@Aunm zwxXhUvREvcO!oNkW9SNnLUna@QmHg0 zB_%gEx3;zx!!YO?92}I%WT~mC>(;HaSS$oV;5e>Ut5Fmci^VN1Eys@^=WsY(WYSpUCmoI-W5L`K-*YEeIr>7f@MuH$lM@P48*@7U5 zP$<;v^#nn{Iu4iC#OgSM`1-f}ii!#V0R6RgL0~W#Jv}{8QWE;R3f0hxQw^;+)zFGl z4XrrU(27$HtvJ=h+2wmY9{Nv0zmS+6QGI>=@6KrPkd&14;K73*>^W(EHFO=P8d`Cx gp%teZT5+oR6Q*g?B!^ly%m4rY07*qoM6N<$f;nVgNB{r; literal 0 HcmV?d00001 diff --git a/inherit_graph_14.map b/inherit_graph_14.map new file mode 100644 index 0000000..742a574 --- /dev/null +++ b/inherit_graph_14.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_14.md5 b/inherit_graph_14.md5 new file mode 100644 index 0000000..b1b59fd --- /dev/null +++ b/inherit_graph_14.md5 @@ -0,0 +1 @@ +36db58357b58099ff9c44006acc4c546 \ No newline at end of file diff --git a/inherit_graph_14.png b/inherit_graph_14.png new file mode 100644 index 0000000000000000000000000000000000000000..b737a96dc28388977489d89ee49baa00fe366790 GIT binary patch literal 1099 zcmV-R1ho5!P)2sGLlgp0JFU1>-}2)WRuLQzf zIlS{Q^UfR*!f_nX{2j(m7x3Gm1yMi?qJS1e0h~Ozxw)B}n@c1TKUK|-!(=iS7Z>a5 z>d454JILvDnoOqeF6uX7GMSuCXL1BipR}{H^Ii4)Iv@y2iO@ZW0$LCSv>*y-K@?;o zNFtFyAL;4o2?PQx7VB@PpePDKQ2GaiN~Ibf9|r(H5G0eyl2cPtQ$*@#$?^_TtJU{O z7>&mA@^ZaipGzs*+uJsqEteJk4L*6zX9AbYt*op}366}6(HIN{0RZps?_RIBprBx5 zV*^D|y+F$}{n%uaCS$LI6Oh*T;ik5LqD zXlNjZVzD?DizT1Fw6s)TU%$1rMMhv4wpy(Ug#yDckx0a3GRag$MFjwWc(l1(E&zbR zU=S0&E+ccY6!Zl=9A~k zjvxpCz-qN>G#Z!7Ra;vN01yg=xtEbS`TtPt?Cgw0BFoFmp-|}T?5wr5)!}fES-D(p zu~;@YHy8!7>7Zel_$Nl~NU0q#bvAC(J z>Fw=JsZ^}qy!*;tp*$ITx{}1{Sx(87}3!;D)L;)>`f + + diff --git a/inherit_graph_15.md5 b/inherit_graph_15.md5 new file mode 100644 index 0000000..7d22f2d --- /dev/null +++ b/inherit_graph_15.md5 @@ -0,0 +1 @@ +5d0e80f886e4d98ce758a0014a304dd2 \ No newline at end of file diff --git a/inherit_graph_15.png b/inherit_graph_15.png new file mode 100644 index 0000000000000000000000000000000000000000..6db5850efb6d7b09e63fea487b88c78bd0accd10 GIT binary patch literal 1870 zcmV-U2eJ5xP)zZApI7HT=bUHXd(YRMXJQ?(XiD((^}b-MY1{ ztu4B_VLlBm1Qv_6cJ11b;NioEqsxYI=+L3#$B*~)^w4Ou#pH<&nM@{^%P(KPj9q4B zW!dfa>({T}ym@o^#r!EFBO||l{fchxlGOojw;SID1_uZC?Ae1L2%pc_YPBIFpFDZ8 zdGlsAn_XO7JU%{-$K`T4oleKsAeg46rrg}z`1tsgloX{>2>=)y8)GmSN~ID(5H6Ri z)oKj}1E0@F5TvrQGJ=fLr%z{QW`?vsfByXH)vNOI^57S}b?a6|MFrOG=;+wKeLIuM z6bJ-&@7`UAfTvHN=I7^^mX;F?N;pXOM z4u@kj8eJ|I0APB0y0^DCE-voIjT>&aTc^{-#KasudKCMOLQhYR&1R#~Xdga&fDp=L zGOTNAYKl&$U%7I{f($;ruU*RBBoN=iz+Ua!Gm004ab z`ZcT!2;uA3uj}jUu^YkLX0w^aV$F5GV`F1%HoK;#W_WnmWHK?C%%-NMc?DRlRsg`k zg9jZBM{{#CkH^z$wR5GSP$*)t_{*0sU0q#CNlALWKCJ$*BO!!oX=yKByqI_4!me+W z4hX3O0)YVT0F%ii5D4(WDwXQMfdjY$6bgk{EXI3x?b;RW00`lcBS-S{^I?z!{CTY$mAK?vcuZ{Gj_eSLip!kL+w*w|RR-5yrPTzAya(2$Uj zFjud^VA!%{3w|k=%cWB3yaKFN>zXxdzJLFY&C=`jIXO8IQenP_5K1JHOP4N%)gN{w zT$}@zvJSxb`0=CNZs&5jcqBJB7jL`WZv0Ic0FafH<@5Q1r&m=~Wn^UBxpN1PP^nal z#Zp#Q76=43Zrr$P)hfIzIXM{sfbBjk77G9n6BC0Ch%6%nfj}@ZG2!ueI2;ZhG?`2~ zoz7yhxLmIE^mIJFVZ(;{`uceV002@_QsU#|v36!=ro-WgkP1antPvL%7g>ME$VC#R z10ulTa8grK`}_N`OQ+N6_xtf)6h(szY=^^vJwzM?LDXvXi4!Mw?%atW2mruhv8Yt4 z_V)Jm>(>JSf}dd2GD1j8OB0DiYPGt$x*8AG*4AP*DUZi%XlTIW0|Nv28boGjXvpXD z(dl#mKwn=UilPxxQ7DuJ>JJ&YNS6LYsIahba&oe|x_WeU^ySN!+qP}9*=%@kNlA&> zY_6@X9T^!h8jWVNd3FYgM3SAIjn_3^uNV8P^7(vfwR&J+U}|bAY8f3J9giM8!p7ij z3WcKA>opq9nKNhJy?fW$*?IEhNt4NR{``3WKv7YV-EP-tG~?srjg5`BZ{Li4IB#74m5W>#R&K)~; zFc^$=>(sZ`2jGWmRd zRaKQjp+FF%tE&qDfbFtBfBpmjcsw3#E{#UB+wEaxKnPErI+c-;F}n>ReDmf_VPRo% za&lr~VnIPc@Xp%W+M1V_$6zq99STB-ZOIV?SgqDgn>HzxN)Cs^43ililW8E z#Vf61enLpp%ykPaX^qyvZ!=>Vb==2RFzsV4cK(c0P?CK`M=(9+UE zr7rz91tk9tD2j%h2vH#U{{x5(SqBgu(g8$=bO6yI9YA#c12X+1t@%QN`2YX_07*qo IM6N<$g6NrsSpWb4 literal 0 HcmV?d00001 diff --git a/inherit_graph_16.map b/inherit_graph_16.map new file mode 100644 index 0000000..0f79daa --- /dev/null +++ b/inherit_graph_16.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_16.md5 b/inherit_graph_16.md5 new file mode 100644 index 0000000..c2c5040 --- /dev/null +++ b/inherit_graph_16.md5 @@ -0,0 +1 @@ +d369f3338266e5d31e49f00403aee6d8 \ No newline at end of file diff --git a/inherit_graph_16.png b/inherit_graph_16.png new file mode 100644 index 0000000000000000000000000000000000000000..d44ba2d95938bc218cfe8d5db64147a5f6f03984 GIT binary patch literal 1570 zcmV+-2Hp9IP)yFkiJvn$G@ET^&nAWGJGhla{b<8fK1|$~I`Gg$}9Q?Zu_be%EPw zubA??pI7%hobx@;`R?qTbI%451OYf$!28z;?0Pr{*}^%<7S2Jo@M&cX!!Qi{C#mdw zA|fL0-o1;WXlRf=2Qdt@+wI$z)UM+B^XG5gyrBi@a}WTaR4QM-e7P+t?J^(;S{>xp zLAG!XvW0VyEu4dFVea6>#6(F+iA*LF3WW-V!e}%GgTXD#jN-$G4;qa|DwW2^$LHnc z4Gs=65P9(6L2`1k#bSB&>eb1UC$};`;=dFZ7Z(>76Mw_ua0mo~($dntzP?YNJ~cNt zi^bx~%F4es+$^J`qp`8ERaI3^rxVBVs;a6zd-mWszF8faOom|?K@gume{OGYXO;{A z;Khp<^dPOgK?jc?Kd#g1LL)YtEiy9F@Ap%YU@*A6yv!_D3Z+tc^X5%jhL_HXDkfJv}`Rha)E^M<^7^<#Myx zOc2D>)KpAN4ArWzu+U^Ob$55?=H}{jy12MF1VQwA{mROU+wBGbc)i}xUKSP>JRT4E zyjtAv_X~x>#>Pe%h6MtFR;vvJ0;f)$f*>d{G0|$ZTCLWstSqwm$jHcv6DQ*1%kjEn>T1OkC)&z{-sc7;NbpPye? zSm<)O3({Sg#g~?rIyyRV9Jkx;{r&xqA3q)(98641?CtF>C@7$G78Vv%D%F)MS0*MV4jnpV zu~-;b0hsM1KA%q@5KzU6iVD#m8X6h^06%{GxN+kK48vBd_29vS*RNlfNF-{t`qHIK zX0v%M+1S`vqtTd>l9HR7tJmvWT3S|CR>HmpkgO$65JYWltynBRdi3b&)2F|D`4YBy zdwY9&diuqS7bOx&b#*m@APlSk%p5#?_^{jUURqiriw_?@BOu#H=F@)_8%XA(cu)KhBw%nZGs( z3lj&UqoYkG)4hB5u3o+Ba5&sY_`V6Mx9QV zkdW~6=g+35rsd`3mX;Rkwj&S-l$V!#z24#B;hLHnolXZqP(wpQeSLjpW#zkf@0?EO zwQJWpJ3IAy{aWH1AH}(I=RSV?`1I-1`T6^QUMw673 z1jDdKqZu0;!!WF^t&RNBQRkSEkrAa*DHICR)6>cAk|2ot_wS3vVjhpDP$-IuipafK zE|=fFeH(^hsZ?5BUH$9VFS7FJ=xBa^zE~_yNJz-b%X|I$HI>6^alhXW09agHBr9CF zaN*9KJ4DE7hPD@HW@d^+qFc9a<>cg$2gc3r#mpVtTDrTtj~qF&ojuOZ&bGF;Qbhzo zhK7dLZxYtQF!zK16Zm|7Sy@?BRFq1kGMmjj9xppPn}Nz>%07*qoM6N<$g2jvWr~m)} literal 0 HcmV?d00001 diff --git a/inherit_graph_17.map b/inherit_graph_17.map new file mode 100644 index 0000000..07d49cc --- /dev/null +++ b/inherit_graph_17.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_17.md5 b/inherit_graph_17.md5 new file mode 100644 index 0000000..1c78d69 --- /dev/null +++ b/inherit_graph_17.md5 @@ -0,0 +1 @@ +d84217e741abeb4238da65b47fc149c9 \ No newline at end of file diff --git a/inherit_graph_17.png b/inherit_graph_17.png new file mode 100644 index 0000000000000000000000000000000000000000..dbb9dc05cc60af515b1cac0bd7f69dd112bb1d9f GIT binary patch literal 2003 zcmV;^2Q2uBP)$7L7_ex?s+DUx9fgVMAC-eY zn$>1Aw{ml7rj;vg$xI7UnabKKol_%5wKZ4%NHa&)N*h)v1Qd?!hqyBC`^R1Py`fm} zzAwqU`}ylR=bn3>bDuBwIhQ-YfFKBFi+BKh-gyKqne}8LhE7F6TA9Ul!4PVuRvM|}% z*)ATmKlul!PW}O^lYfBf{}8XDsB`B*GgrBdm1y8Qh7($dnRq9QL+Eza=pFrUw7v)LMr z=KlTr0)ZekHTCJ!r=I3Hd-iNiO^sMA=5RP(*I8a(Zb6_@slvj->gwve%jPKyJeU8H z0|yT5-o3l2sR=TfOeU2|6$*ugg@s{ZVUQC9!LMJx1_T8Blj8F7@(KzH&YU>|nTd&s zdcFSQ#fw+2T=6K6!{LaHjRgRJ!C){L4DX5w2?>dejC674=H_~r%~L$SpUh_S@bK`d zQ>T#5&4G&Hn%^XA~-U>1wj($WF|!1(xhP*4zj zVn#-WLZP^Q`}VeN+oV!yXlN*%PA@Gjbvm6B6BGUY{f7@9Mov^;Utd;M294(@pPHHq z4i0W?Y@|>q1Og#5Gt=R4Y}vA9YHDix_U)aWoydJ}U|@jH=aWdJoSdA@%uIzs0RX_U zW5?p-yLjfK)oNF*S_PY*K7F$Nz~OLMEEYT-FO^EoX7kk46p=`*s;aVDt!lM8I5_y; zy?c7SJ}@v4K7H4&U2?fxtJMMkkdu>RFc`YKyQx%aZEdYaqX`KKaaYEI$!#_p27?ia zMDO0c8yOi13ky>y6d(wOhllHQIuHaqIy(4#J_v$#yPZfRDwRsB)mmO&4gi2$E(bwy zU|^uNwH2BIIp%V?F6;K;!v~|$h{NHaorB3_o;-QdYPEKEcazCvl}cqa8UX;9o0}UQ z9mV7Ea=F}OGS$`9VX@eQ2M;d3$k0n8q{m~OnwpwoVq#!(|Ni}O=`xwjVzB@K@Z!Y_ z5Cj_=8`rH{2S*kZ6i6fzcRB?H1%3Yf8FDHV3O=8I^XARa&`@_}ESTJ8v%#~2Ah>7G zp3|pKgA3`@(9j?d2%s>h(@CSzAf4R7<#Jv6lhf&hbyBOEhgCX)%de4fDmo6YcGW@ZK&zkK@;lc&v zL`tPHFfeeDo#gM-!8)$maojW#wm2Ac+h z!HX$8)+rz$KrWY`KYujm6!!4pLxDg*AQ0l>;+mVAA!l`Ubwor27K`Qa zco`WPP=88DNGK^OA(P2eDz&({cy4YE3V!_faY{-`L_`FML`q6Z>gnl$YnY!L>Q8W= zlS-xT`V(|Ihry4Y-XNJvO}dU{1gg)g2X{tL8PEt}2u<%~w7v8AO2Hfc0k zZ*Q+J3s{`_I(hRw_kREmhs({)#pCg5X=%;P%~&jUn zs80R?s*``Pz;lGlFUL@P&*bDJolZx3e$t6Tq2O@1`9B^*@jU{80BK@C^#4!(0NS7Y l15_vf0M*GqKy~sD{sN5;3tJ$+It%~+002ovPDHLkV1g4P%WePw literal 0 HcmV?d00001 diff --git a/inherit_graph_18.map b/inherit_graph_18.map new file mode 100644 index 0000000..824728c --- /dev/null +++ b/inherit_graph_18.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_18.md5 b/inherit_graph_18.md5 new file mode 100644 index 0000000..b474caa --- /dev/null +++ b/inherit_graph_18.md5 @@ -0,0 +1 @@ +92c73fb74a2c593a52281561feb03506 \ No newline at end of file diff --git a/inherit_graph_18.png b/inherit_graph_18.png new file mode 100644 index 0000000000000000000000000000000000000000..3ade1d7a644b8caf44020dab8794f35db8b2a859 GIT binary patch literal 1651 zcmV-(28{WMP)y9h4lT1H%BiVE=omzpX)bHrqM{O=${aX`g|33!`Mo%Bx#>3D zlI!k|`+0TF!@19Sp7Xuu+;g^rK?ng4XAx|406hN$uOGMJ_2V|Ye%waLtV~W$+HAI^ zrKOFEhG$hQ7K_DVp{sw*ztPdrhYugJ9um)586F;XI2=riaAl*8jt;is;fas3va)3s z{`<#mc>TByuOGMJ_2V`P>i7Bc=d!Xgf*_<)saC7KdGlsC9A4kZ5FbB&G?`2)l`1PM zORv`t4h|;Z8jD4Wfeo}NxoRJ?u&f^aw-5WUCp#uES7WU z&c*9TE|+^eo_~piwUlGC4*L0gJ^;Yf)YLNjn>TNM{P^Mb`!h2$olYl7k}j9a?RJ-z zmP(~kwOZZY-VP!B_U&70YAXHI(W6J3o16Rl`wtyDWVKo|GBR)+uc@h7T3YgYy#RpO z*;!^U^YimQpAVH+Iu8T_QmM4HwN zFE8)?`}Y$Q6DLoe%+Ai|=U0hu3>+7Q^ z%J28<_4<4F?hOtODijKr%caq1dV713pZWQDqtRGjUw`Dt5xd=9Q&VFw7ytkki)H`* z{iqFHW-aB4ii&vUhsM06eq1nAx&geOj%sI9GqjP;YAf32;p zI-L$R3x~rvj-&avu_;FjfM(_Vi+lgMYu7HX*Som5h^j3uEy&T~!-wfM=#871naR)3 zr;R&y?3kLGTKV>%LT+xZL?U5!v3vLK@87?p(V=B1hPAY`{QUW|t*s3JfEE(~z?m~=d_LdM&=5foO-)S@!q=}~i$tPJ zmo9lco_FuwRaI4qM54EE-$rwe)=zp-I(_YqPq~!s|DHX2 z*z9p;X6EkQyL1)D@u8t1HUmg3<#jke{67#1h3C(o7mLM4qp`icT_6w~IB;O2gGz*? z`28BkakJUXW{+F8Z0YRmtgEY2tJTk*J?rc169`xxiuFnvgN*yT9UUFz<>ipS(VMKG z|KFJxB$8tO@gxkdAGhK4<2Jm0+$O^LVc88sp5$SAdYb+l1o4-CIXO8(p>X9TL!RV8 xr_(X37=K#eH2n9E+wl5v8(u$d!|TUw{sW$+@=}Z5{M!Hk002ovPDHLkV1h-dIg0=Q literal 0 HcmV?d00001 diff --git a/inherit_graph_19.map b/inherit_graph_19.map new file mode 100644 index 0000000..67d5fac --- /dev/null +++ b/inherit_graph_19.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_19.md5 b/inherit_graph_19.md5 new file mode 100644 index 0000000..186cb6a --- /dev/null +++ b/inherit_graph_19.md5 @@ -0,0 +1 @@ +416e149021283c7b3d63c689bea7aa61 \ No newline at end of file diff --git a/inherit_graph_19.png b/inherit_graph_19.png new file mode 100644 index 0000000000000000000000000000000000000000..9b1b2582275bbe195a735eda34c8977d8f400884 GIT binary patch literal 450 zcmV;z0X_bSP)lIZ}8}OUVEHrPebvU;!k*aNb*J^EXxuQ3Dvj2Lk6?vjKE|>L05CmPRh?1m&s)dftFr0exsg+UNJSr&iJ&gU~l zQ8Z0IY48Y4v*Yoos;X(4^{>-w!K^!*&EhzItx5xOJ76$t54mP{Iv`1s?k~f4D8FME sM)wX3!yFEWh6x=0pS5N%YY(|*A5wmXa-h#tJ^%m!07*qoM6N<$f+ViW1^@s6 literal 0 HcmV?d00001 diff --git a/inherit_graph_2.map b/inherit_graph_2.map new file mode 100644 index 0000000..5bd4842 --- /dev/null +++ b/inherit_graph_2.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_2.md5 b/inherit_graph_2.md5 new file mode 100644 index 0000000..a53bf4a --- /dev/null +++ b/inherit_graph_2.md5 @@ -0,0 +1 @@ +2dd21bcaad60a36612c1b336879e976a \ No newline at end of file diff --git a/inherit_graph_2.png b/inherit_graph_2.png new file mode 100644 index 0000000000000000000000000000000000000000..e13dce434654e7b7ae921cada097d9a24b1a8037 GIT binary patch literal 1494 zcmV;{1u6Q8P)A5_H{e1j|U+GD|jhTe=4m%aExp*tM2m$h>UR)5H0BSyvt2 z1?CU#=V|BM@BNl2AYU%!4u&84L!kx2CJ-MhqH zmY0_?4BKZJ6%`etZH^v2s@LmhXJ`4$g9m@*iy#Ob$A^c9lZWYaI=|n~Fbryrjg6(H zrMX-#)TAgXBO^nj(IoDYmzVeO;Y0LWtycSdzT`u6cX!h?P1Cf;;}MI+_4V~zTU&bt z?dy%>? zf*|yIy`Dk@66U%Pkj-iZ?@q*CdH3m4|+=K%n6xxA>TXmWBA0N{4J6$(XjbMx!h zuhA($QIuAz1put9tmNe6xLhukN@cUz(Em}V(*=XUnwlCk#Ny)O)vH&JA3u)c_=5)z zl9U&Z$E&NW+uPewGa8NN=H|LwE>1$;z&|mY&1SP1?t_yjPYw+YK?plKI!a4RQRl?O zgj6bZyWPQHu)ed3jGyPdFS7 zhr@Gob5&JUIF85T@uyFps#GeJ0?(Vv$G$#S;V}lgS{2Wo2a~NkRzg>gsxXd%a$-L?S_9 zG))5lK7INGA>7s1%a<=tpFYjj(AU>@? zPfbnD%*_D967>fRw|Wy4H^gp78Vxd+YAm4uC1-1O#=f1Xg<+s z^!@wyXV0Dm07#|Mnwpwt&z?mhk&%&+rlzLUCYwkqzP7fu>~{O($B$X-9UUFWS0E5L zbLPyOH*daw|9<7l6_d#niA2Em64u+>TT)VzmzM_sFdB`Mlanr&3oTwO>FMcvjVqJM z6beOX8=ud&^Ldzq)oLY4a%5ygtybeWp2B1~q~dFQeEjFnpS88MY>(M&o|~JSot+&Y zA2%2bA3uI%7=~e(tgI}FM1o>;I-SGeFc=J|sZyzwO6BP2D96{Xp!3LRH2(Va>+apV z;c(dF@n|#}bPY*@$z)nxUG3`Xx^?T;&V(tDim&0}VUx*}las^tl$MsBI(5osvo$t0 z*4EY<3(>ojaF&IE%$%u~-O#$j;7o zI-Rdxy~1(aYPH_EbLZyGo5}aZFwAT=heDymqsu1bJ#zp=@Xzl<*RNj(00{4M!1ntb zjvwLqkspFDeh9w!A^75l;ENxEFMbHV__53Pv|unOe6j@qP!zRGFX#EYwYBxY3p>0N w6clj$aPRL0k|V5N{1ANcL-559!52S%197pI{GCBdOaK4?07*qoM6N<$f(YgEH~;_u literal 0 HcmV?d00001 diff --git a/inherit_graph_20.map b/inherit_graph_20.map new file mode 100644 index 0000000..ccabb0e --- /dev/null +++ b/inherit_graph_20.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_20.md5 b/inherit_graph_20.md5 new file mode 100644 index 0000000..7d7b2a4 --- /dev/null +++ b/inherit_graph_20.md5 @@ -0,0 +1 @@ +a46c800c63b1aa14d523419f4d20a6d7 \ No newline at end of file diff --git a/inherit_graph_20.png b/inherit_graph_20.png new file mode 100644 index 0000000000000000000000000000000000000000..d2349db873450e93287b54334b92fddd67156f62 GIT binary patch literal 815 zcmV+~1JL}5P)_~>chf=9LIXMwf$HT(|hGDO-uK-}N zSg`lF-EN^4{p2tG8`$054F-elaA;^qsLH?8FhLM1m8ut&g`D9+p|G&9AeYNcCQ~Aj z;F7sq&f#zn1Yxt;ve_(`yu7@epP$EZT%*zK?Cc1r;Y$QF{P_6jbUK%omKcWF-``(f zU%$G#s#GdYr*my>?e_N8nIuWFP$=-KZES3G&M?ce zLg^IjlTM{lQ&Ur$o0|aOa=8M5Ks+9wo13#*t${!Q0JgTalu9MbvLhoSH#av%qY(g9 zDix07wOUQBR(Dq8%`ia_Lg^ID@csS0UaxP527`g7>Cw?qgTcUMFboTYLI8jeIz2sI zU0r>9dz+q~mdRuvtMzV%1v9MGYLAbP+abd+s(ix&1NhXV;H8MP{s#vvuIAR-sG002ovPDHLkV1fn~hNb`j literal 0 HcmV?d00001 diff --git a/inherit_graph_21.map b/inherit_graph_21.map new file mode 100644 index 0000000..21619c1 --- /dev/null +++ b/inherit_graph_21.map @@ -0,0 +1,4 @@ + + + + diff --git a/inherit_graph_21.md5 b/inherit_graph_21.md5 new file mode 100644 index 0000000..9a913d4 --- /dev/null +++ b/inherit_graph_21.md5 @@ -0,0 +1 @@ +0029cbae1b0f67ddc2d1cfde8d44ba11 \ No newline at end of file diff --git a/inherit_graph_21.png b/inherit_graph_21.png new file mode 100644 index 0000000000000000000000000000000000000000..6720dda4725dbba6626308822b00fe889ba8631e GIT binary patch literal 5385 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 b<+O9kyaYL+$!&5~2nek^`f8;}+lc=Gr!{vF literal 0 HcmV?d00001 diff --git a/inherit_graph_22.map b/inherit_graph_22.map new file mode 100644 index 0000000..079925e --- /dev/null +++ b/inherit_graph_22.map @@ -0,0 +1,4 @@ + + + + diff --git a/inherit_graph_22.md5 b/inherit_graph_22.md5 new file mode 100644 index 0000000..d204cf9 --- /dev/null +++ b/inherit_graph_22.md5 @@ -0,0 +1 @@ +f2fa53f87d5b79c3032fa721cce5f740 \ No newline at end of file diff --git a/inherit_graph_22.png b/inherit_graph_22.png new file mode 100644 index 0000000000000000000000000000000000000000..a14cc39ad18ca81b9763437b06f702928a12950c GIT binary patch literal 3834 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 literal 0 HcmV?d00001 diff --git a/inherit_graph_23.map b/inherit_graph_23.map new file mode 100644 index 0000000..5c83626 --- /dev/null +++ b/inherit_graph_23.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_23.md5 b/inherit_graph_23.md5 new file mode 100644 index 0000000..f7457d9 --- /dev/null +++ b/inherit_graph_23.md5 @@ -0,0 +1 @@ +db21679bf78993100ba77b4f1457bcb2 \ No newline at end of file diff --git a/inherit_graph_23.png b/inherit_graph_23.png new file mode 100644 index 0000000000000000000000000000000000000000..59c48e4ca7c1c3590725281d619cd64398dc4939 GIT binary patch literal 1839 zcmV+~2hjM5P)42v@e!{Ur(5yxh; z*=#m1h!le9$Ye5^Ocq`fIm66mv)yk07bOwQh}~|VK6xT%7yuwAC&y$m{VS3PW3$Se!u^7H1HK#TkTQaYl@WZQHgj;cuu^YJPtH%a<=U2AF!(E%H!tzmuU}6~OACLw8VZF_ z6m4p1nyD+9Om^bLiCM-n8jWdbY0b^eze{}VGwl5N^B9I<7}nk0y=>VssZ@&J+)I}( zVHo!A-MiM-R=3-olamt&1n?7$Mk9>gzJ0sDzh9%#z)YKe3dh~aw1|aHV{Tx}f zY88XQ001x;46RnXY11Z;$HV1v!$T=4DLZ%WeQMwYhYz46bb|aWHLEs*|Uq!%gZyFOxfAlu$jeT z5s5@}Iz8rrrlzI@0>Lk;4d-{}u%ADFPOl`B$qI$SYPCkx2ZKSE%hl1*aq!?l0D#x) zefI3xg$ozL+Y}TO*zI-_iS*&a2O5p`@Zm!qkN4!s6Q|Reo106eQZq6#Zr!>C0C2nA ziHV8$iKV5bO-)T!t2Hk#ud=do_3G6qiq_TD&9cBk@d|~)Y&PSoqQzo?o1v2@Po}4* z!^-e7j?d?#QmHL1E$h~;qfjVPsr1{oZxV@QU|>KdleM|Hp>!Z`@D2n2pfB*g+0KnmJ zmM>op0Py?$Mxzn>$LI5FYim0@I~@*(LZLuWl+9*G9s2R($80v+<#N4!`?jK@f=;Jb zRaMO*UMiJVRaMz+wq3h+_4oI?-EO!Z%4D(~J9fZ6!^`1JPEOvtcdxIn55q8#NMtY= z?%usC6bf}Zomea$A0OYlcW;Djkw`SJdk%hOhMhfo7C{gMK{7Kl$H&JzIy#mvT^hAz zLPA3LA z)=VvjhK68ngTNfdU@+FNU$50_-@JL#+uNI-p6>B@CMPFho954B?RMjpZnqoWreH9L`{ea{ z@q*v)hviqVUg0-%7D`G=zI^%8-roM=#ft+64$S>Z!L+p`oS9_Lmp@_{%n)N^W8K}| z`}XalP$)1_K|X)}?DP42KHu>0utuX{GMSq)9EHACLTO^aP#I(rBa!koc!a*kCv8}si`TwUf3mg0W{_5&# zuh(m{+3M@-l}hD5ieI^MWl2eiN~IEu#rV^y)9LK$>Y84jJ5goNw-fM(3_Ek?41ypG z2BW;Z97R!^%@)2y96EFe<`02D;BYuB7R!niD*ylm1qDx^J{=kwl1L=k+1YJvZ3ctk z;>C**zeEHlvVjxZ?lO$Wh$93qFs8H8bR24Ps7 dK^PWi`~__QJP79)f71W}002ovPDHLkV1mbXi3I=v literal 0 HcmV?d00001 diff --git a/inherit_graph_24.map b/inherit_graph_24.map new file mode 100644 index 0000000..b7d0647 --- /dev/null +++ b/inherit_graph_24.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_24.md5 b/inherit_graph_24.md5 new file mode 100644 index 0000000..c7ce3a3 --- /dev/null +++ b/inherit_graph_24.md5 @@ -0,0 +1 @@ +d820e8d12a4d955e85f7874c73a79cc4 \ No newline at end of file diff --git a/inherit_graph_24.png b/inherit_graph_24.png new file mode 100644 index 0000000000000000000000000000000000000000..d099c8982366800281a388e368969fb1a45ce6c3 GIT binary patch literal 1489 zcmV;?1upuDP)O9YW`~Dt28_zip8w)}R7-)n2uNUCuFn;NU@k=j^UwYw?2P-Qp6%`e~e*OAa ztMLL*6h%>#82Tiz2L9H1yp5ck9G4kp|D_kk zFTF5+>4ou2FSPiruC6XFE*>2njg5_^zKWt~NlD2mZ}08x4Gj%_{`~n#1!pE)94_Mb zx22_}qN3vd{rm0|-@bi&Zf@>R+WmRLDO^Oqhlht!snpHl&CSiDqoXs+AcQ}D{Gch} z6g>7jIy#z^l%&yUe0_bzV)3I#k1z}a0K9$s_Qs7H0)ZeiGjnHWhgefXLxWf>Mi8X3 zvhwH8pX8|R?QK4v-__M66bi3hyOx!e_5J(zjEoF}!GNOZix)2d01FEXckbNb^Z9bQ z{N>A+E{jP@N-~*DN~IEiX8-o>TY7rBpPyfNcz9b|8vwv&vk3%(ckkXsL_|zYO-)Qp z#K*_;c)Z}?;OgpXY67*LOM<7m03`A1)hm}7Dtf&h08mg+U^E&hCnrTBQCnM^!C>HW zx$W)kX0!R(vuA8JyQrv0uh+BLY>h^7K^1+ zDmOMZK79D#@9*Ey(E%Y;C=}!4;}F8_?QMZT(A3mqv)P7+hxvT|#KZ(S0YVrS7B)3C z1tD}gof3(prl!VbvrSG;1_cH6^z>M*RxX#T(P%6di`{Pb@$q@`Z$GrBo`3nv|3j+%J#Ev)k?X zWP5viOiYZ6UjV?zk00>@l}c4tS4Z~S)zuXj7e~aFm6fU0>XZBq4-d=ba-z7tzCJ%c z-)glIEu2oL!C=5J48yR+#l`E_uj}=Ca>B9g$O&gc^?S_u_)LO>gLyn2ejOPZX*3$m zW^-g@BvB9@9qn*9000Pr`1ttXlTlGo>+9>(Gz3BL3oe)I^3vMcnnWTYhEl22<#bQx z>({SKOG`qbkeG>&kH;@ULP7ul91dq>WaQqxdl-hvWU@<_F1gB-Mf`Y_i@s}@O@S(|Mayp&(HLh}GWTd{netv#FG&B?dKvsEXJL-qwCg*v6 za5x-Vt=3|(%*@Qx*4C=k>b$%>ole)?-MzWF+0)ab)9LWagM)+8(o&1XGCe*0`0?Yy z!a|Q4Wn^S5EiJXSw(jigjE#+Tc6O@OYHHcu-W~uTH8pjAf4{M@acgU9dU`q`Az@}_ zhFrG0yNhdbI2_H*&CAQncDtRN;AT6IIFH|`s3-(MZr;3^lar%XtF>CKOePx~9BgT6 zkw_#%Lqqtj831ti?p+MSVq#)cD%FDr58QmDB?t%z(ChUB0|Ox;ArBuueERfha&odu zO>S;(ZfloC1qI|v6h+h0(xRiI6$-`C(NR@ZRbgS_ z`uaMN;7&V_A#cWR-rp1og*%)5{}Af^?INBpya|u}A_$V1nMub|yb_Q7%H{If+FCl6 z;*~J_1HCYQ>4ou2FN|M$Ip%zP${C;GbWA3bSS%*b{N`6E6mmEm>W}yg?vt39NFK5v r^Z#EuVfJ5oVf@ky + + + + diff --git a/inherit_graph_25.md5 b/inherit_graph_25.md5 new file mode 100644 index 0000000..edd18ab --- /dev/null +++ b/inherit_graph_25.md5 @@ -0,0 +1 @@ +ac433ee416e184ec5f152c1597286d7d \ No newline at end of file diff --git a/inherit_graph_25.png b/inherit_graph_25.png new file mode 100644 index 0000000000000000000000000000000000000000..72c4e338e667ff1382906fe4666f986849d10dcf GIT binary patch literal 4262 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 Z4L)%b{cPGs8vOA9=-k1g-)mYC{}0Y4J1qbJ literal 0 HcmV?d00001 diff --git a/inherit_graph_26.map b/inherit_graph_26.map new file mode 100644 index 0000000..2db7ee9 --- /dev/null +++ b/inherit_graph_26.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_26.md5 b/inherit_graph_26.md5 new file mode 100644 index 0000000..514a65f --- /dev/null +++ b/inherit_graph_26.md5 @@ -0,0 +1 @@ +da9562353d3cd24cf4d47a18eda668fa \ No newline at end of file diff --git a/inherit_graph_26.png b/inherit_graph_26.png new file mode 100644 index 0000000000000000000000000000000000000000..91c0b2d60251497f76d5138448077234c072317a GIT binary patch literal 1553 zcmV+s2JZQZP)-IbM+0%Ak|YSCs;cVOuV0}> zU>J_$D4v>{I(6z)baZr5Qc_b>6H2;VuI%jW{rmT4Wo5m2^9Ch{hK6!-as&c_QmK6O z=n(+G=ktj~qTb%#Xe7?nE@p`>?@7~2QtgNie zZnt9?rq}DIr>Fb-`*9pMnM@GEoSYn^(MZ!YP16)bb#!#Z$H%{a{~kiPva%wR$*y0& z?(_Ku1_t8d;@aBUd_JF0C~RqInVFfXtE-ENiCI}$nV+8*i9{xo$>;M~tyY0R(AU>D zJ3Gtg^YwZ?MNuIoK?sYBiwyuwpa1#u=XdYkiN)gP=4J?CT3Xu6moFiN zAxCU%4*GE%nAwWId-v{LTwFxU=H})jM~+;*dNn^kpQ$;1{5bMADk|#Rw{IwEu~;%P zGLXMPpK*0{HL9^%txBbm=~G)<6tE*0@v$nSO?c28ifXT_p@$qr# zZyFmLzkK=PcDtDkk;mg*xNt!tk$n2}NhXsq6XkOG^z<}}6A}^t0P9H#f*=SK@cI0p zLmP|;pRM>yQPk4X5{k#h#t4ES2x4?}lqv9dJSgybz01qXC>|XhO-xJ-9*<$!+1Z(y znZv`w0D!o-IFcl(-?&^Zv)PQ}IMWaSaP#KPv9U26$0sHxnB>I71mo16J$nEE>q!cN z$K$Q{Ha8d%K3nm3X=%w|Fi;dVI5=2SQ=`-APM6dlU+>(xL({a=>CDQ?8XO!{tJSYwy?Xrk zF-_C;_4Ou`Nh}r@6cmh)kJs1NFDxwd^z_`jcTcC&1@>G|QuzFJL^y24Uxh+J5X7NF zhtz7dPNy>%3@IroFJ8Pbo6RzrtfQmDXf&eA+}vEh-=C3@q0wm0pFh9eMWsTa=)wOW!StyXJ8LqlR>;=_jzJ3BkYVzERbvD@wK?d=H( z370NiYHV!G%gYPwxt^r(`Rj+H_#EN$@#9C5Bm*;l_$!r4BO)T! zKE&q;pQA^Q1}=G!`~NSSaQiR2aQ?Cj=P$c({<6z|Y9IX=uykQ800000NkvXXu0mjf DB{Cj= literal 0 HcmV?d00001 diff --git a/inherit_graph_27.map b/inherit_graph_27.map new file mode 100644 index 0000000..358e898 --- /dev/null +++ b/inherit_graph_27.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_27.md5 b/inherit_graph_27.md5 new file mode 100644 index 0000000..f003dc4 --- /dev/null +++ b/inherit_graph_27.md5 @@ -0,0 +1 @@ +e22a36491802b8b88fecfe46ed152203 \ No newline at end of file diff --git a/inherit_graph_27.png b/inherit_graph_27.png new file mode 100644 index 0000000000000000000000000000000000000000..0ebd415c6743dfdc684407d828c3e03481fb334a GIT binary patch literal 1695 zcmV;Q24MM#P)?QTm$DK|?bmnf5js2&6kq*YL{ zg%2vQ$VY;1lnLADC=3i1{h>0V8bOrlEVEJ5hW4P?gRHciYu=45tZ>7Y-S_w4_>F6x zuHP~}_}%N#-RC~Ozi+>9@4mM$Qve|ZJRAmDY6Cn8;1l9Hd_r7@Pl)TJ#+}>kcDvoa zBvyD*Qc^4yOI}_cvlxF5+3ofhFJ3I3DINy5ZrvIj9E>Z*-$MX^ii(OmckV2TC7xdp z2n4f>{5r&S_=LC)pAgsK6XH65Dg((2-z6_E&*gH>H7-*v91f?ar=K}5BH`6_xot-L`DyCyLoA>YEf9~A5ty{O!6^f#4Hd`td`&$39*jLREtKV!^6WAMNt&x@p!VcvmFixQz4*W zvg`9Z$Ye61P)Hva6%~2CUccX8R8$me*sx(kBoYAtU>KI3o=z8)O6A1F1bu9^S{oZ1 z0RR+5x!rD!Mx)hg)oS&J4FMRmmjeLazI_|FaSH%I5TvrQvb41H_3PJa zwOT5b%H{I+@88o`eLi0_8ohV#-jgR!Vn5Q_+PY`Y9u!3%Ja`Z*j*gCE7)Bq{(>IqT zR#?Yns&#jFo6Y8-p`kTv)&KyQVbCP>lN?FD%S9rQ`uci;AO;2oT3TB4di}nA`?|Wi zu3Whi34)PR*j8~0RXmd-~R2}x6`Lj zheDzL{{Hgv@_~VY-Me=`fByW&jT@m*sI9FH$MKabS8BD|k&%(MwzkR1$w!YKUAlBh zuh%m*=du*X*RNma8kgDj<;xd(q9c*W*|TRyM@PfqFjFC+pCpNU>iymC=`m;*4Cdte?kZ~8jaOz zWojNjeq5!v-c2`tXh(x0G z>(^hqb`3&EKli7nr|E{-mf)}JP-A1GNF=&>^Cs)KOtokAF1QsQR+33brBb!Dv@Ez4 z9#;6L9M|C!;yQdnT!&AH>#*$l_Y7v$#YAkpKT7 pZo{ubT!&AH>+lJ29X=th^ADnO-`l}72xR~O002ovPDHLkV1lWIMauvH literal 0 HcmV?d00001 diff --git a/inherit_graph_28.map b/inherit_graph_28.map new file mode 100644 index 0000000..aa4bb20 --- /dev/null +++ b/inherit_graph_28.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_28.md5 b/inherit_graph_28.md5 new file mode 100644 index 0000000..6b6e410 --- /dev/null +++ b/inherit_graph_28.md5 @@ -0,0 +1 @@ +78d61cd652279b4082ce36b8c86d2030 \ No newline at end of file diff --git a/inherit_graph_28.png b/inherit_graph_28.png new file mode 100644 index 0000000000000000000000000000000000000000..27263259d3c267a4656ced9d54072678ad673c53 GIT binary patch literal 1701 zcmV;W23q-vP)HpQ+`KyJ2a?^mcX&rD?&CR1gaGPpDKER7xAf zRz?y;GN`2RM`n~{g+Y;Gf|dA3ClM)lR#?z<)n=3hS>zvUo9l;`(Kc;uci%rAzQ>w6 zbkog_d;Rr1pFQ_H@8@~n^E~(5PQ5ftEy$z;mO$%%@Jx_$fh zt5>he%gbwOYEGU!8BPs(d3i5hya?{v8IB)e14Yq8hYm$hfG=fbWqbDQX=`hP+4S^u z48yi<+jio_iLhz-_U+rBKYxO|HkcXN+uN&DDz#c|VqzkW<25xk48!c$v7@4*0v2$) z-APGF4<9}R0QB|s<>uxh2$GtbT2)o$TaV3VgG=l9__$asZf$K%Nl8IbbocJvlarHN zF|XIFQmG0H3xEIq4FEWP{CH+&Cj5y@hbYNzx4(S(vaYVqSKijGTMY)o^5x5YgC>({ z^XAQBv3SFV4YzLHfgfbabp+w+2xL}BwV_5>GS8$j~+dW zjg2)LjaI7_0O0X>tX6AGObpAiV`F0?k%%P8uV23o4GkqHCpR}Y>-BnqAUqzAN~J0& zD43d>f|Wmi{+yyHzjTO_XqsNLW)0WDU%!5h{m-B*Le>RVTG%`Lu-r;b-Y;$vS zPEL-);Xn{%aBz@iS+!bSU0uzxtlRA#9v)^GhGCdDZ{8#&CDAlJqmclBckkZ83e{@$ z*|TT$dOeQgYPC8(K7L|iVo@cvwYAA)GOo6R2M=;LdShcFC%Cn>b2$(iQ&W>dp$OdZ*?JL*kwNZ}si~<5g1~fUW~SL}Mi7J~$kSXLr+i7xpU`?M&sJGYXJbhqc9zjNaPohNF?p;?N6UR zEh;KfsZ<#m8H*%Ip->P6apA&++S*#K!qL&ufq{X-!a^>BVOUpJ7ndCw8G)_XY__SX zskpc}0KohA?+JpKSH~BGAdep|m+Q!pBX+xeU|^uOwpOFj000UK3ci2;e){z30|ySk zViOY+@Md(mT$e9j9vK;NI-PTGB`z*5IyzdZRPNoo_weDvFlaKF?%lgLJspaq*x1;n zrlyM*FP4{=8;wS@*?jlz-R;}AOC%CsJv(>q{P^)>V`JlwA3q*EcyQy!4cLmq;W&Eq zsNHVw@9#fz=1gg6Y0w@2`Sa)8$LBBRvi|x(({xr=R#jD%L?Xd3tg^C_TldS#$`TV3 zT`m{Qy4`M#Mk5xBWinZPeSKwR<%$(6;8AJ%9?9)+TCEoDkpw}&$k^D}s#UAn+uK=| zJ$CGvTrP)kE*+vIo6W|u?9k8^9IEI&UVMNzq2 ze)Hx{*z}eyTS`kySFc{3mX=mmSLgM519yD3fvu>hKvA@#qa*P6FXY3{#*G^TmkBdV zP}1TtqesHKR-O>d!;Vxc-L-4if=da7B`9e&1_uZ0>+7e-b8~Y;d5a`s|NcN3{`)L^ zA+VI0(Ia7L + + + + + + + + + + + + + + diff --git a/inherit_graph_29.md5 b/inherit_graph_29.md5 new file mode 100644 index 0000000..9b6cd40 --- /dev/null +++ b/inherit_graph_29.md5 @@ -0,0 +1 @@ +a633ab3a1e2af46dd782dcf80878dd11 \ No newline at end of file diff --git a/inherit_graph_29.png b/inherit_graph_29.png new file mode 100644 index 0000000000000000000000000000000000000000..c3cabd40ae626fc44e160d7fc573f4ea8f8544d2 GIT binary patch literal 56073 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 KQpzNn-}*nTbmRd5 literal 0 HcmV?d00001 diff --git a/inherit_graph_3.map b/inherit_graph_3.map new file mode 100644 index 0000000..21f63a0 --- /dev/null +++ b/inherit_graph_3.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_3.md5 b/inherit_graph_3.md5 new file mode 100644 index 0000000..d22d7cb --- /dev/null +++ b/inherit_graph_3.md5 @@ -0,0 +1 @@ +42058951619dd7e2e8c75f3382f37490 \ No newline at end of file diff --git a/inherit_graph_3.png b/inherit_graph_3.png new file mode 100644 index 0000000000000000000000000000000000000000..fc5254b62f697fc4b3e1c9f2ba1dfa8d83c86142 GIT binary patch literal 4385 zcmZvg2T)U8w}vBKklv(+B2`4HpOio#NRcLjAjKd>kWi$B4hA9;iV#uhqA0yaKq(po z3{?q;gd)955kY$W_xI1-nLBsx&PnEFq9H zx!}7p0~L608`GTxA9T*w4G@sie_yXY6{SHSY!o8|+$tnzEf;0QIW*c4T%Ya$?K~Ei zwZ6n&E5XBUfj3V4PDLxbbVJU{vo407G@tOpleUVD`&JzTQv!W?`pgBY{CNG3(0HmC zVuCc3%|xe~LsTO3?_Ek}Fcz+-gRhS6Vg1_sa&e!G-g9?fm!dukXMXtWxdVG)(uZy@`ej*d=P1MOA&NT*!_4u@Noa7|JT4MExB-<^qM zrou=I^!=X$7dqMJ#s?w?2M4cTzb5BtiiPiF0L%{mPr?LlgadC7(LED(M>?^(}(~m{waF>IY zt-h~Zbf~wutF?|9+Rlzgm{mmX>-B6q@$; z_m`BEw6WUXxS@!mly`P^djEW1Qe5on?j9ZF9W)z|F(cSYPjfLS<)UJorbj)(>3r;>C;6(NP~CpWXFI1AmFA<(>q0_8 zDAWoyJqwiKdtV;};^FO0T3lXT^}2r_&W4cYqJsGQ`>(F9N^>PNH#Zwfh<%mjVwB

>o&By~QQ&VQ|xs4DL$(uGd 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 + + diff --git a/inherit_graph_30.md5 b/inherit_graph_30.md5 new file mode 100644 index 0000000..b6cfe0b --- /dev/null +++ b/inherit_graph_30.md5 @@ -0,0 +1 @@ +59608fb5c8e6c768a0ed998ce174b1c5 \ No newline at end of file diff --git a/inherit_graph_30.png b/inherit_graph_30.png new file mode 100644 index 0000000000000000000000000000000000000000..803dc17d3fb608cabc20a8baa378d4452508d80a GIT binary patch literal 2325 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 ZSHt$d#SXeW@Sg*@IvsVaJ96^Me*p>^N*w?I literal 0 HcmV?d00001 diff --git a/inherit_graph_31.map b/inherit_graph_31.map new file mode 100644 index 0000000..f548800 --- /dev/null +++ b/inherit_graph_31.map @@ -0,0 +1,4 @@ + + + + diff --git a/inherit_graph_31.md5 b/inherit_graph_31.md5 new file mode 100644 index 0000000..7bdb663 --- /dev/null +++ b/inherit_graph_31.md5 @@ -0,0 +1 @@ +203570c3d90675da56dbc1e017b76fc8 \ No newline at end of file diff --git a/inherit_graph_31.png b/inherit_graph_31.png new file mode 100644 index 0000000000000000000000000000000000000000..3bf243fbe4a971e9e20a1047a883e11d087d6e11 GIT binary patch literal 2921 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 yJ4yL)1vEPB!&%JTA~ETB(0ZQvf9|c|ghMS + + diff --git a/inherit_graph_32.md5 b/inherit_graph_32.md5 new file mode 100644 index 0000000..485828e --- /dev/null +++ b/inherit_graph_32.md5 @@ -0,0 +1 @@ +e63f73fe26720dab0c9e39b1a4166447 \ No newline at end of file diff --git a/inherit_graph_32.png b/inherit_graph_32.png new file mode 100644 index 0000000000000000000000000000000000000000..9df246784882c3d49806957e90376d941cd5ec8e GIT binary patch literal 646 zcmV;10(t$3P)fLomiG#E|-!d>BB~&(Q38I=kqsa(CBnJ z54dsV7`+o5$Gu)J0C>ILMxzl72Iup+-|vsd<2=ttqfu>`D2jZh)^iB*=%~fp3P^N~N?~E{Y;WQ3OF;oxzX; zIF7$mK(pCI2qAH=&QB_q#@BR!PtOKLb==OkgI(>QHao)|3 z$K%JAHt<(_q2Gfgz-%l5X7ly}uGE3WV(~lgwib&8Ns>k@`V7Z$X83k59LE_P#;pGX gCSwUOo3|J60g4a)h>UImhX4Qo07*qoM6N<$f + + + diff --git a/inherit_graph_33.md5 b/inherit_graph_33.md5 new file mode 100644 index 0000000..df7fbab --- /dev/null +++ b/inherit_graph_33.md5 @@ -0,0 +1 @@ +ed3aa1e264dabbafd9a8aad87e1bb128 \ No newline at end of file diff --git a/inherit_graph_33.png b/inherit_graph_33.png new file mode 100644 index 0000000000000000000000000000000000000000..d3aec3507cb2056e21cfa9d6c6ad363bd2971c64 GIT binary patch literal 2402 zcmZ8jdpy(YAOE7ua?i`9<5vjDty~TnCXAMQIAVxpXYf!ulMu$yx*TE*VE&?jHIe0001)1 zPLAGS+y>VPh&YH++K}g9I1uW3-VxaQXO=h9NC0q1#o5u`=LSVUx$Wki@}JfgZINz< zW>>KN9g?NRac=)JbA#(n44$}ycXSEMY~}o$GizsR`>#|r6*aRkV-K4!J&v5Fs{6IU zO(oUeOa<4gk=fdfULy+QQf)W)piOTPb~*G7%-P!srHfd#(iNE8_zGolQ&w@GJs`%8 zK)&pk)zC21cWT!fQvM%AW`z-*v=wsizgLRR;qc<2l&ZC_x2LA2?%us?*r3u4XcCbD z0amC`XlI_|VhB0e~!lR8n%N+ah)(drMV^bO>k-eTh4iVdv!LwzE1*(zE#8 zo8H`P1K6D|uJqKc^^GnsEG|x7<$HBMPhkCQVnQU7rv-w14zI1P?M_}^OMbykw{xF$ zyH6zC?-lOfzh4p$ukd`uWIpcW4-Fxy9x5s-7N(}lJDb?%05p1r&)3asHw_c3e)?4M zzMr3;fubZU@U)`j_V)G#3N+-;gDNV;%gdNNBi>0`?OccA`fBRxGjgTbh% zu-7C~tgg?EG(>}!Np0nKYbGFkPtHJO30N#v0(iq>9om9E=X6dE$1p`5TWbO?pU*ds9w_XZ>Mk~t06IE4mTv6qZm*}M zrk0*f+j4k!wV}~=FO^iHCk^?-{Q?8G`XspKv)JWR_0|B8j|ekV`{j(+QT#N~2BcpQRUR#q03O0}`ESy^6|mcC^jrJp`Pff|?H*;}5@ z^QQaglb3e$+;p}#HUJk++EYD`EXZUsy0=tG z5)S}mmy1C`V*>-qhYy>mOj;f5?=ztkpRD%AvPKPV?+7ut015j--@kw?|k zJT&C*1{m`v6QD;830!+T+{DaGQCXQ8%RRGEZK;wCKc2;Qa(Dl+y6Se}0zvE3r%zw` z{2N=VSN;431>D!@D_6#vlI4JM-?Kj7TUjG?k&B&yT+~0&Ake= ze)v#e137Ja`0!y+$F;S!US3}A?(P{G8UFtMK>EXn56jET@7+_Blao7J7VP6=W@&jf zE^d5mtY=af2)^IwD1}NTyHtI-NB7DC0z$sNYhOMq`r4j1JUombe4U)cVlbfDAPqfS zU4Op9Yf6LdWT&@>T3cDcV6ce!2ROTX-P0nGXv;yL{M4JCLm&`xaw1R=S=k)hn4uT! zDJ4 zM1+UGO;Xp{VqL!7Z!*0&nSN2sS&<8(`D4-R)4ZcX5 zn3(A4=~={m`93>4T#xQebz{pEWMxSJcC^3k<+I@x08m+3iTIK07#bJH5P9m8pQB#? zH8w_d)Rd8xZG)G%RhOkmdq*oKCzCx0pCShe^3#&yU;I+j<1SD!(s>qmb*Ms=h>mfOdDP*(JJjX5fmEP+-y5IAljNEyJ^oUmMIi&tg+7u?H43v*97m&dxX-&d*OJ5X|@7 z+~*pF-0-LEAw}+nf3K4%TtHQF7B?bU?++>!{u-)D=NeQ zJ5A!kDC-wr-){mzkiWm4a$ZniAoQq*kB=hRMFs)^orT3>5#-cGOFW5~o}DLZHSVJ^ zo(IyD-WL7(UAZ)${$S_F;D_C9M%?%<;RL&dH?2yQRXqZI4Z*@B@r~E#mFrMLu%&Au zS(3qp&pQzDiH=}464n>;%WU^(tWD6N23uR7kp9lJ5JFbO=o@8#?9BV=oOsr8R{^AL z{bh%mqF4yePG619{68?R^9B3-Gr^+&edQ82geLL+h?K(!m&;pUgH(Tv%N9xUqi?{z zJho;^gB`!n++JIu*h;%wLX#LNZ^cP|4uR~AYox(4V>5jI1;XHYcF|01-lhQjGy%@% LJRG0HFK7N27p9*` literal 0 HcmV?d00001 diff --git a/inherit_graph_34.map b/inherit_graph_34.map new file mode 100644 index 0000000..ffff3fe --- /dev/null +++ b/inherit_graph_34.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_34.md5 b/inherit_graph_34.md5 new file mode 100644 index 0000000..36cf35f --- /dev/null +++ b/inherit_graph_34.md5 @@ -0,0 +1 @@ +9615f1662eb6ca37be912093de4f0cde \ No newline at end of file diff --git a/inherit_graph_34.png b/inherit_graph_34.png new file mode 100644 index 0000000000000000000000000000000000000000..43576a419f5b2a7aa0d58529a1945ab46d4242bc GIT binary patch literal 656 zcmV;B0&o3^P)F<~6XpL@Hm=$H%!<-bT$q9}u|WRSrkgRF)b`dY(_;p6B;m2Qdr- z-cmpQH^5VU$b{>C$zbjaNs^IBwA&y_j?@2zrMcYayf=!@pznVG%}eC`Xz-z;rIJ@yPbGs zfk0q18dWNl*=!b#Ml+dAEEZ#{`Fx(DsMTtf&1T2raX1`)jZARYIG@ij3=;&wI;B#{ zWHQ~KQ53D$>uf2NN?9xxk-7#9!zhZT)9KA-b9cO6Z@=Gv72wH!*zNXMEH)Sn*b<7O+{v|C?RvcyDKh|o!{Hc>M(uXn>2y}BRin{}<2YNr z?=y;`rqd~gVK$rXa=D0+8A+10T8-=EaybCNWHMp?*k?3NLlD$zwZzD5KA-!1KANUk z$K`SX0C>Mp?(G9XkQX8oOom~YMx$}N-2_3bR;zx$9|#1jR;x~@yAL=V4%_W^yWK7p zi*PusR4NSy!wY1uoPg8m6bgm(dc8y + + diff --git a/inherit_graph_35.md5 b/inherit_graph_35.md5 new file mode 100644 index 0000000..6220c9d --- /dev/null +++ b/inherit_graph_35.md5 @@ -0,0 +1 @@ +3e3db6c320cf4f41b3a66674f8cdd9d0 \ No newline at end of file diff --git a/inherit_graph_35.png b/inherit_graph_35.png new file mode 100644 index 0000000000000000000000000000000000000000..e6602863d22f01498345ba5bab19e043c9aba0f5 GIT binary patch literal 1921 zcmV-{2Y&d8P)6qMV;kknVS=(Vnu@)YKEmHCEfn0Rgj=i zAq58YPbCJG<|VV46-4RE8?%XGY0PSfEMsG{GzX=UOXtd6R4h8Sc6;7G4vq7=qor@Y zZ|~uJ{yOLToc(@Zp6~XY%MJxX2uKKr&wp)zWKke zT>q6Dk_96Yi9{liXZLTvSB*x~(9rO&TO#?Vs8p)P#zw3{^*%@@ll@zMNPZ6o4<4MM zkmpxoLgq?L$XtmDnJY0_NUl>;Q>RXyii(N~2na|{PQH5e>U?jFK7Ra2p-|@ase*z6 z3Wak0`t^C5{ZmLwOQU!Z85y}q?QpJ#e@a$X)|W3|T3T8nA|l?rd2`~#2?RkdUApw! z&0&#Br92+5p`qc-nKO&pXpxY~WOln908mg+(BI!*S62rB@bOu!^>W^I?RNW-M3yng)}-PUL{n>K9<2ndLe zk5{YJsMyibv2o)@I-S09<;n{eF3c$CJ!&?aSuED`=g*^~qr1Ag002^{G&MCfH8pkh z>eblWYut9Y;)f3(cJ0~~6cohc@owF^g^Jg%UE^}ObUHmbIeB1UU=FdnyLUf+uMuk zX0tgkF!0{Jd!IgiDk>@p4i2{4?FfRb;jYcB?!0B}2j+#s+ zKR>^$tgNxIF|=}2RFp&_fe_~A<_ZLYIojchcDp?$Cg$SBi)ORAv$HciJiNBHR;g6d z>GZCyuF=ua{rmUt-n|<_h$~J^Ot4t2($Z41+1%FF#$+-(Iy$^fLI|BsXLECNYHDh9 zbo9i;1n%seJ9iE(>y1*W3=Iv<$jDHu)jv%E3;GZdt1Ki}2%*d6(rUHE#l;B;2>^hc zoE!+@jT<+%ZQF((;C8$3+__`5TJ3gwe}BK*?RLA}I-M>!IJmvN-IFWssL5mk0K9wm z4lSipseFBX$HvBNHrvaWF987k{r$7G!xh`w+W36F$9!R7VMa#AvuDp}G}@y_k8C!Z z!{L~oo`w+Oid9urLZQ&}@zbYIXJ%&3Fln(^ii(POJl?*2`{Z)D+wGoh>gLE5LWm&9 z-Me=M0)bE{eDL7Gw{PEmB@XXg=e-V(jEuCmxBK|`#Kpy(J$qKAQq|Yj-@JKqaBy&V zcsMpT7CnqYp=4)guUN5yN~Ox>@}#7s#KgqX($XbMmSC&RG0Nd^&<&|n>To#NY_`9@ ze^OEs008~|;kLsS^?LpL_wU(1sHmv;{P}ZQTAD;6DK9S%4i4V4XOBjs0RZ5NMx!w% zCdOkdHa6B^FknqSe*BoruV24N%%jJcIg;J?htyWi8 zR|f^Gru~^JxGRMcq>+9>o!^4M%hY)|BH(-{9Wf)1VM6ga`=4yvSrJ-TyA!Dw#j5dhdMhuS_p~ zcdjT-r?aW4DJ3PvXf)!^-W<6$H#Z+Sazv$4{WO9Zc;`xinD-H7GTEU+hamZe;{Ofw ze>&_PAo+Zln2@;=6Eas~Lgq?L$XtmDnJY0Nb0sD?|Ete<6P4u8XLNLQ#;X^9%azS$ zQ>j$%mr+Und=e8AvAY!V=@KC!&#%OU%$1msxe^mHS7P!PrX(4k{v}o_00000NkvXX Hu0mjfJL|?< literal 0 HcmV?d00001 diff --git a/inherit_graph_36.map b/inherit_graph_36.map new file mode 100644 index 0000000..54dc669 --- /dev/null +++ b/inherit_graph_36.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_36.md5 b/inherit_graph_36.md5 new file mode 100644 index 0000000..30d138d --- /dev/null +++ b/inherit_graph_36.md5 @@ -0,0 +1 @@ +bf9c68b08e23ac5961d55b9b462f2968 \ No newline at end of file diff --git a/inherit_graph_36.png b/inherit_graph_36.png new file mode 100644 index 0000000000000000000000000000000000000000..955f7b65c466d5ba1a41682e4436e9c2f233e08e GIT binary patch literal 1537 zcmV+c2LAbpP)4y{OHQe%#6uoqG|eH zWwVVi7z_r3fvNsB9^but_w?!0El+9tF)}h@wOXSi{MbgFot;~i&vxbf`SYtH-1^84 zoR93l`N$5OkL<7+A48$g#fujyib_dIDJ(2Bo6TErRC@pZyU6rHp`lH5 z(%js9=+L3(&!4||@#6UL<80;!qv+`9SQS~5bLYuOvw}Ha7bGe!JbiZ{NOwfq`H!h+&vsub-cvcez|? zX=x80Jb+Q-k@4}{w{Ij#S}Yd7-(O!}4*=LYA0dP^O^=O@H8eEj=jQ_eYHDgAgm$}K ztyVK_Zr!?7QBmRZ`2YYPK74=>E-ftyg+hnJ0U<0eFGs6tT$Rmc6NyCYW%BUh!@Rsa zrdn55cj3Z?U@*wY(YWTd^ly{W0` z06<)oTCHAOTtvJ^49m#K zNYoI-8sD$~jN9!lEiLtWy#zs^2znlxrlnG;QmOp(=@W{3Jf27-g35dL>_LU{^76X6 zy4>8{6DLk&W@Z8a;;JZ$I(qczojZ5TW;2t9#bQZLP6hzT<#LA(lrWpG$42%0X za=Cn9V1TK5Jf6htV2B=^8=2QXfBw{HG^bCW9vT|*dc6*ZL$BB8=jTHRL!r=t0|##3 zz8wezhKGk`GFe+&8yZKqIgsBr&xbBKoz7FIP7wr=o}S*=*a#t9 zbvj-2!E1DMRIAkz1d*Mc&Ft43^byH( zb8{sU$+c_O3JMC)0dp&S+(~%7-nOgU{zzRaN0QUQ|@n z+SK>dh=iEFOTse)CZ#lkxfd*q5^$v1qm0=qd)e|39(; nw?481=Oa6CKC%PnBRl*82cgrOh9zVm00000NkvXXu0mjfM+5 + + diff --git a/inherit_graph_37.md5 b/inherit_graph_37.md5 new file mode 100644 index 0000000..0e593c2 --- /dev/null +++ b/inherit_graph_37.md5 @@ -0,0 +1 @@ +14ec6982db3f5730c212802ce681dd26 \ No newline at end of file diff --git a/inherit_graph_37.png b/inherit_graph_37.png new file mode 100644 index 0000000000000000000000000000000000000000..bb37ec84070890ab9bfbeee2a9d4589c3af1c0ed GIT binary patch literal 2988 zcmZ`*c{r47AASi5AqE{$j+ltUh=Wv?8iWZ)mZ7nv7^RXKS%(o>l6~i3WQ!#GzK>+f zF8e+hV{F+Crtj^1e|+Ef$M<`$>wVtmdY|iguHXH;pZj;eHPqKW%O=PM0Ki$DyKo}_ zV0Z<7i?cFp#Q*0Q*B7xQ4NN%37*7;{M2mw%!8u+6v?8 z5QxR=fNwt(DU6Tg^~EyVGfdCF8~mo+9e=12aKh94JC?WYyt39jE6i%%&zyzBQixH7 z@y+`T2md;WE(r_W5zzuaw%GVRI$gPOX3Em*LHZ~k`7jGViS;Bn5wNt)$w6|(X^u8$ zUv&{~SKlRv)7-3I8u??bxmn-Ts~%A z4YZHyA}`A>2Wy6)WHy$UVdkmINrcK@YqJUqd;4V!Ba@SBJhtt%yLRPmowBS@TGNh>l$@rexmib_RTxT0U%h%wFbrG9#}+U;GgjrC ziGX5VT`L}E7)ro6f+`n0pNBP}gm*8H1aXedXnqJlzf z!mn^!8OjS_9rx{kt#xK=}#y zLpr^O&0}wGV}_8NOluXeZnAfGKWJ)d>WI10c(h)7WpNXyq2YL^ugB{o!}zK=kB+G+ zfAxJa9?NP>Yilbr@RHn$!V7% z(b3Vmy1LRy1Z8L9%nYH`w!pk}X@3T9F}UpMdP%iVF*n=2u>Jwp2+$!DX>CE<%+S{OP`h1?`Yb;O!0!42+EA zHZvPpSXju*lLXYUSgf%zSb}*6gY(17K)k@@Inl;NalfGsVyMR;bkLLgC`x#&rGq`U?Yt-sotaPJQZM zL7C~Pclu0COp+FOh1$p`hj+7$ijmS8Ny*6;rlu?r>}+g)etyd?wEj$O24H%6`ZT9d z)yp|z#q$XSJY4vOmK74CoYEF?sfF}TKsH(G%h#_&v;jdiH8QfuaYP1any&Z4(+|%D}(?4u`W(MJKIlJbLuV#Du)L>5V3fd)6}mF!@Io(x`<|MK2bAh87sL z)7s}S`yZVc`Dl_q^t8ORv=lDtF&7{J0A2BaJSs*ChCyL4?zSJGxQ28sVyY)!QHR6A z!x@2ZHwv_cnV1W9-QGldkP~KSZITd*a&io%h$p{75}55)nqdMsI5{~vI5ypH&L8LI zN?^}*MwD<<+1LU^m6a160)v7K^!16Pl$4aRG6lf5-(hum8CmbSn{)5)jEoEkX1i;@ znWI}n_}*|b)H&Qweh1G82?+r~E_hJ+*}N2b>((tO)IK~D*?_yg*wm47!|iCHLl4di z70`ogqs=|`bTmGk9=EZZSPcja43CJ&H@=ENjC}vj$IlN6WE03#<6ByZ0#93ShCT~Dae1Z8i#M^?)0GY2bcdv~`u{ycrVS54NsAtf?$ zmPESD%?g%)Yg9I&>y^q>-A;kj<{@tD9#ay+p6-Yc46Ath{px!|_wA)_5CYxit*tGv zc)ZY4r%p9AGyp(me=te8&i!hft{xqP3j{?;Nyz|#00q48LFGFA^Nl8#DEU8QuSnP6XwLF50)lbMML4u>z0$>gOao>V?QJ`NUthXDt? zlrWg^V>H^$)sZr9YD)m)W2VdUufx-O!h|HZ|MWQFTB0IH8oq8mmTcv z?7Y3}#f4>M3v1mrEO;hM?DQ-xg@+F5M;pBaH7;OtbF+`SySTV$QLs0ZcYiZSINL){ zPY;Dc85l&E=6`=$j)2BgDH0!ATx$I!ZP_{6aI% z=J4>)D9^>#_9Cb3=E-dh$8#7tdzoF!yKZikNa>{??x3dI7FU7toRhQkf#5@QuFKDt zfdRI)ydzaL+thiQBu6Dv~aka30=FJo55jW;_F;ZG#RixRJ@p4aS-4RKKx2MwvFGv06x6w-~a#s literal 0 HcmV?d00001 diff --git a/inherit_graph_38.map b/inherit_graph_38.map new file mode 100644 index 0000000..f16d929 --- /dev/null +++ b/inherit_graph_38.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_38.md5 b/inherit_graph_38.md5 new file mode 100644 index 0000000..9187fad --- /dev/null +++ b/inherit_graph_38.md5 @@ -0,0 +1 @@ +235285ce35f87d073e59f4c193ce77a6 \ No newline at end of file diff --git a/inherit_graph_38.png b/inherit_graph_38.png new file mode 100644 index 0000000000000000000000000000000000000000..b6d30074f6b26fbe07e3fd06af7531111e07283c GIT binary patch literal 2752 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 literal 0 HcmV?d00001 diff --git a/inherit_graph_39.map b/inherit_graph_39.map new file mode 100644 index 0000000..f194eb0 --- /dev/null +++ b/inherit_graph_39.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_39.md5 b/inherit_graph_39.md5 new file mode 100644 index 0000000..1244909 --- /dev/null +++ b/inherit_graph_39.md5 @@ -0,0 +1 @@ +564bade42e8980a7e7466d2b71c27f19 \ No newline at end of file diff --git a/inherit_graph_39.png b/inherit_graph_39.png new file mode 100644 index 0000000000000000000000000000000000000000..820b25c9ec7e61854e965b868eb5e95602fed034 GIT binary patch literal 2636 zcmYjT2{=@1A0Nq*c+_l91ApSW38 z_-rp>WD7*jJQTi%3E)MT)dyJ4YnA5Lhe}u8zhVK7gqg=ez+9ayjjtm3pO;r7z#Uzg z-M4O+aeP60V&m8|5Sk2p&-$qH;wXnv&r$RozTf%HwOP_WT%lw*X-+*A1iFugz2pZ@ zMZ|$X?jUz55a|1zi>E+l_)4lmdJiib8`OZMPk@V-b=kHJqg-b4$zLiBDZ^);%c8_7 zBqY?((BSCk*qCxqg#&C85)zgap-P;6TT)57g`YpWzodZN3knP82aEK>Pi(*lv444t zSGxs0;Ufxib8}miXuHr~S^}`}U@A>;{xG6vBM1DQ=YI$JXK9p&Yiw+EadDZNn)31W zrM0zf%(S3t|u-J%hfj`;q2_}PBAkd9UgjPv7(})))jVwf`as! znH!XzsH`G=ykRlA%p!bq=DJ3%xP(O2peNUQvr7lZG=o<~MFsa^W@hH$FH~1oHy|hO z8d7{cJ-d3kelc6vH$W2yl~P<-d$mzO}BQ@?giGLA$d^*_75y0kPlJWN~IMuukf zVEFm@Cyal~F>aTNtrAKNA#c*ta=y ze!c$zkxB{jWyifA{pwn>R$F z@J%Z9y(dgfO>O?FS8GT}2on<%=UK%^iHS&4(^;}Bo0ookn`y4b;_`Bj3mJhxI5vkp z01u(Oyhr}}>wZPW`uZf5aM^ZfWCYW&iaEsa0R>6zjJWl;a$rr8FWt- zcAdWyY#2O~32D=!51!zGX?a~;7Hv-Wpu#~>pS`2A^DU;jzu&~vbO3NBEsYn8T^%kl zMHLS0 zy}iA&Z=z5RD6uYPW@h|(&5MNI#lU;k)_~^%_^uohX>DV}9S~p&;OvTHbK*ihfna^> z7XP5Im>96%xP6zw0IZuD8|$c4{#!prqMcf!-(i$FIXP!rBCH)8jEV-)Xf#q&ire4E z2Sc_oHa3omirU`ZULC8FL)1Xi^bCs8^77@rlXc%24AYp9yJA&URT9F&e+4*HjKU)! zJ#P=_V+^^ogkVKRo}%J%xYo^^u0OxtcT$u*!Qb7vjLq4q^FqS_Ya=9-fTV@3ZP}RT zTPJ|fr{5F}ZUd!Y_ZM_@bOIZuhK8z(i`|xoirFRQHHl~~WXPVCm3B8zfwK{R=Z zwzh7Sw>>8q^mBK2KiJ=wj6?p&M9T2;@OL~i@OFjga1Q7Ab*JzZ5K1&_yXu-pv| zl@qtIwLRw@`F+JQG?bd0ocssd1MPf5rWs_4;xX_odx3SvuN#Pp?rv>%FW6Hy9`Vy` zZ2li!>s$ao-klsCURYf%_XX5DcmBNWdLj%Chd0;MSU?0W%F6y37q>Rsss)2tsQvLY z{rlDy@%Z$a)}vhyOL}WfPCE?KJ?8Wi(|5J?aqhIs4JT(rzLzVztoLVGjZCOY8i6pj zv)DU8x|W`oSLJ(IL4kg>rIxbW!;xWg`9{Ee`$88U*SopCUU4M297J#|qEJ)_y;1u+ zvgGlxu@ZFIqdu#m!H?=DVy|0UV-9k?V0LC^X4=}?SZulWg$wJ{=g&WlQ#>XfZ*2Gh z@j8@>q&c;OFK%weEcNH6rKLT2@}#@F8;B%(dwbEKYP}nO#>a=h9D`!(gdBD~WXb9j+eJCl-+f!7{Y!~HRK}-fqr|_J04b3WfsILORc-C}<>8X$zpE=02BHO{KV+&?c^^~jj*`2EM6(v7ctL5$5E-}pmqIBZJhp@0P0Re%J z>XlS6hyaJdS9rwktJqlP6g^IM_Qd35=`3ayWn~{9pUT@!@e5%&Xe0CRS#@Rnhv&M>_KQa#frbeR~lIzzAPRB=w_q5W_sDet_ zEcc4{BH!pr6=)<6(B_oXeC^0y!yGU9nSz`hGa!AsPM4ri+=>8**xw8>-?IY$cMST! zK?INK2#<^;?GYtFDy3CbJjY*uzms@u)P6@PvC1%CMpQ{!iA!a_e8e5s)YOEO8EVSr zK8z_GUT(~LCi`X9l^X;K;u!^|tdZDkc98bWy?=coI}R&JZc?y1p*oTZlYU> HxbyJe6x$L9 literal 0 HcmV?d00001 diff --git a/inherit_graph_4.map b/inherit_graph_4.map new file mode 100644 index 0000000..985f214 --- /dev/null +++ b/inherit_graph_4.map @@ -0,0 +1,5 @@ + + + + + diff --git a/inherit_graph_4.md5 b/inherit_graph_4.md5 new file mode 100644 index 0000000..8445ee8 --- /dev/null +++ b/inherit_graph_4.md5 @@ -0,0 +1 @@ +5e3af3208cce39aa393d90cc6d689566 \ No newline at end of file diff --git a/inherit_graph_4.png b/inherit_graph_4.png new file mode 100644 index 0000000000000000000000000000000000000000..bcfa5331cd3ecb5eeefd4068707b5efdd569a0a0 GIT binary patch literal 5599 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 literal 0 HcmV?d00001 diff --git a/inherit_graph_40.map b/inherit_graph_40.map new file mode 100644 index 0000000..ff90ea1 --- /dev/null +++ b/inherit_graph_40.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_40.md5 b/inherit_graph_40.md5 new file mode 100644 index 0000000..41cd459 --- /dev/null +++ b/inherit_graph_40.md5 @@ -0,0 +1 @@ +c724637d2324bd8a02fac18ee2e53ac1 \ No newline at end of file diff --git a/inherit_graph_40.png b/inherit_graph_40.png new file mode 100644 index 0000000000000000000000000000000000000000..58e1b0ce65ce1508c5d5f4eff821fcfe455635e0 GIT binary patch literal 1136 zcmV-$1dscPP)qLDCJ3Bizn=L9Bz2*P_9*?Kj>%T8A1UX*LQ_){ z<^yy(Jw62x1Pu=lhlkhK*HWppw6v5=CJTka&CSio$xf%Uqobp+u#iL|2?TxmVYsoeG4yP=+dp4{%jJH&W&i+3M@QAw)w#L3I-Sm9vGnxxjE;^D z4Go2|cDtR!;Z#;u?(grL&1N2t*V58*etsT@1rYOA`&&pPQs{v|AmDJg{QUf1t?=;h z5DW&Rf-f&GgM)+P; z4u`X|v-5F>M}neg%w`LV#lFA4zrDT1%*IW^*4*RqxZQ5rPnMUL{eFK_QV*lgae^{XU;BGG#Ox#bR-Mf)nPPN~O~2^xuDC zv)L9G7d;*ii^V!TJiNcZ7mLNs&CSox&wo{c$K%mxG?hvf8FaZ^+uPe+U0n7n_4zdx!%Mn;BOt?umXe0+TD>+2&Di581RE|<$>GNDii08p#dwY9YXfZpC-6h*aK ztm=NTpJtC>jg~WilCsLc!zl zH8nM6vpFpVse=ky z5Ou$gjg5V`qQry6V#DoY7z~>Ff1YfloF^a2>--PT`yiDM!Xjn>0000 + + diff --git a/inherit_graph_41.md5 b/inherit_graph_41.md5 new file mode 100644 index 0000000..66490b8 --- /dev/null +++ b/inherit_graph_41.md5 @@ -0,0 +1 @@ +dedf3140ec164fdb1a04e13876aecbd0 \ No newline at end of file diff --git a/inherit_graph_41.png b/inherit_graph_41.png new file mode 100644 index 0000000000000000000000000000000000000000..6fea021276027eef63cd13d73f45854e0ca5f301 GIT binary patch literal 997 zcmVFH^uQu+S)4I#uZY;JBbrhq-i=32m}IwzP>)K zRx7kmPEJ0bL8Ve19UaBGV`F1N5|_&*kw}b2V>B8ynM`+gcOH)?HthKL`2POhU@(Z# z{K3BRuSlg*p^=xDmy?qtm&^ZahR4UpNF);L78Dc+N#t_5)oQJ*th~Lw#c^D%R?{?H zUtcc_b2uE$&CMu^iqM?M^?7r1)85`*R8)lH`0VVg5S*NxR4SFZxw(yvjXs|b0H9W@ zS(YUT;vaVDx3@O{Kv!26!!WU_>u@+sCX+aA3G*3=MD%*SN~OBExL90V93LNFT3XuQ z-ya6`ubYjqy-7|>2x}?v$ID=Mo<)OYHI55@890u=6N1M$Z=e0Y3a(!%8v>- zJUlFu$z(EFb#-+x7+hOh%goFK07#|Mwzf9mE{DUR(P(5cnK*d~^Xd2dudc5C{EL~H znNTRC)9Dr#7Hl?KadB}+N5}hj&wFe(8-x%-7!HR$9#2h8P3)2|b)(Vf&rDh%?mhG& zWo2a;hFxA>3SE|E!{M;s@2{$=+S%E8eSMvupKon#4F-b`3(^z^i| zvs1LZgw<28*FQf$PfScaJw3TxuDZH9x7)qDyQ|e|&(6+xp67WUL6EGhEMa^o6#7hB z1VIRb7#J96X=y1bDG@C%VLl5B3!P5q*47q|<7TsYXlSUrySt~S$6zpMwc7IX^7Zxg zjg1Y7L;?VyD2k#eyWReo%x1Hh<2aHee@Y+xJ0wYxBnf|KR##WQ_mw{1CKqX+$wk^{ za*--NKREZXEc;u3sy;kC{2&^)pAHTVez~y3qfjW~d}YA&|IcJ1?K8PZ6`$V#u6JVv Tf5RXU00000NkvXXu0mjf;jq;J literal 0 HcmV?d00001 diff --git a/inherit_graph_42.map b/inherit_graph_42.map new file mode 100644 index 0000000..8305050 --- /dev/null +++ b/inherit_graph_42.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_42.md5 b/inherit_graph_42.md5 new file mode 100644 index 0000000..06f1e8d --- /dev/null +++ b/inherit_graph_42.md5 @@ -0,0 +1 @@ +4b3d92f6d0dec22f13142fb899c6c203 \ No newline at end of file diff --git a/inherit_graph_42.png b/inherit_graph_42.png new file mode 100644 index 0000000000000000000000000000000000000000..84ab76e7425bc24bf0b3da78fe79bf10206ca861 GIT binary patch literal 2441 zcmYk8c|2Qb7sszms-c*aG!0rpsZb0lwIsGQ5d^i3N>QZ7XsM;Ouca}BQkm3}rl@vQ ztS_x99Sl0Cbu@G{I;yd+)7VX4-e=~0|9C(5bMN!H_jAv4o^zh>`JIR5;lFnaH}I=;F(m>APoj_28~LF_W!=_x0Z7tNW$EfY~>bnZ~1Plz3Xr2o>_r_ zRB?l1D*@ACAjDvgJrs|k^Bmx*Vq&&fXVvZWISZU*$YK6{xW2VB7LyTt!Ac@mOSMd! zWQBIVl^Lw+Yt_g|6T~KuzdJvPUX0gjoA|lpmz8_*aYOg!qgRT!=oBRE*gfUaM#1s+ zoeAiuWRBfOQirpI7tUDA$}M<(bF;gOi(!W+l!gms>iu(;3eUBV? z=;g(HDh_38Y|O8yn4XzweEO6^rIwgnKY8X18v3}jG(I+_#kO(!t+GU} zcegd3JHV)ipqiQ*85tROclYV(=>+qV!GQRfn24yTy@gNiD88ki-=u2)>RBvO4|B^$ zDZj%P0f)W*_wv$GXJ;o$hp2SU+uK`BR$5wG3|d%Nz%rjadE$>ZArgstddSGEoSZ+} z5(#mG0Z+~q6Du%kSS(gm6-L6zvLHy7HT4VMR$ctyK{3dsV!eR;6@)^glfHKj=BwTr zZ6=FB4}-0zK77gtuSvuScBCMJgwaE0tfzRjK5 z+FCAGo^nVlZEtUnQcNlhyK+U66c`dx{Ns->m8s7$0RaIU8yf}+SN;6NNG}=npM*jc zW@2I@bmO+Ng_d<;VIkP3)CuOb{k_CPhYo4wEv&9u5C~Z&SXFk0T^TSJ%tz?x=#0vZ zWY7tZoOXA2t*x!^By;U{4vFLTAN%ki>JRZ-v)TT`E@#DwoZ#!q#o;EbV zVIA%5?SHh!1EN%zg)HnFIf_=^wPvsL=g+&kj?~xdcX{UJ<$;xmX4cmm<`jL}5>k*# zrV%eECX`7SIXO9bdCfe#$cTu$ckimnO0dY4m6fT;{DOj@prBKWL@kts#V_Yd%p)Ts zxrK%P0Raq|3>!5P^4Ff8?;|1_9zHyK?%X#gPJH#>fVUIc+S-x=0|PHz5{i5lRg+Sj zn50sWcQ-Aws3nht1R{$J{Co;C2LB;DA3w&^Xtd_*3p7c3GZFQ3L_241=1Xm790VfP4~ad!j)7Zw?BVR740bAbG3eCe&6oRjM6`doV- zpNY&&Nv?e(?wX^c45#;w(bq~uT=I$XvN9{g+S=NDgeh})XsEWS2}7D&T`kGY9UdOG zRAmnr6BD+bs8lL_*15DLZbR}aAoaTOu>mpql)S9$waLx{_9p_C`!1R>>bGYGd5w*Y zo12?}tvUF%3N1}El0_#F2zV~2y$i0c!r9sHuU^$bA}Xt@qF4WrhUVtyWB=N$=`a$E zjA&?Ru*eJwr7K^@^IdS1otogJvVd?lKvhsXNH2CIwF5WDzBC&CGQb;{y!M*jS> z&Iz|PHy0KjZbf(@{H&m;c>MTrLqkI`C_g`+!{NMm@gkGm-`7VpGn;k*9IV4?yx-q| zpf@$1=@)Zt)V}Lhep8D`Be60vV)nko#>K^jht~sT+pYaV*GpQYE5WURuO_dRzqVGd z1_yh2d&d$l0)cRMM?*Ip%N6D2TVvP6Bb6|iLLRS*&$qF+4-N^j?&%*GkZPrskF1GA zSAv4f%*<}yylE8t?gqEMyu4>@Y`2%A!KgPrb*dkfbV9${PfB0cxanZR3^N%+THMMu|-hr%(LF41&Imb*Ml$A|S zO)+;*W28Jie+RldHRT_hyR;Mxv@F)uVfkl?ieO9V&24R3wncTKCaF}9K=}E|lePAg zuL4yp`ja15ckn< zE;5lr0|Wf3suI&kyQF6|HG{pqEW0wm)gv9&atDPdlP-7kXn9qYr<1n@5ypj@&gzdVvHuE%+U%f|yxer|xG5J~8Q{lEyM2JS60P+^UwbIK6{xGLD~c36SPl;i#67pBn_>a|5VX^#O(c4?S=0T0tv-G|yL0;5*6PH> z@bC?jx_&6X+8N2$>je!TjETI~}yAr9PBxatd>UUDD6`7cN}SiI^x{ z+aZ7QY52O6u9-o8@CANM=#M@~mETtQ|6|2JhWjvAd56&G)K)w=TS2xIM{+I6H}yY% C#d})- literal 0 HcmV?d00001 diff --git a/inherit_graph_43.map b/inherit_graph_43.map new file mode 100644 index 0000000..ec9e250 --- /dev/null +++ b/inherit_graph_43.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_43.md5 b/inherit_graph_43.md5 new file mode 100644 index 0000000..3470b5f --- /dev/null +++ b/inherit_graph_43.md5 @@ -0,0 +1 @@ +cb2e519a256766e1af0e3ef2f796e97e \ No newline at end of file diff --git a/inherit_graph_43.png b/inherit_graph_43.png new file mode 100644 index 0000000000000000000000000000000000000000..80d3375ca97ea585201e5cad1c9c2dca27966653 GIT binary patch literal 2147 zcmV-p2%PtcP)QbKCR&ad;1>ZLYJR z^6fpJzxMq0{4USgcjx(?XG0)_fP~~{toqvpko<2z3WbCaq)DBQ`cD@{vht{|uI}mS!CR=7lWJ>g|5QCB zD-;Al%q(P&LP7{qC?td+g+f9IQYa*Z_-jJx>gwWfIDacUiqU995MdBrhZ-LrcW`j{g&H^<&clZf@fJRxf9A}YUkLSE`Pc3!J9g|ad#?K_a=E;}zaJYa zl}dXf007+F+{(+#f4PR0&%Y*=uV23|EiKvQ5*r&^S67D(8yg#=qoeK3%VaW7oH$`u z4G_Zb-@n_N=+DPQv0EryF89{0TL1vHTD@x3s{H(X0D#eGbaHZPZEXbrjE#*YCMG&N zJ99W3bS40xt*tFIG?c+$Y}~l9pr8OB&}cOB`TY3!cpEFce*LiG_MpC1<&r_(oZr{GGP$;NWDjF86!K(Yz)D(?I%g)Z8oSZ}_S5{Wyt4dE#KYjYNT?;ph ziNAF2?(UhHncdypwm()g001>LH9uJJ10q7{>+5rNb~YFcd3kvS1qC!3ZGL`UAP^)c zCqoFEnwkOw1F^}4g@u`!nR>lmDwUc{CX>lDFfici>iYEQQ;9_4?d_eBk+EjYnz^|- z8yQ<#TIh88qeqW)I^ELJl2)r-E)o1uC`zTWsHlj;;Up&~H#aw%OeV9)s8FO*>DjYq z^Yil|gcTJPJRWahVF4A2P$&!z4#wu^<>h5%WvNsu0KmtOA5mjQM#hyZSF8%fs{7Q` z6yDv2P>3(wEG8a}Msw%Roo(B;1qTP;yLWGKanZ)5#;_EM-CNK0?b{t49sB$HJ3Bjh zJYG;xkVGPBZ*NabOauUoj*bow4{!J{Wo2dGzI~%osm;yJ;o;$2F1NV2m_nhTq2zM8 z$z<~J@ws{Prj3ky_UsXfM5U#ruCA^J4je%HM5~GLUXLF?_Vx9hot+hn#f^=P@$vDN z$I=+7sj2AhW47-o6bgTTe{2{K5HK+@fxhy+1^uz^(`Yn8p)f8kZgzIoY9hSXmMvS-($Xp`D@`U-Zf>sSGcca; z@NlhGE0IV#Iy%r!0>#tQ^U0GZ*l=WI1k;BN*%5KazAYRM=hLT8crU3`%H?u@Vc}Rz zOZxiyL?Y3^z`)U?N8Q}qep7?XVDH|& z^Yio9u3b~9R9#(NVPRn}Uc8u_n?u*2)oM#hN=8OT(57eUnqB`PW^Jv}`)H+Q*o z?d|Qcv9SXK13H~fr_<5tbQ+CjH4!=={f7DZ`BhX@ynFY~)zvj7CMF>vp{c0}F7pRr z1VIiSJeZS{vvcQ8CnqP&o}8RKJUm=lTB=s7TUuJ~-o2ZZl||$dp*0Y3KX&X`NlA%F zB$CNwgM)*oPMuOH6zE;e-i2GD)oO)8VMs_wPEJllM8we0kU$_{GMPk{U=DsCBGRKk z2-Rveg+jS{^(usLVPV0+!QsM%3)s7F-@c8EjASyIK0ZFh#l;Xpyw(qO-GeZEY=^%|=~RD%HAm>&&)ljHRWelP6EQySvlr^sulnu~@uZA_(F6^XHjN zW>r-cK7zqusIRY&j*eC+6lQh+fK)1l5O#KU0surJ5xOV_t7uN}CN{3h&f zW`7^AU%wUz1eW&D(9m<|&i(m%Nbsy6p#%p9<4;IQRutscLqZ5rC?td+g+f9IQYa*Z zu+q$u9VLks@TYHLv6xC-LC--Xe+w#=iX8-7IhiFPSq`#CAt3}Q6cR#^LLngpDHIYy Z{0ANBIIqK`d{6)Y002ovPDHLkV1gmp3`zh1 literal 0 HcmV?d00001 diff --git a/inherit_graph_44.map b/inherit_graph_44.map new file mode 100644 index 0000000..900f65f --- /dev/null +++ b/inherit_graph_44.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_44.md5 b/inherit_graph_44.md5 new file mode 100644 index 0000000..39c5c67 --- /dev/null +++ b/inherit_graph_44.md5 @@ -0,0 +1 @@ +a19df58ed0dc8df639d2248c2e7d10a5 \ No newline at end of file diff --git a/inherit_graph_44.png b/inherit_graph_44.png new file mode 100644 index 0000000000000000000000000000000000000000..df268b8ef9283ec14a8af4af45de6de2f1a82430 GIT binary patch literal 1537 zcmV+c2LAbpP))=-MU9!+VBp0VJ{q9XBlgVV- zkx;@91VQTR>ZDSsZ=?SjHyeR>?F*0QbogIqZf?%w@ochlY-}ub!RPa%qoeoj+qZ3T{Y5Bi zT&Yw(e*72!u(Y%k5fO3y`gH)n+S*!7OiWi-7XV;#axy$B$?Cfk^U7buOD<~+iSS%z-29gNk zIE2vYbUu0VBsDcPEiLWo)2Bav{0MFl1+C+uWR)XFjzmR8jf{-EefzesurN6}8N;xi zo}T>td;q}2#Ke~`U;g-;hK7cfl@%_RYq404A3v^CD(ma(5d@*8!f~7=$%KT2M~@x_ zQOwTHZfa_J`0$}nC_H!W9JMjh3i*zD`SPViB3WEqv|6ogZEb3`nzroT3@D10mX?0_ z@S&lh!DKRt#p0={snDhhW#{B@IBK=pY&K6$PNt-!s8p)X&Q6=nrq}BM03wk{EEbQC zk5ip-9Cy3j7K^2}wsvS}NFtE{0OWEx^;9Gh84QMZ@80F+=4!Rtq@*NT#fgcDG;X+wiSs=Ndo}R3%EW6!K5ClOGD2hf# zM$!sV{i(&Cn3(wN*|SfdJ_&_Fl}eSDm)FtJ0k{5L*X45Q_4=bnk6yic^~8x2V`F1F zosQ4vhh|+Uc^pExw6ugE$elZPAcWt)f8Vuh*Nq!D)}Ma-`0>=KQ+z%@At9l@z8*s8 zcDpZMzPxA89+^z0)9G&ByeSX}j7FnWDy4?Z&(H7OyVqba(8_r{p7QeY`1p7fMHLE# z)oKkS1R<=huIBUk&CSieGkCq;7cX99W@b)LPt!^S$>V0T`O>9JeSLlZXp0|!E{}8I zufKV5aWMdZ{kQgCfy3dnwzg81t`mke=WovMRdc?7|6ZrlZER0ZPp_(~Vm_Yj;P-Mo zEiEnVzp}Dfg=tvFnTBp0V}jx!DGIMe(IWQy|e!-Ff+00000NkvXXu0mjfmZ1ia literal 0 HcmV?d00001 diff --git a/inherit_graph_45.map b/inherit_graph_45.map new file mode 100644 index 0000000..12adb10 --- /dev/null +++ b/inherit_graph_45.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_45.md5 b/inherit_graph_45.md5 new file mode 100644 index 0000000..96d6ffd --- /dev/null +++ b/inherit_graph_45.md5 @@ -0,0 +1 @@ +f39a3440900a5c521490b24585d2beed \ No newline at end of file diff --git a/inherit_graph_45.png b/inherit_graph_45.png new file mode 100644 index 0000000000000000000000000000000000000000..8695d3771c2797f31e9ccfd98860b37d63ac5a16 GIT binary patch literal 2064 zcmYLKdpy(o8~-kQ3C-n<#xxQoFX5+|JEyfKmo(S1%)Q(ea;q?v5gL(_+i_i;(b_@f zSV`$PWT7q6+~(3wq!E$DF#Nvf_xinFJ)hV6^ZfICp3mob-k;}rXzm0@MFmX-000!7 zo$#KZZUS*YZU?w$IlHZcN;c$#BOciPch$VCD+GX@ubuHny^|{DD@d-Y0!@y(ns3yJ z2-Xfq-x@i2SvfrZy_1>>6q1Rj-P<1_M=RAl@Jl8@TTkQb>h`NQI~A!I|8kV3VOn#s zfaCz1a5r(;hnNaG`xqyx$hNLS3iu2DBYSQ(Ob-0k-1fu&^!D3SEjbITd>QE9PyvGg zEaj%(rKV;4A7>rgB#XjhF)<5LsnjzxgJ}57FD5STaPsGD%5g_W4!7J=-SR-^`}^L8 z@2Zbnz(j_V4;FSK4(#o0On226G@mc&-#=@n5?g@&iDFlzv9WRLuh*FORPm0Eg3`Y} zEg}ACYHbxvOtjV3c9|y3@U%4ZR=!W40I>1#-|5G)5x=e8TWlRS8*B`m?C)Q)%nL=A zxiCDL-Z;9cp<#~3<%<`M_fu)o|>6y8ueBq4HN&n(M>ZwD=$ zoa8dviOu9wM~^~Agi>j$i;GKC)E}8&b8~X+?CdmPU0r#5C=?3Kc>pUE3SAiS8!PjD zKIq24SA!9l!9iOL24i6%>)*rU1vG`_iAr4<0j-zjdx{P@I5>DR|9tVH0!P=FH+SLx zS=`_6VNpIlJp5&PIy1Ob1kp@(H&6=>4$jZdzk2oRP-CFwkDzEFa4>Fe(D**mi%@A( zbocJ{Pe~_F<`outMMN0nf1014hshpe@p(L63WZW_6&I42DDJ=S*wD~m88g-wfl0L4 z9BWB1ESeQ|WMeezo0?QROx@hvDhVZb?!Z-5@AJuAhr7MgFj<)nQ-){DSx)}->rfPj zPK`yaip8C#H(&VI4V?1vaXfxJB{}(|t1I@{)YOzp486ayvJ%XfV083m@u)z+dic&)YJysqRYK%L0#~cvofLTWnljRmE0$Os7)`bwh)LHf5_CsVECQCC-2 zPfyRr>Nk=F+da3n)fV_`45F!_t-Z3cV&S(gk-!ucZ`(_u1(W4O&{p5Vg8lq?N^Gnt zC}{K(I-Sm7IOyI606%~KWV;E_k^EVPr?ssuDKIdQNE{v+5ebD5!1Tk%*;!u?kEN;Z z!g|uv+TVYdNF-Q2B^V3}g<{OjBQcs_)>Ku^tgYo0@e|YEzExLL_<4BHhvv-8%zPRH zqN5qd4b*bLPf%4=B^HZ8Qb>E~B~D@5&>xy6)2_b1j%CXg9P1EyP8!> zZLt~Iot>R+ZEbh%++i}ASy@>upT=4S;|z&;_}bcw!=Yqy4vwz!k`Fcwuq7;i{|;k; zzo*ef!Q8J`zC)zj6@%Fd?mGZG{Dd_HA$ zAv!wR+}|ce{GhS1v7e}W+sex71!a{NG&nj+K7XD>BIRxmhZlI6*Jpl#-{?Z6r0MDD zol^!+?VzT0p95?!(in(NFl94=qWmMvM6 z3Z=LnIVGirhYx*cja0T}>`(rjRR2yb9W4X0%r<6pbX2Els$>rs0&hWmot;j^Jo9Vl qFE`nP+T4agVIRVEKI(-2gjD@A-tup~Bt|ee;sIv|0=@wkl>T4rPVxc( literal 0 HcmV?d00001 diff --git a/inherit_graph_46.map b/inherit_graph_46.map new file mode 100644 index 0000000..19fba37 --- /dev/null +++ b/inherit_graph_46.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_46.md5 b/inherit_graph_46.md5 new file mode 100644 index 0000000..9573419 --- /dev/null +++ b/inherit_graph_46.md5 @@ -0,0 +1 @@ +4189533f0ab757d6f78471793fd1f9ee \ No newline at end of file diff --git a/inherit_graph_46.png b/inherit_graph_46.png new file mode 100644 index 0000000000000000000000000000000000000000..da459c0b628ab5ee7dd79f55916d7ade125c9c98 GIT binary patch literal 2328 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 + + diff --git a/inherit_graph_47.md5 b/inherit_graph_47.md5 new file mode 100644 index 0000000..8d6401c --- /dev/null +++ b/inherit_graph_47.md5 @@ -0,0 +1 @@ +5443b2b92177fbfeb5790dc756add82a \ No newline at end of file diff --git a/inherit_graph_47.png b/inherit_graph_47.png new file mode 100644 index 0000000000000000000000000000000000000000..435807d588f4da6335aa950d23fa3772cad36c9e GIT binary patch literal 2389 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 DDqeQ6 literal 0 HcmV?d00001 diff --git a/inherit_graph_48.map b/inherit_graph_48.map new file mode 100644 index 0000000..240b985 --- /dev/null +++ b/inherit_graph_48.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_48.md5 b/inherit_graph_48.md5 new file mode 100644 index 0000000..26e7fdc --- /dev/null +++ b/inherit_graph_48.md5 @@ -0,0 +1 @@ +50270a9006b250377a8be83e7181b55b \ No newline at end of file diff --git a/inherit_graph_48.png b/inherit_graph_48.png new file mode 100644 index 0000000000000000000000000000000000000000..45bb9d6f4e5288d92c0141d9660e2042a32e571d GIT binary patch literal 2543 zcmYjTc{E%57Cxp@Rkv5&np-72*BCLSp@uXx#;TX1sF;Up&0|rerXac0H3vaO(6ok{ zXT3yksiNG{JW^9oR@YbUR>a&^KHhsaX75N z*JK7>2 zMN>2Mcx+InuBWHRUil0pAShT^P*C~&IRt&Yua#rg7576QqSV$Z>FJS8D(dZ(|F{Tk zuZ+p!@pweRI*XN=o2!kYIM7K1!k6H-p2sKXk=F2ynXc%4nbI7yN+R+6vmxy8`}bDn z=H?HxN7>$=F@eE&E?!M>;^Xa>fVtD-gNs@LmX<_A>7kJkVrnWJ_c`tcn{`7PfWYbV`;8Pq zV+_WS5B#ngS5sPgC2@PY(c1$N<>7&;#&`tP7eRxSzv^sPSz%C4dPB;H#DGv z<}m>QTTgj^QdU+59Ibu*T3|snt4t#h?sh%;duS-NEaR_N_=un&BmKOb9CcBFCI_N; zV^tL|M6szxp-=!&Z8Qe+$3VKsZND2MpXTO%g0NU@=DQ`CEIz2t^-XeFSs9ru3H5>` ztQ*Z?LXe@86B(x%d;Gn=qN2iHd1??>jT;yk=BOa_rOnMv2e#}@(gSAe z?P^?i+z;o9F(1vs=4NdP2?+wm29FGvHj=)>%+;8k4hel#~>0T26>iS-G^m4Htqb zDW#8i-QYVqJVYQ6AQcdbqLPvp;LL+;CmN^gfzuR`jgHP zFfzf_9UYDpV@O@ybWHil(Z0l=So!QIy;-_r3zNy*WVTJr%Fw5Ad#%h%xdWLu;5_CGb@-7D8s1e z=#GvKe0NOL=jMkd=Z#bU9d_cygPHKiv+imkliqF3}| z49Q?qj+v*Y=TesJO`xddks@9wFf7dY<@oAuLP7$N;)f3(^7Hd~&Rr5U6PJ)s66Wvf z?95fYm&SAwORMG)Q{d+0fTXkE3QTGz<9o5;K#=xazMSw9wa?bA+4&cb43)ZuVA z*rTpKh8>)&wTnC2Q@MUU_Fb+@>VUNcw}eE|Tu&T(aWNw!V{vKedfX|~`l0&~kASD0 zg0QKnDWc#-ef`d(|=Prk~V7Vl8PV3Pt+lp>Ps93k#cB&QrttXwDpbV_!}5_xA@ypiSjX z4CK_gi%ibM!T^C6FWbszUv+ z(;6olfKxiY=dsM%;Zp#y`o3JRf!z^}rT{^wCMmxr)JW+YyGu@7vWE$c6zK%)!nm(` zz(t4Z8?VlG$G%(Gk(8419xag)7RK4x?e8lUBP<+QG#ag>qy*gdRk5_R1f?*_mRK7f zAMf{SysoFGsHk|~&+p{qq|M3S(ed;1kGeb-uPmqH24-jV;qbb;y1?lM&s5+QFa-r4 zP;$xbFgdxiN&Rn9ev-Akb!(JFA~kxCI=6@VA{0wPEuy)(AU8L+w6wI>jiIKdXB+-9 zT>8cyy;Y)T3dH;nn1p`hHl^DekDp7l(>=)V?9Ix`0@)7{765W6U0vevXuxb|eRDH) zVzq*ZQw-Z(;N`Byt*x$#iHPVtI@K|@aAtvS58BM)ECqyxM1Go@n#yc+pqrFjKgQd> zupgV8{N=)hx)8RNc2RL@>2H$ug_81W@b7cV^f8}|(NPGBh}hqn>)GGiBWdU6d<6D=gUFjxu4Gr@464HrLQBj~c4$sliWvxLAgGuK^APAI`Tm7e@QWw + + diff --git a/inherit_graph_49.md5 b/inherit_graph_49.md5 new file mode 100644 index 0000000..3df297b --- /dev/null +++ b/inherit_graph_49.md5 @@ -0,0 +1 @@ +c3254044cc1a4c35fbc40b39fa800bfd \ No newline at end of file diff --git a/inherit_graph_49.png b/inherit_graph_49.png new file mode 100644 index 0000000000000000000000000000000000000000..b5a51d334b388171dc16f5747d8e3cd50cae9fdf GIT binary patch literal 3344 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 + + diff --git a/inherit_graph_5.md5 b/inherit_graph_5.md5 new file mode 100644 index 0000000..7e4620b --- /dev/null +++ b/inherit_graph_5.md5 @@ -0,0 +1 @@ +819332fb6a15cacd05ee5a64d7f1ed45 \ No newline at end of file diff --git a/inherit_graph_5.png b/inherit_graph_5.png new file mode 100644 index 0000000000000000000000000000000000000000..e4a8f0d98b999d0cdf12e856195ed426166112b1 GIT binary patch literal 2047 zcmV0?|UB4dCob*0RR{R;fO8&bOMNf2dGdGlt6`opad!u1SRO^2cx5- zxw*L}lj)zz2C+$?(P;PX-ShYNCoF%vq9_!K%F4=(P71O4sI071C=})vy7i>$>gtWk z2eC=Paooa!dK3gDP@y0wfeHmd2~;QuO01<&I2;cCn{C^+ojZ30eIYPEWD zat5{iq9tEs6W4(sab4jnqQS`jvzed*FAIR5_q z`_j^qLl*$R;^N|J18pQQLxaH(5)!iU(f_DNSy@@>>+7qntrZG|(9+!892ptOVzE3u zJ;h=%G(LRz(9h40#bO;eaNygwZ_qe0GLn#x;Ns#E5D@V6=~F`U^y$;)g;HBvo0gVF z9Cmki@7uSJ!{LO6hQ56H62ma9R?FdVq*CdQ9Xr@;c4}(suV23=Cnw>p=itGEDwQfJ zDG9zDvUb;KG_J0$O-)UKfq`P3#fumA^#uX}bl2&0TefV;&CSIy%w#fgxm*}%)c`Z9s;Vq3 zq_Ej+bA_EdcTP=B0RR>j7MM(CVPT13G zj%u}9S6A19f&z_3)6mes;c%Lpn`dTba2!ucN}8UY{_^FEo15FSXU`@kCg^lJ%+}xE zUoMve07%`{YBhtw$jr=yOX%$Etf{Gij>MQW1gRS7c9G7ksHg}G41^Qjy?f{5<6|LC@Cq4kB_&df9KAfl#~Ti~{6$Lhln~6%&p&_uJS>!ffq`q+uI1+D0szX&%2HBN=I7^Op-83Dh=>Tn zD?2+oBO_yGW(LEs{{DVwOixe0d-pDBp^&<()oOEhQbr&YYj0XR%m4Jv~tH z_U+rYw#6bt>p~&b@9yq)adBB*Ue3sN{85kM?(QBG z6!iG({UKdVPI;eP(7RW_MfcWJs#NXU`sIXXoDD-nO>3l$4aPurRq? z-qO;NkdWYTrKFI2>sc-EIhny=G&VNo=jV5Ib@}=EVHgIpS1OfZVPVb9%?k?)QmOR# z@#8;!{P6Jb@bU2(92|rSDwWD;G!lX_F)@0*UM`onwzitz`@Oup>g(%?!{Om!;^bL> zo3O@?JFIDk%cQ7AF>ZQ#dUkepczAeJR8&Af0ES_9w#80{r206H$H&LNdGlsuWF$O1 z{P5w!GMTKSqeCi{I$S9!YrLY&&dzGJTCG+)K0YoIi99?!cJJQ(^XE^v9=%@w=+UF$ z;o*gag_f3g~Gwq{#5y#y2uM#)k3=G|wns)r-nemN2Gm002ovPDHLkV1k6}{GtE= literal 0 HcmV?d00001 diff --git a/inherit_graph_50.map b/inherit_graph_50.map new file mode 100644 index 0000000..cc4d0ce --- /dev/null +++ b/inherit_graph_50.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_50.md5 b/inherit_graph_50.md5 new file mode 100644 index 0000000..01e4af8 --- /dev/null +++ b/inherit_graph_50.md5 @@ -0,0 +1 @@ +a2be34e67d8817ca0d059dfe95f67feb \ No newline at end of file diff --git a/inherit_graph_50.png b/inherit_graph_50.png new file mode 100644 index 0000000000000000000000000000000000000000..af2cb46bb6496e8138b34fb61f507ed463e04e88 GIT binary patch literal 3740 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 E0NqSP>Hq)$ literal 0 HcmV?d00001 diff --git a/inherit_graph_51.map b/inherit_graph_51.map new file mode 100644 index 0000000..c92f611 --- /dev/null +++ b/inherit_graph_51.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_51.md5 b/inherit_graph_51.md5 new file mode 100644 index 0000000..67bbc53 --- /dev/null +++ b/inherit_graph_51.md5 @@ -0,0 +1 @@ +1eaf4645af3433987a9ca561a0597116 \ No newline at end of file diff --git a/inherit_graph_51.png b/inherit_graph_51.png new file mode 100644 index 0000000000000000000000000000000000000000..066673d468ffc4163d05ff6e26d3610f732cfddc GIT binary patch literal 3353 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 + + diff --git a/inherit_graph_52.md5 b/inherit_graph_52.md5 new file mode 100644 index 0000000..13f6a75 --- /dev/null +++ b/inherit_graph_52.md5 @@ -0,0 +1 @@ +46d1d1edc349b0a0674d17de8260963a \ No newline at end of file diff --git a/inherit_graph_52.png b/inherit_graph_52.png new file mode 100644 index 0000000000000000000000000000000000000000..302ecc1db2b95df47c60dd8b28a7050682961d46 GIT binary patch literal 3170 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 + + diff --git a/inherit_graph_6.md5 b/inherit_graph_6.md5 new file mode 100644 index 0000000..d063e78 --- /dev/null +++ b/inherit_graph_6.md5 @@ -0,0 +1 @@ +f9646379e4ba7725650d12f7edea56b9 \ No newline at end of file diff --git a/inherit_graph_6.png b/inherit_graph_6.png new file mode 100644 index 0000000000000000000000000000000000000000..7c2db30214036e04e5b2a9517e6339b5c16076e3 GIT binary patch literal 1231 zcmV;=1Tg!FP)I8-3*?u_xt@KkqAMM;o)Hphr{7;am4gVTiEJ5exC7gDHJ-a*~ymg?2&^)YjGp0Py?$ zZ=FY%#!oCk3x&eM!a}W9J2Em7F3!x%Bqk + + diff --git a/inherit_graph_7.md5 b/inherit_graph_7.md5 new file mode 100644 index 0000000..610259c --- /dev/null +++ b/inherit_graph_7.md5 @@ -0,0 +1 @@ +6611ce124b6223068f56ef46c070d98f \ No newline at end of file diff --git a/inherit_graph_7.png b/inherit_graph_7.png new file mode 100644 index 0000000000000000000000000000000000000000..4dc2e27fdd2ac45ca351f75a50229c38fcf60556 GIT binary patch literal 3193 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 F{sVT14lDow literal 0 HcmV?d00001 diff --git a/inherit_graph_8.map b/inherit_graph_8.map new file mode 100644 index 0000000..23e55d0 --- /dev/null +++ b/inherit_graph_8.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_8.md5 b/inherit_graph_8.md5 new file mode 100644 index 0000000..5cc2e69 --- /dev/null +++ b/inherit_graph_8.md5 @@ -0,0 +1 @@ +934365cc2a581e1a565849cc841c9588 \ No newline at end of file diff --git a/inherit_graph_8.png b/inherit_graph_8.png new file mode 100644 index 0000000000000000000000000000000000000000..61ad7b285eaa70623d58c46fc3f467c4510c403a GIT binary patch literal 1655 zcmV--28j8IP)HpYxUzHJ7^08)lwhKUJEr77KJpl+qtkqdDjY z6h{6NQT?F=qhe8#ku0P?ED`$wrV0KtHX4cHN=rj>VgIzuu;$rr;iL^ZT~B}9mvL^l zwJpEt!Snj-p3gqJ&-;1a_uSoccNl~aAOuUwY70R8705qfgZvXV$Uk8t;x?wIr!QW- z7z_qiOAX?W==FNNULR^Mn}4IDqmLgy{^ybq@iHY&kNSEYXT9LNfl1kB_TVs?yR@tJOL*G^EjJYHDiUy?eLf z;?}YrlgUJJn4Fx9k*rp$M@L8h4;eh`hd*-W%$f7&&tJQCjct~dmAPE5wzjsrckiyK zwl%FMD=RB6FE7qykH@pPxX6t_2pNVEi^YGd19Ir;=?RNO^7->;0Kn|*EH^kmKks(C zA%rwd0|5H_`?qi3o|&1c)9C_%0EBR0U_hl(rKhJW6bhr!$Yy3{W_EOR5CoBtk-=v2 z1|ft~Q&R^H9FRyPBuTclwLu8KeE9+ZSXx?&t%tWXgz)w2*BXsx{rdH4wR&V^B!=?H z(hx$WQfW4uBL|09zgDZoaXcp{r>CcfqNoiUHrVZUk|cNR*wN6?!2WSzVIeIo&FOT; z9(?xU3pbLme^#qCD=RD7uk0usJb2LK@k~xm78VwEbaeRr{`B%Y`}FD4s;a7Z^zfD*9v)VyRHsgz0su5MHDzaK`+PojCt=EYOCLLS3;Lwy?OIyHWS0JhK2?JfYH7NmN=ixw2M0SlJ9(31ldyjzNh+1f*4EaRmX=Vkv$HcTEiKecNm+JVYqQy| zU%x&!HpY%ladC0zC*G+O79 z=H^B!k6k(%e>^{hj^M+G4<9{xblbLVTCJ9Ql*CWM>jwWmHzSLhj%%#-@EyIzQ|xjMa9z6lF4LB?&JxQ zTmPxm>Q}E`O-xMe+qZA;-n~wzb8v95yu3VGzFx1duC6XCD=RH6U0hr=8jbb!^=`L2 z&T3P5G#aJL zak*U4x?nIE3;eWcK|L_XS@v>vzP85C{Z5efreZ)z#P6m-J51^XpaP&6_tB6&3aM^_7*CN$&*B zzg45Mvhw@)?|-=yH2;JR@=w?x|AYzl42Zh*&$!%*+%N6mTQU{8K0tB9SQa zBSXa6L8H-dn;3f9B52U{PuL*;gbngf*dYIe&2Mj;qcxNsuBZS2002ovPDHLkV1i94 BKq>$L literal 0 HcmV?d00001 diff --git a/inherit_graph_9.map b/inherit_graph_9.map new file mode 100644 index 0000000..7f92c36 --- /dev/null +++ b/inherit_graph_9.map @@ -0,0 +1,4 @@ + + + + diff --git a/inherit_graph_9.md5 b/inherit_graph_9.md5 new file mode 100644 index 0000000..8218d78 --- /dev/null +++ b/inherit_graph_9.md5 @@ -0,0 +1 @@ +e3ea96f4510b8c814b5b4d9a90f2894d \ No newline at end of file diff --git a/inherit_graph_9.png b/inherit_graph_9.png new file mode 100644 index 0000000000000000000000000000000000000000..5b5f6ad8ce1d7de3bda469c048121809e7da652f GIT binary patch literal 5178 zcmZ8lXIN89v<*m!6bT*a0Y#*QDnvj)suXD=MOr|V-Vp*wlU@V_r9(tTE**r>yC7mH z(tB^xdzJErd%yR7yq#~7^JUJNIkWfdwbz;mEe&OI5=IgT1VXOzNI?ez!7~8YR#1HK z{p)GhIQSv5P*YZbTwZ-X*5@QZAku+w3LM9*ut0$Tcb5Bi?aRTP(GG}I~%K~{n3DhwzqF3TTq8qV1{~;gn{N! zT$n5s6``%pqetCG?bTiMKjFc$0e?=4dg?ReyHd7J5}%>Pix-Ng2qJpY=8^)_`qPPOxA_MosPHIy zfgeA9#5WKs6QI!VRbLnzPn_&6xBIZ8(1K)ZYimsFCRIuhNPz5rO%?`)K%n?|f|;qQ zsek@hi;IgB6NhbYZ};`-Skx*0($WS728vj9^Ko-?-@Tgxu0AP7<>lv_#4WClAd$%9?hHvK zme?E4e_;%5UmvGQpYQkk{yn4=I6pu4lA4CT>`1JJDJvOY|j=9}wy5WIUH?yQ9xp%t z(!@L@@1CEL2m+%gR{b$@Sf^P+2gU7fJ7@E4t2 zEcPHvK8ygrc@dYy&(Dv;;o2;OLd|=7dpX|ylb83aqvP&_2N~|!#t5sj(OSh*s^YD#l+%$dG<Bi~aUTs8DLQMMA8m+og@6E(+g6M_E z7C-P~Za3u9Gc>#zGmjtG)Y4+HF^1jP*tmWBHW`t8uI?PtZ+D?X-^}*|!`{YtrJI`@ zHtE%G7U;|XBw9LKC&D~=)8TMydTag4q&zo`OAYKD9Zj{hn`fP2atH(hgoi4kb$pzu zedikSjo&No5*e(tw1d69fv`SPLtR}<8=I3seKUA41KE$It~3FY8X8vCq8{|4+6I?- zB@}Ar?^a_hOjTXo-P!ri>MDnaFlyn8NwHxW5xm^0CzC?@Sa$MVNC;u6>}i&0$Kq~l zs{&U-2TJfCU0WL)8v}!p(K4%PuVogCAP~`+8Pvv$poi>`&rUz0Ztdw$e7(;R z*R5N~`}b{PjXj5hZtjMwu#o5%8J`@EJ87ng@$>Pii%di#s(hhJY@y~WD=WZJ;}s71 z1qF5fmluirM!S1^jc2>K=2UkN530+97s7_Nwmg`gB-QNGBZiwdM<*vU($o3qqKeHL zrF{<9nZzCcT)AL=eqK#YO%o%{PZ!k>&_zcloLjJ<2qWWgg#dDDWASe9X(s1CC;6N0n^M&&_@M z^y%#U+^Rc0SBu+YbE4Ys{IsG%>_P44UTZ}~MM6SC04YxO2SZjE->)ZSy$`@Un9^Os_EDv6Ez*PIX6NAcFc-S+kcx;!QgudBUZ zXlQgVWBiNi?FD}-LqhLJOS8fW`s3RBDjdc^a`wnvO2ucO7!nf_c+w; z>pS!90H^2?#)7uW&bE-I)>lWHlVFa6wc)VPP(~~#k^_R8BOxdEJ>6ena3@eE0PsxE zA2it1+~UFOU#Plr*DxoINP(wIumj(6t8r_j$q#sg2voNZq#-Q8Wp;o;$lGV%)x zyW$f0+5C>-m>!I%O}sY+E=fRBQt_*t5z z%L8&oL!DcJu|N3wwEv~AzP|pGC;ebagAO1ou#&eOCE~OAEFlI@{UV8AidDm$r?T0>cK! zsb;shq$5wQot%_|I)xprt+$Vk8odwlba}cuJEJ2by-)W+t-*SSNi1>MeSMaUoCybh zxVCgpQc_Y}OzhLcuh)y8VR>X^WO#Y=KYyNI=tyY1ypWXp393n!mgUQrhx_}MR#w#h z%PMK~^z;J8RV6hwH91$-4*Z{C7JQ5=_Ib9iAZnQ>0ue1VzVF^G$64*UWol`8D?`K6 z-JOhr;*RhcCBXe0>3i(jV-YklF|pF0Gd@1v z-rD;5Y^NPSPOHn=xKm?x{|XJsZ2%A_yNe)2I30?#xTR13a1sTXJ2*T5C=(w~Wr2x^ zh^VNj0KfrvP)r}&-`|gJ_RJ<<=`@7)#|0uxOul{PQgJB!SfnvB!IxV|8{YQT&o7?d zo^iLxq_)*!r}wimpjS#D`OVa0S+SS{<@bG zW$c~R%?nbvrIXX*{C8BDiCzJEWBSrhkY_URIw5}Gir4Ofp{r|iThx&=GX-?p7;9UB zC%LkDkzcAkF>ot4pL$^MIv5eu?fQCOD4ek?^}EZ?o|{SC2ug8QF(cIe=}Fj}(0UiY+L}?4chV zCI#-p2-w=K-MSd?@s@a;u}VeNVp!?OnzqsMvfoD3?pqP$4;!?mwpNj&R{=3~7XN2+ zQwe%sQgV4&e{=FL)6O{8+aCOf`mfJo4-fVD=q7PEo54KPjWAHvTW19e3p(4qCz>qZ zr89yO{CvF~Pt>J)A~JHQD~*)(f$ev}NY#6Pgi=*QmKS}6eGYk_-*7C0>HnBX$O1%=$P*==1h~W!!a~98^bH002S6}bKEaN-_$MpQ(Emygf5(lJ9dd-vdAP<;yI z3ZSn~8f=Pn?*u<}g3-{3qI6YMQ~)?a;Xu*=zTmaD#BWpq6kd3Fp$Cysin70a?us1M_oKic+$V*jJqL_XS1a z@xHnhJVtaf@5^N0}KJ8I_fuIy!woUV>N}KYbbk^S(H{U%EJkwQIaM zwfl4u@BwKkH-bk`YF0v4;am!fF7-2vR^-rr{J87vWUu}9t+z?nlbaK9iyX-mH-5mr zP(D-L%I@e{iiXGx9L3D%Xxd`9AFb9i(-7Q`cz(? z_+9+Rnp2fmuh#l=6f8LGJE;7j1gKz;{8~D>XWbd0H4^3yg)>w2Kf)-+eSBzXNPv_- zJ=I-RtD~c%VPpGoe1oxUl5ibb!K@!=(yn;q-hE81znv> zojFKu92%7WOpIrsVVq&76-u{;_Z{ED&5fM?( zVi08}AoOxWs)LyZa>>NT+a@RRBIyHXSLvakG;dBf#x_=|G^mHy)=CQ9oo~E!xHw&# zcAQ#xl1sCpsw_J8wBqB5b@pI z8;#WAmRG++EI{JmsnOT(BI!55l;Cer$#;1QfQ>8DT*9FFajv59F0jNx@5aY#>a(uW2%1r{760w z8&-rEoj&LdQHY+|Q*2cUi;AkRap$1q1TqRH2goBhJWx83LP=@m4%}8twElV{Ko%9B zDYNxhv(e-1*uOjdWClBIz&T;$8q_8Zo?J=fNXaN!;K$SMjA(5J z@nk`SX&nO-Q@-EzKuBDZOI=}MLimk?gBD(WM5%#^f~np%ev=^Iojb~9jx17I1dmV* zAm3+}mSBvlQLxC^Fxd8+Ag1ms4e(zh2n0X@sHA#SSXfxIWUyTA^XvF{3@pn%m^-V# z9mmRTW?Mp9T@@8WE_{9$aFB+0sN5|6jhMIx`TV`PInba4P`Yp5bcVkSVqVf3a+j<9 zLWg+FhC>*V@Sa*`{oaf-qqNDVq#a`kqgiblXl=W)mFk_tjq$+{bMpMF0pFTf)5G5< zBz&$W(jX6@ys4*1N3s#)n`HvTNI2QQx3o9>Mu1}>h0v$(LcklES<@rv@HvGGBKc^* z$a1ybrg-=QB0&OlbD?_g+OmEZ36XAa6h?&zlHVkIn_NuNA4e|MOR{0BDIfae8U#Xs z4~ce~qaO>YC4w+awhEM!{wIt6&n1w6e^1K5Do;P^IozVsIZE20~O6H57{EP;dSR6L|E8 literal 0 HcmV?d00001 diff --git a/inherits.html b/inherits.html new file mode 100644 index 0000000..bcf646f --- /dev/null +++ b/inherits.html @@ -0,0 +1,314 @@ + + + + + + +pva2pva: Class Hierarchy + + + + + + + + + +

+ + + + +
+ +
+ +
+
+
Class Hierarchy
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+
+ + + + diff --git a/jquery.js b/jquery.js new file mode 100644 index 0000000..6aa2e4c --- /dev/null +++ b/jquery.js @@ -0,0 +1,39 @@ +/*! + * jQuery JavaScript Library v1.7.1 + * http://jquery.com/ + * + * Copyright 2011, John Resig + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * Includes Sizzle.js + * http://sizzlejs.com/ + * Copyright 2011, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * + * Date: Mon Nov 21 21:11:03 2011 -0500 + */ +(function(bb,L){var av=bb.document,bu=bb.navigator,bl=bb.location;var b=(function(){var bF=function(b0,b1){return new bF.fn.init(b0,b1,bD)},bU=bb.jQuery,bH=bb.$,bD,bY=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,bM=/\S/,bI=/^\s+/,bE=/\s+$/,bA=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,bN=/^[\],:{}\s]*$/,bW=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,bP=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,bJ=/(?:^|:|,)(?:\s*\[)+/g,by=/(webkit)[ \/]([\w.]+)/,bR=/(opera)(?:.*version)?[ \/]([\w.]+)/,bQ=/(msie) ([\w.]+)/,bS=/(mozilla)(?:.*? rv:([\w.]+))?/,bB=/-([a-z]|[0-9])/ig,bZ=/^-ms-/,bT=function(b0,b1){return(b1+"").toUpperCase()},bX=bu.userAgent,bV,bC,e,bL=Object.prototype.toString,bG=Object.prototype.hasOwnProperty,bz=Array.prototype.push,bK=Array.prototype.slice,bO=String.prototype.trim,bv=Array.prototype.indexOf,bx={};bF.fn=bF.prototype={constructor:bF,init:function(b0,b4,b3){var b2,b5,b1,b6;if(!b0){return this}if(b0.nodeType){this.context=this[0]=b0;this.length=1;return this}if(b0==="body"&&!b4&&av.body){this.context=av;this[0]=av.body;this.selector=b0;this.length=1;return this}if(typeof b0==="string"){if(b0.charAt(0)==="<"&&b0.charAt(b0.length-1)===">"&&b0.length>=3){b2=[null,b0,null]}else{b2=bY.exec(b0)}if(b2&&(b2[1]||!b4)){if(b2[1]){b4=b4 instanceof bF?b4[0]:b4;b6=(b4?b4.ownerDocument||b4:av);b1=bA.exec(b0);if(b1){if(bF.isPlainObject(b4)){b0=[av.createElement(b1[1])];bF.fn.attr.call(b0,b4,true)}else{b0=[b6.createElement(b1[1])]}}else{b1=bF.buildFragment([b2[1]],[b6]);b0=(b1.cacheable?bF.clone(b1.fragment):b1.fragment).childNodes}return bF.merge(this,b0)}else{b5=av.getElementById(b2[2]);if(b5&&b5.parentNode){if(b5.id!==b2[2]){return b3.find(b0)}this.length=1;this[0]=b5}this.context=av;this.selector=b0;return this}}else{if(!b4||b4.jquery){return(b4||b3).find(b0)}else{return this.constructor(b4).find(b0)}}}else{if(bF.isFunction(b0)){return b3.ready(b0)}}if(b0.selector!==L){this.selector=b0.selector;this.context=b0.context}return bF.makeArray(b0,this)},selector:"",jquery:"1.7.1",length:0,size:function(){return this.length},toArray:function(){return bK.call(this,0)},get:function(b0){return b0==null?this.toArray():(b0<0?this[this.length+b0]:this[b0])},pushStack:function(b1,b3,b0){var b2=this.constructor();if(bF.isArray(b1)){bz.apply(b2,b1)}else{bF.merge(b2,b1)}b2.prevObject=this;b2.context=this.context;if(b3==="find"){b2.selector=this.selector+(this.selector?" ":"")+b0}else{if(b3){b2.selector=this.selector+"."+b3+"("+b0+")"}}return b2},each:function(b1,b0){return bF.each(this,b1,b0)},ready:function(b0){bF.bindReady();bC.add(b0);return this},eq:function(b0){b0=+b0;return b0===-1?this.slice(b0):this.slice(b0,b0+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(bK.apply(this,arguments),"slice",bK.call(arguments).join(","))},map:function(b0){return this.pushStack(bF.map(this,function(b2,b1){return b0.call(b2,b1,b2)}))},end:function(){return this.prevObject||this.constructor(null)},push:bz,sort:[].sort,splice:[].splice};bF.fn.init.prototype=bF.fn;bF.extend=bF.fn.extend=function(){var b9,b2,b0,b1,b6,b7,b5=arguments[0]||{},b4=1,b3=arguments.length,b8=false;if(typeof b5==="boolean"){b8=b5;b5=arguments[1]||{};b4=2}if(typeof b5!=="object"&&!bF.isFunction(b5)){b5={}}if(b3===b4){b5=this;--b4}for(;b40){return}bC.fireWith(av,[bF]);if(bF.fn.trigger){bF(av).trigger("ready").off("ready")}}},bindReady:function(){if(bC){return}bC=bF.Callbacks("once memory");if(av.readyState==="complete"){return setTimeout(bF.ready,1)}if(av.addEventListener){av.addEventListener("DOMContentLoaded",e,false);bb.addEventListener("load",bF.ready,false)}else{if(av.attachEvent){av.attachEvent("onreadystatechange",e);bb.attachEvent("onload",bF.ready);var b0=false;try{b0=bb.frameElement==null}catch(b1){}if(av.documentElement.doScroll&&b0){bw()}}}},isFunction:function(b0){return bF.type(b0)==="function"},isArray:Array.isArray||function(b0){return bF.type(b0)==="array"},isWindow:function(b0){return b0&&typeof b0==="object"&&"setInterval" in b0},isNumeric:function(b0){return !isNaN(parseFloat(b0))&&isFinite(b0)},type:function(b0){return b0==null?String(b0):bx[bL.call(b0)]||"object"},isPlainObject:function(b2){if(!b2||bF.type(b2)!=="object"||b2.nodeType||bF.isWindow(b2)){return false}try{if(b2.constructor&&!bG.call(b2,"constructor")&&!bG.call(b2.constructor.prototype,"isPrototypeOf")){return false}}catch(b1){return false}var b0;for(b0 in b2){}return b0===L||bG.call(b2,b0)},isEmptyObject:function(b1){for(var b0 in b1){return false}return true},error:function(b0){throw new Error(b0)},parseJSON:function(b0){if(typeof b0!=="string"||!b0){return null}b0=bF.trim(b0);if(bb.JSON&&bb.JSON.parse){return bb.JSON.parse(b0)}if(bN.test(b0.replace(bW,"@").replace(bP,"]").replace(bJ,""))){return(new Function("return "+b0))()}bF.error("Invalid JSON: "+b0)},parseXML:function(b2){var b0,b1;try{if(bb.DOMParser){b1=new DOMParser();b0=b1.parseFromString(b2,"text/xml")}else{b0=new ActiveXObject("Microsoft.XMLDOM");b0.async="false";b0.loadXML(b2)}}catch(b3){b0=L}if(!b0||!b0.documentElement||b0.getElementsByTagName("parsererror").length){bF.error("Invalid XML: "+b2)}return b0},noop:function(){},globalEval:function(b0){if(b0&&bM.test(b0)){(bb.execScript||function(b1){bb["eval"].call(bb,b1)})(b0)}},camelCase:function(b0){return b0.replace(bZ,"ms-").replace(bB,bT)},nodeName:function(b1,b0){return b1.nodeName&&b1.nodeName.toUpperCase()===b0.toUpperCase()},each:function(b3,b6,b2){var b1,b4=0,b5=b3.length,b0=b5===L||bF.isFunction(b3);if(b2){if(b0){for(b1 in b3){if(b6.apply(b3[b1],b2)===false){break}}}else{for(;b40&&b0[0]&&b0[b1-1])||b1===0||bF.isArray(b0));if(b3){for(;b21?aJ.call(arguments,0):bG;if(!(--bw)){bC.resolveWith(bC,bx)}}}function bz(bF){return function(bG){bB[bF]=arguments.length>1?aJ.call(arguments,0):bG;bC.notifyWith(bE,bB)}}if(e>1){for(;bv
a";bI=bv.getElementsByTagName("*");bF=bv.getElementsByTagName("a")[0];if(!bI||!bI.length||!bF){return{}}bG=av.createElement("select");bx=bG.appendChild(av.createElement("option"));bE=bv.getElementsByTagName("input")[0];bJ={leadingWhitespace:(bv.firstChild.nodeType===3),tbody:!bv.getElementsByTagName("tbody").length,htmlSerialize:!!bv.getElementsByTagName("link").length,style:/top/.test(bF.getAttribute("style")),hrefNormalized:(bF.getAttribute("href")==="/a"),opacity:/^0.55/.test(bF.style.opacity),cssFloat:!!bF.style.cssFloat,checkOn:(bE.value==="on"),optSelected:bx.selected,getSetAttribute:bv.className!=="t",enctype:!!av.createElement("form").enctype,html5Clone:av.createElement("nav").cloneNode(true).outerHTML!=="<:nav>",submitBubbles:true,changeBubbles:true,focusinBubbles:false,deleteExpando:true,noCloneEvent:true,inlineBlockNeedsLayout:false,shrinkWrapBlocks:false,reliableMarginRight:true};bE.checked=true;bJ.noCloneChecked=bE.cloneNode(true).checked;bG.disabled=true;bJ.optDisabled=!bx.disabled;try{delete bv.test}catch(bC){bJ.deleteExpando=false}if(!bv.addEventListener&&bv.attachEvent&&bv.fireEvent){bv.attachEvent("onclick",function(){bJ.noCloneEvent=false});bv.cloneNode(true).fireEvent("onclick")}bE=av.createElement("input");bE.value="t";bE.setAttribute("type","radio");bJ.radioValue=bE.value==="t";bE.setAttribute("checked","checked");bv.appendChild(bE);bD=av.createDocumentFragment();bD.appendChild(bv.lastChild);bJ.checkClone=bD.cloneNode(true).cloneNode(true).lastChild.checked;bJ.appendChecked=bE.checked;bD.removeChild(bE);bD.appendChild(bv);bv.innerHTML="";if(bb.getComputedStyle){bA=av.createElement("div");bA.style.width="0";bA.style.marginRight="0";bv.style.width="2px";bv.appendChild(bA);bJ.reliableMarginRight=(parseInt((bb.getComputedStyle(bA,null)||{marginRight:0}).marginRight,10)||0)===0}if(bv.attachEvent){for(by in {submit:1,change:1,focusin:1}){bB="on"+by;bw=(bB in bv);if(!bw){bv.setAttribute(bB,"return;");bw=(typeof bv[bB]==="function")}bJ[by+"Bubbles"]=bw}}bD.removeChild(bv);bD=bG=bx=bA=bv=bE=null;b(function(){var bM,bU,bV,bT,bN,bO,bL,bS,bR,e,bP,bQ=av.getElementsByTagName("body")[0];if(!bQ){return}bL=1;bS="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;";bR="visibility:hidden;border:0;";e="style='"+bS+"border:5px solid #000;padding:0;'";bP="
";bM=av.createElement("div");bM.style.cssText=bR+"width:0;height:0;position:static;top:0;margin-top:"+bL+"px";bQ.insertBefore(bM,bQ.firstChild);bv=av.createElement("div");bM.appendChild(bv);bv.innerHTML="
t
";bz=bv.getElementsByTagName("td");bw=(bz[0].offsetHeight===0);bz[0].style.display="";bz[1].style.display="none";bJ.reliableHiddenOffsets=bw&&(bz[0].offsetHeight===0);bv.innerHTML="";bv.style.width=bv.style.paddingLeft="1px";b.boxModel=bJ.boxModel=bv.offsetWidth===2;if(typeof bv.style.zoom!=="undefined"){bv.style.display="inline";bv.style.zoom=1;bJ.inlineBlockNeedsLayout=(bv.offsetWidth===2);bv.style.display="";bv.innerHTML="
";bJ.shrinkWrapBlocks=(bv.offsetWidth!==2)}bv.style.cssText=bS+bR;bv.innerHTML=bP;bU=bv.firstChild;bV=bU.firstChild;bN=bU.nextSibling.firstChild.firstChild;bO={doesNotAddBorder:(bV.offsetTop!==5),doesAddBorderForTableAndCells:(bN.offsetTop===5)};bV.style.position="fixed";bV.style.top="20px";bO.fixedPosition=(bV.offsetTop===20||bV.offsetTop===15);bV.style.position=bV.style.top="";bU.style.overflow="hidden";bU.style.position="relative";bO.subtractsBorderForOverflowNotVisible=(bV.offsetTop===-5);bO.doesNotIncludeMarginInBodyOffset=(bQ.offsetTop!==bL);bQ.removeChild(bM);bv=bM=null;b.extend(bJ,bO)});return bJ})();var aS=/^(?:\{.*\}|\[.*\])$/,aA=/([A-Z])/g;b.extend({cache:{},uuid:0,expando:"jQuery"+(b.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:true,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:true},hasData:function(e){e=e.nodeType?b.cache[e[b.expando]]:e[b.expando];return !!e&&!S(e)},data:function(bx,bv,bz,by){if(!b.acceptData(bx)){return}var bG,bA,bD,bE=b.expando,bC=typeof bv==="string",bF=bx.nodeType,e=bF?b.cache:bx,bw=bF?bx[bE]:bx[bE]&&bE,bB=bv==="events";if((!bw||!e[bw]||(!bB&&!by&&!e[bw].data))&&bC&&bz===L){return}if(!bw){if(bF){bx[bE]=bw=++b.uuid}else{bw=bE}}if(!e[bw]){e[bw]={};if(!bF){e[bw].toJSON=b.noop}}if(typeof bv==="object"||typeof bv==="function"){if(by){e[bw]=b.extend(e[bw],bv)}else{e[bw].data=b.extend(e[bw].data,bv)}}bG=bA=e[bw];if(!by){if(!bA.data){bA.data={}}bA=bA.data}if(bz!==L){bA[b.camelCase(bv)]=bz}if(bB&&!bA[bv]){return bG.events}if(bC){bD=bA[bv];if(bD==null){bD=bA[b.camelCase(bv)]}}else{bD=bA}return bD},removeData:function(bx,bv,by){if(!b.acceptData(bx)){return}var bB,bA,bz,bC=b.expando,bD=bx.nodeType,e=bD?b.cache:bx,bw=bD?bx[bC]:bC;if(!e[bw]){return}if(bv){bB=by?e[bw]:e[bw].data;if(bB){if(!b.isArray(bv)){if(bv in bB){bv=[bv]}else{bv=b.camelCase(bv);if(bv in bB){bv=[bv]}else{bv=bv.split(" ")}}}for(bA=0,bz=bv.length;bA-1){return true}}return false},val:function(bx){var e,bv,by,bw=this[0];if(!arguments.length){if(bw){e=b.valHooks[bw.nodeName.toLowerCase()]||b.valHooks[bw.type];if(e&&"get" in e&&(bv=e.get(bw,"value"))!==L){return bv}bv=bw.value;return typeof bv==="string"?bv.replace(aU,""):bv==null?"":bv}return}by=b.isFunction(bx);return this.each(function(bA){var bz=b(this),bB;if(this.nodeType!==1){return}if(by){bB=bx.call(this,bA,bz.val())}else{bB=bx}if(bB==null){bB=""}else{if(typeof bB==="number"){bB+=""}else{if(b.isArray(bB)){bB=b.map(bB,function(bC){return bC==null?"":bC+""})}}}e=b.valHooks[this.nodeName.toLowerCase()]||b.valHooks[this.type];if(!e||!("set" in e)||e.set(this,bB,"value")===L){this.value=bB}})}});b.extend({valHooks:{option:{get:function(e){var bv=e.attributes.value;return !bv||bv.specified?e.value:e.text}},select:{get:function(e){var bA,bv,bz,bx,by=e.selectedIndex,bB=[],bC=e.options,bw=e.type==="select-one";if(by<0){return null}bv=bw?by:0;bz=bw?by+1:bC.length;for(;bv=0});if(!e.length){bv.selectedIndex=-1}return e}}},attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(bA,bx,bB,bz){var bw,e,by,bv=bA.nodeType; +if(!bA||bv===3||bv===8||bv===2){return}if(bz&&bx in b.attrFn){return b(bA)[bx](bB)}if(typeof bA.getAttribute==="undefined"){return b.prop(bA,bx,bB)}by=bv!==1||!b.isXMLDoc(bA);if(by){bx=bx.toLowerCase();e=b.attrHooks[bx]||(ao.test(bx)?aY:be)}if(bB!==L){if(bB===null){b.removeAttr(bA,bx);return}else{if(e&&"set" in e&&by&&(bw=e.set(bA,bB,bx))!==L){return bw}else{bA.setAttribute(bx,""+bB);return bB}}}else{if(e&&"get" in e&&by&&(bw=e.get(bA,bx))!==null){return bw}else{bw=bA.getAttribute(bx);return bw===null?L:bw}}},removeAttr:function(bx,bz){var by,bA,bv,e,bw=0;if(bz&&bx.nodeType===1){bA=bz.toLowerCase().split(af);e=bA.length;for(;bw=0)}}})});var bd=/^(?:textarea|input|select)$/i,n=/^([^\.]*)?(?:\.(.+))?$/,J=/\bhover(\.\S+)?\b/,aO=/^key/,bf=/^(?:mouse|contextmenu)|click/,T=/^(?:focusinfocus|focusoutblur)$/,U=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,Y=function(e){var bv=U.exec(e);if(bv){bv[1]=(bv[1]||"").toLowerCase();bv[3]=bv[3]&&new RegExp("(?:^|\\s)"+bv[3]+"(?:\\s|$)")}return bv},j=function(bw,e){var bv=bw.attributes||{};return((!e[1]||bw.nodeName.toLowerCase()===e[1])&&(!e[2]||(bv.id||{}).value===e[2])&&(!e[3]||e[3].test((bv["class"]||{}).value)))},bt=function(e){return b.event.special.hover?e:e.replace(J,"mouseenter$1 mouseleave$1")};b.event={add:function(bx,bC,bJ,bA,by){var bD,bB,bK,bI,bH,bF,e,bG,bv,bz,bw,bE;if(bx.nodeType===3||bx.nodeType===8||!bC||!bJ||!(bD=b._data(bx))){return}if(bJ.handler){bv=bJ;bJ=bv.handler}if(!bJ.guid){bJ.guid=b.guid++}bK=bD.events;if(!bK){bD.events=bK={}}bB=bD.handle;if(!bB){bD.handle=bB=function(bL){return typeof b!=="undefined"&&(!bL||b.event.triggered!==bL.type)?b.event.dispatch.apply(bB.elem,arguments):L};bB.elem=bx}bC=b.trim(bt(bC)).split(" ");for(bI=0;bI=0){bG=bG.slice(0,-1);bw=true}if(bG.indexOf(".")>=0){bx=bG.split(".");bG=bx.shift();bx.sort()}if((!bA||b.event.customEvent[bG])&&!b.event.global[bG]){return}bv=typeof bv==="object"?bv[b.expando]?bv:new b.Event(bG,bv):new b.Event(bG);bv.type=bG;bv.isTrigger=true;bv.exclusive=bw;bv.namespace=bx.join(".");bv.namespace_re=bv.namespace?new RegExp("(^|\\.)"+bx.join("\\.(?:.*\\.)?")+"(\\.|$)"):null;by=bG.indexOf(":")<0?"on"+bG:"";if(!bA){e=b.cache;for(bC in e){if(e[bC].events&&e[bC].events[bG]){b.event.trigger(bv,bD,e[bC].handle.elem,true)}}return}bv.result=L;if(!bv.target){bv.target=bA}bD=bD!=null?b.makeArray(bD):[];bD.unshift(bv);bF=b.event.special[bG]||{};if(bF.trigger&&bF.trigger.apply(bA,bD)===false){return}bB=[[bA,bF.bindType||bG]];if(!bJ&&!bF.noBubble&&!b.isWindow(bA)){bI=bF.delegateType||bG;bH=T.test(bI+bG)?bA:bA.parentNode;bz=null;for(;bH;bH=bH.parentNode){bB.push([bH,bI]);bz=bH}if(bz&&bz===bA.ownerDocument){bB.push([bz.defaultView||bz.parentWindow||bb,bI])}}for(bC=0;bCbA){bH.push({elem:this,matches:bz.slice(bA)})}for(bC=0;bC0?this.on(e,null,bx,bw):this.trigger(e)};if(b.attrFn){b.attrFn[e]=true}if(aO.test(e)){b.event.fixHooks[e]=b.event.keyHooks}if(bf.test(e)){b.event.fixHooks[e]=b.event.mouseHooks}}); +/*! + * Sizzle CSS Selector Engine + * Copyright 2011, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * More information: http://sizzlejs.com/ + */ +(function(){var bH=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,bC="sizcache"+(Math.random()+"").replace(".",""),bI=0,bL=Object.prototype.toString,bB=false,bA=true,bK=/\\/g,bO=/\r\n/g,bQ=/\W/;[0,0].sort(function(){bA=false;return 0});var by=function(bV,e,bY,bZ){bY=bY||[];e=e||av;var b1=e;if(e.nodeType!==1&&e.nodeType!==9){return[]}if(!bV||typeof bV!=="string"){return bY}var bS,b3,b6,bR,b2,b5,b4,bX,bU=true,bT=by.isXML(e),bW=[],b0=bV;do{bH.exec("");bS=bH.exec(b0);if(bS){b0=bS[3];bW.push(bS[1]);if(bS[2]){bR=bS[3];break}}}while(bS);if(bW.length>1&&bD.exec(bV)){if(bW.length===2&&bE.relative[bW[0]]){b3=bM(bW[0]+bW[1],e,bZ)}else{b3=bE.relative[bW[0]]?[e]:by(bW.shift(),e);while(bW.length){bV=bW.shift();if(bE.relative[bV]){bV+=bW.shift()}b3=bM(bV,b3,bZ)}}}else{if(!bZ&&bW.length>1&&e.nodeType===9&&!bT&&bE.match.ID.test(bW[0])&&!bE.match.ID.test(bW[bW.length-1])){b2=by.find(bW.shift(),e,bT);e=b2.expr?by.filter(b2.expr,b2.set)[0]:b2.set[0]}if(e){b2=bZ?{expr:bW.pop(),set:bF(bZ)}:by.find(bW.pop(),bW.length===1&&(bW[0]==="~"||bW[0]==="+")&&e.parentNode?e.parentNode:e,bT);b3=b2.expr?by.filter(b2.expr,b2.set):b2.set;if(bW.length>0){b6=bF(b3)}else{bU=false}while(bW.length){b5=bW.pop();b4=b5;if(!bE.relative[b5]){b5=""}else{b4=bW.pop()}if(b4==null){b4=e}bE.relative[b5](b6,b4,bT)}}else{b6=bW=[]}}if(!b6){b6=b3}if(!b6){by.error(b5||bV)}if(bL.call(b6)==="[object Array]"){if(!bU){bY.push.apply(bY,b6)}else{if(e&&e.nodeType===1){for(bX=0;b6[bX]!=null;bX++){if(b6[bX]&&(b6[bX]===true||b6[bX].nodeType===1&&by.contains(e,b6[bX]))){bY.push(b3[bX])}}}else{for(bX=0;b6[bX]!=null;bX++){if(b6[bX]&&b6[bX].nodeType===1){bY.push(b3[bX])}}}}}else{bF(b6,bY)}if(bR){by(bR,b1,bY,bZ);by.uniqueSort(bY)}return bY};by.uniqueSort=function(bR){if(bJ){bB=bA;bR.sort(bJ);if(bB){for(var e=1;e0};by.find=function(bX,e,bY){var bW,bS,bU,bT,bV,bR;if(!bX){return[]}for(bS=0,bU=bE.order.length;bS":function(bW,bR){var bV,bU=typeof bR==="string",bS=0,e=bW.length;if(bU&&!bQ.test(bR)){bR=bR.toLowerCase();for(;bS=0)){if(!bS){e.push(bV)}}else{if(bS){bR[bU]=false}}}}return false},ID:function(e){return e[1].replace(bK,"")},TAG:function(bR,e){return bR[1].replace(bK,"").toLowerCase()},CHILD:function(e){if(e[1]==="nth"){if(!e[2]){by.error(e[0])}e[2]=e[2].replace(/^\+|\s*/g,"");var bR=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(e[2]==="even"&&"2n"||e[2]==="odd"&&"2n+1"||!/\D/.test(e[2])&&"0n+"+e[2]||e[2]);e[2]=(bR[1]+(bR[2]||1))-0;e[3]=bR[3]-0}else{if(e[2]){by.error(e[0])}}e[0]=bI++;return e},ATTR:function(bU,bR,bS,e,bV,bW){var bT=bU[1]=bU[1].replace(bK,"");if(!bW&&bE.attrMap[bT]){bU[1]=bE.attrMap[bT]}bU[4]=(bU[4]||bU[5]||"").replace(bK,"");if(bU[2]==="~="){bU[4]=" "+bU[4]+" "}return bU},PSEUDO:function(bU,bR,bS,e,bV){if(bU[1]==="not"){if((bH.exec(bU[3])||"").length>1||/^\w/.test(bU[3])){bU[3]=by(bU[3],null,null,bR)}else{var bT=by.filter(bU[3],bR,bS,true^bV);if(!bS){e.push.apply(e,bT)}return false}}else{if(bE.match.POS.test(bU[0])||bE.match.CHILD.test(bU[0])){return true}}return bU},POS:function(e){e.unshift(true);return e}},filters:{enabled:function(e){return e.disabled===false&&e.type!=="hidden"},disabled:function(e){return e.disabled===true},checked:function(e){return e.checked===true},selected:function(e){if(e.parentNode){e.parentNode.selectedIndex}return e.selected===true},parent:function(e){return !!e.firstChild},empty:function(e){return !e.firstChild},has:function(bS,bR,e){return !!by(e[3],bS).length},header:function(e){return(/h\d/i).test(e.nodeName)},text:function(bS){var e=bS.getAttribute("type"),bR=bS.type;return bS.nodeName.toLowerCase()==="input"&&"text"===bR&&(e===bR||e===null)},radio:function(e){return e.nodeName.toLowerCase()==="input"&&"radio"===e.type},checkbox:function(e){return e.nodeName.toLowerCase()==="input"&&"checkbox"===e.type},file:function(e){return e.nodeName.toLowerCase()==="input"&&"file"===e.type},password:function(e){return e.nodeName.toLowerCase()==="input"&&"password"===e.type},submit:function(bR){var e=bR.nodeName.toLowerCase();return(e==="input"||e==="button")&&"submit"===bR.type},image:function(e){return e.nodeName.toLowerCase()==="input"&&"image"===e.type},reset:function(bR){var e=bR.nodeName.toLowerCase();return(e==="input"||e==="button")&&"reset"===bR.type},button:function(bR){var e=bR.nodeName.toLowerCase();return e==="input"&&"button"===bR.type||e==="button"},input:function(e){return(/input|select|textarea|button/i).test(e.nodeName)},focus:function(e){return e===e.ownerDocument.activeElement}},setFilters:{first:function(bR,e){return e===0},last:function(bS,bR,e,bT){return bR===bT.length-1},even:function(bR,e){return e%2===0},odd:function(bR,e){return e%2===1 +},lt:function(bS,bR,e){return bRe[3]-0},nth:function(bS,bR,e){return e[3]-0===bR},eq:function(bS,bR,e){return e[3]-0===bR}},filter:{PSEUDO:function(bS,bX,bW,bY){var e=bX[1],bR=bE.filters[e];if(bR){return bR(bS,bW,bX,bY)}else{if(e==="contains"){return(bS.textContent||bS.innerText||bw([bS])||"").indexOf(bX[3])>=0}else{if(e==="not"){var bT=bX[3];for(var bV=0,bU=bT.length;bV=0)}}},ID:function(bR,e){return bR.nodeType===1&&bR.getAttribute("id")===e},TAG:function(bR,e){return(e==="*"&&bR.nodeType===1)||!!bR.nodeName&&bR.nodeName.toLowerCase()===e},CLASS:function(bR,e){return(" "+(bR.className||bR.getAttribute("class"))+" ").indexOf(e)>-1},ATTR:function(bV,bT){var bS=bT[1],e=by.attr?by.attr(bV,bS):bE.attrHandle[bS]?bE.attrHandle[bS](bV):bV[bS]!=null?bV[bS]:bV.getAttribute(bS),bW=e+"",bU=bT[2],bR=bT[4];return e==null?bU==="!=":!bU&&by.attr?e!=null:bU==="="?bW===bR:bU==="*="?bW.indexOf(bR)>=0:bU==="~="?(" "+bW+" ").indexOf(bR)>=0:!bR?bW&&e!==false:bU==="!="?bW!==bR:bU==="^="?bW.indexOf(bR)===0:bU==="$="?bW.substr(bW.length-bR.length)===bR:bU==="|="?bW===bR||bW.substr(0,bR.length+1)===bR+"-":false},POS:function(bU,bR,bS,bV){var e=bR[2],bT=bE.setFilters[e];if(bT){return bT(bU,bS,bR,bV)}}}};var bD=bE.match.POS,bx=function(bR,e){return"\\"+(e-0+1)};for(var bz in bE.match){bE.match[bz]=new RegExp(bE.match[bz].source+(/(?![^\[]*\])(?![^\(]*\))/.source));bE.leftMatch[bz]=new RegExp(/(^(?:.|\r|\n)*?)/.source+bE.match[bz].source.replace(/\\(\d+)/g,bx))}var bF=function(bR,e){bR=Array.prototype.slice.call(bR,0);if(e){e.push.apply(e,bR);return e}return bR};try{Array.prototype.slice.call(av.documentElement.childNodes,0)[0].nodeType}catch(bP){bF=function(bU,bT){var bS=0,bR=bT||[];if(bL.call(bU)==="[object Array]"){Array.prototype.push.apply(bR,bU)}else{if(typeof bU.length==="number"){for(var e=bU.length;bS";e.insertBefore(bR,e.firstChild);if(av.getElementById(bS)){bE.find.ID=function(bU,bV,bW){if(typeof bV.getElementById!=="undefined"&&!bW){var bT=bV.getElementById(bU[1]);return bT?bT.id===bU[1]||typeof bT.getAttributeNode!=="undefined"&&bT.getAttributeNode("id").nodeValue===bU[1]?[bT]:L:[]}};bE.filter.ID=function(bV,bT){var bU=typeof bV.getAttributeNode!=="undefined"&&bV.getAttributeNode("id");return bV.nodeType===1&&bU&&bU.nodeValue===bT}}e.removeChild(bR);e=bR=null})();(function(){var e=av.createElement("div");e.appendChild(av.createComment(""));if(e.getElementsByTagName("*").length>0){bE.find.TAG=function(bR,bV){var bU=bV.getElementsByTagName(bR[1]);if(bR[1]==="*"){var bT=[];for(var bS=0;bU[bS];bS++){if(bU[bS].nodeType===1){bT.push(bU[bS])}}bU=bT}return bU}}e.innerHTML="";if(e.firstChild&&typeof e.firstChild.getAttribute!=="undefined"&&e.firstChild.getAttribute("href")!=="#"){bE.attrHandle.href=function(bR){return bR.getAttribute("href",2)}}e=null})();if(av.querySelectorAll){(function(){var e=by,bT=av.createElement("div"),bS="__sizzle__";bT.innerHTML="

";if(bT.querySelectorAll&&bT.querySelectorAll(".TEST").length===0){return}by=function(b4,bV,bZ,b3){bV=bV||av;if(!b3&&!by.isXML(bV)){var b2=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b4);if(b2&&(bV.nodeType===1||bV.nodeType===9)){if(b2[1]){return bF(bV.getElementsByTagName(b4),bZ)}else{if(b2[2]&&bE.find.CLASS&&bV.getElementsByClassName){return bF(bV.getElementsByClassName(b2[2]),bZ)}}}if(bV.nodeType===9){if(b4==="body"&&bV.body){return bF([bV.body],bZ)}else{if(b2&&b2[3]){var bY=bV.getElementById(b2[3]);if(bY&&bY.parentNode){if(bY.id===b2[3]){return bF([bY],bZ)}}else{return bF([],bZ)}}}try{return bF(bV.querySelectorAll(b4),bZ)}catch(b0){}}else{if(bV.nodeType===1&&bV.nodeName.toLowerCase()!=="object"){var bW=bV,bX=bV.getAttribute("id"),bU=bX||bS,b6=bV.parentNode,b5=/^\s*[+~]/.test(b4);if(!bX){bV.setAttribute("id",bU)}else{bU=bU.replace(/'/g,"\\$&")}if(b5&&b6){bV=bV.parentNode}try{if(!b5||b6){return bF(bV.querySelectorAll("[id='"+bU+"'] "+b4),bZ)}}catch(b1){}finally{if(!bX){bW.removeAttribute("id")}}}}}return e(b4,bV,bZ,b3)};for(var bR in e){by[bR]=e[bR]}bT=null})()}(function(){var e=av.documentElement,bS=e.matchesSelector||e.mozMatchesSelector||e.webkitMatchesSelector||e.msMatchesSelector;if(bS){var bU=!bS.call(av.createElement("div"),"div"),bR=false;try{bS.call(av.documentElement,"[test!='']:sizzle")}catch(bT){bR=true}by.matchesSelector=function(bW,bY){bY=bY.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!by.isXML(bW)){try{if(bR||!bE.match.PSEUDO.test(bY)&&!/!=/.test(bY)){var bV=bS.call(bW,bY);if(bV||!bU||bW.document&&bW.document.nodeType!==11){return bV}}}catch(bX){}}return by(bY,null,null,[bW]).length>0}}})();(function(){var e=av.createElement("div");e.innerHTML="
";if(!e.getElementsByClassName||e.getElementsByClassName("e").length===0){return}e.lastChild.className="e";if(e.getElementsByClassName("e").length===1){return}bE.order.splice(1,0,"CLASS");bE.find.CLASS=function(bR,bS,bT){if(typeof bS.getElementsByClassName!=="undefined"&&!bT){return bS.getElementsByClassName(bR[1])}};e=null})();function bv(bR,bW,bV,bZ,bX,bY){for(var bT=0,bS=bZ.length;bT0){bU=e;break}}}e=e[bR]}bZ[bT]=bU}}}if(av.documentElement.contains){by.contains=function(bR,e){return bR!==e&&(bR.contains?bR.contains(e):true)}}else{if(av.documentElement.compareDocumentPosition){by.contains=function(bR,e){return !!(bR.compareDocumentPosition(e)&16)}}else{by.contains=function(){return false}}}by.isXML=function(e){var bR=(e?e.ownerDocument||e:0).documentElement;return bR?bR.nodeName!=="HTML":false};var bM=function(bS,e,bW){var bV,bX=[],bU="",bY=e.nodeType?[e]:e;while((bV=bE.match.PSEUDO.exec(bS))){bU+=bV[0];bS=bS.replace(bE.match.PSEUDO,"")}bS=bE.relative[bS]?bS+"*":bS;for(var bT=0,bR=bY.length;bT0){for(bB=bA;bB=0:b.filter(e,this).length>0:this.filter(e).length>0)},closest:function(by,bx){var bv=[],bw,e,bz=this[0];if(b.isArray(by)){var bB=1;while(bz&&bz.ownerDocument&&bz!==bx){for(bw=0;bw-1:b.find.matchesSelector(bz,by)){bv.push(bz);break}else{bz=bz.parentNode;if(!bz||!bz.ownerDocument||bz===bx||bz.nodeType===11){break}}}}bv=bv.length>1?b.unique(bv):bv;return this.pushStack(bv,"closest",by)},index:function(e){if(!e){return(this[0]&&this[0].parentNode)?this.prevAll().length:-1}if(typeof e==="string"){return b.inArray(this[0],b(e))}return b.inArray(e.jquery?e[0]:e,this)},add:function(e,bv){var bx=typeof e==="string"?b(e,bv):b.makeArray(e&&e.nodeType?[e]:e),bw=b.merge(this.get(),bx);return this.pushStack(C(bx[0])||C(bw[0])?bw:b.unique(bw))},andSelf:function(){return this.add(this.prevObject)}});function C(e){return !e||!e.parentNode||e.parentNode.nodeType===11}b.each({parent:function(bv){var e=bv.parentNode;return e&&e.nodeType!==11?e:null},parents:function(e){return b.dir(e,"parentNode")},parentsUntil:function(bv,e,bw){return b.dir(bv,"parentNode",bw)},next:function(e){return b.nth(e,2,"nextSibling")},prev:function(e){return b.nth(e,2,"previousSibling")},nextAll:function(e){return b.dir(e,"nextSibling")},prevAll:function(e){return b.dir(e,"previousSibling")},nextUntil:function(bv,e,bw){return b.dir(bv,"nextSibling",bw)},prevUntil:function(bv,e,bw){return b.dir(bv,"previousSibling",bw)},siblings:function(e){return b.sibling(e.parentNode.firstChild,e)},children:function(e){return b.sibling(e.firstChild)},contents:function(e){return b.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:b.makeArray(e.childNodes)}},function(e,bv){b.fn[e]=function(by,bw){var bx=b.map(this,bv,by);if(!ab.test(e)){bw=by}if(bw&&typeof bw==="string"){bx=b.filter(bw,bx)}bx=this.length>1&&!ay[e]?b.unique(bx):bx;if((this.length>1||a9.test(bw))&&aq.test(e)){bx=bx.reverse()}return this.pushStack(bx,e,P.call(arguments).join(","))}});b.extend({filter:function(bw,e,bv){if(bv){bw=":not("+bw+")"}return e.length===1?b.find.matchesSelector(e[0],bw)?[e[0]]:[]:b.find.matches(bw,e)},dir:function(bw,bv,by){var e=[],bx=bw[bv];while(bx&&bx.nodeType!==9&&(by===L||bx.nodeType!==1||!b(bx).is(by))){if(bx.nodeType===1){e.push(bx)}bx=bx[bv]}return e},nth:function(by,e,bw,bx){e=e||1;var bv=0;for(;by;by=by[bw]){if(by.nodeType===1&&++bv===e){break}}return by},sibling:function(bw,bv){var e=[];for(;bw;bw=bw.nextSibling){if(bw.nodeType===1&&bw!==bv){e.push(bw)}}return e}});function aG(bx,bw,e){bw=bw||0;if(b.isFunction(bw)){return b.grep(bx,function(bz,by){var bA=!!bw.call(bz,by,bz);return bA===e})}else{if(bw.nodeType){return b.grep(bx,function(bz,by){return(bz===bw)===e})}else{if(typeof bw==="string"){var bv=b.grep(bx,function(by){return by.nodeType===1});if(bp.test(bw)){return b.filter(bw,bv,!e)}else{bw=b.filter(bw,bv)}}}}return b.grep(bx,function(bz,by){return(b.inArray(bz,bw)>=0)===e})}function a(e){var bw=aR.split("|"),bv=e.createDocumentFragment();if(bv.createElement){while(bw.length){bv.createElement(bw.pop())}}return bv}var aR="abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",ag=/ jQuery\d+="(?:\d+|null)"/g,ar=/^\s+/,R=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,d=/<([\w:]+)/,w=/",""],legend:[1,"
","
"],thead:[1,"","
"],tr:[2,"","
"],td:[3,"","
"],col:[2,"","
"],area:[1,"",""],_default:[0,"",""]},ac=a(av); +ax.optgroup=ax.option;ax.tbody=ax.tfoot=ax.colgroup=ax.caption=ax.thead;ax.th=ax.td;if(!b.support.htmlSerialize){ax._default=[1,"div
","
"]}b.fn.extend({text:function(e){if(b.isFunction(e)){return this.each(function(bw){var bv=b(this);bv.text(e.call(this,bw,bv.text()))})}if(typeof e!=="object"&&e!==L){return this.empty().append((this[0]&&this[0].ownerDocument||av).createTextNode(e))}return b.text(this)},wrapAll:function(e){if(b.isFunction(e)){return this.each(function(bw){b(this).wrapAll(e.call(this,bw))})}if(this[0]){var bv=b(e,this[0].ownerDocument).eq(0).clone(true);if(this[0].parentNode){bv.insertBefore(this[0])}bv.map(function(){var bw=this;while(bw.firstChild&&bw.firstChild.nodeType===1){bw=bw.firstChild}return bw}).append(this)}return this},wrapInner:function(e){if(b.isFunction(e)){return this.each(function(bv){b(this).wrapInner(e.call(this,bv))})}return this.each(function(){var bv=b(this),bw=bv.contents();if(bw.length){bw.wrapAll(e)}else{bv.append(e)}})},wrap:function(e){var bv=b.isFunction(e);return this.each(function(bw){b(this).wrapAll(bv?e.call(this,bw):e)})},unwrap:function(){return this.parent().each(function(){if(!b.nodeName(this,"body")){b(this).replaceWith(this.childNodes)}}).end()},append:function(){return this.domManip(arguments,true,function(e){if(this.nodeType===1){this.appendChild(e)}})},prepend:function(){return this.domManip(arguments,true,function(e){if(this.nodeType===1){this.insertBefore(e,this.firstChild)}})},before:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,false,function(bv){this.parentNode.insertBefore(bv,this)})}else{if(arguments.length){var e=b.clean(arguments);e.push.apply(e,this.toArray());return this.pushStack(e,"before",arguments)}}},after:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,false,function(bv){this.parentNode.insertBefore(bv,this.nextSibling)})}else{if(arguments.length){var e=this.pushStack(this,"after",arguments);e.push.apply(e,b.clean(arguments));return e}}},remove:function(e,bx){for(var bv=0,bw;(bw=this[bv])!=null;bv++){if(!e||b.filter(e,[bw]).length){if(!bx&&bw.nodeType===1){b.cleanData(bw.getElementsByTagName("*"));b.cleanData([bw])}if(bw.parentNode){bw.parentNode.removeChild(bw)}}}return this},empty:function(){for(var e=0,bv;(bv=this[e])!=null;e++){if(bv.nodeType===1){b.cleanData(bv.getElementsByTagName("*"))}while(bv.firstChild){bv.removeChild(bv.firstChild)}}return this},clone:function(bv,e){bv=bv==null?false:bv;e=e==null?bv:e;return this.map(function(){return b.clone(this,bv,e)})},html:function(bx){if(bx===L){return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(ag,""):null}else{if(typeof bx==="string"&&!ae.test(bx)&&(b.support.leadingWhitespace||!ar.test(bx))&&!ax[(d.exec(bx)||["",""])[1].toLowerCase()]){bx=bx.replace(R,"<$1>");try{for(var bw=0,bv=this.length;bw1&&bw0?this.clone(true):this).get();b(bC[bA])[bv](by);bz=bz.concat(by)}return this.pushStack(bz,e,bC.selector)}}});function bg(e){if(typeof e.getElementsByTagName!=="undefined"){return e.getElementsByTagName("*")}else{if(typeof e.querySelectorAll!=="undefined"){return e.querySelectorAll("*")}else{return[]}}}function az(e){if(e.type==="checkbox"||e.type==="radio"){e.defaultChecked=e.checked}}function E(e){var bv=(e.nodeName||"").toLowerCase();if(bv==="input"){az(e)}else{if(bv!=="script"&&typeof e.getElementsByTagName!=="undefined"){b.grep(e.getElementsByTagName("input"),az)}}}function al(e){var bv=av.createElement("div");ac.appendChild(bv);bv.innerHTML=e.outerHTML;return bv.firstChild}b.extend({clone:function(by,bA,bw){var e,bv,bx,bz=b.support.html5Clone||!ah.test("<"+by.nodeName)?by.cloneNode(true):al(by);if((!b.support.noCloneEvent||!b.support.noCloneChecked)&&(by.nodeType===1||by.nodeType===11)&&!b.isXMLDoc(by)){ai(by,bz);e=bg(by);bv=bg(bz);for(bx=0;e[bx];++bx){if(bv[bx]){ai(e[bx],bv[bx])}}}if(bA){t(by,bz);if(bw){e=bg(by);bv=bg(bz);for(bx=0;e[bx];++bx){t(e[bx],bv[bx])}}}e=bv=null;return bz},clean:function(bw,by,bH,bA){var bF;by=by||av;if(typeof by.createElement==="undefined"){by=by.ownerDocument||by[0]&&by[0].ownerDocument||av}var bI=[],bB;for(var bE=0,bz;(bz=bw[bE])!=null;bE++){if(typeof bz==="number"){bz+=""}if(!bz){continue}if(typeof bz==="string"){if(!W.test(bz)){bz=by.createTextNode(bz)}else{bz=bz.replace(R,"<$1>");var bK=(d.exec(bz)||["",""])[1].toLowerCase(),bx=ax[bK]||ax._default,bD=bx[0],bv=by.createElement("div");if(by===av){ac.appendChild(bv)}else{a(by).appendChild(bv)}bv.innerHTML=bx[1]+bz+bx[2];while(bD--){bv=bv.lastChild}if(!b.support.tbody){var e=w.test(bz),bC=bK==="table"&&!e?bv.firstChild&&bv.firstChild.childNodes:bx[1]===""&&!e?bv.childNodes:[];for(bB=bC.length-1;bB>=0;--bB){if(b.nodeName(bC[bB],"tbody")&&!bC[bB].childNodes.length){bC[bB].parentNode.removeChild(bC[bB])}}}if(!b.support.leadingWhitespace&&ar.test(bz)){bv.insertBefore(by.createTextNode(ar.exec(bz)[0]),bv.firstChild)}bz=bv.childNodes}}var bG;if(!b.support.appendChecked){if(bz[0]&&typeof(bG=bz.length)==="number"){for(bB=0;bB=0){return bx+"px"}}else{return bx}}}});if(!b.support.opacity){b.cssHooks.opacity={get:function(bv,e){return au.test((e&&bv.currentStyle?bv.currentStyle.filter:bv.style.filter)||"")?(parseFloat(RegExp.$1)/100)+"":e?"1":""},set:function(by,bz){var bx=by.style,bv=by.currentStyle,e=b.isNumeric(bz)?"alpha(opacity="+bz*100+")":"",bw=bv&&bv.filter||bx.filter||"";bx.zoom=1;if(bz>=1&&b.trim(bw.replace(ak,""))===""){bx.removeAttribute("filter");if(bv&&!bv.filter){return}}bx.filter=ak.test(bw)?bw.replace(ak,e):bw+" "+e}}}b(function(){if(!b.support.reliableMarginRight){b.cssHooks.marginRight={get:function(bw,bv){var e;b.swap(bw,{display:"inline-block"},function(){if(bv){e=Z(bw,"margin-right","marginRight")}else{e=bw.style.marginRight}});return e}}}});if(av.defaultView&&av.defaultView.getComputedStyle){aI=function(by,bw){var bv,bx,e;bw=bw.replace(z,"-$1").toLowerCase();if((bx=by.ownerDocument.defaultView)&&(e=bx.getComputedStyle(by,null))){bv=e.getPropertyValue(bw);if(bv===""&&!b.contains(by.ownerDocument.documentElement,by)){bv=b.style(by,bw)}}return bv}}if(av.documentElement.currentStyle){aX=function(bz,bw){var bA,e,by,bv=bz.currentStyle&&bz.currentStyle[bw],bx=bz.style;if(bv===null&&bx&&(by=bx[bw])){bv=by}if(!bc.test(bv)&&bn.test(bv)){bA=bx.left;e=bz.runtimeStyle&&bz.runtimeStyle.left;if(e){bz.runtimeStyle.left=bz.currentStyle.left}bx.left=bw==="fontSize"?"1em":(bv||0);bv=bx.pixelLeft+"px";bx.left=bA;if(e){bz.runtimeStyle.left=e}}return bv===""?"auto":bv}}Z=aI||aX;function p(by,bw,bv){var bA=bw==="width"?by.offsetWidth:by.offsetHeight,bz=bw==="width"?an:a1,bx=0,e=bz.length; +if(bA>0){if(bv!=="border"){for(;bx)<[^<]*)*<\/script>/gi,q=/^(?:select|textarea)/i,h=/\s+/,br=/([?&])_=[^&]*/,K=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,A=b.fn.load,aa={},r={},aE,s,aV=["*/"]+["*"];try{aE=bl.href}catch(aw){aE=av.createElement("a");aE.href="";aE=aE.href}s=K.exec(aE.toLowerCase())||[];function f(e){return function(by,bA){if(typeof by!=="string"){bA=by;by="*"}if(b.isFunction(bA)){var bx=by.toLowerCase().split(h),bw=0,bz=bx.length,bv,bB,bC;for(;bw=0){var e=bw.slice(by,bw.length);bw=bw.slice(0,by)}var bx="GET";if(bz){if(b.isFunction(bz)){bA=bz;bz=L}else{if(typeof bz==="object"){bz=b.param(bz,b.ajaxSettings.traditional);bx="POST"}}}var bv=this;b.ajax({url:bw,type:bx,dataType:"html",data:bz,complete:function(bC,bB,bD){bD=bC.responseText;if(bC.isResolved()){bC.done(function(bE){bD=bE});bv.html(e?b("
").append(bD.replace(a6,"")).find(e):bD)}if(bA){bv.each(bA,[bD,bB,bC])}}});return this},serialize:function(){return b.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?b.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||q.test(this.nodeName)||aZ.test(this.type))}).map(function(e,bv){var bw=b(this).val();return bw==null?null:b.isArray(bw)?b.map(bw,function(by,bx){return{name:bv.name,value:by.replace(bs,"\r\n")}}):{name:bv.name,value:bw.replace(bs,"\r\n")}}).get()}});b.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(e,bv){b.fn[bv]=function(bw){return this.on(bv,bw)}});b.each(["get","post"],function(e,bv){b[bv]=function(bw,by,bz,bx){if(b.isFunction(by)){bx=bx||bz;bz=by;by=L}return b.ajax({type:bv,url:bw,data:by,success:bz,dataType:bx})}});b.extend({getScript:function(e,bv){return b.get(e,L,bv,"script")},getJSON:function(e,bv,bw){return b.get(e,bv,bw,"json")},ajaxSetup:function(bv,e){if(e){am(bv,b.ajaxSettings)}else{e=bv;bv=b.ajaxSettings}am(bv,e);return bv},ajaxSettings:{url:aE,isLocal:aM.test(s[1]),global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":aV},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":bb.String,"text html":true,"text json":b.parseJSON,"text xml":b.parseXML},flatOptions:{context:true,url:true}},ajaxPrefilter:f(aa),ajaxTransport:f(r),ajax:function(bz,bx){if(typeof bz==="object"){bx=bz;bz=L}bx=bx||{};var bD=b.ajaxSetup({},bx),bS=bD.context||bD,bG=bS!==bD&&(bS.nodeType||bS instanceof b)?b(bS):b.event,bR=b.Deferred(),bN=b.Callbacks("once memory"),bB=bD.statusCode||{},bC,bH={},bO={},bQ,by,bL,bE,bI,bA=0,bw,bK,bJ={readyState:0,setRequestHeader:function(bT,bU){if(!bA){var e=bT.toLowerCase();bT=bO[e]=bO[e]||bT;bH[bT]=bU}return this},getAllResponseHeaders:function(){return bA===2?bQ:null},getResponseHeader:function(bT){var e;if(bA===2){if(!by){by={};while((e=aD.exec(bQ))){by[e[1].toLowerCase()]=e[2]}}e=by[bT.toLowerCase()]}return e===L?null:e},overrideMimeType:function(e){if(!bA){bD.mimeType=e}return this},abort:function(e){e=e||"abort";if(bL){bL.abort(e)}bF(0,e);return this}};function bF(bZ,bU,b0,bW){if(bA===2){return}bA=2;if(bE){clearTimeout(bE)}bL=L;bQ=bW||"";bJ.readyState=bZ>0?4:0;var bT,b4,b3,bX=bU,bY=b0?bj(bD,bJ,b0):L,bV,b2;if(bZ>=200&&bZ<300||bZ===304){if(bD.ifModified){if((bV=bJ.getResponseHeader("Last-Modified"))){b.lastModified[bC]=bV}if((b2=bJ.getResponseHeader("Etag"))){b.etag[bC]=b2}}if(bZ===304){bX="notmodified";bT=true}else{try{b4=G(bD,bY);bX="success";bT=true}catch(b1){bX="parsererror";b3=b1}}}else{b3=bX;if(!bX||bZ){bX="error";if(bZ<0){bZ=0}}}bJ.status=bZ;bJ.statusText=""+(bU||bX);if(bT){bR.resolveWith(bS,[b4,bX,bJ])}else{bR.rejectWith(bS,[bJ,bX,b3])}bJ.statusCode(bB);bB=L;if(bw){bG.trigger("ajax"+(bT?"Success":"Error"),[bJ,bD,bT?b4:b3])}bN.fireWith(bS,[bJ,bX]);if(bw){bG.trigger("ajaxComplete",[bJ,bD]);if(!(--b.active)){b.event.trigger("ajaxStop")}}}bR.promise(bJ);bJ.success=bJ.done;bJ.error=bJ.fail;bJ.complete=bN.add;bJ.statusCode=function(bT){if(bT){var e;if(bA<2){for(e in bT){bB[e]=[bB[e],bT[e]]}}else{e=bT[bJ.status];bJ.then(e,e)}}return this};bD.url=((bz||bD.url)+"").replace(bq,"").replace(c,s[1]+"//");bD.dataTypes=b.trim(bD.dataType||"*").toLowerCase().split(h);if(bD.crossDomain==null){bI=K.exec(bD.url.toLowerCase());bD.crossDomain=!!(bI&&(bI[1]!=s[1]||bI[2]!=s[2]||(bI[3]||(bI[1]==="http:"?80:443))!=(s[3]||(s[1]==="http:"?80:443))))}if(bD.data&&bD.processData&&typeof bD.data!=="string"){bD.data=b.param(bD.data,bD.traditional)}aW(aa,bD,bx,bJ);if(bA===2){return false}bw=bD.global;bD.type=bD.type.toUpperCase();bD.hasContent=!aQ.test(bD.type);if(bw&&b.active++===0){b.event.trigger("ajaxStart")}if(!bD.hasContent){if(bD.data){bD.url+=(M.test(bD.url)?"&":"?")+bD.data;delete bD.data}bC=bD.url;if(bD.cache===false){var bv=b.now(),bP=bD.url.replace(br,"$1_="+bv);bD.url=bP+((bP===bD.url)?(M.test(bD.url)?"&":"?")+"_="+bv:"")}}if(bD.data&&bD.hasContent&&bD.contentType!==false||bx.contentType){bJ.setRequestHeader("Content-Type",bD.contentType)}if(bD.ifModified){bC=bC||bD.url;if(b.lastModified[bC]){bJ.setRequestHeader("If-Modified-Since",b.lastModified[bC])}if(b.etag[bC]){bJ.setRequestHeader("If-None-Match",b.etag[bC])}}bJ.setRequestHeader("Accept",bD.dataTypes[0]&&bD.accepts[bD.dataTypes[0]]?bD.accepts[bD.dataTypes[0]]+(bD.dataTypes[0]!=="*"?", "+aV+"; q=0.01":""):bD.accepts["*"]);for(bK in bD.headers){bJ.setRequestHeader(bK,bD.headers[bK])}if(bD.beforeSend&&(bD.beforeSend.call(bS,bJ,bD)===false||bA===2)){bJ.abort();return false}for(bK in {success:1,error:1,complete:1}){bJ[bK](bD[bK])}bL=aW(r,bD,bx,bJ);if(!bL){bF(-1,"No Transport")}else{bJ.readyState=1;if(bw){bG.trigger("ajaxSend",[bJ,bD])}if(bD.async&&bD.timeout>0){bE=setTimeout(function(){bJ.abort("timeout")},bD.timeout)}try{bA=1;bL.send(bH,bF)}catch(bM){if(bA<2){bF(-1,bM)}else{throw bM}}}return bJ},param:function(e,bw){var bv=[],by=function(bz,bA){bA=b.isFunction(bA)?bA():bA;bv[bv.length]=encodeURIComponent(bz)+"="+encodeURIComponent(bA)};if(bw===L){bw=b.ajaxSettings.traditional}if(b.isArray(e)||(e.jquery&&!b.isPlainObject(e))){b.each(e,function(){by(this.name,this.value)})}else{for(var bx in e){v(bx,e[bx],bw,by)}}return bv.join("&").replace(k,"+")}});function v(bw,by,bv,bx){if(b.isArray(by)){b.each(by,function(bA,bz){if(bv||ap.test(bw)){bx(bw,bz)}else{v(bw+"["+(typeof bz==="object"||b.isArray(bz)?bA:"")+"]",bz,bv,bx)}})}else{if(!bv&&by!=null&&typeof by==="object"){for(var e in by){v(bw+"["+e+"]",by[e],bv,bx)}}else{bx(bw,by)}}}b.extend({active:0,lastModified:{},etag:{}});function bj(bD,bC,bz){var bv=bD.contents,bB=bD.dataTypes,bw=bD.responseFields,by,bA,bx,e;for(bA in bw){if(bA in bz){bC[bw[bA]]=bz[bA]}}while(bB[0]==="*"){bB.shift();if(by===L){by=bD.mimeType||bC.getResponseHeader("content-type")}}if(by){for(bA in bv){if(bv[bA]&&bv[bA].test(by)){bB.unshift(bA);break}}}if(bB[0] in bz){bx=bB[0]}else{for(bA in bz){if(!bB[0]||bD.converters[bA+" "+bB[0]]){bx=bA;break}if(!e){e=bA}}bx=bx||e}if(bx){if(bx!==bB[0]){bB.unshift(bx)}return bz[bx]}}function G(bH,bz){if(bH.dataFilter){bz=bH.dataFilter(bz,bH.dataType)}var bD=bH.dataTypes,bG={},bA,bE,bw=bD.length,bB,bC=bD[0],bx,by,bF,bv,e;for(bA=1;bA=bw.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();bw.animatedProperties[this.prop]=true;for(bA in bw.animatedProperties){if(bw.animatedProperties[bA]!==true){e=false}}if(e){if(bw.overflow!=null&&!b.support.shrinkWrapBlocks){b.each(["","X","Y"],function(bC,bD){bz.style["overflow"+bD]=bw.overflow[bC]})}if(bw.hide){b(bz).hide()}if(bw.hide||bw.show){for(bA in bw.animatedProperties){b.style(bz,bA,bw.orig[bA]);b.removeData(bz,"fxshow"+bA,true);b.removeData(bz,"toggle"+bA,true)}}bv=bw.complete;if(bv){bw.complete=false;bv.call(bz)}}return false}else{if(bw.duration==Infinity){this.now=bx}else{bB=bx-this.startTime;this.state=bB/bw.duration;this.pos=b.easing[bw.animatedProperties[this.prop]](this.state,bB,0,1,bw.duration);this.now=this.start+((this.end-this.start)*this.pos)}this.update()}return true}};b.extend(b.fx,{tick:function(){var bw,bv=b.timers,e=0;for(;e").appendTo(e),bw=bv.css("display");bv.remove();if(bw==="none"||bw===""){if(!a8){a8=av.createElement("iframe");a8.frameBorder=a8.width=a8.height=0}e.appendChild(a8);if(!m||!a8.createElement){m=(a8.contentWindow||a8.contentDocument).document;m.write((av.compatMode==="CSS1Compat"?"":"")+"");m.close()}bv=m.createElement(bx);m.body.appendChild(bv);bw=b.css(bv,"display");e.removeChild(a8)}Q[bx]=bw}return Q[bx]}var V=/^t(?:able|d|h)$/i,ad=/^(?:body|html)$/i;if("getBoundingClientRect" in av.documentElement){b.fn.offset=function(bI){var by=this[0],bB;if(bI){return this.each(function(e){b.offset.setOffset(this,bI,e)})}if(!by||!by.ownerDocument){return null}if(by===by.ownerDocument.body){return b.offset.bodyOffset(by)}try{bB=by.getBoundingClientRect()}catch(bF){}var bH=by.ownerDocument,bw=bH.documentElement;if(!bB||!b.contains(bw,by)){return bB?{top:bB.top,left:bB.left}:{top:0,left:0}}var bC=bH.body,bD=aK(bH),bA=bw.clientTop||bC.clientTop||0,bE=bw.clientLeft||bC.clientLeft||0,bv=bD.pageYOffset||b.support.boxModel&&bw.scrollTop||bC.scrollTop,bz=bD.pageXOffset||b.support.boxModel&&bw.scrollLeft||bC.scrollLeft,bG=bB.top+bv-bA,bx=bB.left+bz-bE;return{top:bG,left:bx}}}else{b.fn.offset=function(bF){var bz=this[0];if(bF){return this.each(function(bG){b.offset.setOffset(this,bF,bG)})}if(!bz||!bz.ownerDocument){return null}if(bz===bz.ownerDocument.body){return b.offset.bodyOffset(bz)}var bC,bw=bz.offsetParent,bv=bz,bE=bz.ownerDocument,bx=bE.documentElement,bA=bE.body,bB=bE.defaultView,e=bB?bB.getComputedStyle(bz,null):bz.currentStyle,bD=bz.offsetTop,by=bz.offsetLeft;while((bz=bz.parentNode)&&bz!==bA&&bz!==bx){if(b.support.fixedPosition&&e.position==="fixed"){break}bC=bB?bB.getComputedStyle(bz,null):bz.currentStyle;bD-=bz.scrollTop;by-=bz.scrollLeft;if(bz===bw){bD+=bz.offsetTop;by+=bz.offsetLeft;if(b.support.doesNotAddBorder&&!(b.support.doesAddBorderForTableAndCells&&V.test(bz.nodeName))){bD+=parseFloat(bC.borderTopWidth)||0;by+=parseFloat(bC.borderLeftWidth)||0}bv=bw;bw=bz.offsetParent}if(b.support.subtractsBorderForOverflowNotVisible&&bC.overflow!=="visible"){bD+=parseFloat(bC.borderTopWidth)||0;by+=parseFloat(bC.borderLeftWidth)||0}e=bC}if(e.position==="relative"||e.position==="static"){bD+=bA.offsetTop;by+=bA.offsetLeft}if(b.support.fixedPosition&&e.position==="fixed"){bD+=Math.max(bx.scrollTop,bA.scrollTop);by+=Math.max(bx.scrollLeft,bA.scrollLeft)}return{top:bD,left:by}}}b.offset={bodyOffset:function(e){var bw=e.offsetTop,bv=e.offsetLeft;if(b.support.doesNotIncludeMarginInBodyOffset){bw+=parseFloat(b.css(e,"marginTop"))||0;bv+=parseFloat(b.css(e,"marginLeft"))||0}return{top:bw,left:bv}},setOffset:function(bx,bG,bA){var bB=b.css(bx,"position");if(bB==="static"){bx.style.position="relative"}var bz=b(bx),bv=bz.offset(),e=b.css(bx,"top"),bE=b.css(bx,"left"),bF=(bB==="absolute"||bB==="fixed")&&b.inArray("auto",[e,bE])>-1,bD={},bC={},bw,by;if(bF){bC=bz.position();bw=bC.top;by=bC.left}else{bw=parseFloat(e)||0;by=parseFloat(bE)||0}if(b.isFunction(bG)){bG=bG.call(bx,bA,bv)}if(bG.top!=null){bD.top=(bG.top-bv.top)+bw}if(bG.left!=null){bD.left=(bG.left-bv.left)+by}if("using" in bG){bG.using.call(bx,bD)}else{bz.css(bD)}}};b.fn.extend({position:function(){if(!this[0]){return null}var bw=this[0],bv=this.offsetParent(),bx=this.offset(),e=ad.test(bv[0].nodeName)?{top:0,left:0}:bv.offset();bx.top-=parseFloat(b.css(bw,"marginTop"))||0;bx.left-=parseFloat(b.css(bw,"marginLeft"))||0;e.top+=parseFloat(b.css(bv[0],"borderTopWidth"))||0;e.left+=parseFloat(b.css(bv[0],"borderLeftWidth"))||0;return{top:bx.top-e.top,left:bx.left-e.left}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||av.body;while(e&&(!ad.test(e.nodeName)&&b.css(e,"position")==="static")){e=e.offsetParent}return e})}});b.each(["Left","Top"],function(bv,e){var bw="scroll"+e;b.fn[bw]=function(bz){var bx,by;if(bz===L){bx=this[0];if(!bx){return null}by=aK(bx);return by?("pageXOffset" in by)?by[bv?"pageYOffset":"pageXOffset"]:b.support.boxModel&&by.document.documentElement[bw]||by.document.body[bw]:bx[bw]}return this.each(function(){by=aK(this);if(by){by.scrollTo(!bv?bz:b(by).scrollLeft(),bv?bz:b(by).scrollTop())}else{this[bw]=bz}})}});function aK(e){return b.isWindow(e)?e:e.nodeType===9?e.defaultView||e.parentWindow:false}b.each(["Height","Width"],function(bv,e){var bw=e.toLowerCase();b.fn["inner"+e]=function(){var bx=this[0];return bx?bx.style?parseFloat(b.css(bx,bw,"padding")):this[bw]():null};b.fn["outer"+e]=function(by){var bx=this[0];return bx?bx.style?parseFloat(b.css(bx,bw,by?"margin":"border")):this[bw]():null};b.fn[bw]=function(bz){var bA=this[0];if(!bA){return bz==null?null:this}if(b.isFunction(bz)){return this.each(function(bE){var bD=b(this);bD[bw](bz.call(this,bE,bD[bw]()))})}if(b.isWindow(bA)){var bB=bA.document.documentElement["client"+e],bx=bA.document.body;return bA.document.compatMode==="CSS1Compat"&&bB||bx&&bx["client"+e]||bB}else{if(bA.nodeType===9){return Math.max(bA.documentElement["client"+e],bA.body["scroll"+e],bA.documentElement["scroll"+e],bA.body["offset"+e],bA.documentElement["offset"+e])}else{if(bz===L){var bC=b.css(bA,bw),by=parseFloat(bC);return b.isNumeric(by)?by:bC}else{return this.css(bw,typeof bz==="string"?bz:bz+"px")}}}}});bb.jQuery=bb.$=b;if(typeof define==="function"&&define.amd&&define.amd.jQuery){define("jquery",[],function(){return b +})}})(window); +/*! + PowerTip - v1.2.0 - 2013-04-03 + http://stevenbenner.github.com/jquery-powertip/ + Copyright (c) 2013 Steven Benner (http://stevenbenner.com/). + Released under MIT license. + https://raw.github.com/stevenbenner/jquery-powertip/master/LICENSE.txt +*/ +(function(a){if(typeof define==="function"&&define.amd){define(["jquery"],a)}else{a(jQuery)}}(function(k){var A=k(document),s=k(window),w=k("body");var n="displayController",e="hasActiveHover",d="forcedOpen",u="hasMouseMove",f="mouseOnToPopup",g="originalTitle",y="powertip",o="powertipjq",l="powertiptarget",E=180/Math.PI;var c={isTipOpen:false,isFixedTipOpen:false,isClosing:false,tipOpenImminent:false,activeHover:null,currentX:0,currentY:0,previousX:0,previousY:0,desyncTimeout:null,mouseTrackingActive:false,delayInProgress:false,windowWidth:0,windowHeight:0,scrollTop:0,scrollLeft:0};var p={none:0,top:1,bottom:2,left:4,right:8};k.fn.powerTip=function(F,N){if(!this.length){return this}if(k.type(F)==="string"&&k.powerTip[F]){return k.powerTip[F].call(this,this,N)}var O=k.extend({},k.fn.powerTip.defaults,F),G=new x(O);h();this.each(function M(){var R=k(this),Q=R.data(y),P=R.data(o),T=R.data(l),S;if(R.data(n)){k.powerTip.destroy(R)}S=R.attr("title");if(!Q&&!T&&!P&&S){R.data(y,S);R.data(g,S);R.removeAttr("title")}R.data(n,new t(R,O,G))});if(!O.manual){this.on({"mouseenter.powertip":function J(P){k.powerTip.show(this,P)},"mouseleave.powertip":function L(){k.powerTip.hide(this)},"focus.powertip":function K(){k.powerTip.show(this)},"blur.powertip":function H(){k.powerTip.hide(this,true)},"keydown.powertip":function I(P){if(P.keyCode===27){k.powerTip.hide(this,true)}}})}return this};k.fn.powerTip.defaults={fadeInTime:200,fadeOutTime:100,followMouse:false,popupId:"powerTip",intentSensitivity:7,intentPollInterval:100,closeDelay:100,placement:"n",smartPlacement:false,offset:10,mouseOnToPopup:false,manual:false};k.fn.powerTip.smartPlacementLists={n:["n","ne","nw","s"],e:["e","ne","se","w","nw","sw","n","s","e"],s:["s","se","sw","n"],w:["w","nw","sw","e","ne","se","n","s","w"],nw:["nw","w","sw","n","s","se","nw"],ne:["ne","e","se","n","s","sw","ne"],sw:["sw","w","nw","s","n","ne","sw"],se:["se","e","ne","s","n","nw","se"],"nw-alt":["nw-alt","n","ne-alt","sw-alt","s","se-alt","w","e"],"ne-alt":["ne-alt","n","nw-alt","se-alt","s","sw-alt","e","w"],"sw-alt":["sw-alt","s","se-alt","nw-alt","n","ne-alt","w","e"],"se-alt":["se-alt","s","sw-alt","ne-alt","n","nw-alt","e","w"]};k.powerTip={show:function z(F,G){if(G){i(G);c.previousX=G.pageX;c.previousY=G.pageY;k(F).data(n).show()}else{k(F).first().data(n).show(true,true)}return F},reposition:function r(F){k(F).first().data(n).resetPosition();return F},hide:function D(G,F){if(G){k(G).first().data(n).hide(F)}else{if(c.activeHover){c.activeHover.data(n).hide(true)}}return G},destroy:function C(G){k(G).off(".powertip").each(function F(){var I=k(this),H=[g,n,e,d];if(I.data(g)){I.attr("title",I.data(g));H.push(y)}I.removeData(H)});return G}};k.powerTip.showTip=k.powerTip.show;k.powerTip.closeTip=k.powerTip.hide;function b(){var F=this;F.top="auto";F.left="auto";F.right="auto";F.bottom="auto";F.set=function(H,G){if(k.isNumeric(G)){F[H]=Math.round(G)}}}function t(K,N,F){var J=null;function L(P,Q){M();if(!K.data(e)){if(!P){c.tipOpenImminent=true;J=setTimeout(function O(){J=null;I()},N.intentPollInterval)}else{if(Q){K.data(d,true)}F.showTip(K)}}}function G(P){M();c.tipOpenImminent=false;if(K.data(e)){K.data(d,false);if(!P){c.delayInProgress=true;J=setTimeout(function O(){J=null;F.hideTip(K);c.delayInProgress=false},N.closeDelay)}else{F.hideTip(K)}}}function I(){var Q=Math.abs(c.previousX-c.currentX),O=Math.abs(c.previousY-c.currentY),P=Q+O;if(P",{id:Q.popupId});if(w.length===0){w=k("body")}w.append(O)}if(Q.followMouse){if(!O.data(u)){A.on("mousemove",M);s.on("scroll",M);O.data(u,true)}}if(Q.mouseOnToPopup){O.on({mouseenter:function L(){if(O.data(f)){if(c.activeHover){c.activeHover.data(n).cancel()}}},mouseleave:function N(){if(c.activeHover){c.activeHover.data(n).hide()}}})}function I(S){S.data(e,true);O.queue(function R(T){H(S);T()})}function H(S){var U;if(!S.data(e)){return}if(c.isTipOpen){if(!c.isClosing){K(c.activeHover)}O.delay(100).queue(function R(V){H(S);V()});return}S.trigger("powerTipPreRender");U=B(S);if(U){O.empty().append(U)}else{return}S.trigger("powerTipRender");c.activeHover=S;c.isTipOpen=true;O.data(f,Q.mouseOnToPopup);if(!Q.followMouse){G(S);c.isFixedTipOpen=true}else{M()}O.fadeIn(Q.fadeInTime,function T(){if(!c.desyncTimeout){c.desyncTimeout=setInterval(J,500)}S.trigger("powerTipOpen")})}function K(R){c.isClosing=true;c.activeHover=null;c.isTipOpen=false;c.desyncTimeout=clearInterval(c.desyncTimeout);R.data(e,false);R.data(d,false);O.fadeOut(Q.fadeOutTime,function S(){var T=new b();c.isClosing=false;c.isFixedTipOpen=false;O.removeClass();T.set("top",c.currentY+Q.offset);T.set("left",c.currentX+Q.offset);O.css(T);R.trigger("powerTipClose")})}function M(){if(!c.isFixedTipOpen&&(c.isTipOpen||(c.tipOpenImminent&&O.data(u)))){var R=O.outerWidth(),V=O.outerHeight(),U=new b(),S,T;U.set("top",c.currentY+Q.offset);U.set("left",c.currentX+Q.offset);S=m(U,R,V);if(S!==p.none){T=a(S);if(T===1){if(S===p.right){U.set("left",c.windowWidth-R)}else{if(S===p.bottom){U.set("top",c.scrollTop+c.windowHeight-V)}}}else{U.set("left",c.currentX-R-Q.offset);U.set("top",c.currentY-V-Q.offset)}}O.css(U)}}function G(S){var R,T;if(Q.smartPlacement){R=k.fn.powerTip.smartPlacementLists[Q.placement];k.each(R,function(U,W){var V=m(F(S,W),O.outerWidth(),O.outerHeight());T=W;if(V===p.none){return false}})}else{F(S,Q.placement);T=Q.placement}O.addClass(T)}function F(U,T){var R=0,S,W,V=new b();V.set("top",0);V.set("left",0);O.css(V);do{S=O.outerWidth();W=O.outerHeight();V=P.compute(U,T,S,W,Q.offset);O.css(V)}while(++R<=5&&(S!==O.outerWidth()||W!==O.outerHeight()));return V}function J(){var R=false;if(c.isTipOpen&&!c.isClosing&&!c.delayInProgress){if(c.activeHover.data(e)===false||c.activeHover.is(":disabled")){R=true}else{if(!v(c.activeHover)&&!c.activeHover.is(":focus")&&!c.activeHover.data(d)){if(O.data(f)){if(!v(O)){R=true}}else{R=true}}}if(R){K(c.activeHover)}}}this.showTip=I;this.hideTip=K;this.resetPosition=G}function q(F){return window.SVGElement&&F[0] instanceof SVGElement}function h(){if(!c.mouseTrackingActive){c.mouseTrackingActive=true;k(function H(){c.scrollLeft=s.scrollLeft();c.scrollTop=s.scrollTop();c.windowWidth=s.width();c.windowHeight=s.height()});A.on("mousemove",i);s.on({resize:function G(){c.windowWidth=s.width();c.windowHeight=s.height()},scroll:function F(){var I=s.scrollLeft(),J=s.scrollTop();if(I!==c.scrollLeft){c.currentX+=I-c.scrollLeft;c.scrollLeft=I}if(J!==c.scrollTop){c.currentY+=J-c.scrollTop;c.scrollTop=J}}})}}function i(F){c.currentX=F.pageX;c.currentY=F.pageY}function v(F){var H=F.offset(),J=F[0].getBoundingClientRect(),I=J.right-J.left,G=J.bottom-J.top;return c.currentX>=H.left&&c.currentX<=H.left+I&&c.currentY>=H.top&&c.currentY<=H.top+G}function B(I){var G=I.data(y),F=I.data(o),K=I.data(l),H,J;if(G){if(k.isFunction(G)){G=G.call(I[0])}J=G}else{if(F){if(k.isFunction(F)){F=F.call(I[0])}if(F.length>0){J=F.clone(true,true)}}else{if(K){H=k("#"+K);if(H.length>0){J=H.html()}}}}return J}function m(M,L,K){var G=c.scrollTop,J=c.scrollLeft,I=G+c.windowHeight,F=J+c.windowWidth,H=p.none;if(M.topI||Math.abs(M.bottom-c.windowHeight)>I){H|=p.bottom}if(M.leftF){H|=p.left}if(M.left+L>F||M.right + + + + + +pva2pva: documentation/mainpage.h Source File + + + + + + + + + +
+
+
+ + + + + +
+
pva2pva +  0 +
+
+ + + + + + + + + + +
+ +
+ + + +
+
+
mainpage.h
+
+
+
1 
+
+ + + + diff --git a/moncache_8cpp_source.html b/moncache_8cpp_source.html new file mode 100644 index 0000000..5738463 --- /dev/null +++ b/moncache_8cpp_source.html @@ -0,0 +1,484 @@ + + + + + + +pva2pva: p2pApp/moncache.cpp Source File + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
moncache.cpp
+
+
+
1 
+
2 #include <epicsAtomic.h>
+
3 #include <errlog.h>
+
4 
+
5 #include <epicsMutex.h>
+
6 #include <epicsTimer.h>
+
7 
+
8 #include <pv/pvAccess.h>
+
9 
+
10 #define epicsExportSharedSymbols
+
11 #include "helper.h"
+
12 #include "pva2pva.h"
+
13 #include "chancache.h"
+
14 
+
15 namespace pva = epics::pvAccess;
+
16 namespace pvd = epics::pvData;
+
17 
+
18 size_t MonitorCacheEntry::num_instances;
+
19 size_t MonitorUser::num_instances;
+
20 
+
21 namespace {
+
22 // fetch scalar value or default
+
23 template<typename T>
+
24 T getS(const pvd::PVStructurePtr& s, const char* name, T dft)
+
25 {
+
26  try{
+
27  return s->getSubFieldT<pvd::PVScalar>(name)->getAs<T>();
+
28  }catch(std::runtime_error& e){
+
29  return dft;
+
30  }
+
31 }
+
32 }
+
33 
+
34 MonitorCacheEntry::MonitorCacheEntry(ChannelCacheEntry *ent, const pvd::PVStructure::shared_pointer& pvr)
+
35  :chan(ent)
+
36  ,bufferSize(getS<pvd::uint32>(pvr, "record._options.queueSize", 2)) // should be same default as pvAccess, but not required
+
37  ,havedata(false)
+
38  ,done(false)
+
39  ,nwakeups(0)
+
40  ,nevents(0)
+
41 {
+
42  epicsAtomicIncrSizeT(&num_instances);
+
43 }
+
44 
+
45 MonitorCacheEntry::~MonitorCacheEntry()
+
46 {
+
47  pvd::Monitor::shared_pointer M;
+
48  M.swap(mon);
+
49  if(M) {
+
50  M->destroy();
+
51  }
+
52  epicsAtomicDecrSizeT(&num_instances);
+
53  const_cast<ChannelCacheEntry*&>(chan) = NULL; // spoil to fault use after free
+
54 }
+
55 
+
56 void
+
57 MonitorCacheEntry::monitorConnect(pvd::Status const & status,
+
58  pvd::MonitorPtr const & monitor,
+
59  pvd::StructureConstPtr const & structure)
+
60 {
+
61  interested_t::vector_type tonotify;
+
62  {
+
63  Guard G(mutex());
+
64  if(typedesc) {
+
65  // we shouldn't have to deal with monitor type change since we
+
66  // destroy() Monitors on Channel disconnect.
+
67  std::cerr<<"monitorConnect() w/ new type. Monitor has outlived it's connection.\n";
+
68  monitor->stop();
+
69  //TODO: unlisten()
+
70  return;
+
71  }
+
72  typedesc = structure;
+
73 
+
74  if(status.isSuccess()) {
+
75  startresult = monitor->start();
+
76  } else {
+
77  startresult = status;
+
78  }
+
79 
+
80  if(startresult.isSuccess()) {
+
81  lastelem.reset(new pvd::MonitorElement(pvd::getPVDataCreate()->createPVStructure(structure)));
+
82  }
+
83 
+
84  // set typedesc and startresult for futured MonitorUsers
+
85  // and copy snapshot of already interested MonitorUsers
+
86  tonotify = interested.lock_vector();
+
87  }
+
88 
+
89  if(!startresult.isSuccess())
+
90  std::cout<<"upstream monitor start() fails\n";
+
91 
+
92  shared_pointer self(weakref); // keeps us alive all MonitorUsers are destroy()ed
+
93 
+
94  for(interested_t::vector_type::const_iterator it = tonotify.begin(),
+
95  end = tonotify.end(); it!=end; ++it)
+
96  {
+
97  pvd::MonitorRequester::shared_pointer req((*it)->req);
+
98  if(req) {
+
99  req->monitorConnect(startresult, *it, structure);
+
100  }
+
101  }
+
102 }
+
103 
+
104 // notificaton from upstream client that its monitor queue has
+
105 // become not empty (transition from empty to not empty)
+
106 // will not be called again unless we completely empty the upstream queue.
+
107 // If we don't then it is our responsibly to schedule more poll().
+
108 // Note: this probably means this is a PVA client RX thread.
+
109 void
+
110 MonitorCacheEntry::monitorEvent(pvd::MonitorPtr const & monitor)
+
111 {
+
112  /* PVA is being tricky, the Monitor* passed to monitorConnect()
+
113  * isn't the same one we see here!
+
114  * The original was a ChannelMonitorImpl, we now see a MonitorStrategyQueue
+
115  * owned by the original, which delegates deserialization and accumulation
+
116  * of deltas into complete events for us.
+
117  * However, we don't want to keep the MonitorStrategyQueue as it's
+
118  * destroy() method is a no-op!
+
119  */
+
120 
+
121  epicsAtomicIncrSizeT(&nwakeups);
+
122 
+
123  shared_pointer self(weakref); // keeps us alive in case all MonitorUsers are destroy()ed
+
124 
+
125  pva::MonitorElementPtr update;
+
126 
+
127  typedef std::vector<MonitorUser::shared_pointer> dsnotify_t;
+
128  dsnotify_t dsnotify;
+
129 
+
130  {
+
131  Guard G(mutex()); // MCE and MU guarded by the same mutex
+
132  if(!havedata)
+
133  havedata = true;
+
134 
+
135  //TODO: flow control, if all MU buffers are full, break before poll()==NULL
+
136  while((update=monitor->poll()))
+
137  {
+
138  epicsAtomicIncrSizeT(&nevents);
+
139 
+
140  lastelem->pvStructurePtr->copyUnchecked(*update->pvStructurePtr,
+
141  *update->changedBitSet);
+
142  *lastelem->changedBitSet = *update->changedBitSet;
+
143  *lastelem->overrunBitSet = *update->overrunBitSet;
+
144  monitor->release(update);
+
145  update.reset();
+
146 
+
147  interested_t::iterator IIT(interested); // recursively locks interested.mutex() (assumes this->mutex() is interestd.mutex())
+
148  for(interested_t::value_pointer pusr = IIT.next(); pusr; pusr = IIT.next())
+
149  {
+
150  MonitorUser *usr = pusr.get();
+
151 
+
152  {
+
153  Guard G(usr->mutex());
+
154  if(usr->initial)
+
155  continue; // no start() yet
+
156  // TODO: track overflow when !running (after stop())?
+
157  if(!usr->running || usr->empty.empty()) {
+
158  usr->inoverflow = true;
+
159 
+
160  /* overrun |= lastelem->overrun // upstream overflows
+
161  * overrun |= changed & lastelem->changed // downstream overflows
+
162  * changed |= lastelem->changed // accumulate changes
+
163  */
+
164 
+
165  *usr->overflowElement->overrunBitSet |= *lastelem->overrunBitSet;
+
166  usr->overflowElement->overrunBitSet->or_and(*usr->overflowElement->changedBitSet,
+
167  *lastelem->changedBitSet);
+
168  *usr->overflowElement->changedBitSet |= *lastelem->changedBitSet;
+
169 
+
170  usr->overflowElement->pvStructurePtr->copyUnchecked(*lastelem->pvStructurePtr,
+
171  *lastelem->changedBitSet);
+
172 
+
173  epicsAtomicIncrSizeT(&usr->ndropped);
+
174  continue;
+
175  }
+
176  // we only come out of overflow when downstream release()s an element to us
+
177  // empty.empty() does not imply inoverflow,
+
178  // however inoverflow does imply empty.empty()
+
179  assert(!usr->inoverflow);
+
180 
+
181  if(usr->filled.empty())
+
182  dsnotify.push_back(pusr);
+
183 
+
184  pvd::MonitorElementPtr elem(usr->empty.front());
+
185 
+
186  *elem->overrunBitSet = *lastelem->overrunBitSet;
+
187  *elem->changedBitSet = *lastelem->changedBitSet;
+
188  // Note: can't use changed mask to optimize this copy since we don't know
+
189  // the state of the free element
+
190  elem->pvStructurePtr->copyUnchecked(*lastelem->pvStructurePtr);
+
191 
+
192  usr->filled.push_back(elem);
+
193  usr->empty.pop_front();
+
194 
+
195  epicsAtomicIncrSizeT(&usr->nevents);
+
196  }
+
197  }
+
198  }
+
199  }
+
200 
+
201  // unlock here, race w/ stop(), unlisten()?
+
202  //TODO: notify from worker thread
+
203 
+
204  FOREACH(dsnotify_t::iterator, it,end,dsnotify) {
+
205  MonitorUser *usr = (*it).get();
+
206  pvd::MonitorRequester::shared_pointer req(usr->req);
+
207  epicsAtomicIncrSizeT(&usr->nwakeups);
+
208  req->monitorEvent(*it); // notify when first item added to empty queue, may call poll(), release(), and others
+
209  }
+
210 }
+
211 
+
212 // notificaton from upstream client that no more monitor updates will come, ever
+
213 void
+
214 MonitorCacheEntry::unlisten(pvd::MonitorPtr const & monitor)
+
215 {
+
216  pvd::Monitor::shared_pointer M;
+
217  interested_t::vector_type tonotify;
+
218  {
+
219  Guard G(mutex());
+
220  M.swap(mon);
+
221  tonotify = interested.lock_vector();
+
222  // assume that upstream won't call monitorEvent() again
+
223 
+
224  // cause future downstream start() to error
+
225  startresult = pvd::Status(pvd::Status::STATUSTYPE_ERROR, "upstream unlisten()");
+
226  }
+
227  if(M) {
+
228  M->destroy();
+
229  }
+
230  FOREACH(interested_t::vector_type::iterator, it, end, tonotify) {
+
231  MonitorUser *usr = it->get();
+
232  pvd::MonitorRequester::shared_pointer req(usr->req);
+
233  if(usr->inuse.empty()) // TODO: what about stopped?
+
234  req->unlisten(*it);
+
235  }
+
236 }
+
237 
+
238 std::string
+
239 MonitorCacheEntry::getRequesterName()
+
240 {
+
241  return "MonitorCacheEntry";
+
242 }
+
243 
+
244 MonitorUser::MonitorUser(const MonitorCacheEntry::shared_pointer &e)
+
245  :entry(e)
+
246  ,initial(true)
+
247  ,running(false)
+
248  ,inoverflow(false)
+
249  ,nevents(0)
+
250  ,ndropped(0)
+
251 {
+
252  epicsAtomicIncrSizeT(&num_instances);
+
253 }
+
254 
+
255 MonitorUser::~MonitorUser()
+
256 {
+
257  epicsAtomicDecrSizeT(&num_instances);
+
258 }
+
259 
+
260 // downstream server closes monitor
+
261 void
+
262 MonitorUser::destroy()
+
263 {
+
264  {
+
265  Guard G(mutex());
+
266  running = false;
+
267  }
+
268 }
+
269 
+
270 pvd::Status
+
271 MonitorUser::start()
+
272 {
+
273  pvd::MonitorRequester::shared_pointer req(this->req.lock());
+
274  if(!req)
+
275  return pvd::Status(pvd::Status::STATUSTYPE_FATAL, "already dead");
+
276 
+
277  bool doEvt = false;
+
278  {
+
279  Guard G(entry->mutex()); // MCE and MU have share a lock
+
280 
+
281  if(!entry->startresult.isSuccess())
+
282  return entry->startresult;
+
283 
+
284  pvd::PVStructurePtr lval;
+
285  if(entry->havedata)
+
286  lval = entry->lastelem->pvStructurePtr;
+
287  pvd::StructureConstPtr typedesc(entry->typedesc);
+
288 
+
289  if(initial) {
+
290  initial = false;
+
291 
+
292  empty.resize(entry->bufferSize);
+
293  pvd::PVDataCreatePtr fact(pvd::getPVDataCreate());
+
294  for(unsigned i=0; i<empty.size(); i++) {
+
295  empty[i].reset(new pvd::MonitorElement(fact->createPVStructure(typedesc)));
+
296  }
+
297 
+
298  // extra element to accumulate updates during overflow
+
299  overflowElement.reset(new pvd::MonitorElement(fact->createPVStructure(typedesc)));
+
300  }
+
301 
+
302  doEvt = filled.empty();
+
303 
+
304  if(lval && !empty.empty()) {
+
305  //already running, notify of initial element
+
306 
+
307  const pva::MonitorElementPtr& elem(empty.front());
+
308  elem->pvStructurePtr->copy(*lval);
+
309  elem->changedBitSet->set(0); // indicate all changed
+
310  elem->overrunBitSet->clear();
+
311  filled.push_back(elem);
+
312  empty.pop_front();
+
313  }
+
314 
+
315  doEvt &= !filled.empty();
+
316  running = true;
+
317  }
+
318  if(doEvt)
+
319  req->monitorEvent(shared_pointer(weakref)); // TODO: worker thread?
+
320  return pvd::Status();
+
321 }
+
322 
+
323 pvd::Status
+
324 MonitorUser::stop()
+
325 {
+
326  Guard G(mutex());
+
327  running = false;
+
328  return pvd::Status::Ok;
+
329 }
+
330 
+
331 pva::MonitorElementPtr
+
332 MonitorUser::poll()
+
333 {
+
334  Guard G(mutex());
+
335  pva::MonitorElementPtr ret;
+
336  if(!filled.empty()) {
+
337  ret = filled.front();
+
338  inuse.insert(ret); // track which ones are out for client use
+
339  filled.pop_front();
+
340  //TODO: track lost buffers w/ wrapped shared_ptr?
+
341  }
+
342  return ret;
+
343 }
+
344 
+
345 void
+
346 MonitorUser::release(pva::MonitorElementPtr const & monitorElement)
+
347 {
+
348  Guard G(mutex());
+
349  //TODO: ifdef DEBUG? (only track inuse when debugging?)
+
350  std::set<epics::pvData::MonitorElementPtr>::iterator it = inuse.find(monitorElement);
+
351  if(it!=inuse.end()) {
+
352  inuse.erase(it);
+
353 
+
354  if(inoverflow) { // leaving overflow condition
+
355 
+
356  // to avoid copy, enqueue the current overflowElement
+
357  // and replace it with the element being release()d
+
358 
+
359  filled.push_back(overflowElement);
+
360  overflowElement = monitorElement;
+
361  overflowElement->changedBitSet->clear();
+
362  overflowElement->overrunBitSet->clear();
+
363 
+
364  inoverflow = false;
+
365  } else {
+
366  // push_back empty element
+
367  empty.push_back(monitorElement);
+
368  }
+
369  } else {
+
370  // oh no, we've been given an element which we didn't give to downstream
+
371  //TODO: check empty and filled lists to see if this is one of ours, of from somewhere else
+
372  throw std::invalid_argument("Can't release MonitorElement not in use");
+
373  }
+
374  // TODO: pipeline window update?
+
375 }
+
376 
+
377 std::string
+
378 MonitorUser::getRequesterName()
+
379 {
+
380  return "MonitorCacheEntry";
+
381 }
+
epics::pvData::MonitorElement::shared_pointer lastelem
Definition: chancache.h:46
+
Definition: chancache.h:103
+
vector_type lock_vector() const
Definition: weakset.h:268
+ +
+ + + + diff --git a/nav_f.png b/nav_f.png new file mode 100644 index 0000000000000000000000000000000000000000..72a58a529ed3a9ed6aa0c51a79cf207e026deee2 GIT binary patch literal 153 zcmeAS@N?(olHy`uVBq!ia0vp^j6iI`!2~2XGqLUlQVE_ejv*C{Z|{2ZH7M}7UYxc) zn!W8uqtnIQ>_z8U literal 0 HcmV?d00001 diff --git a/nav_g.png b/nav_g.png new file mode 100644 index 0000000000000000000000000000000000000000..9681f15d49e4560fbf5fc14b3adea54e38c6b66c GIT binary patch literal 108 zcmeAS@N?(olHy`uVBq!ia0vp^j6lrB!2~3Gi;~lTl(DCaV@L(#+q(;S85DR}4*2g| z=^((u=4>Eg<)o^-(Y^guicitx2d+W03g?~PD7#g^YZ||$ICJJ2mpOhw?F^o-elF{r G5}E)*2_3!w literal 0 HcmV?d00001 diff --git a/nav_h.png b/nav_h.png new file mode 100644 index 0000000000000000000000000000000000000000..33389b101d9cd9b4c98ad286b5d9c46a6671f650 GIT binary patch literal 98 zcmeAS@N?(olHy`uVBq!ia0vp^j6lr8!2~3AUOE6t22D>F$B+ufw|5=67#uj90@pIL wZ=Q8~_Ju`#59=RjDrmm`tMD@M=!-l18IR?&vFVdQ&MBb@0HFXL1|%O$WD@{VPM$7~Ar*{o?;hlAFyLXmaDC0y znK1_#cQqJWPES%4Uujug^TE?jMft$}Eq^WaR~)%f)vSNs&gek&x%A9X9sM + + + + + +pva2pva: Related Pages + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + +
+ + + + +
+ +
+ +
+
+
Related Pages
+
+
+
Here is a list of all related documentation pages:
+
+ + + + diff --git a/pdb_8cpp_source.html b/pdb_8cpp_source.html new file mode 100644 index 0000000..ad247f1 --- /dev/null +++ b/pdb_8cpp_source.html @@ -0,0 +1,936 @@ + + + + + + +pva2pva: pdbApp/pdb.cpp Source File + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
pdb.cpp
+
+
+
1 
+
2 #include <vector>
+
3 #include <utility>
+
4 
+
5 #include <errlog.h>
+
6 #include <epicsString.h>
+
7 #include <epicsAtomic.h>
+
8 
+
9 // printfs in this file will be redirected for capture
+
10 #include <epicsStdio.h>
+
11 
+
12 #include <dbAccess.h>
+
13 #include <dbChannel.h>
+
14 #include <dbStaticLib.h>
+
15 #include <dbNotify.h>
+
16 
+
17 #include <dbEvent.h>
+
18 
+
19 #include <pv/pvAccess.h>
+
20 #include <pv/configuration.h>
+
21 
+
22 #include "helper.h"
+
23 #include "pdbsingle.h"
+
24 #include "pvif.h"
+
25 #ifdef USE_MULTILOCK
+
26 # include "pdbgroup.h"
+
27 #endif
+
28 
+
29 #include <epicsExport.h>
+
30 
+
31 namespace pvd = epics::pvData;
+
32 namespace pva = epics::pvAccess;
+
33 
+
34 int PDBProviderDebug;
+
35 
+
36 namespace {
+
37 
+
38 struct Splitter {
+
39  const char sep, *cur, *end;
+
40  Splitter(const char *s, char sep)
+
41  :sep(sep), cur(s)
+
42  {
+
43  assert(s);
+
44  end = strchr(cur, sep);
+
45  }
+
46  bool operator!() const { return !cur; }
+
47  bool snip(std::string& ret) {
+
48  if(!cur) return false;
+
49  if(end) ret = std::string(cur, end-cur);
+
50  else ret = std::string(cur);
+
51  if(end) {
+
52  cur = end+1;
+
53  end = strchr(cur, sep);
+
54  } else {
+
55  cur = NULL;
+
56  }
+
57  return true;
+
58  }
+
59 };
+
60 
+
61 struct GroupMemberInfo {
+
62  GroupMemberInfo() :putorder(0) {}
+
63 
+
64  std::string pvname, // aka. name passed to dbChannelOpen()
+
65  pvfldname; // PVStructure sub-field
+
66  std::string structID; // ID to assign to sub-field
+
67  std::string type; // mapping type
+
68  typedef std::set<std::string> triggers_t;
+
69  triggers_t triggers; // names in GroupInfo::members_names which are post()d on events from pvfldname
+
70  int putorder;
+
71 
+
72  bool operator<(const GroupMemberInfo& o) const {
+
73  return putorder<o.putorder;
+
74  }
+
75 };
+
76 
+
77 struct GroupInfo {
+
78  GroupInfo(const std::string& name) : name(name),atomic(Unset),hastriggers(false) {}
+
79  std::string name, structID;
+
80 
+
81  typedef std::vector<GroupMemberInfo> members_t;
+
82  members_t members;
+
83 
+
84  typedef std::map<std::string, size_t> members_map_t;
+
85  members_map_t members_map;
+
86 
+
87  typedef std::set<std::string> triggers_set_t;
+
88  typedef std::map<std::string, triggers_set_t> triggers_t;
+
89  triggers_t triggers;
+
90 
+
91  enum tribool {Unset,True,False} atomic;
+
92  bool hastriggers;
+
93 };
+
94 
+
95 // Iterates all PDB records and gathers info() to construct PDB groups
+
96 struct PDBProcessor
+
97 {
+
98  typedef std::map<std::string, GroupInfo> groups_t;
+
99  groups_t groups;
+
100 
+
101  // validate trigger mappings and process into bit map form
+
102  void resolveTriggers()
+
103  {
+
104  FOREACH(groups_t::iterator, it, end, groups) { // for each group
+
105  GroupInfo& info = it->second;
+
106 
+
107  if(info.hastriggers) {
+
108  FOREACH(GroupInfo::triggers_t::iterator, it2, end2, info.triggers) { // for each trigger source
+
109  const std::string& src = it2->first;
+
110  GroupInfo::triggers_set_t& targets = it2->second;
+
111 
+
112  GroupInfo::members_map_t::iterator it2x = info.members_map.find(src);
+
113  if(it2x==info.members_map.end()) {
+
114  fprintf(stderr, "Error: Group \"%s\" defines triggers from non-existant field \"%s\"\n",
+
115  info.name.c_str(), src.c_str());
+
116  continue;
+
117  }
+
118  GroupMemberInfo& srcmem = info.members[it2x->second];
+
119 
+
120  if(PDBProviderDebug>2)
+
121  fprintf(stderr, " pdb trg '%s.%s' -> ",
+
122  info.name.c_str(), src.c_str());
+
123 
+
124  FOREACH(GroupInfo::triggers_set_t::const_iterator, it3, end3, targets) { // for each trigger target
+
125  const std::string& target = *it3;
+
126 
+
127  if(target=="*") {
+
128  for(size_t i=0; i<info.members.size(); i++) {
+
129  if(info.members[i].pvname.empty())
+
130  continue;
+
131  srcmem.triggers.insert(info.members[i].pvfldname);
+
132  if(PDBProviderDebug>2)
+
133  fprintf(stderr, "%s, ", info.members[i].pvfldname.c_str());
+
134  }
+
135 
+
136  } else {
+
137 
+
138  GroupInfo::members_map_t::iterator it3x = info.members_map.find(target);
+
139  if(it3x==info.members_map.end()) {
+
140  fprintf(stderr, "Error: Group \"%s\" defines triggers to non-existant field \"%s\"\n",
+
141  info.name.c_str(), target.c_str());
+
142  continue;
+
143  }
+
144  const GroupMemberInfo& targetmem = info.members[it3x->second];
+
145 
+
146  if(targetmem.pvname.empty()) {
+
147  if(PDBProviderDebug>2)
+
148  fprintf(stderr, "<ignore: %s>, ", targetmem.pvfldname.c_str());
+
149 
+
150  } else {
+
151  // and finally, update source BitSet
+
152  srcmem.triggers.insert(targetmem.pvfldname);
+
153  if(PDBProviderDebug>2)
+
154  fprintf(stderr, "%s, ", targetmem.pvfldname.c_str());
+
155  }
+
156  }
+
157  }
+
158 
+
159  if(PDBProviderDebug>2) fprintf(stderr, "\n");
+
160  }
+
161  } else {
+
162  if(PDBProviderDebug>1) fprintf(stderr, " pdb default triggers for '%s'\n", info.name.c_str());
+
163 
+
164  FOREACH(GroupInfo::members_t::iterator, it2, end2, info.members) {
+
165  GroupMemberInfo& mem = *it2;
+
166  if(mem.pvname.empty())
+
167  continue;
+
168 
+
169  mem.triggers.insert(mem.pvfldname); // default is self trigger
+
170  }
+
171  }
+
172  }
+
173  }
+
174 
+
175  PDBProcessor()
+
176  {
+
177 #ifdef USE_MULTILOCK
+
178  GroupConfig conf;
+
179 #endif
+
180 
+
181  // process info(Q:Group, ...)
+
182  for(pdbRecordIterator rec; !rec.done(); rec.next())
+
183  {
+
184  const char *json = rec.info("Q:group");
+
185  if(!json) continue;
+
186 #ifndef USE_MULTILOCK
+
187  static bool warned;
+
188  if(!warned) {
+
189  warned = true;
+
190  fprintf(stderr, "%s: ignoring info(Q:Group, ...\n", rec.name());
+
191  }
+
192 #endif
+
193  if(PDBProviderDebug>2) {
+
194  fprintf(stderr, "%s: info(Q:Group, ...\n", rec.name());
+
195  }
+
196 
+
197 #ifdef USE_MULTILOCK
+
198  try {
+
199  GroupConfig::parse(json, rec.name(), conf);
+
200  if(!conf.warning.empty())
+
201  fprintf(stderr, "%s: warning(s) from info(Q:group, ...\n%s", rec.name(), conf.warning.c_str());
+
202  }catch(std::exception& e){
+
203  fprintf(stderr, "%s: Error parsing info(\"Q:group\", ... : %s\n",
+
204  rec.record()->name, e.what());
+
205  }
+
206 #endif
+
207  }
+
208 
+
209  // process group definition files
+
210  for(PDBProvider::group_files_t::const_iterator it(PDBProvider::group_files.begin()), end(PDBProvider::group_files.end());
+
211  it != end; ++it)
+
212  {
+
213  std::ifstream jfile(it->c_str());
+
214  if(!jfile.is_open()) {
+
215  fprintf(stderr, "Error opening \"%s\"\n", it->c_str());
+
216  continue;
+
217  }
+
218 
+
219  std::vector<char> contents;
+
220  size_t pos=0u;
+
221  while(true) {
+
222  contents.resize(pos+1024u);
+
223  if(!jfile.read(&contents[pos], contents.size()-pos))
+
224  break;
+
225  pos += jfile.gcount();
+
226  }
+
227 
+
228  if(jfile.bad() || !jfile.eof()) {
+
229  fprintf(stderr, "Error reading \"%s\"\n", it->c_str());
+
230  continue;
+
231  }
+
232 
+
233  contents.push_back('\0');
+
234  const char *json = &contents[0];
+
235 
+
236  if(PDBProviderDebug>2) {
+
237  fprintf(stderr, "Process dbGroup file \"%s\"\n", it->c_str());
+
238  }
+
239 
+
240 #ifdef USE_MULTILOCK
+
241  try {
+
242  GroupConfig::parse(json, NULL, conf);
+
243  if(!conf.warning.empty())
+
244  fprintf(stderr, "warning(s) from dbGroup file \"%s\"\n%s", it->c_str(), conf.warning.c_str());
+
245  }catch(std::exception& e){
+
246  fprintf(stderr, "Error from dbGroup file \"%s\"\n%s", it->c_str(), e.what());
+
247  }
+
248 #endif
+
249  }
+
250 
+
251 #ifdef USE_MULTILOCK
+
252  for(GroupConfig::groups_t::const_iterator git=conf.groups.begin(), gend=conf.groups.end();
+
253  git!=gend; ++git)
+
254  {
+
255  const std::string& grpname = git->first;
+
256  const GroupConfig::Group& grp = git->second;
+
257  try {
+
258 
+
259  if(dbChannelTest(grpname.c_str())==0) {
+
260  fprintf(stderr, "%s : Error: Group name conflicts with record name. Ignoring...\n", grpname.c_str());
+
261  continue;
+
262  }
+
263 
+
264  groups_t::iterator it = groups.find(grpname);
+
265  if(it==groups.end()) {
+
266  // lazy creation of group
+
267  std::pair<groups_t::iterator, bool> ins(groups.insert(std::make_pair(grpname, GroupInfo(grpname))));
+
268  it = ins.first;
+
269  }
+
270  GroupInfo *curgroup = &it->second;
+
271 
+
272  if(!grp.id.empty())
+
273  curgroup->structID = grp.id;
+
274 
+
275  for(GroupConfig::Group::fields_t::const_iterator fit=grp.fields.begin(), fend=grp.fields.end();
+
276  fit!=fend; ++fit)
+
277  {
+
278  const std::string& fldname = fit->first;
+
279  const GroupConfig::Field& fld = fit->second;
+
280 
+
281  if(curgroup->members_map.find(fldname) != curgroup->members_map.end()) {
+
282  fprintf(stderr, "%s.%s Warning: ignoring duplicate mapping %s\n",
+
283  grpname.c_str(), fldname.c_str(),
+
284  fld.channel.c_str());
+
285  continue;
+
286  }
+
287 
+
288  curgroup->members.push_back(GroupMemberInfo());
+
289  GroupMemberInfo& info = curgroup->members.back();
+
290  info.pvname = fld.channel;
+
291  info.pvfldname = fldname;
+
292  info.structID = fld.id;
+
293  info.putorder = fld.putorder;
+
294  info.type = fld.type;
+
295  curgroup->members_map[fldname] = (size_t)-1; // placeholder see below
+
296 
+
297  if(PDBProviderDebug>2) {
+
298  fprintf(stderr, " pdb map '%s.%s' <-> '%s'\n",
+
299  curgroup->name.c_str(),
+
300  curgroup->members.back().pvfldname.c_str(),
+
301  curgroup->members.back().pvname.c_str());
+
302  }
+
303 
+
304  if(!fld.trigger.empty()) {
+
305  GroupInfo::triggers_t::iterator it = curgroup->triggers.find(fldname);
+
306  if(it==curgroup->triggers.end()) {
+
307  std::pair<GroupInfo::triggers_t::iterator, bool> ins(curgroup->triggers.insert(
+
308  std::make_pair(fldname, GroupInfo::triggers_set_t())));
+
309  it = ins.first;
+
310  }
+
311 
+
312  Splitter sep(fld.trigger.c_str(), ',');
+
313  std::string target;
+
314 
+
315  while(sep.snip(target)) {
+
316  curgroup->hastriggers = true;
+
317  it->second.insert(target);
+
318  }
+
319  }
+
320  }
+
321 
+
322  if(grp.atomic_set) {
+
323  GroupInfo::tribool V = grp.atomic ? GroupInfo::True : GroupInfo::False;
+
324 
+
325  if(curgroup->atomic!=GroupInfo::Unset && curgroup->atomic!=V)
+
326  fprintf(stderr, "%s Warning: pdb atomic setting inconsistent '%s'\n",
+
327  grpname.c_str(), curgroup->name.c_str());
+
328 
+
329  curgroup->atomic=V;
+
330 
+
331  if(PDBProviderDebug>2)
+
332  fprintf(stderr, " pdb atomic '%s' %s\n",
+
333  curgroup->name.c_str(), curgroup->atomic ? "YES" : "NO");
+
334  }
+
335 
+
336  }catch(std::exception& e){
+
337  fprintf(stderr, "Error processing Q:group \"%s\" : %s\n",
+
338  grpname.c_str(), e.what());
+
339  }
+
340  }
+
341 
+
342  // re-sort GroupInfo::members to ensure the shorter names appear first
+
343  // allows use of 'existing' PVIFBuilder on leaves.
+
344  for(groups_t::iterator it = groups.begin(), end = groups.end(); it!=end; ++it)
+
345  {
+
346  GroupInfo& info = it->second;
+
347  std::sort(info.members.begin(),
+
348  info.members.end());
+
349 
+
350  info.members_map.clear();
+
351 
+
352  for(size_t i=0, N=info.members.size(); i<N; i++)
+
353  {
+
354  info.members_map[info.members[i].pvfldname] = i;
+
355  }
+
356  }
+
357 
+
358  resolveTriggers();
+
359  // must not re-sort members after this point as resolveTriggers()
+
360  // has stored array indicies.
+
361 #endif
+
362  }
+
363 
+
364 };
+
365 }
+
366 
+
367 size_t PDBProvider::num_instances;
+
368 
+
369 std::list<std::string> PDBProvider::group_files;
+
370 
+
371 PDBProvider::PDBProvider(const epics::pvAccess::Configuration::const_shared_pointer &)
+
372 {
+
373  /* Long view
+
374  * 1. PDBProcessor collects info() tags and builds config of groups and group fields
+
375  * (including those w/o a dbChannel)
+
376  * 2. Build pvd::Structure and discard those w/o dbChannel
+
377  * 3. Build the lockers for the triggers of each group field
+
378  */
+
379  PDBProcessor proc;
+
380  pvd::FieldCreatePtr fcreate(pvd::getFieldCreate());
+
381  pvd::PVDataCreatePtr pvbuilder(pvd::getPVDataCreate());
+
382 
+
383  pvd::StructureConstPtr _options(fcreate->createFieldBuilder()
+
384  ->addNestedStructure("_options")
+
385  ->add("queueSize", pvd::pvUInt)
+
386  ->add("atomic", pvd::pvBoolean)
+
387  ->endNested()
+
388  ->createStructure());
+
389 
+
390 #ifdef USE_MULTILOCK
+
391  // assemble group PVD structure definitions and build dbLockers
+
392  FOREACH(PDBProcessor::groups_t::const_iterator, it, end, proc.groups)
+
393  {
+
394  const GroupInfo &info=it->second;
+
395  try{
+
396  if(persist_pv_map.find(info.name)!=persist_pv_map.end())
+
397  throw std::runtime_error("name already in used");
+
398 
+
399  PDBGroupPV::shared_pointer pv(new PDBGroupPV());
+
400  pv->weakself = pv;
+
401  pv->name = info.name;
+
402 
+
403  pv->pgatomic = info.atomic!=GroupInfo::False; // default true if Unset
+
404  pv->monatomic = info.hastriggers;
+
405 
+
406  // some gymnastics because Info isn't copyable
+
407  pvd::shared_vector<PDBGroupPV::Info> members;
+
408  typedef std::map<std::string, size_t> members_map_t;
+
409  members_map_t members_map;
+
410  {
+
411  size_t nchans = 0;
+
412  for(size_t i=0, N=info.members.size(); i<N; i++)
+
413  if(!info.members[i].pvname.empty())
+
414  nchans++;
+
415  pvd::shared_vector<PDBGroupPV::Info> temp(nchans);
+
416  members.swap(temp);
+
417  }
+
418 
+
419  std::vector<dbCommon*> records(members.size());
+
420 
+
421  pvd::FieldBuilderPtr builder(fcreate->createFieldBuilder());
+
422  builder = builder->add("record", _options);
+
423 
+
424  if(!info.structID.empty())
+
425  builder = builder->setId(info.structID);
+
426 
+
427  for(size_t i=0, J=0, N=info.members.size(); i<N; i++)
+
428  {
+
429  const GroupMemberInfo &mem = info.members[i];
+
430 
+
431  // parse down attachment point to build/traverse structure
+
432  FieldName parts(mem.pvfldname);
+
433 
+
434  if(!parts.empty()) {
+
435  for(size_t j=0; j<parts.size()-1; j++) {
+
436  if(parts[j].isArray())
+
437  builder = builder->addNestedStructureArray(parts[j].name);
+
438  else
+
439  builder = builder->addNestedStructure(parts[j].name);
+
440  }
+
441  if(parts.back().isArray()) {
+
442  builder = builder->addNestedStructureArray(parts.back().name);
+
443  }
+
444  }
+
445 
+
446  if(!mem.structID.empty())
+
447  builder = builder->setId(mem.structID);
+
448 
+
449  DBCH chan;
+
450  if(!mem.pvname.empty()) {
+
451  DBCH temp(mem.pvname);
+
452  unsigned ftype = dbChannelFieldType(temp);
+
453 
+
454  // can't include in multi-locking
+
455  if(ftype>=DBF_INLINK && ftype<=DBF_FWDLINK)
+
456  throw std::runtime_error("Can't include link fields in group");
+
457 
+
458  chan.swap(temp);
+
459  }
+
460 
+
461  std::tr1::shared_ptr<PVIFBuilder> pvifbuilder(PVIFBuilder::create(mem.type, chan.chan));
+
462 
+
463  if(!parts.empty() && !parts.back().isArray())
+
464  builder = pvifbuilder->dtype(builder, parts.back().name);
+
465  else
+
466  builder = pvifbuilder->dtype(builder, "");
+
467 
+
468  if(!parts.empty()) {
+
469  for(size_t j=0; j<parts.size()-1; j++)
+
470  builder = builder->endNested();
+
471  if(parts.back().isArray())
+
472  builder = builder->endNested();
+
473  }
+
474 
+
475  if(!mem.pvname.empty()) {
+
476  members_map[mem.pvfldname] = J;
+
477  PDBGroupPV::Info& info = members[J];
+
478 
+
479  DBCH chan2;
+
480  if(chan.chan && (ellCount(&chan.chan->pre_chain)>0 || ellCount(&chan.chan->post_chain)>0)) {
+
481  DBCH temp(mem.pvname);
+
482  info.chan2.swap(chan2);
+
483  }
+
484 
+
485  info.allowProc = mem.putorder != std::numeric_limits<int>::min();
+
486  info.builder = PTRMOVE(pvifbuilder);
+
487  assert(info.builder.get());
+
488 
+
489  info.attachment.swap(parts);
+
490  info.chan.swap(chan);
+
491 
+
492  // info.triggers populated below
+
493 
+
494  assert(info.chan);
+
495  records[J] = dbChannelRecord(info.chan);
+
496 
+
497  J++;
+
498  }
+
499  }
+
500  pv->members.swap(members);
+
501 
+
502  pv->fielddesc = builder->createStructure();
+
503  pv->complete = pvbuilder->createPVStructure(pv->fielddesc);
+
504 
+
505  pv->complete->getSubFieldT<pvd::PVBoolean>("record._options.atomic")->put(pv->monatomic);
+
506 
+
507  DBManyLock L(&records[0], records.size(), 0);
+
508  pv->locker.swap(L);
+
509 
+
510  // construct locker for records triggered by each member
+
511  for(size_t i=0, J=0, N=info.members.size(); i<N; i++)
+
512  {
+
513  const GroupMemberInfo &mem = info.members[i];
+
514  if(mem.pvname.empty()) continue;
+
515  PDBGroupPV::Info& info = pv->members[J++];
+
516 
+
517  if(mem.triggers.empty()) continue;
+
518 
+
519  std::vector<dbCommon*> trig_records;
+
520  trig_records.reserve(mem.triggers.size());
+
521 
+
522  FOREACH(GroupMemberInfo::triggers_t::const_iterator, it, end, mem.triggers) {
+
523  members_map_t::const_iterator imap(members_map.find(*it));
+
524  if(imap==members_map.end())
+
525  throw std::logic_error("trigger resolution missed map to non-dbChannel");
+
526 
+
527  info.triggers.push_back(imap->second);
+
528  trig_records.push_back(records[imap->second]);
+
529  }
+
530 
+
531  DBManyLock L(&trig_records[0], trig_records.size(), 0);
+
532  info.locker.swap(L);
+
533  }
+
534 
+
535  persist_pv_map[info.name] = pv;
+
536 
+
537  }catch(std::exception& e){
+
538  fprintf(stderr, "%s: Error Group not created: %s\n", info.name.c_str(), e.what());
+
539  }
+
540  }
+
541 #else
+
542  if(!proc.groups.empty()) {
+
543  fprintf(stderr, "Group(s) were defined, but need Base >=3.16.0.2 to function. Ignoring.\n");
+
544  }
+
545 #endif // USE_MULTILOCK
+
546 
+
547  event_context = db_init_events();
+
548  if(!event_context)
+
549  throw std::runtime_error("Failed to create dbEvent context");
+
550  int ret = db_start_events(event_context, "PDB-event", NULL, NULL, epicsThreadPriorityCAServerLow-1);
+
551  if(ret!=DB_EVENT_OK)
+
552  throw std::runtime_error("Failed to stsart dbEvent context");
+
553 
+
554  // setup group monitors
+
555 #ifdef USE_MULTILOCK
+
556  for(persist_pv_map_t::iterator next = persist_pv_map.begin(),
+
557  end = persist_pv_map.end(),
+
558  it = next!=end ? next++ : end;
+
559  it != end; it = next==end ? end : next++)
+
560  {
+
561  const PDBPV::shared_pointer& ppv = it->second;
+
562  PDBGroupPV *pv = dynamic_cast<PDBGroupPV*>(ppv.get());
+
563  if(!pv)
+
564  continue;
+
565  try {
+
566 
+
567  // prepare for monitor
+
568 
+
569  size_t i=0;
+
570  FOREACH(PDBGroupPV::members_t::iterator, it2, end2, pv->members)
+
571  {
+
572  PDBGroupPV::Info& info = *it2;
+
573  info.evt_VALUE.index = info.evt_PROPERTY.index = i++;
+
574  info.evt_VALUE.self = info.evt_PROPERTY.self = pv;
+
575  assert(info.chan);
+
576 
+
577  info.pvif.reset(info.builder->attach(pv->complete, info.attachment));
+
578 
+
579  // TODO: don't need evt_PROPERTY for PVIF plain
+
580  dbChannel *pchan = info.chan2.chan ? info.chan2.chan : info.chan.chan;
+
581  info.evt_PROPERTY.create(event_context, pchan, &pdb_group_event, DBE_PROPERTY);
+
582 
+
583  if(!info.triggers.empty()) {
+
584  info.evt_VALUE.create(event_context, info.chan, &pdb_group_event, DBE_VALUE|DBE_ALARM);
+
585  }
+
586  }
+
587  }catch(std::exception& e){
+
588  fprintf(stderr, "%s: Error during dbEvent setup : %s\n", pv->name.c_str(), e.what());
+
589  persist_pv_map.erase(it);
+
590  }
+
591  }
+
592 #endif // USE_MULTILOCK
+
593  epics::atomic::increment(num_instances);
+
594 }
+
595 
+
596 PDBProvider::~PDBProvider()
+
597 {
+
598  epics::atomic::decrement(num_instances);
+
599 
+
600  destroy();
+
601 }
+
602 
+
603 void PDBProvider::destroy()
+
604 {
+
605  dbEventCtx ctxt = NULL;
+
606 
+
607  persist_pv_map_t ppv;
+
608  {
+
609  epicsGuard<epicsMutex> G(transient_pv_map.mutex());
+
610  persist_pv_map.swap(ppv);
+
611  std::swap(ctxt, event_context);
+
612  }
+
613  ppv.clear(); // indirectly calls all db_cancel_events()
+
614  if(ctxt) db_close_events(ctxt);
+
615 }
+
616 
+
617 std::string PDBProvider::getProviderName() { return "QSRV"; }
+
618 
+
619 namespace {
+
620 struct ChannelFindRequesterNOOP : public pva::ChannelFind
+
621 {
+
622  const pva::ChannelProvider::weak_pointer provider;
+
623  ChannelFindRequesterNOOP(const pva::ChannelProvider::shared_pointer& prov) : provider(prov) {}
+
624  virtual ~ChannelFindRequesterNOOP() {}
+
625  virtual void destroy() {}
+
626  virtual std::tr1::shared_ptr<pva::ChannelProvider> getChannelProvider() { return provider.lock(); }
+
627  virtual void cancel() {}
+
628 };
+
629 }
+
630 
+
631 pva::ChannelFind::shared_pointer
+
632 PDBProvider::channelFind(const std::string &channelName, const pva::ChannelFindRequester::shared_pointer &requester)
+
633 {
+
634  pva::ChannelFind::shared_pointer ret(new ChannelFindRequesterNOOP(shared_from_this()));
+
635 
+
636  bool found = false;
+
637  {
+
638  epicsGuard<epicsMutex> G(transient_pv_map.mutex());
+
639  if(persist_pv_map.find(channelName)!=persist_pv_map.end()
+
640  || transient_pv_map.find(channelName)
+
641  || dbChannelTest(channelName.c_str())==0)
+
642  found = true;
+
643  }
+
644  requester->channelFindResult(pvd::Status(), ret, found);
+
645  return ret;
+
646 }
+
647 
+
648 pva::ChannelFind::shared_pointer
+
649 PDBProvider::channelList(pva::ChannelListRequester::shared_pointer const & requester)
+
650 {
+
651  pva::ChannelFind::shared_pointer ret;
+
652  pvd::PVStringArray::svector names;
+
653  for(pdbRecordIterator rec; !rec.done(); rec.next())
+
654  {
+
655  names.push_back(rec.name());
+
656  }
+
657  {
+
658  epicsGuard<epicsMutex> G(transient_pv_map.mutex());
+
659 
+
660  for(persist_pv_map_t::const_iterator it=persist_pv_map.begin(), end=persist_pv_map.end();
+
661  it != end; ++it)
+
662  {
+
663  names.push_back(it->first);
+
664  }
+
665  }
+
666  // check for duplicates?
+
667  requester->channelListResult(pvd::Status::Ok,
+
668  shared_from_this(),
+
669  pvd::freeze(names), false);
+
670  return ret;
+
671 }
+
672 
+
673 pva::Channel::shared_pointer
+
674 PDBProvider::createChannel(std::string const & channelName,
+
675  pva::ChannelRequester::shared_pointer const & channelRequester,
+
676  short priority)
+
677 {
+
678  return createChannel(channelName, channelRequester, priority, "???");
+
679 }
+
680 
+
681 pva::Channel::shared_pointer
+
682 PDBProvider::createChannel(std::string const & channelName,
+
683  pva::ChannelRequester::shared_pointer const & requester,
+
684  short priority, std::string const & address)
+
685 {
+
686  pva::Channel::shared_pointer ret;
+
687  PDBPV::shared_pointer pv;
+
688  pvd::Status status;
+
689 
+
690  {
+
691  epicsGuard<epicsMutex> G(transient_pv_map.mutex());
+
692 
+
693  pv = transient_pv_map.find(channelName);
+
694  if(!pv) {
+
695  persist_pv_map_t::const_iterator it=persist_pv_map.find(channelName);
+
696  if(it!=persist_pv_map.end()) {
+
697  pv = it->second;
+
698  }
+
699  }
+
700  if(!pv) {
+
701  dbChannel *pchan = dbChannelCreate(channelName.c_str());
+
702  if(pchan) {
+
703  DBCH chan(pchan);
+
704  pv.reset(new PDBSinglePV(chan, shared_from_this()));
+
705  transient_pv_map.insert(channelName, pv);
+
706  PDBSinglePV::shared_pointer spv = std::tr1::static_pointer_cast<PDBSinglePV>(pv);
+
707  spv->weakself = spv;
+
708  spv->activate();
+
709  }
+
710  }
+
711  }
+
712  if(pv) {
+
713  ret = pv->connect(shared_from_this(), requester);
+
714  }
+
715  if(!ret) {
+
716  status = pvd::Status(pvd::Status::STATUSTYPE_ERROR, "not found");
+
717  }
+
718  requester->channelCreated(status, ret);
+
719  return ret;
+
720 }
+
721 
+
722 FieldName::FieldName(const std::string& pv)
+
723 {
+
724  if(pv.empty())
+
725  return;
+
726  Splitter S(pv.c_str(), '.');
+
727  std::string part;
+
728  while(S.snip(part)) {
+
729  if(part.empty())
+
730  throw std::runtime_error("Empty field component in: "+pv);
+
731 
+
732  if(part[part.size()-1]==']') {
+
733  const size_t open = part.find_last_of('['),
+
734  N = part.size();
+
735  bool ok = open!=part.npos;
+
736  epicsUInt32 index = 0;
+
737  for(size_t i=open+1; ok && i<(N-1); i++) {
+
738  ok &= part[i]>='0' && part[i]<='9';
+
739  index = 10*index + part[i] - '0';
+
740  }
+
741  if(!ok)
+
742  throw std::runtime_error("Invalid field array sub-script in : "+pv);
+
743 
+
744  parts.push_back(Component(part.substr(0, open), index));
+
745 
+
746  } else {
+
747  parts.push_back(Component(part));
+
748  }
+
749  }
+
750  if(parts.empty())
+
751  throw std::runtime_error("Empty field name");
+
752 }
+
753 
+
754 epics::pvData::PVFieldPtr
+
755 FieldName::lookup(const epics::pvData::PVStructurePtr& S, epics::pvData::PVField **ppsar) const
+
756 {
+
757  if(ppsar)
+
758  *ppsar = 0;
+
759 
+
760  pvd::PVFieldPtr ret = S;
+
761  for(size_t i=0, N=parts.size(); i<N; i++) {
+
762  pvd::PVStructure* parent = dynamic_cast<pvd::PVStructure*>(ret.get());
+
763  if(!parent)
+
764  throw std::runtime_error("mid-field is not structure");
+
765 
+
766  ret = parent->getSubFieldT(parts[i].name);
+
767 
+
768  if(parts[i].isArray()) {
+
769  pvd::PVStructureArray* sarr = dynamic_cast<pvd::PVStructureArray*>(ret.get());
+
770  if(!sarr)
+
771  throw std::runtime_error("indexed field is not structure array");
+
772 
+
773  if(ppsar && !*ppsar)
+
774  *ppsar = sarr;
+
775 
+
776  pvd::PVStructureArray::const_svector V(sarr->view());
+
777 
+
778  if(V.size()<=parts[i].index || !V[parts[i].index]) {
+
779  // automatic re-size and ensure non-null
+
780  V.clear(); // drop our extra ref so that reuse() might avoid a copy
+
781  pvd::PVStructureArray::svector E(sarr->reuse());
+
782 
+
783  if(E.size()<=parts[i].index)
+
784  E.resize(parts[i].index+1);
+
785 
+
786  if(!E[parts[i].index])
+
787  E[parts[i].index] = pvd::getPVDataCreate()->createPVStructure(sarr->getStructureArray()->getStructure());
+
788 
+
789  ret = E[parts[i].index];
+
790 
+
791  sarr->replace(pvd::freeze(E));
+
792 
+
793  } else {
+
794  ret = V[parts[i].index];
+
795  }
+
796  }
+
797  }
+
798  return ret;
+
799 }
+
800 
+
801 void FieldName::show() const
+
802 {
+
803  if(parts.empty()) {
+
804  printf("/");
+
805  return;
+
806  }
+
807 
+
808  bool first = true;
+
809  for(size_t i=0, N=parts.size(); i<N; i++)
+
810  {
+
811  if(!first) {
+
812  printf(".");
+
813  } else {
+
814  first = false;
+
815  }
+
816  if(parts[i].isArray())
+
817  printf("%s[%u]", parts[i].name.c_str(), (unsigned)parts[i].index);
+
818  else
+
819  printf("%s", parts[i].name.c_str());
+
820  }
+
821 }
+
822 
+
823 extern "C" {
+
824 epicsExportAddress(int, PDBProviderDebug);
+
825 }
+ +
Definition: pvif.h:81
+ +
epicsMutex & mutex() const
Definition: weakmap.h:276
+ +
value_pointer find(const K &k) const
Definition: weakmap.h:215
+ + +
value_pointer insert(const K &k, value_pointer &v)
Definition: weakmap.h:230
+ + + +
+ + + + diff --git a/pdb_8h_source.html b/pdb_8h_source.html new file mode 100644 index 0000000..9d8e393 --- /dev/null +++ b/pdb_8h_source.html @@ -0,0 +1,196 @@ + + + + + + +pva2pva: pdbApp/pdb.h Source File + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
pdb.h
+
+
+
1 #ifndef PDB_H
+
2 #define PDB_H
+
3 
+
4 #include <dbEvent.h>
+
5 #include <asLib.h>
+
6 
+
7 #include <pv/configuration.h>
+
8 #include <pv/pvAccess.h>
+
9 
+
10 #include "weakmap.h"
+
11 
+
12 #include <pv/qsrv.h>
+
13 
+
14 struct PDBProvider;
+
15 
+
16 struct PDBPV
+
17 {
+
18  POINTER_DEFINITIONS(PDBPV);
+
19 
+
20  epics::pvData::StructureConstPtr fielddesc;
+
21 
+
22  PDBPV() {}
+
23  virtual ~PDBPV() {}
+
24 
+
25  virtual
+
26  epics::pvAccess::Channel::shared_pointer
+
27  connect(const std::tr1::shared_ptr<PDBProvider>& prov,
+
28  const epics::pvAccess::ChannelRequester::shared_pointer& req) =0;
+
29 
+
30  // print info to stdout (with iocsh redirection)
+
31  virtual void show(int lvl) {}
+
32 };
+
33 
+
34 struct QSRV_API PDBProvider : public epics::pvAccess::ChannelProvider,
+
35  public epics::pvAccess::ChannelFind,
+
36  public std::tr1::enable_shared_from_this<PDBProvider>
+
37 {
+
38  POINTER_DEFINITIONS(PDBProvider);
+
39 
+
40  explicit PDBProvider(const epics::pvAccess::Configuration::const_shared_pointer& =epics::pvAccess::Configuration::const_shared_pointer());
+
41  virtual ~PDBProvider();
+
42 
+
43  // ChannelProvider
+
44  virtual void destroy() OVERRIDE FINAL;
+
45  virtual std::string getProviderName() OVERRIDE FINAL;
+
46  virtual epics::pvAccess::ChannelFind::shared_pointer channelFind(std::string const & channelName,
+
47  epics::pvAccess::ChannelFindRequester::shared_pointer const & channelFindRequester) OVERRIDE FINAL;
+
48  virtual epics::pvAccess::ChannelFind::shared_pointer channelList(epics::pvAccess::ChannelListRequester::shared_pointer const & channelListRequester) OVERRIDE FINAL;
+
49  virtual epics::pvAccess::Channel::shared_pointer createChannel(std::string const & channelName,
+
50  epics::pvAccess::ChannelRequester::shared_pointer const & channelRequester,
+
51  short priority = PRIORITY_DEFAULT) OVERRIDE FINAL;
+
52  virtual epics::pvAccess::Channel::shared_pointer createChannel(std::string const & channelName,
+
53  epics::pvAccess::ChannelRequester::shared_pointer const & channelRequester,
+
54  short priority, std::string const & address) OVERRIDE FINAL;
+
55 
+
56  // ChannelFind
+
57  virtual std::tr1::shared_ptr<ChannelProvider> getChannelProvider() OVERRIDE FINAL { return shared_from_this(); }
+
58  virtual void cancel() OVERRIDE FINAL {/* our channelFind() is synchronous, so nothing to cancel */}
+
59 
+
60  typedef std::map<std::string, PDBPV::shared_pointer> persist_pv_map_t;
+
61  persist_pv_map_t persist_pv_map;
+
62 
+ +
64  transient_pv_map_t transient_pv_map;
+
65 
+
66  dbEventCtx event_context;
+
67 
+
68  typedef std::list<std::string> group_files_t;
+
69  static group_files_t group_files;
+
70 
+
71  static size_t num_instances;
+
72 };
+
73 
+
74 QSRV_API
+
75 void QSRVRegistrar_counters();
+
76 
+
77 class AsWritePvt {
+
78  void * pvt;
+
79 public:
+
80  AsWritePvt() :pvt(NULL) {}
+
81  explicit AsWritePvt(void * pvt): pvt(pvt) {}
+
82  ~AsWritePvt() {
+
83  asTrapWriteAfterWrite(pvt);
+
84  }
+
85  void swap(AsWritePvt& o) {
+
86  std::swap(pvt, o.pvt);
+
87  }
+
88 private:
+
89  AsWritePvt(const AsWritePvt&);
+
90  AsWritePvt& operator=(const AsWritePvt&);
+
91 };
+
92 
+
93 #endif // PDB_H
+
Definition: pdb.h:77
+
Definition: pdb.h:16
+ + +
+ + + + diff --git a/pdbgroup_8cpp_source.html b/pdbgroup_8cpp_source.html new file mode 100644 index 0000000..adc6fe2 --- /dev/null +++ b/pdbgroup_8cpp_source.html @@ -0,0 +1,587 @@ + + + + + + +pva2pva: pdbApp/pdbgroup.cpp Source File + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
pdbgroup.cpp
+
+
+
1 
+
2 #include <stdio.h>
+
3 
+
4 // rediect stdio/stderr for iocsh
+
5 #include <epicsStdio.h>
+
6 
+
7 #include <epicsAtomic.h>
+
8 #include <dbAccess.h>
+
9 #include <dbChannel.h>
+
10 #include <dbStaticLib.h>
+
11 #include <asLib.h>
+
12 
+
13 #include <pv/pvAccess.h>
+
14 #include <pv/configuration.h>
+
15 #include <pv/epicsException.h>
+
16 
+
17 #include "helper.h"
+
18 #include "pdbgroup.h"
+
19 #include "pdb.h"
+
20 
+
21 namespace pvd = epics::pvData;
+
22 namespace pva = epics::pvAccess;
+
23 
+
24 size_t PDBGroupPV::num_instances;
+
25 size_t PDBGroupChannel::num_instances;
+
26 size_t PDBGroupPut::num_instances;
+
27 size_t PDBGroupMonitor::num_instances;
+
28 
+
29 typedef epicsGuard<epicsMutex> Guard;
+
30 
+
31 void pdb_group_event(void *user_arg, struct dbChannel *chan,
+
32  int eventsRemaining, struct db_field_log *pfl)
+
33 {
+
34  DBEvent *evt=(DBEvent*)user_arg;
+
35  unsigned idx = evt->index;
+
36  try{
+
37  PDBGroupPV::shared_pointer self(std::tr1::static_pointer_cast<PDBGroupPV>(((PDBGroupPV*)evt->self)->shared_from_this()));
+
38  PDBGroupPV::Info& info = self->members[idx];
+
39 
+
40  PDBGroupPV::interested_remove_t temp;
+
41  {
+
42 
+
43  Guard G(self->lock);
+
44 
+
45  self->scratch.clear();
+
46  if(evt->dbe_mask&DBE_PROPERTY || !self->monatomic)
+
47  {
+
48  DBScanLocker L(dbChannelRecord(info.chan));
+
49  self->members[idx].pvif->put(self->scratch, evt->dbe_mask, pfl);
+
50 
+
51  } else {
+
52  // we ignore 'pfl' (and the dbEvent queue) when collecting an atomic snapshot
+
53 
+
54  DBManyLocker L(info.locker); // lock only those records in the triggers list
+
55  FOREACH(PDBGroupPV::Info::triggers_t::const_iterator, it, end, info.triggers)
+
56  {
+
57  size_t i = *it;
+
58  // go get a consistent snapshot we must ignore the db_field_log which came through the dbEvent buffer
+
59  LocalFL FL(NULL, self->members[i].chan); // create a read fl if needed
+
60  self->members[i].pvif->put(self->scratch, evt->dbe_mask, FL.pfl);
+
61  }
+
62  }
+
63 
+
64  if(!(evt->dbe_mask&DBE_PROPERTY)) {
+
65  if(!info.had_initial_VALUE) {
+
66  info.had_initial_VALUE = true;
+
67  assert(self->initial_waits>0);
+
68  self->initial_waits--;
+
69  }
+
70  } else {
+
71  if(!info.had_initial_PROPERTY) {
+
72  info.had_initial_PROPERTY = true;
+
73  assert(self->initial_waits>0);
+
74  self->initial_waits--;
+
75  }
+
76  }
+
77 
+
78  if(self->initial_waits==0) {
+
79  self->interested_iterating = true;
+
80 
+
81  FOREACH(PDBGroupPV::interested_t::const_iterator, it, end, self->interested) {
+
82  PDBGroupMonitor& mon = **it;
+
83  mon.post(G, self->scratch); // G unlocked
+
84  }
+
85 
+
86  {
+
87  Guard G(self->lock);
+
88 
+
89  assert(self->interested_iterating);
+
90 
+
91  while(!self->interested_add.empty()) {
+
92  PDBGroupPV::interested_t::iterator first(self->interested_add.begin());
+
93  self->interested.insert(*first);
+
94  self->interested_add.erase(first);
+
95  }
+
96 
+
97  temp.swap(self->interested_remove);
+
98  for(PDBGroupPV::interested_remove_t::iterator it(temp.begin()),
+
99  end(temp.end()); it != end; ++it)
+
100  {
+
101  self->interested.erase(static_cast<PDBGroupMonitor*>(it->get()));
+
102  }
+
103 
+
104  self->interested_iterating = false;
+
105 
+
106  self->finalizeMonitor();
+
107  }
+
108  }
+
109  }
+
110 
+
111  }catch(std::tr1::bad_weak_ptr&){
+
112  /* We are racing destruction of the PDBGroupPV, but things are ok.
+
113  * The destructor is running, but has not completed db_cancel_event()
+
114  * so storage is still valid.
+
115  * Just do nothing
+
116  */
+
117  }catch(std::exception& e){
+
118  std::cerr<<"Unhandled exception in pdb_group_event(): "<<e.what()<<"\n"
+
119  <<SHOW_EXCEPTION(e)<<"\n";
+
120  }
+
121 }
+
122 
+
123 PDBGroupPV::PDBGroupPV()
+
124  :pgatomic(false)
+
125  ,monatomic(false)
+
126  ,interested_iterating(false)
+
127  ,initial_waits(0)
+
128 {
+
129  epics::atomic::increment(num_instances);
+
130 }
+
131 
+
132 PDBGroupPV::~PDBGroupPV()
+
133 {
+
134  epics::atomic::decrement(num_instances);
+
135 }
+
136 
+
137 pva::Channel::shared_pointer
+
138 PDBGroupPV::connect(const std::tr1::shared_ptr<PDBProvider>& prov,
+
139  const pva::ChannelRequester::shared_pointer& req)
+
140 {
+
141  PDBGroupChannel::shared_pointer ret(new PDBGroupChannel(shared_from_this(), prov, req));
+
142 
+
143  ret->cred.update(req);
+
144 
+
145  ret->aspvt.resize(members.size());
+
146  for(size_t i=0, N=members.size(); i<N; i++)
+
147  {
+
148  ret->aspvt[i].add(members[i].chan, ret->cred);
+
149  }
+
150 
+
151  return ret;
+
152 }
+
153 
+
154 // caller must not hold lock
+
155 void PDBGroupPV::addMonitor(PDBGroupMonitor *mon)
+
156 {
+
157  Guard G(lock);
+
158  if(interested.empty() && interested_add.empty()) {
+
159  // first monitor
+
160  // start subscriptions
+
161 
+
162  size_t ievts = 0;
+
163  for(size_t i=0; i<members.size(); i++) {
+
164  PDBGroupPV::Info& info = members[i];
+
165 
+
166  if(!!info.evt_VALUE) {
+
167  db_event_enable(info.evt_VALUE.subscript);
+
168  db_post_single_event(info.evt_VALUE.subscript);
+
169  ievts++;
+
170  info.had_initial_VALUE = false;
+
171  } else {
+
172  info.had_initial_VALUE = true;
+
173  }
+
174  assert(info.evt_PROPERTY.subscript);
+
175  db_event_enable(info.evt_PROPERTY.subscript);
+
176  db_post_single_event(info.evt_PROPERTY.subscript);
+
177  ievts++;
+
178  info.had_initial_PROPERTY = false;
+
179  }
+
180  initial_waits = ievts;
+
181 
+
182  } else if(initial_waits==0) {
+
183  // new subscriber and already had initial update
+
184  mon->post(G);
+
185  } // else new subscriber, but no initial update. so just wait
+
186 
+
187  if(interested_iterating)
+
188  interested_add.insert(mon);
+
189  else
+
190  interested.insert(mon);
+
191 }
+
192 
+
193 // caller must not hold lock
+
194 void PDBGroupPV::removeMonitor(PDBGroupMonitor *mon)
+
195 {
+
196  Guard G(lock);
+
197 
+
198  if(interested_add.erase(mon)) {
+
199  // and+remove while iterating. no-op
+
200 
+
201  } else if(interested_iterating) {
+
202  // keep the monitor alive until we've finished iterating
+
203  interested_remove.insert(mon->shared_from_this());
+
204 
+
205  } else {
+
206  interested.erase(mon);
+
207  finalizeMonitor();
+
208  }
+
209 }
+
210 
+
211 // must hold lock
+
212 void PDBGroupPV::finalizeMonitor()
+
213 {
+
214  assert(!interested_iterating);
+
215 
+
216  if(!interested.empty())
+
217  return;
+
218 
+
219  // last subscriber
+
220  for(size_t i=0; i<members.size(); i++) {
+
221  PDBGroupPV::Info& info = members[i];
+
222 
+
223  if(!!info.evt_VALUE) {
+
224  db_event_disable(info.evt_VALUE.subscript);
+
225  }
+
226  db_event_disable(info.evt_PROPERTY.subscript);
+
227  }
+
228 }
+
229 
+
230 void PDBGroupPV::show(int lvl)
+
231 {
+
232  // no locking as we only print things which are const after initialization
+
233 
+
234  printf(" Atomic Get/Put:%s Monitor:%s Members:%zu\n",
+
235  pgatomic?"yes":"no", monatomic?"yes":"no", members.size());
+
236 
+
237  if(lvl<=1)
+
238  return;
+
239 
+
240  for(members_t::const_iterator it(members.begin()), end(members.end());
+
241  it != end; ++it)
+
242  {
+
243  const Info& info = *it;
+
244  printf(" ");
+
245  info.attachment.show(); // printf()s
+
246  printf("\t<-> %s\n", dbChannelName(info.chan));
+
247  }
+
248 }
+
249 
+
250 
+
251 PDBGroupChannel::PDBGroupChannel(const PDBGroupPV::shared_pointer& pv,
+
252  const std::tr1::shared_ptr<pva::ChannelProvider>& prov,
+
253  const pva::ChannelRequester::shared_pointer& req)
+
254  :BaseChannel(pv->name, prov, req, pv->fielddesc)
+
255  ,pv(pv)
+
256 {
+
257  epics::atomic::increment(num_instances);
+
258 }
+
259 
+
260 PDBGroupChannel::~PDBGroupChannel()
+
261 {
+
262  epics::atomic::decrement(num_instances);
+
263 }
+
264 
+
265 void PDBGroupChannel::printInfo(std::ostream& out)
+
266 {
+
267  out<<"PDBGroupChannel";
+
268 }
+
269 
+
270 pva::ChannelPut::shared_pointer
+
271 PDBGroupChannel::createChannelPut(
+
272  pva::ChannelPutRequester::shared_pointer const & requester,
+
273  pvd::PVStructure::shared_pointer const & pvRequest)
+
274 {
+
275  PDBGroupPut::shared_pointer ret(new PDBGroupPut(shared_from_this(), requester, pvRequest));
+
276  requester->channelPutConnect(pvd::Status(), ret, fielddesc);
+
277  return ret;
+
278 }
+
279 
+
280 pva::Monitor::shared_pointer
+
281 PDBGroupChannel::createMonitor(
+
282  pva::MonitorRequester::shared_pointer const & requester,
+
283  pvd::PVStructure::shared_pointer const & pvRequest)
+
284 {
+
285  PDBGroupMonitor::shared_pointer ret(new PDBGroupMonitor(pv->shared_from_this(), requester, pvRequest));
+
286  ret->weakself = ret;
+
287  assert(!!pv->complete);
+
288  guard_t G(pv->lock);
+
289  ret->connect(G, pv->complete);
+
290  return ret;
+
291 }
+
292 
+
293 
+
294 
+
295 PDBGroupPut::PDBGroupPut(const PDBGroupChannel::shared_pointer& channel,
+
296  const requester_type::shared_pointer& requester,
+
297  const epics::pvData::PVStructure::shared_pointer &pvReq)
+
298  :channel(channel)
+
299  ,requester(requester)
+
300  ,atomic(channel->pv->pgatomic)
+
301  ,doWait(false)
+
302  ,doProc(PVIF::ProcPassive)
+
303  ,changed(new pvd::BitSet(channel->fielddesc->getNumberFields()))
+
304  ,pvf(pvd::getPVDataCreate()->createPVStructure(channel->fielddesc))
+
305 {
+
306  epics::atomic::increment(num_instances);
+
307  try {
+
308  getS<pvd::boolean>(pvReq, "record._options.atomic", atomic);
+
309 
+
310  getS<pvd::boolean>(pvReq, "record._options.block", doWait);
+
311 
+
312  std::string proccmd;
+
313  if(getS<std::string>(pvReq, "record._options.process", proccmd)) {
+
314  if(proccmd=="true") {
+
315  doProc = PVIF::ProcForce;
+
316  } else if(proccmd=="false") {
+
317  doProc = PVIF::ProcInhibit;
+
318  doWait = false; // no point in waiting
+
319  } else if(proccmd=="passive") {
+
320  doProc = PVIF::ProcPassive;
+
321  } else {
+
322  requester->message("process= expects: true|false|passive", pva::warningMessage);
+
323  }
+
324  }
+
325  }catch(std::exception& e){
+
326  requester->message(std::string("Error processing request options: ")+e.what());
+
327  }
+
328 
+
329  pvf->getSubFieldT<pvd::PVBoolean>("record._options.atomic")->put(atomic);
+
330 
+
331 
+
332  const size_t npvs = channel->pv->members.size();
+
333  pvif.resize(npvs);
+
334  for(size_t i=0; i<npvs; i++)
+
335  {
+
336  PDBGroupPV::Info& info = channel->pv->members[i];
+
337 
+
338  pvif[i].reset(info.builder->attach(pvf, info.attachment));
+
339  }
+
340 }
+
341 
+
342 PDBGroupPut::~PDBGroupPut()
+
343 {
+
344  epics::atomic::decrement(num_instances);
+
345 }
+
346 
+
347 void PDBGroupPut::put(pvd::PVStructure::shared_pointer const & value,
+
348  pvd::BitSet::shared_pointer const & changed)
+
349 {
+
350  // assume value may be a different struct each time... lot of wasted prep work
+
351  const size_t npvs = channel->pv->members.size();
+
352  std::vector<std::tr1::shared_ptr<PVIF> > putpvif(npvs);
+
353  pvd::shared_vector<AsWritePvt> asWritePvt(npvs);
+
354 
+
355  for(size_t i=0; i<npvs; i++)
+
356  {
+
357  PDBGroupPV::Info& info = channel->pv->members[i];
+
358 
+
359  AsWritePvt wrt(asTrapWriteWithData(
+
360  channel->aspvt.at(i).aspvt,
+
361  &channel->cred.user[0],
+
362  &channel->cred.host[0],
+
363  info.chan.chan,
+
364  info.chan->final_type,
+
365  info.chan->final_no_elements,
+
366  NULL
+
367  )
+
368  );
+
369  asWritePvt[i].swap(wrt);
+
370 
+
371  if(!info.allowProc) continue;
+
372  putpvif[i].reset(info.builder->attach(value, info.attachment));
+
373  }
+
374 
+
375  pvd::Status ret;
+
376  if(atomic) {
+
377  DBManyLocker L(channel->pv->locker);
+
378  for(size_t i=0; ret && i<npvs; i++) {
+
379  if(!putpvif[i].get()) continue;
+
380 
+
381  ret |= putpvif[i]->get(*changed, doProc, channel->aspvt[i].canWrite());
+
382  }
+
383 
+
384  } else {
+
385  for(size_t i=0; ret && i<npvs; i++)
+
386  {
+
387  if(!putpvif[i].get()) continue;
+
388 
+
389  PDBGroupPV::Info& info = channel->pv->members[i];
+
390 
+
391  DBScanLocker L(dbChannelRecord(info.chan));
+
392 
+
393  ret |= putpvif[i]->get(*changed,
+
394  info.allowProc ? doProc : PVIF::ProcInhibit,
+
395  channel->aspvt[i].canWrite());
+
396  }
+
397  }
+
398 
+
399  requester_type::shared_pointer req(requester.lock());
+
400  if(req)
+
401  req->putDone(ret, shared_from_this());
+
402 }
+
403 
+
404 void PDBGroupPut::get()
+
405 {
+
406  const size_t npvs = pvif.size();
+
407 
+
408  changed->clear();
+
409  if(atomic) {
+
410  DBManyLocker L(channel->pv->locker);
+
411  for(size_t i=0; i<npvs; i++) {
+
412  LocalFL FL(NULL, channel->pv->members[i].chan);
+
413  pvif[i]->put(*changed, DBE_VALUE|DBE_ALARM|DBE_PROPERTY, FL.pfl);
+
414  }
+
415  } else {
+
416 
+
417  for(size_t i=0; i<npvs; i++)
+
418  {
+
419  PDBGroupPV::Info& info = channel->pv->members[i];
+
420 
+
421  DBScanLocker L(dbChannelRecord(info.chan));
+
422  LocalFL FL(NULL, info.chan);
+
423  pvif[i]->put(*changed, DBE_VALUE|DBE_ALARM|DBE_PROPERTY, FL.pfl);
+
424  }
+
425  }
+
426  //TODO: report unused fields as changed?
+
427  changed->clear();
+
428  changed->set(0);
+
429 
+
430  requester_type::shared_pointer req(requester.lock());
+
431  if(req)
+
432  req->getDone(pvd::Status(), shared_from_this(), pvf, changed);
+
433 }
+
434 
+
435 PDBGroupMonitor::PDBGroupMonitor(const PDBGroupPV::shared_pointer& pv,
+
436  const epics::pvAccess::MonitorRequester::weak_pointer &requester,
+
437  const pvd::PVStructure::shared_pointer& pvReq)
+
438  :BaseMonitor(pv->lock, requester, pvReq)
+
439  ,pv(pv)
+
440 {
+
441  epics::atomic::increment(num_instances);
+
442 }
+
443 
+
444 PDBGroupMonitor::~PDBGroupMonitor()
+
445 {
+
446  destroy();
+
447  epics::atomic::decrement(num_instances);
+
448 }
+
449 
+
450 void PDBGroupMonitor::destroy()
+
451 {
+
452  BaseMonitor::destroy();
+
453  PDBGroupPV::shared_pointer pv;
+
454  {
+
455  Guard G(lock);
+
456  this->pv.swap(pv);
+
457  }
+
458 }
+
459 
+
460 void PDBGroupMonitor::onStart()
+
461 {
+
462  pv->addMonitor(this);
+
463 }
+
464 
+
465 void PDBGroupMonitor::onStop()
+
466 {
+
467  pv->removeMonitor(this);
+
468 }
+
469 
+ +
471 {
+
472  Guard G(pv->lock);
+
473  post(G);
+
474 }
+
bool post(guard_t &guard, const epics::pvData::BitSet &updated, no_overflow)
post update if queue not full, if full return false w/o overflow
Definition: pvahelper.h:136
+
Definition: pvif.h:365
+
Definition: pdb.h:77
+
virtual void requestUpdate() OVERRIDE FINAL
Definition: pdbgroup.cpp:470
+ + +
Definition: pvif.h:223
+ + + +
Definition: pvif.h:250
+ + + +
+ + + + diff --git a/pdbgroup_8h_source.html b/pdbgroup_8h_source.html new file mode 100644 index 0000000..9448320 --- /dev/null +++ b/pdbgroup_8h_source.html @@ -0,0 +1,334 @@ + + + + + + +pva2pva: pdbApp/pdbgroup.h Source File + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
pdbgroup.h
+
+
+
1 #ifndef PDBGROUP_H
+
2 #define PDBGROUP_H
+
3 
+
4 #include <istream>
+
5 #include <map>
+
6 #include <limits>
+
7 
+
8 #include <dbAccess.h>
+
9 
+
10 #include <dbEvent.h>
+
11 #include <dbLock.h>
+
12 
+
13 #include <pv/pvAccess.h>
+
14 
+
15 #include "helper.h"
+
16 #include "pvahelper.h"
+
17 #include "pvif.h"
+
18 #include "pdb.h"
+
19 
+
20 struct QSRV_API GroupConfig
+
21 {
+
22  struct QSRV_API Field {
+
23  std::string type, channel, trigger, id;
+
24  int putorder;
+
25 
+
26  Field() :putorder(std::numeric_limits<int>::min()) {}
+
27 
+
28  void swap(Field& o) {
+
29  std::swap(type, o.type);
+
30  std::swap(channel, o.channel);
+
31  std::swap(trigger, o.trigger);
+
32  std::swap(putorder, o.putorder);
+
33  std::swap(id, o.id);
+
34  }
+
35  };
+
36 
+
37  struct QSRV_API Group {
+
38  typedef std::map<std::string, Field> fields_t;
+
39  fields_t fields;
+
40  bool atomic, atomic_set;
+
41  std::string id;
+
42 
+
43  Group() :atomic(true), atomic_set(false) {}
+
44 
+
45  void swap(Group& o) {
+
46  std::swap(fields, o.fields);
+
47  std::swap(atomic, o.atomic);
+
48  std::swap(atomic_set, o.atomic_set);
+
49  std::swap(id, o.id);
+
50  }
+
51  };
+
52 
+
53  typedef std::map<std::string, Group> groups_t;
+
54  groups_t groups;
+
55  std::string warning;
+
56 
+
57  void swap(GroupConfig& o) {
+
58  std::swap(groups, o.groups);
+
59  std::swap(warning, o.warning);
+
60  }
+
61 
+
62  static void parse(const char *txt, const char *recname,
+
63  GroupConfig& result);
+
64 };
+
65 
+
66 struct PDBGroupMonitor;
+
67 
+
68 void pdb_group_event(void *user_arg, struct dbChannel *chan,
+
69  int eventsRemaining, struct db_field_log *pfl);
+
70 
+
71 struct QSRV_API PDBGroupPV : public PDBPV
+
72 {
+
73  POINTER_DEFINITIONS(PDBGroupPV);
+
74  weak_pointer weakself;
+
75  inline shared_pointer shared_from_this() { return shared_pointer(weakself); }
+
76 
+
77  // only for use in pdb_single_event()
+
78  // which is not concurrent for all VALUE/PROPERTY.
+
79  epics::pvData::BitSet scratch;
+
80 
+
81  epicsMutex lock;
+
82 
+
83  bool pgatomic, monatomic;
+
84 
+
85  // get/put/monitor
+
86  std::string name;
+
87 
+
88  struct Info {
+
89  DBCH chan;
+
90  // used for DBE_PROPERTY subscription when chan has filters
+
91  DBCH chan2;
+
92  std::tr1::shared_ptr<PVIFBuilder> builder;
+
93  FieldName attachment;
+
94  typedef std::vector<size_t> triggers_t;
+
95  triggers_t triggers; // index in PDBGroupPV::members
+
96  DBManyLock locker; // lock only those channels being triggered
+
97  p2p::auto_ptr<PVIF> pvif;
+
98  DBEvent evt_VALUE, evt_PROPERTY;
+
99  bool had_initial_VALUE, had_initial_PROPERTY, allowProc;
+
100 
+
101  Info() :had_initial_VALUE(false), had_initial_PROPERTY(false), allowProc(false) {}
+
102  };
+
103  typedef epics::pvData::shared_vector<Info> members_t;
+
104  members_t members;
+
105 
+
106  DBManyLock locker; // all member channels
+
107 
+
108  epics::pvData::PVStructurePtr complete; // complete copy from subscription
+
109 
+
110  typedef std::set<PDBGroupMonitor*> interested_t;
+
111  bool interested_iterating;
+
112  interested_t interested, interested_add;
+
113 
+
114  typedef std::set<BaseMonitor::shared_pointer> interested_remove_t;
+
115  interested_remove_t interested_remove;
+
116 
+
117  size_t initial_waits;
+
118 
+
119  static size_t num_instances;
+
120 
+
121  PDBGroupPV();
+
122  virtual ~PDBGroupPV();
+
123 
+
124  virtual
+
125  epics::pvAccess::Channel::shared_pointer
+
126  connect(const std::tr1::shared_ptr<PDBProvider>& prov,
+
127  const epics::pvAccess::ChannelRequester::shared_pointer& req) OVERRIDE FINAL;
+
128 
+
129  void addMonitor(PDBGroupMonitor*);
+
130  void removeMonitor(PDBGroupMonitor*);
+
131  void finalizeMonitor();
+
132 
+
133  virtual void show(int lvl) OVERRIDE;
+
134 };
+
135 
+
136 struct QSRV_API PDBGroupChannel : public BaseChannel,
+
137  public std::tr1::enable_shared_from_this<PDBGroupChannel>
+
138 {
+
139  POINTER_DEFINITIONS(PDBGroupChannel);
+
140 
+
141  PDBGroupPV::shared_pointer pv;
+
142  std::vector<ASCLIENT> aspvt;
+
143  // storage referenced from aspvt
+
144  ASCred cred;
+
145 
+
146  static size_t num_instances;
+
147 
+
148  PDBGroupChannel(const PDBGroupPV::shared_pointer& pv,
+
149  const std::tr1::shared_ptr<epics::pvAccess::ChannelProvider>& prov,
+
150  const epics::pvAccess::ChannelRequester::shared_pointer& req);
+
151  virtual ~PDBGroupChannel();
+
152 
+
153  virtual epics::pvAccess::ChannelPut::shared_pointer createChannelPut(
+
154  epics::pvAccess::ChannelPutRequester::shared_pointer const & requester,
+
155  epics::pvData::PVStructure::shared_pointer const & pvRequest) OVERRIDE FINAL;
+
156  virtual epics::pvData::Monitor::shared_pointer createMonitor(
+
157  epics::pvData::MonitorRequester::shared_pointer const & requester,
+
158  epics::pvData::PVStructure::shared_pointer const & pvRequest) OVERRIDE FINAL;
+
159 
+
160  virtual void printInfo(std::ostream& out) OVERRIDE FINAL;
+
161 };
+
162 
+
163 struct PDBGroupPut : public epics::pvAccess::ChannelPut,
+
164  public std::tr1::enable_shared_from_this<PDBGroupPut>
+
165 {
+
166  POINTER_DEFINITIONS(PDBGroupPut);
+
167  typedef epics::pvAccess::ChannelPutRequester requester_t;
+
168  PDBGroupChannel::shared_pointer channel;
+
169  requester_type::weak_pointer requester;
+
170 
+
171  // effectively const after ctor
+
172  bool atomic, doWait;
+
173  PVIF::proc_t doProc;
+
174 
+
175  epics::pvData::BitSetPtr changed;
+
176  epics::pvData::PVStructurePtr pvf;
+
177  std::vector<std::tr1::shared_ptr<PVIF> > pvif;
+
178 
+
179  static size_t num_instances;
+
180 
+
181  PDBGroupPut(const PDBGroupChannel::shared_pointer &channel,
+
182  const epics::pvAccess::ChannelPutRequester::shared_pointer &requester,
+
183  const epics::pvData::PVStructure::shared_pointer& pvReq);
+
184  virtual ~PDBGroupPut();
+
185 
+
186  virtual void destroy() OVERRIDE FINAL { pvif.clear(); channel.reset(); requester.reset(); }
+
187  virtual std::tr1::shared_ptr<epics::pvAccess::Channel> getChannel() OVERRIDE FINAL { return channel; }
+
188  virtual void cancel() OVERRIDE FINAL {}
+
189  virtual void lastRequest() OVERRIDE FINAL {}
+
190  virtual void put(
+
191  epics::pvData::PVStructure::shared_pointer const & pvPutStructure,
+
192  epics::pvData::BitSet::shared_pointer const & putBitSet) OVERRIDE FINAL;
+
193  virtual void get() OVERRIDE FINAL;
+
194 };
+
195 
+ +
197 {
+
198  POINTER_DEFINITIONS(PDBGroupMonitor);
+
199 
+
200  PDBGroupPV::shared_pointer pv;
+
201 
+
202  bool atomic;
+
203 
+
204  static size_t num_instances;
+
205 
+
206  PDBGroupMonitor(const PDBGroupPV::shared_pointer& pv,
+
207  const requester_type::weak_pointer& requester,
+
208  const epics::pvData::PVStructure::shared_pointer& pvReq);
+
209  virtual ~PDBGroupMonitor();
+
210 
+
211  virtual void onStart() OVERRIDE FINAL;
+
212  virtual void onStop() OVERRIDE FINAL;
+
213  virtual void requestUpdate() OVERRIDE FINAL;
+
214 
+
215  virtual void destroy() OVERRIDE FINAL;
+
216 
+
217 };
+
218 
+
219 #endif // PDBGROUP_H
+ +
Definition: pvif.h:81
+
Definition: pvif.h:100
+
virtual void requestUpdate() OVERRIDE FINAL
Definition: pdbgroup.cpp:470
+ + + +
Definition: pdb.h:16
+
Definition: pvif.h:223
+ + + + + + + +
+ + + + diff --git a/pdbsingle_8cpp_source.html b/pdbsingle_8cpp_source.html new file mode 100644 index 0000000..37a88cf --- /dev/null +++ b/pdbsingle_8cpp_source.html @@ -0,0 +1,604 @@ + + + + + + +pva2pva: pdbApp/pdbsingle.cpp Source File + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
pdbsingle.cpp
+
+
+
1 #include <sstream>
+
2 
+
3 #include <string.h>
+
4 
+
5 #include <asLib.h>
+
6 #include <dbAccess.h>
+
7 #include <dbChannel.h>
+
8 #include <dbStaticLib.h>
+
9 #include <errlog.h>
+
10 #include <dbNotify.h>
+
11 #include <osiSock.h>
+
12 #include <epicsAtomic.h>
+
13 
+
14 #include <pv/epicsException.h>
+
15 #include <pv/pvAccess.h>
+
16 #include <pv/security.h>
+
17 #include <pv/configuration.h>
+
18 
+
19 #include "helper.h"
+
20 #include "pdbsingle.h"
+
21 #include "pdb.h"
+
22 
+
23 namespace pvd = epics::pvData;
+
24 namespace pva = epics::pvAccess;
+
25 
+
26 size_t PDBSinglePV::num_instances;
+
27 size_t PDBSingleChannel::num_instances;
+
28 size_t PDBSinglePut::num_instances;
+
29 size_t PDBSingleMonitor::num_instances;
+
30 
+
31 typedef epicsGuard<epicsMutex> Guard;
+
32 
+
33 static
+
34 void pdb_single_event(void *user_arg, struct dbChannel *chan,
+
35  int eventsRemaining, struct db_field_log *pfl)
+
36 {
+
37  DBEvent *evt=(DBEvent*)user_arg;
+
38  try{
+
39  PDBSinglePV::shared_pointer self(std::tr1::static_pointer_cast<PDBSinglePV>(((PDBSinglePV*)evt->self)->shared_from_this()));
+
40  PDBSinglePV::interested_remove_t temp;
+
41  {
+
42  Guard G(self->lock);
+
43 
+
44  // we have exclusive use of self->scratch
+
45  self->scratch.clear();
+
46  {
+
47  DBScanLocker L(dbChannelRecord(self->chan));
+
48  // dbGet() into self->complete
+
49  self->pvif->put(self->scratch, evt->dbe_mask, pfl);
+
50  }
+
51 
+
52  if(evt->dbe_mask&DBE_PROPERTY)
+
53  self->hadevent_PROPERTY = true;
+
54  else
+
55  self->hadevent_VALUE = true;
+
56 
+
57  if(self->hadevent_VALUE && self->hadevent_PROPERTY) {
+
58  self->interested_iterating = true;
+
59 
+
60  FOREACH(PDBSinglePV::interested_t::const_iterator, it, end, self->interested) {
+
61  PDBSingleMonitor& mon = **it;
+
62  // from self->complete into monitor queue element
+
63  mon.post(G, self->scratch); // G unlocked during call
+
64  }
+
65 
+
66  while(!self->interested_add.empty()) {
+
67  PDBSinglePV::interested_t::iterator first(self->interested_add.begin());
+
68  self->interested.insert(*first);
+
69  self->interested_add.erase(first);
+
70  }
+
71 
+
72  temp.swap(self->interested_remove);
+
73  for(PDBSinglePV::interested_remove_t::iterator it(temp.begin()),
+
74  end(temp.end()); it != end; ++it)
+
75  {
+
76  self->interested.erase(static_cast<PDBSingleMonitor*>(it->get()));
+
77  }
+
78 
+
79  self->interested_iterating = false;
+
80 
+
81  self->finalizeMonitor();
+
82  }
+
83  }
+
84 
+
85  }catch(std::tr1::bad_weak_ptr&){
+
86  /* We are racing destruction of the PDBSinglePV, but things are ok.
+
87  * The destructor is running, but has not completed db_cancel_event()
+
88  * so storage is still valid.
+
89  * Just do nothing
+
90  */
+
91  }catch(std::exception& e){
+
92  std::cerr<<"Unhandled exception in pdb_single_event(): "<<e.what()<<"\n"
+
93  <<SHOW_EXCEPTION(e)<<"\n";
+
94  }
+
95 }
+
96 
+
97 PDBSinglePV::PDBSinglePV(DBCH& chan,
+
98  const PDBProvider::shared_pointer& prov)
+
99  :provider(prov)
+
100  ,builder(new ScalarBuilder(chan.chan))
+
101  ,interested_iterating(false)
+
102  ,evt_VALUE(this)
+
103  ,evt_PROPERTY(this)
+
104  ,hadevent_VALUE(false)
+
105  ,hadevent_PROPERTY(false)
+
106 {
+
107  if(ellCount(&chan.chan->pre_chain) || ellCount(&chan.chan->post_chain)) {
+
108  DBCH temp(dbChannelName(chan.chan));
+
109  this->chan2.swap(temp);
+
110  }
+
111  this->chan.swap(chan);
+
112  fielddesc = std::tr1::static_pointer_cast<const pvd::Structure>(builder->dtype());
+
113 
+
114  complete = pvd::getPVDataCreate()->createPVStructure(fielddesc);
+
115  FieldName temp;
+
116  pvif.reset(builder->attach(complete, temp));
+
117 
+
118  epics::atomic::increment(num_instances);
+
119 }
+
120 
+
121 PDBSinglePV::~PDBSinglePV()
+
122 {
+
123  epics::atomic::decrement(num_instances);
+
124 }
+
125 
+
126 void PDBSinglePV::activate()
+
127 {
+
128  dbChannel *pchan = this->chan2.chan ? this->chan2.chan : this->chan.chan;
+
129  evt_VALUE.create(provider->event_context, this->chan, &pdb_single_event, DBE_VALUE|DBE_ALARM);
+
130  evt_PROPERTY.create(provider->event_context, pchan, &pdb_single_event, DBE_PROPERTY);
+
131 }
+
132 
+
133 pva::Channel::shared_pointer
+
134 PDBSinglePV::connect(const std::tr1::shared_ptr<PDBProvider>& prov,
+
135  const pva::ChannelRequester::shared_pointer& req)
+
136 {
+
137  PDBSingleChannel::shared_pointer ret(new PDBSingleChannel(shared_from_this(), req));
+
138 
+
139  ret->cred.update(req);
+
140 
+
141  ret->aspvt.add(chan, ret->cred);
+
142 
+
143  return ret;
+
144 }
+
145 
+
146 void PDBSinglePV::addMonitor(PDBSingleMonitor* mon)
+
147 {
+
148  Guard G(lock);
+
149  if(interested.empty() && interested_add.empty()) {
+
150  // first monitor
+
151  // start subscription
+
152 
+
153  hadevent_VALUE = false;
+
154  hadevent_PROPERTY = false;
+
155  db_event_enable(evt_VALUE.subscript);
+
156  db_event_enable(evt_PROPERTY.subscript);
+
157  db_post_single_event(evt_VALUE.subscript);
+
158  db_post_single_event(evt_PROPERTY.subscript);
+
159 
+
160  } else if(hadevent_VALUE && hadevent_PROPERTY) {
+
161  // new subscriber and already had initial update
+
162  mon->post(G);
+
163  } // else new subscriber, but no initial update. so just wait
+
164 
+
165  if(interested_iterating) {
+
166  interested_add.insert(mon);
+
167  } else {
+
168  interested.insert(mon);
+
169  }
+
170 }
+
171 
+
172 void PDBSinglePV::removeMonitor(PDBSingleMonitor* mon)
+
173 {
+
174  Guard G(lock);
+
175 
+
176  if(interested_add.erase(mon)) {
+
177  // and+remove while iterating. no-op
+
178 
+
179  } else if(interested_iterating) {
+
180  // keep monitor alive while iterating
+
181  interested_remove.insert(mon->shared_from_this());
+
182 
+
183  } else {
+
184  interested.erase(mon);
+
185  finalizeMonitor();
+
186  }
+
187 }
+
188 
+
189 void PDBSinglePV::finalizeMonitor()
+
190 {
+
191  assert(!interested_iterating);
+
192 
+
193  if(interested.empty()) {
+
194  db_event_disable(evt_VALUE.subscript);
+
195  db_event_disable(evt_PROPERTY.subscript);
+
196  }
+
197 }
+
198 
+
199 PDBSingleChannel::PDBSingleChannel(const PDBSinglePV::shared_pointer& pv,
+
200  const pva::ChannelRequester::shared_pointer& req)
+
201  :BaseChannel(dbChannelName(pv->chan), pv->provider, req, pv->fielddesc)
+
202  ,pv(pv)
+
203 {
+
204  assert(!!this->pv);
+
205  epics::atomic::increment(num_instances);
+
206 }
+
207 
+
208 PDBSingleChannel::~PDBSingleChannel()
+
209 {
+
210  epics::atomic::decrement(num_instances);
+
211 }
+
212 
+
213 void PDBSingleChannel::printInfo(std::ostream& out)
+
214 {
+
215  if(aspvt.canWrite())
+
216  out << "RW ";
+
217  else
+
218  out << "RO ";
+
219  out<<(&cred.user[0])<<'@'<<(&cred.host[0]);
+
220  for(size_t i=0, N=cred.groups.size(); i<N; i++) {
+
221  out<<", "<<(&cred.groups[i][0]);
+
222  }
+
223  out<<"\n";
+
224 }
+
225 
+
226 pva::ChannelPut::shared_pointer
+
227 PDBSingleChannel::createChannelPut(
+
228  pva::ChannelPutRequester::shared_pointer const & requester,
+
229  pvd::PVStructure::shared_pointer const & pvRequest)
+
230 {
+
231  PDBSinglePut::shared_pointer ret(new PDBSinglePut(shared_from_this(), requester, pvRequest));
+
232  requester->channelPutConnect(pvd::Status(), ret, fielddesc);
+
233  return ret;
+
234 }
+
235 
+
236 
+
237 pva::Monitor::shared_pointer
+
238 PDBSingleChannel::createMonitor(
+
239  pva::MonitorRequester::shared_pointer const & requester,
+
240  pvd::PVStructure::shared_pointer const & pvRequest)
+
241 {
+
242  PDBSingleMonitor::shared_pointer ret(new PDBSingleMonitor(pv->shared_from_this(), requester, pvRequest));
+
243  ret->weakself = ret;
+
244  assert(!!pv->complete);
+
245  guard_t G(pv->lock);
+
246  ret->connect(G, pv->complete);
+
247  return ret;
+
248 }
+
249 
+
250 
+
251 static
+
252 int single_put_callback(struct processNotify *notify,notifyPutType type)
+
253 {
+
254  PDBSinglePut *self = (PDBSinglePut*)notify->usrPvt;
+
255 
+
256  if(notify->status!=notifyOK) return 0;
+
257 
+
258  // we've previously ensured that wait_changed&DBE_VALUE is true
+
259 
+
260  switch(type) {
+
261  case putDisabledType:
+
262  return 0;
+
263  case putFieldType:
+
264  {
+
265  DBScanLocker L(notify->chan);
+
266  self->wait_pvif->get(*self->wait_changed);
+
267  }
+
268  break;
+
269  case putType:
+
270  self->wait_pvif->get(*self->wait_changed);
+
271  break;
+
272  }
+
273  return 1;
+
274 }
+
275 
+
276 static
+
277 void single_done_callback(struct processNotify *notify)
+
278 {
+
279  PDBSinglePut *self = (PDBSinglePut*)notify->usrPvt;
+
280  pvd::Status sts;
+
281 
+
282  // busy state should be 1 (normal completion) or 2 (if cancel in progress)
+
283  if(epics::atomic::compareAndSwap(self->notifyBusy, 1, 0)==0) {
+
284  std::cerr<<"PDBSinglePut dbNotify state error?\n";
+
285  }
+
286 
+
287  switch(notify->status) {
+
288  case notifyOK:
+
289  break;
+
290  case notifyCanceled:
+
291  return; // skip notification
+
292  case notifyError:
+
293  sts = pvd::Status::error("Error in dbNotify");
+
294  break;
+
295  case notifyPutDisabled:
+
296  sts = pvd::Status::error("Put disabled");
+
297  break;
+
298  }
+
299 
+
300  PDBSinglePut::requester_type::shared_pointer req(self->requester.lock());
+
301  if(req)
+
302  req->putDone(sts, self->shared_from_this());
+
303 }
+
304 
+
305 PDBSinglePut::PDBSinglePut(const PDBSingleChannel::shared_pointer &channel,
+
306  const pva::ChannelPutRequester::shared_pointer &requester,
+
307  const pvd::PVStructure::shared_pointer &pvReq)
+
308  :channel(channel)
+
309  ,requester(requester)
+
310  ,changed(new pvd::BitSet(channel->fielddesc->getNumberFields()))
+
311  ,pvf(pvd::getPVDataCreate()->createPVStructure(channel->fielddesc))
+
312  ,pvif(channel->pv->builder->attach(pvf, FieldName()))
+
313  ,notifyBusy(0)
+
314  ,doProc(PVIF::ProcPassive)
+
315  ,doWait(false)
+
316 {
+
317  epics::atomic::increment(num_instances);
+
318  dbChannel *chan = channel->pv->chan;
+
319 
+
320  try {
+
321  getS<pvd::boolean>(pvReq, "record._options.block", doWait);
+
322  } catch(std::runtime_error& e) {
+
323  requester->message(std::string("block= not understood : ")+e.what(), pva::warningMessage);
+
324  }
+
325 
+
326  std::string proccmd;
+
327  if(getS<std::string>(pvReq, "record._options.process", proccmd)) {
+
328  if(proccmd=="true") {
+
329  doProc = PVIF::ProcForce;
+
330  } else if(proccmd=="false") {
+
331  doProc = PVIF::ProcInhibit;
+
332  doWait = false; // no point in waiting
+
333  } else if(proccmd=="passive") {
+
334  doProc = PVIF::ProcPassive;
+
335  } else {
+
336  requester->message("process= expects: true|false|passive", pva::warningMessage);
+
337  }
+
338  }
+
339 
+
340  memset((void*)&notify, 0, sizeof(notify));
+
341  notify.usrPvt = (void*)this;
+
342  notify.chan = chan;
+
343  notify.putCallback = &single_put_callback;
+
344  notify.doneCallback = &single_done_callback;
+
345 }
+
346 
+
347 PDBSinglePut::~PDBSinglePut()
+
348 {
+
349  cancel();
+
350  epics::atomic::decrement(num_instances);
+
351 }
+
352 
+
353 void PDBSinglePut::put(pvd::PVStructure::shared_pointer const & value,
+
354  pvd::BitSet::shared_pointer const & changed)
+
355 {
+
356  dbChannel *chan = channel->pv->chan;
+
357  dbFldDes *fld = dbChannelFldDes(chan);
+
358 
+
359  AsWritePvt asWritePvt (
+
360  asTrapWriteWithData(channel->aspvt.aspvt,
+
361  std::string(channel->cred.user.begin(), channel->cred.user.end()).c_str(),
+
362  std::string(channel->cred.host.begin(), channel->cred.host.end()).c_str(),
+
363  chan,
+
364  chan->final_type,
+
365  chan->final_no_elements,
+
366  NULL
+
367  )
+
368  );
+
369 
+
370  pvd::Status ret;
+
371  if(!channel->aspvt.canWrite()) {
+
372  ret = pvd::Status::error("Put not permitted");
+
373 
+
374  } else if(dbChannelFieldType(chan)>=DBF_INLINK && dbChannelFieldType(chan)<=DBF_FWDLINK) {
+
375  try{
+
376  std::string lval(value->getSubFieldT<pvd::PVScalar>("value")->getAs<std::string>());
+
377  long status = dbChannelPutField(chan, DBF_STRING, lval.c_str(), 1);
+
378  if(status)
+
379  ret = pvd::Status(pvd::Status::error("dbPutField() error"));
+
380  }catch(std::exception& e) {
+
381  std::ostringstream strm;
+
382  strm<<"Failed to put link field "<<dbChannelName(chan)<<"."<<fld->name<<" : "<<e.what()<<"\n";
+
383  ret = pvd::Status(pvd::Status::error(strm.str()));
+
384  }
+
385 
+
386  } else if(doWait) {
+
387  // TODO: dbNotify doesn't allow us for force processing
+
388 
+
389  // assume value may be a different struct each time
+
390  p2p::auto_ptr<PVIF> putpvif(channel->pv->builder->attach(value, FieldName()));
+
391  unsigned mask = putpvif->dbe(*changed);
+
392 
+
393  if(mask!=DBE_VALUE) {
+
394  requester_type::shared_pointer req(requester.lock());
+
395  if(req)
+
396  req->message("block=true only supports .value (empty put mask)", pva::warningMessage);
+
397  }
+
398 
+
399  if(epics::atomic::compareAndSwap(notifyBusy, 0, 1)!=0)
+
400  throw std::logic_error("Previous put() not complete");
+
401 
+
402  notify.requestType = (mask&DBE_VALUE) ? putProcessRequest : processRequest;
+
403 
+
404  wait_pvif = PTRMOVE(putpvif);
+
405  wait_changed = changed;
+
406 
+
407  dbProcessNotify(&notify);
+
408 
+
409  return; // skip notification
+
410  } else {
+
411  // assume value may be a different struct each time
+
412  p2p::auto_ptr<PVIF> putpvif(channel->pv->builder->attach(value, FieldName()));
+
413  try{
+
414  DBScanLocker L(chan);
+
415  ret = putpvif->get(*changed, doProc);
+
416 
+
417  }catch(std::runtime_error& e){
+
418  ret = pvd::Status::error(e.what());
+
419  }
+
420  }
+
421  requester_type::shared_pointer req(requester.lock());
+
422  if(req)
+
423  req->putDone(ret, shared_from_this());
+
424 }
+
425 
+
426 void PDBSinglePut::cancel()
+
427 {
+
428  if(epics::atomic::compareAndSwap(notifyBusy, 1, 2)==1) {
+
429  dbNotifyCancel(&notify);
+
430  wait_changed.reset();
+
431  wait_pvif.reset();
+
432  epics::atomic::set(notifyBusy, 0);
+
433  }
+
434 }
+
435 
+
436 void PDBSinglePut::get()
+
437 {
+
438  changed->clear();
+
439  {
+
440  DBScanLocker L(pvif->chan);
+
441  LocalFL FL(NULL, pvif->chan);
+
442  pvif->put(*changed, DBE_VALUE|DBE_ALARM|DBE_PROPERTY, FL.pfl);
+
443  }
+
444  //TODO: report unused fields as changed?
+
445  changed->clear();
+
446  changed->set(0);
+
447 
+
448  requester_type::shared_pointer req(requester.lock());
+
449  if(req)
+
450  req->getDone(pvd::Status(), shared_from_this(), pvf, changed);
+
451 }
+
452 
+
453 PDBSingleMonitor::PDBSingleMonitor(const PDBSinglePV::shared_pointer& pv,
+
454  const requester_t::shared_pointer& requester,
+
455  const pvd::PVStructure::shared_pointer& pvReq)
+
456  :BaseMonitor(pv->lock, requester, pvReq)
+
457  ,pv(pv)
+
458 {
+
459  epics::atomic::increment(num_instances);
+
460 }
+
461 
+
462 PDBSingleMonitor::~PDBSingleMonitor()
+
463 {
+
464  destroy();
+
465  epics::atomic::decrement(num_instances);
+
466 }
+
467 
+
468 void PDBSingleMonitor::destroy()
+
469 {
+
470  BaseMonitor::destroy();
+
471 }
+
472 
+
473 void PDBSingleMonitor::onStart()
+
474 {
+
475  pv->addMonitor(this);
+
476 }
+
477 
+
478 void PDBSingleMonitor::onStop()
+
479 {
+
480  guard_t G(pv->lock);
+
481 
+
482  pv->removeMonitor(this);
+
483 }
+
484 
+ +
486 {
+
487  guard_t G(pv->lock);
+
488  post(G);
+
489 }
+
virtual void requestUpdate() OVERRIDE FINAL
Definition: pdbsingle.cpp:485
+
bool post(guard_t &guard, const epics::pvData::BitSet &updated, no_overflow)
post update if queue not full, if full return false w/o overflow
Definition: pvahelper.h:136
+
Definition: pvif.h:81
+
Definition: pvif.h:365
+ + +
Definition: pdb.h:77
+ + +
Definition: pvif.h:223
+ + + +
Definition: pvif.h:250
+ + +
+ + + + diff --git a/pdbsingle_8h_source.html b/pdbsingle_8h_source.html new file mode 100644 index 0000000..a7ef78b --- /dev/null +++ b/pdbsingle_8h_source.html @@ -0,0 +1,269 @@ + + + + + + +pva2pva: pdbApp/pdbsingle.h Source File + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
pdbsingle.h
+
+
+
1 #ifndef PDBSINGLE_H
+
2 #define PDBSINGLE_H
+
3 
+
4 #include <deque>
+
5 
+
6 #include <dbAccess.h>
+
7 #include <dbNotify.h>
+
8 #include <asLib.h>
+
9 
+
10 #include <dbEvent.h>
+
11 
+
12 #include <pv/pvAccess.h>
+
13 
+
14 #include "helper.h"
+
15 #include "pvahelper.h"
+
16 #include "pvif.h"
+
17 #include "pdb.h"
+
18 
+
19 struct PDBSingleMonitor;
+
20 
+
21 struct QSRV_API PDBSinglePV : public PDBPV
+
22 {
+
23  POINTER_DEFINITIONS(PDBSinglePV);
+
24  weak_pointer weakself;
+
25  inline shared_pointer shared_from_this() { return shared_pointer(weakself); }
+
26 
+
27  /* this dbChannel is shared by all operations,
+
28  * which is safe as it's modify-able field(s) (addr.pfield)
+
29  * are only access while the underlying record
+
30  * is locked.
+
31  */
+
32  DBCH chan;
+
33  // used for DBE_PROPERTY subscription when chan has filters
+
34  DBCH chan2;
+
35  PDBProvider::shared_pointer provider;
+
36 
+
37  // only for use in pdb_single_event()
+
38  // which is not concurrent for VALUE/PROPERTY.
+
39  epics::pvData::BitSet scratch;
+
40 
+
41  epicsMutex lock;
+
42 
+
43  p2p::auto_ptr<ScalarBuilder> builder;
+
44  p2p::auto_ptr<PVIF> pvif;
+
45 
+
46  epics::pvData::PVStructurePtr complete; // complete copy from subscription
+
47 
+
48  typedef std::set<PDBSingleMonitor*> interested_t;
+
49  bool interested_iterating;
+
50  interested_t interested, interested_add;
+
51 
+
52  typedef std::set<BaseMonitor::shared_pointer> interested_remove_t;
+
53  interested_remove_t interested_remove;
+
54 
+
55  DBEvent evt_VALUE, evt_PROPERTY;
+
56  bool hadevent_VALUE, hadevent_PROPERTY;
+
57 
+
58  static size_t num_instances;
+
59 
+
60  PDBSinglePV(DBCH& chan,
+
61  const PDBProvider::shared_pointer& prov);
+
62  virtual ~PDBSinglePV();
+
63 
+
64  void activate();
+
65 
+
66  virtual
+
67  epics::pvAccess::Channel::shared_pointer
+
68  connect(const std::tr1::shared_ptr<PDBProvider>& prov,
+
69  const epics::pvAccess::ChannelRequester::shared_pointer& req) OVERRIDE FINAL;
+
70 
+
71  void addMonitor(PDBSingleMonitor*);
+
72  void removeMonitor(PDBSingleMonitor*);
+
73  void finalizeMonitor();
+
74 };
+
75 
+
76 struct PDBSingleChannel : public BaseChannel,
+
77  public std::tr1::enable_shared_from_this<PDBSingleChannel>
+
78 {
+
79  POINTER_DEFINITIONS(PDBSingleChannel);
+
80 
+
81  PDBSinglePV::shared_pointer pv;
+
82  // storage referenced from aspvt
+
83  ASCred cred;
+
84  ASCLIENT aspvt;
+
85 
+
86  static size_t num_instances;
+
87 
+
88  PDBSingleChannel(const PDBSinglePV::shared_pointer& pv,
+
89  const epics::pvAccess::ChannelRequester::shared_pointer& req);
+
90  virtual ~PDBSingleChannel();
+
91 
+
92  virtual epics::pvAccess::ChannelPut::shared_pointer createChannelPut(
+
93  epics::pvAccess::ChannelPutRequester::shared_pointer const & requester,
+
94  epics::pvData::PVStructure::shared_pointer const & pvRequest) OVERRIDE FINAL;
+
95  virtual epics::pvData::Monitor::shared_pointer createMonitor(
+
96  epics::pvData::MonitorRequester::shared_pointer const & requester,
+
97  epics::pvData::PVStructure::shared_pointer const & pvRequest) OVERRIDE FINAL;
+
98 
+
99  virtual void printInfo(std::ostream& out) OVERRIDE FINAL;
+
100 };
+
101 
+
102 struct PDBSinglePut : public epics::pvAccess::ChannelPut,
+
103  public std::tr1::enable_shared_from_this<PDBSinglePut>
+
104 {
+
105  POINTER_DEFINITIONS(PDBSinglePut);
+
106 
+
107  typedef epics::pvAccess::ChannelPutRequester requester_t;
+
108  PDBSingleChannel::shared_pointer channel;
+
109  requester_t::weak_pointer requester;
+
110 
+
111  epics::pvData::BitSetPtr changed, wait_changed;
+
112  epics::pvData::PVStructurePtr pvf;
+
113  p2p::auto_ptr<PVIF> pvif, wait_pvif;
+
114  processNotify notify;
+
115  int notifyBusy; // atomic: 0 - idle, 1 - active, 2 - being cancelled
+
116 
+
117  // effectively const after ctor
+
118  PVIF::proc_t doProc;
+
119  bool doWait;
+
120 
+
121  static size_t num_instances;
+
122 
+
123  PDBSinglePut(const PDBSingleChannel::shared_pointer& channel,
+
124  const epics::pvAccess::ChannelPutRequester::shared_pointer& requester,
+
125  const epics::pvData::PVStructure::shared_pointer& pvReq);
+
126  virtual ~PDBSinglePut();
+
127 
+
128  virtual void destroy() OVERRIDE FINAL { pvif.reset(); channel.reset(); requester.reset(); }
+
129  virtual std::tr1::shared_ptr<epics::pvAccess::Channel> getChannel() OVERRIDE FINAL { return channel; }
+
130  virtual void cancel() OVERRIDE FINAL;
+
131  virtual void lastRequest() OVERRIDE FINAL {}
+
132  virtual void put(
+
133  epics::pvData::PVStructure::shared_pointer const & pvPutStructure,
+
134  epics::pvData::BitSet::shared_pointer const & putBitSet) OVERRIDE FINAL;
+
135  virtual void get() OVERRIDE FINAL;
+
136 };
+
137 
+ +
139 {
+
140  POINTER_DEFINITIONS(PDBSingleMonitor);
+
141 
+
142  const PDBSinglePV::shared_pointer pv;
+
143 
+
144  static size_t num_instances;
+
145 
+
146  PDBSingleMonitor(const PDBSinglePV::shared_pointer& pv,
+
147  const requester_t::shared_pointer& requester,
+
148  const epics::pvData::PVStructure::shared_pointer& pvReq);
+
149  virtual ~PDBSingleMonitor();
+
150 
+
151  virtual void onStart() OVERRIDE FINAL;
+
152  virtual void onStop() OVERRIDE FINAL;
+
153  virtual void requestUpdate() OVERRIDE FINAL;
+
154 
+
155  virtual void destroy() OVERRIDE FINAL;
+
156 };
+
157 
+
158 #endif // PDBSINGLE_H
+
virtual void requestUpdate() OVERRIDE FINAL
Definition: pdbsingle.cpp:485
+
Definition: pvif.h:107
+
Definition: pvif.h:81
+
Definition: pvif.h:100
+ + + +
Definition: pdb.h:16
+
Definition: pvif.h:223
+ + + +
+ + + + diff --git a/pva2pva_8h_source.html b/pva2pva_8h_source.html new file mode 100644 index 0000000..c25b0bd --- /dev/null +++ b/pva2pva_8h_source.html @@ -0,0 +1,115 @@ + + + + + + +pva2pva: p2pApp/pva2pva.h Source File + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
pva2pva.h
+
+
+
1 #ifndef PVA2PVA_H
+
2 #define PVA2PVA_H
+
3 
+
4 #include <epicsGuard.h>
+
5 
+
6 #include <pv/pvAccess.h>
+
7 
+
8 typedef epicsGuard<epicsMutex> Guard;
+
9 typedef epicsGuardRelease<epicsMutex> UnGuard;
+
10 
+
11 void registerGWClientIocsh();
+
12 void gwServerShutdown();
+
13 void gwClientShutdown();
+
14 void registerReadOnly();
+
15 
+
16 #endif // PVA2PVA_H
+
+ + + + diff --git a/pvahelper_8h_source.html b/pvahelper_8h_source.html new file mode 100644 index 0000000..1a230d6 --- /dev/null +++ b/pvahelper_8h_source.html @@ -0,0 +1,474 @@ + + + + + + +pva2pva: common/pvahelper.h Source File + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
pvahelper.h
+
+
+
1 #ifndef PVAHELPER_H
+
2 #define PVAHELPER_H
+
3 
+
4 #include <deque>
+
5 
+
6 #include <epicsGuard.h>
+
7 
+
8 #include <pv/pvAccess.h>
+
9 
+
10 template<typename T, typename A>
+
11 bool getS(const epics::pvData::PVStructurePtr& S, const char *name, A& val)
+
12 {
+
13  epics::pvData::PVScalarPtr F(S->getSubField<epics::pvData::PVScalar>(name));
+
14  if(F)
+
15  val = F->getAs<T>();
+
16  return !!F;
+
17 }
+
18 
+
19 struct BaseChannel : public epics::pvAccess::Channel
+
20 {
+
21  BaseChannel(const std::string& name,
+
22  const std::tr1::weak_ptr<epics::pvAccess::ChannelProvider>& prov,
+
23  const epics::pvAccess::ChannelRequester::shared_pointer& req,
+
24  const epics::pvData::StructureConstPtr& dtype
+
25  )
+
26  :pvname(name), provider(prov), requester(req), fielddesc(dtype)
+
27  {}
+
28  virtual ~BaseChannel() {}
+
29 
+
30  mutable epicsMutex lock;
+
31  typedef epicsGuard<epicsMutex> guard_t;
+
32 
+
33  const std::string pvname;
+
34  const epics::pvAccess::ChannelProvider::weak_pointer provider;
+
35  const requester_type::weak_pointer requester;
+
36  const epics::pvData::StructureConstPtr fielddesc;
+
37 
+
38  // assume Requester methods not called after destory()
+
39  virtual std::string getRequesterName() OVERRIDE
+
40  { return getChannelRequester()->getRequesterName(); }
+
41 
+
42  virtual void destroy() OVERRIDE FINAL {}
+
43 
+
44  virtual std::tr1::shared_ptr<epics::pvAccess::ChannelProvider> getProvider() OVERRIDE FINAL
+
45  { return epics::pvAccess::ChannelProvider::shared_pointer(provider); }
+
46  virtual std::string getRemoteAddress() OVERRIDE
+
47  { return getRequesterName(); }
+
48 
+
49  virtual std::string getChannelName() OVERRIDE FINAL { return pvname; }
+
50  virtual std::tr1::shared_ptr<epics::pvAccess::ChannelRequester> getChannelRequester() OVERRIDE FINAL
+
51  { return requester_type::shared_pointer(requester); }
+
52 
+
53  virtual void getField(epics::pvAccess::GetFieldRequester::shared_pointer const & requester,std::string const & subField) OVERRIDE
+
54  { requester->getDone(epics::pvData::Status(), fielddesc); }
+
55 
+
56  virtual void printInfo(std::ostream& out) OVERRIDE {
+
57  out<<"Channel '"<<pvname<<"' "<<getRemoteAddress()<<"\n";
+
58  }
+
59 };
+
60 
+
69 struct BaseMonitor : public epics::pvAccess::Monitor
+
70 {
+
71  POINTER_DEFINITIONS(BaseMonitor);
+
72  weak_pointer weakself;
+
73  inline shared_pointer shared_from_this() { return shared_pointer(weakself); }
+
74 
+
75  typedef epics::pvAccess::MonitorRequester requester_t;
+
76 
+
77  epicsMutex& lock; // not held during any callback
+
78  typedef epicsGuard<epicsMutex> guard_t;
+
79  typedef epicsGuardRelease<epicsMutex> unguard_t;
+
80 
+
81 private:
+
82  const requester_t::weak_pointer requester;
+
83 
+
84  epics::pvData::PVStructurePtr complete;
+
85  epics::pvData::BitSet changed, overflow;
+
86 
+
87  typedef std::deque<epics::pvAccess::MonitorElementPtr> buffer_t;
+
88  bool inoverflow;
+
89  bool running;
+
90  size_t nbuffers;
+
91  buffer_t inuse, empty;
+
92 
+
93 public:
+
94  BaseMonitor(epicsMutex& lock,
+
95  const requester_t::weak_pointer& requester,
+
96  const epics::pvData::PVStructure::shared_pointer& pvReq)
+
97  :lock(lock)
+
98  ,requester(requester)
+
99  ,inoverflow(false)
+
100  ,running(false)
+
101  ,nbuffers(2)
+
102  {}
+
103 
+
104  virtual ~BaseMonitor() {destroy();}
+
105 
+
106  inline const epics::pvData::PVStructurePtr& getValue() { return complete; }
+
107 
+
110  void connect(guard_t& guard, const epics::pvData::PVStructurePtr& value)
+
111  {
+
112  guard.assertIdenticalMutex(lock);
+
113  epics::pvData::StructureConstPtr dtype(value->getStructure());
+
114  epics::pvData::PVDataCreatePtr create(epics::pvData::getPVDataCreate());
+
115  BaseMonitor::shared_pointer self(shared_from_this());
+
116  requester_t::shared_pointer req(requester.lock());
+
117 
+
118  assert(!complete); // can't call twice
+
119 
+
120  complete = value;
+
121  empty.resize(nbuffers);
+
122  for(size_t i=0; i<empty.size(); i++) {
+
123  empty[i].reset(new epics::pvAccess::MonitorElement(create->createPVStructure(dtype)));
+
124  }
+
125 
+
126  if(req) {
+
127  unguard_t U(guard);
+
128  epics::pvData::Status sts;
+
129  req->monitorConnect(sts, self, dtype);
+
130  }
+
131  }
+
132 
+
133  struct no_overflow {};
+
134 
+
136  bool post(guard_t& guard, const epics::pvData::BitSet& updated, no_overflow)
+
137  {
+
138  guard.assertIdenticalMutex(lock);
+
139  requester_t::shared_pointer req;
+
140 
+
141  if(!complete || !running) return false;
+
142 
+
143  changed |= updated;
+
144 
+
145  if(empty.empty()) return false;
+
146 
+
147  if(p_postone())
+
148  req = requester.lock();
+
149  inoverflow = false;
+
150 
+
151  if(req) {
+
152  unguard_t U(guard);
+
153  req->monitorEvent(shared_from_this());
+
154  }
+
155  return true;
+
156  }
+
157 
+
159  bool post(guard_t& guard)
+
160  {
+
161  guard.assertIdenticalMutex(lock);
+
162  bool oflow;
+
163  requester_t::shared_pointer req;
+
164 
+
165  if(!complete || !running) return false;
+
166 
+
167  if(empty.empty()) {
+
168  oflow = inoverflow = true;
+
169 
+
170  } else {
+
171 
+
172  if(p_postone())
+
173  req = requester.lock();
+
174  oflow = inoverflow = false;
+
175  }
+
176 
+
177  if(req) {
+
178  unguard_t U(guard);
+
179  req->monitorEvent(shared_from_this());
+
180  }
+
181  return !oflow;
+
182  }
+
183 
+
185  bool post(guard_t& guard,
+
186  const epics::pvData::BitSet& updated,
+
187  const epics::pvData::BitSet& overflowed)
+
188  {
+
189  guard.assertIdenticalMutex(lock);
+
190  bool oflow;
+
191  requester_t::shared_pointer req;
+
192 
+
193  if(!complete || !running) return false;
+
194 
+
195  if(empty.empty()) {
+
196  oflow = inoverflow = true;
+
197  overflow |= overflowed;
+
198  overflow.or_and(updated, changed);
+
199  changed |= updated;
+
200 
+
201  } else {
+
202 
+
203  changed |= updated;
+
204  if(p_postone())
+
205  req = requester.lock();
+
206  oflow = inoverflow = false;
+
207  }
+
208 
+
209  if(req) {
+
210  unguard_t U(guard);
+
211  req->monitorEvent(shared_from_this());
+
212  }
+
213  return !oflow;
+
214  }
+
215 
+
217  bool post(guard_t& guard, const epics::pvData::BitSet& updated) {
+
218  bool oflow;
+
219  requester_t::shared_pointer req;
+
220 
+
221  if(!complete || !running) return false;
+
222 
+
223  if(empty.empty()) {
+
224  oflow = inoverflow = true;
+
225  overflow.or_and(updated, changed);
+
226  changed |= updated;
+
227 
+
228  } else {
+
229 
+
230  changed |= updated;
+
231  if(p_postone())
+
232  req = requester.lock();
+
233  oflow = inoverflow = false;
+
234  }
+
235 
+
236  if(req) {
+
237  unguard_t U(guard);
+
238  req->monitorEvent(shared_from_this());
+
239  }
+
240  return !oflow;
+
241  }
+
242 
+
243 private:
+
244  bool p_postone()
+
245  {
+
246  bool ret;
+
247  // assume lock is held
+
248  assert(!empty.empty());
+
249 
+
250  epics::pvAccess::MonitorElementPtr& elem = empty.front();
+
251 
+
252  elem->pvStructurePtr->copyUnchecked(*complete);
+
253  *elem->changedBitSet = changed;
+
254  *elem->overrunBitSet = overflow;
+
255 
+
256  overflow.clear();
+
257  changed.clear();
+
258 
+
259  ret = inuse.empty();
+
260  inuse.push_back(elem);
+
261  empty.pop_front();
+
262  return ret;
+
263  }
+
264 public:
+
265 
+
266  // for special handling when MonitorRequester start()s or stop()s
+
267  virtual void onStart() {}
+
268  virtual void onStop() {}
+
271  virtual void requestUpdate() {guard_t G(lock); post(G);}
+
272 
+
273  virtual void destroy()
+
274  {
+
275  stop();
+
276  }
+
277 
+
278 private:
+
279  virtual epics::pvData::Status start()
+
280  {
+
281  epics::pvData::Status ret;
+
282  bool notify = false;
+
283  BaseMonitor::shared_pointer self;
+
284  {
+
285  guard_t G(lock);
+
286  if(running) return ret;
+
287  running = true;
+
288  if(!complete) return ret; // haveType() not called (error?)
+
289  inoverflow = empty.empty();
+
290  if(!inoverflow) {
+
291 
+
292  // post complete event
+
293  overflow.clear();
+
294  changed.clear();
+
295  changed.set(0);
+
296  notify = true;
+
297  }
+
298  }
+
299  if(notify) onStart(); // may result in post()
+
300  return ret;
+
301  }
+
302 
+
303  virtual epics::pvData::Status stop()
+
304  {
+
305  BaseMonitor::shared_pointer self;
+
306  bool notify;
+
307  epics::pvData::Status ret;
+
308  {
+
309  guard_t G(lock);
+
310  notify = running;
+
311  running = false;
+
312  }
+
313  if(notify) onStop();
+
314  return ret;
+
315  }
+
316 
+
317  virtual epics::pvAccess::MonitorElementPtr poll()
+
318  {
+
319  epics::pvAccess::MonitorElementPtr ret;
+
320  guard_t G(lock);
+
321  if(running && complete && !inuse.empty()) {
+
322  ret = inuse.front();
+
323  inuse.pop_front();
+
324  }
+
325  return ret;
+
326  }
+
327 
+
328  virtual void release(epics::pvAccess::MonitorElementPtr const & elem)
+
329  {
+
330  BaseMonitor::shared_pointer self;
+
331  {
+
332  guard_t G(lock);
+
333  empty.push_back(elem);
+
334  if(inoverflow)
+
335  self = weakself.lock(); //TODO: concurrent release?
+
336  }
+
337  if(self)
+
338  self->requestUpdate(); // may result in post()
+
339  }
+
340 public:
+
341  virtual void getStats(Stats& s) const
+
342  {
+
343  guard_t G(lock);
+
344  s.nempty = empty.size();
+
345  s.nfilled = inuse.size();
+
346  s.noutstanding = nbuffers - s.nempty - s.nfilled;
+
347  }
+
348 };
+
349 
+
350 template<class CP>
+
351 struct BaseChannelProviderFactory : epics::pvAccess::ChannelProviderFactory
+
352 {
+
353  typedef CP provider_type;
+
354  std::string name;
+
355  epicsMutex lock;
+
356  std::tr1::weak_ptr<CP> last_shared;
+
357 
+
358  BaseChannelProviderFactory(const char *name) :name(name) {}
+
359  virtual ~BaseChannelProviderFactory() {}
+
360 
+
361  virtual std::string getFactoryName() { return name; }
+
362 
+
363  virtual epics::pvAccess::ChannelProvider::shared_pointer sharedInstance()
+
364  {
+
365  epicsGuard<epicsMutex> G(lock);
+
366  std::tr1::shared_ptr<CP> ret(last_shared.lock());
+
367  if(!ret) {
+
368  ret.reset(new CP());
+
369  last_shared = ret;
+
370  }
+
371  return ret;
+
372  }
+
373 
+
374  virtual epics::pvAccess::ChannelProvider::shared_pointer newInstance(const std::tr1::shared_ptr<epics::pvAccess::Configuration>&)
+
375  {
+
376  std::tr1::shared_ptr<CP> ret(new CP());
+
377  return ret;
+
378  }
+
379 };
+
380 
+
381 #endif // PVAHELPER_H
+
bool post(guard_t &guard, const epics::pvData::BitSet &updated)
post update with changed
Definition: pvahelper.h:217
+
bool post(guard_t &guard, const epics::pvData::BitSet &updated, no_overflow)
post update if queue not full, if full return false w/o overflow
Definition: pvahelper.h:136
+
bool post(guard_t &guard)
post update of pending changes. eg. call from requestUpdate()
Definition: pvahelper.h:159
+
void connect(guard_t &guard, const epics::pvData::PVStructurePtr &value)
Definition: pvahelper.h:110
+ +
virtual void requestUpdate()
Definition: pvahelper.h:271
+ + + +
bool post(guard_t &guard, const epics::pvData::BitSet &updated, const epics::pvData::BitSet &overflowed)
post update with changed and overflowed masks (eg. when updates were lost in some upstream queue) ...
Definition: pvahelper.h:185
+
+ + + + diff --git a/pvalink_8cpp_source.html b/pvalink_8cpp_source.html new file mode 100644 index 0000000..a34d124 --- /dev/null +++ b/pvalink_8cpp_source.html @@ -0,0 +1,456 @@ + + + + + + +pva2pva: pdbApp/pvalink.cpp Source File + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
pvalink.cpp
+
+
+
1 
+
2 #include <set>
+
3 #include <map>
+
4 
+
5 #define EPICS_DBCA_PRIVATE_API
+
6 #include <epicsGuard.h>
+
7 #include <dbAccess.h>
+
8 #include <dbCommon.h>
+
9 #include <dbLink.h>
+
10 #include <dbScan.h>
+
11 #include <errlog.h>
+
12 #include <initHooks.h>
+
13 #include <alarm.h>
+
14 #include <epicsExit.h>
+
15 #include <epicsAtomic.h>
+
16 #include <link.h>
+
17 #include <dbJLink.h>
+
18 #include <epicsUnitTest.h>
+
19 #include <epicsString.h>
+
20 
+
21 #include <epicsStdio.h> /* redirects stdout/stderr */
+
22 
+
23 #include <pv/pvAccess.h>
+
24 #include <pv/clientFactory.h>
+
25 #include <pv/iocshelper.h>
+
26 #include <pv/reftrack.h>
+
27 #include <pva/client.h>
+
28 
+
29 #include "pv/qsrv.h"
+
30 #include "helper.h"
+
31 #include "pvif.h"
+
32 #include "pvalink.h"
+
33 
+
34 #include <epicsExport.h> /* defines epicsExportSharedSymbols */
+
35 
+
36 #if EPICS_VERSION_INT>=VERSION_INT(7,0,6,0)
+
37 # define HAVE_SHUTDOWN_HOOKS
+
38 #endif
+
39 
+
40 int pvaLinkDebug;
+
41 int pvaLinkIsolate;
+
42 
+
43 using namespace pvalink;
+
44 
+
45 namespace {
+
46 
+
47 // halt, and clear, scan workers before dbCloseLinks() (cf. iocShutdown())
+
48 static void shutdownStep1()
+
49 {
+
50  // no locking here as we assume that shutdown doesn't race startup
+
51  if(!pvaGlobal) return;
+
52 
+
53  pvaGlobal->queue.close();
+
54 }
+
55 
+
56 // Cleanup pvaGlobal, including PVA client and QSRV providers ahead of PDB cleanup
+
57 // specifically QSRV provider must be free'd prior to db_cleanup_events()
+
58 static void shutdownStep2()
+
59 {
+
60  if(!pvaGlobal) return;
+
61 
+
62  {
+
63  Guard G(pvaGlobal->lock);
+
64  if(pvaGlobal->channels.size()) {
+
65  fprintf(stderr, "pvaLink leaves %zu channels open\n",
+
66  pvaGlobal->channels.size());
+
67  }
+
68  }
+
69 
+
70  delete pvaGlobal;
+
71  pvaGlobal = NULL;
+
72 }
+
73 
+
74 #ifndef HAVE_SHUTDOWN_HOOKS
+
75 static void stopPVAPool(void*)
+
76 {
+
77  try {
+
78  shutdownStep1();
+
79  }catch(std::exception& e){
+
80  fprintf(stderr, "Error while stopping PVA link pool : %s\n", e.what());
+
81  }
+
82 }
+
83 
+
84 static void finalizePVA(void*)
+
85 {
+
86  try {
+
87  shutdownStep2();
+
88  }catch(std::exception& e){
+
89  fprintf(stderr, "Error initializing pva link handling : %s\n", e.what());
+
90  }
+
91 }
+
92 #endif
+
93 
+
94 /* The Initialization game...
+
95  *
+
96  * # Parse links during dbPutString() (calls our jlif*)
+
97  * # announce initHookAfterCaLinkInit
+
98  * # dbChannelInit() (needed for QSRV to work)
+
99  * # Re-parse links (calls to our jlif*)
+
100  * # Open links. Calls jlif::get_lset() and then lset::openLink()
+
101  * # announce initHookAfterInitDatabase
+
102  * # ... scan threads start ...
+
103  * # announce initHookAfterIocBuilt
+
104  */
+
105 void initPVALink(initHookState state)
+
106 {
+
107  try {
+
108  if(state==initHookAfterCaLinkInit) {
+
109  // before epicsExit(exitDatabase),
+
110  // so hook registered here will be run after iocShutdown()
+
111  // which closes links
+
112  if(pvaGlobal) {
+
113  cantProceed("# Missing call to testqsrvShutdownOk() and/or testqsrvCleanup()");
+
114  }
+
115  pvaGlobal = new pvaGlobal_t;
+
116 
+
117 #ifndef HAVE_SHUTDOWN_HOOKS
+
118  static bool atexitInstalled;
+
119  if(!atexitInstalled) {
+
120  epicsAtExit(finalizePVA, NULL);
+
121  atexitInstalled = true;
+
122  }
+
123 #endif
+
124 
+
125  } else if(state==initHookAfterInitDatabase) {
+
126  pvac::ClientProvider local("server:QSRV"),
+
127  remote("pva");
+
128  pvaGlobal->provider_local = local;
+
129  pvaGlobal->provider_remote = remote;
+
130 
+
131  } else if(state==initHookAfterIocBuilt) {
+
132  // after epicsExit(exitDatabase)
+
133  // so hook registered here will be run before iocShutdown()
+
134 
+
135 #ifndef HAVE_SHUTDOWN_HOOKS
+
136  epicsAtExit(stopPVAPool, NULL);
+
137 #endif
+
138 
+
139  Guard G(pvaGlobal->lock);
+
140  pvaGlobal->running = true;
+
141 
+
142  for(pvaGlobal_t::channels_t::iterator it(pvaGlobal->channels.begin()), end(pvaGlobal->channels.end());
+
143  it != end; ++it)
+
144  {
+
145  std::tr1::shared_ptr<pvaLinkChannel> chan(it->second.lock());
+
146  if(!chan) continue;
+
147 
+
148  chan->open();
+
149  }
+
150 #ifdef HAVE_SHUTDOWN_HOOKS
+
151  } else if(state==initHookAtShutdown) {
+
152  shutdownStep1();
+
153 
+
154  } else if(state==initHookAfterShutdown) {
+
155  shutdownStep2();
+
156 #endif
+
157  }
+
158  }catch(std::exception& e){
+
159  cantProceed("Error initializing pva link handling : %s\n", e.what());
+
160  }
+
161 }
+
162 
+
163 } // namespace
+
164 
+
165 // halt, and clear, scan workers before dbCloseLinks() (cf. iocShutdown())
+
166 void testqsrvShutdownOk(void)
+
167 {
+
168  try {
+
169  shutdownStep1();
+
170  }catch(std::exception& e){
+
171  testAbort("Error while stopping PVA link pool : %s\n", e.what());
+
172  }
+
173 }
+
174 
+
175 void testqsrvCleanup(void)
+
176 {
+
177  try {
+
178  shutdownStep2();
+
179  }catch(std::exception& e){
+
180  testAbort("Error initializing pva link handling : %s\n", e.what());
+
181  }
+
182 }
+
183 
+
184 void testqsrvWaitForLinkEvent(struct link *plink)
+
185 {
+
186  std::tr1::shared_ptr<pvaLinkChannel> lchan;
+
187  {
+
188  DBScanLocker lock(plink->precord);
+
189 
+
190  if(plink->type!=JSON_LINK || !plink->value.json.jlink || plink->value.json.jlink->pif!=&lsetPVA) {
+
191  testAbort("Not a PVA link");
+
192  }
+
193  pvaLink *pval = static_cast<pvaLink*>(plink->value.json.jlink);
+
194  lchan = pval->lchan;
+
195  }
+
196  if(lchan) {
+
197  lchan->run_done.wait();
+
198  }
+
199 }
+
200 
+
201 extern "C"
+
202 void dbpvar(const char *precordname, int level)
+
203 {
+
204  try {
+
205  if(!pvaGlobal) {
+
206  printf("PVA links not initialized\n");
+
207  return;
+
208  }
+
209 
+
210  if (!precordname || precordname[0] == '\0' || !strcmp(precordname, "*")) {
+
211  precordname = NULL;
+
212  printf("PVA links in all records\n\n");
+
213  } else {
+
214  printf("PVA links in record named '%s'\n\n", precordname);
+
215  }
+
216 
+
217  size_t nchans = 0, nlinks = 0, nconn = 0;
+
218 
+
219  pvaGlobal_t::channels_t channels;
+
220  {
+
221  Guard G(pvaGlobal->lock);
+
222  channels = pvaGlobal->channels; // copy snapshot
+
223  }
+
224 
+
225  for(pvaGlobal_t::channels_t::const_iterator it(channels.begin()), end(channels.end());
+
226  it != end; ++it)
+
227  {
+
228  std::tr1::shared_ptr<pvaLinkChannel> chan(it->second.lock());
+
229  if(!chan) continue;
+
230 
+
231  Guard G(chan->lock);
+
232 
+
233  if(precordname) {
+
234  // only show links fields of these records
+
235  bool match = false;
+
236  for(pvaLinkChannel::links_t::const_iterator it2(chan->links.begin()), end2(chan->links.end());
+
237  it2 != end2; ++it2)
+
238  {
+
239  const pvaLink *pval = *it2;
+
240  // plink==NULL shouldn't happen, but we are called for debugging, so be paranoid.
+
241  if(pval->plink && epicsStrGlobMatch(pval->plink->precord->name, precordname)) {
+
242  match = true;
+
243  nlinks++;
+
244  }
+
245  }
+
246  if(!match)
+
247  continue;
+
248  }
+
249 
+
250  nchans++;
+
251  if(chan->connected_latched)
+
252  nconn++;
+
253 
+
254  if(!precordname)
+
255  nlinks += chan->links.size();
+
256 
+
257  if(level<=0)
+
258  continue;
+
259 
+
260  if(level>=2 || (!chan->connected_latched && level==1)) {
+
261  if(chan->key.first.size()<=28) {
+
262  printf("%28s ", chan->key.first.c_str());
+
263  } else {
+
264  printf("%s\t", chan->key.first.c_str());
+
265  }
+
266 
+
267  printf("conn=%c %zu disconnects, %zu type changes",
+
268  chan->connected_latched?'T':'F',
+
269  chan->num_disconnect,
+
270  chan->num_type_change);
+
271  if(chan->op_put.valid()) {
+
272  printf(" Put");
+
273  }
+
274 
+
275  if(level>=3) {
+
276  printf(", provider '%s'", chan->providerName.c_str());
+
277  }
+
278  printf("\n");
+
279  // level 4 reserved for channel/provider details
+
280 
+
281  if(level>=5) {
+
282  for(pvaLinkChannel::links_t::const_iterator it2(chan->links.begin()), end2(chan->links.end());
+
283  it2 != end2; ++it2)
+
284  {
+
285  const pvaLink *pval = *it2;
+
286 
+
287  if(!pval->plink)
+
288  continue;
+
289  else if(precordname && !epicsStrGlobMatch(pval->plink->precord->name, precordname))
+
290  continue;
+
291 
+
292  const char *fldname = "???";
+
293  pdbRecordIterator rec(pval->plink->precord);
+
294  for(bool done = !!dbFirstField(&rec.ent, 0); !done; done = !!dbNextField(&rec.ent, 0))
+
295  {
+
296  if(rec.ent.pfield == (void*)pval->plink) {
+
297  fldname = rec.ent.pflddes->name;
+
298  break;
+
299  }
+
300  }
+
301 
+
302  printf("%*s%s.%s", 30, "", pval->plink ? pval->plink->precord->name : "<NULL>", fldname);
+
303 
+
304  switch(pval->pp) {
+
305  case pvaLinkConfig::NPP: printf(" NPP"); break;
+
306  case pvaLinkConfig::Default: printf(" Def"); break;
+
307  case pvaLinkConfig::PP: printf(" PP"); break;
+
308  case pvaLinkConfig::CP: printf(" CP"); break;
+
309  case pvaLinkConfig::CPP: printf(" CPP"); break;
+
310  }
+
311  switch(pval->ms) {
+
312  case pvaLinkConfig::NMS: printf(" NMS"); break;
+
313  case pvaLinkConfig::MS: printf(" MS"); break;
+
314  case pvaLinkConfig::MSI: printf(" MSI"); break;
+
315  }
+
316 
+
317  printf(" Q=%u pipe=%c defer=%c time=%c retry=%c morder=%d\n",
+
318  unsigned(pval->queueSize),
+
319  pval->pipeline ? 'T' : 'F',
+
320  pval->defer ? 'T' : 'F',
+
321  pval->time ? 'T' : 'F',
+
322  pval->retry ? 'T' : 'F',
+
323  pval->monorder);
+
324  }
+
325  printf("\n");
+
326  }
+
327  }
+
328  }
+
329 
+
330  printf(" %zu/%zu channels connected used by %zu links\n",
+
331  nconn, nchans, nlinks);
+
332 
+
333  } catch(std::exception& e) {
+
334  fprintf(stderr, "Error: %s\n", e.what());
+
335  }
+
336 }
+
337 
+
338 static
+
339 void installPVAAddLinkHook()
+
340 {
+
341  initHookRegister(&initPVALink);
+
342  epics::iocshRegister<const char*, int, &dbpvar>("dbpvar", "record name", "level");
+
343  epics::registerRefCounter("pvaLinkChannel", &pvaLinkChannel::num_instances);
+
344  epics::registerRefCounter("pvaLink", &pvaLink::num_instances);
+
345 }
+
346 
+
347 extern "C" {
+
348  epicsExportRegistrar(installPVAAddLinkHook);
+
349  epicsExportAddress(jlif, lsetPVA);
+
350  epicsExportAddress(int, pvaLinkDebug);
+
351  epicsExportAddress(int, pvaLinkNWorkers);
+
352 }
+ + + + + +
+ + + + diff --git a/pvalink_8h_source.html b/pvalink_8h_source.html new file mode 100644 index 0000000..324f40a --- /dev/null +++ b/pvalink_8h_source.html @@ -0,0 +1,360 @@ + + + + + + +pva2pva: pdbApp/pvalink.h Source File + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
pvalink.h
+
+
+
1 #ifndef PVALINK_H
+
2 #define PVALINK_H
+
3 
+
4 #include <set>
+
5 #include <map>
+
6 
+
7 #define EPICS_DBCA_PRIVATE_API
+
8 #include <epicsGuard.h>
+
9 #include <dbAccess.h>
+
10 #include <dbCommon.h>
+
11 #include <dbLink.h>
+
12 #include <dbScan.h>
+
13 #include <errlog.h>
+
14 #include <initHooks.h>
+
15 #include <alarm.h>
+
16 #include <epicsExit.h>
+
17 #include <epicsAtomic.h>
+
18 #include <link.h>
+
19 #include <dbJLink.h>
+
20 #include <errlog.h>
+
21 #include <epicsThread.h>
+
22 #include <epicsMutex.h>
+
23 #include <epicsEvent.h>
+
24 #include <dbChannel.h>
+
25 #include <dbStaticLib.h>
+
26 #include <dbLock.h>
+
27 #include <dbEvent.h>
+
28 #include <epicsVersion.h>
+
29 
+
30 #include <pv/status.h>
+
31 #include <pv/bitSet.h>
+
32 #include <pv/pvData.h>
+
33 
+
34 #include <pva/client.h>
+
35 #include <pv/anyscalar.h>
+
36 #include <pv/thread.h>
+
37 #include <pv/lock.h>
+
38 #include <pv/iocshelper.h>
+
39 
+
40 #include <pv/sharedPtr.h>
+
41 
+
42 #include "helper.h"
+
43 #include "pvif.h"
+
44 #include "tpool.h"
+
45 
+
46 extern "C" {
+
47  QSRV_API extern int pvaLinkDebug;
+
48  QSRV_API extern int pvaLinkIsolate;
+
49  QSRV_API extern int pvaLinkNWorkers;
+
50 }
+
51 
+
52 #if 0
+
53 # define TRACE(X) std::cerr<<"PVAL "<<__func__<<" " X <<"\n"
+
54 #else
+
55 # define TRACE(X) do {} while(0)
+
56 #endif
+
57 
+
58 // pvaLink and pvaLinkChannel have ->debug
+
59 #define DEBUG(OBJ, X) do{ if((OBJ)->debug) std::cout X<<"\n"; }while(0)
+
60 
+
61 namespace pvalink {
+
62 
+
63 namespace pvd = epics::pvData;
+
64 namespace pva = epics::pvAccess;
+
65 
+
66 typedef epicsGuard<pvd::Mutex> Guard;
+
67 typedef epicsGuardRelease<pvd::Mutex> UnGuard;
+
68 
+
69 struct pvaLink;
+
70 struct pvaLinkChannel;
+
71 
+
72 extern lset pva_lset;
+
73 extern jlif lsetPVA;
+
74 
+
75 struct pvaLinkConfig : public jlink
+
76 {
+
77  // configuration, output of jlif parsing
+
79  std::string channelName;
+
81  std::string fieldName;
+
82 
+
83  size_t queueSize;
+
84 
+
85  enum pp_t {
+
86  NPP,
+
87  Default, // for put() only. For monitor, treated as NPP
+
88  PP, // for put() only, For monitor, treated as NPP
+
89  CP, // for monitor only, put treats as pp
+
90  CPP, // for monitor only, put treats as pp
+
91  } pp;
+
92  enum ms_t {
+
93  NMS,
+
94  MS,
+
95  MSI,
+
96  } ms;
+
97 
+
98  bool defer, pipeline, time, retry, local, always;
+
99  int monorder;
+
100 
+
101  // internals used by jlif parsing
+
102  std::string jkey;
+
103 
+
104  pvaLinkConfig();
+
105  virtual ~pvaLinkConfig();
+
106 };
+
107 
+
108 struct pvaGlobal_t {
+
109  pvac::ClientProvider provider_local,
+
110  provider_remote;
+
111 
+
112  const pvd::PVDataCreatePtr create;
+
113 
+
114  WorkQueue queue;
+
115 
+
116  pvd::Mutex lock;
+
117 
+
118  bool running; // set after dbEvent is initialized and safe to use
+
119 
+
120  // a tuple of channel name and printed pvRequest (or Monitor)
+
121  typedef std::pair<std::string, std::string> channels_key_t;
+
122  // pvaLinkChannel dtor prunes dead entires
+
123  typedef std::map<channels_key_t, std::tr1::weak_ptr<pvaLinkChannel> > channels_t;
+
124  // Cache of active Channels (really about caching Monitor)
+
125  channels_t channels;
+
126 
+
127  pvaGlobal_t();
+
128  ~pvaGlobal_t();
+
129 };
+
130 extern pvaGlobal_t *pvaGlobal;
+
131 
+
132 struct pvaLinkChannel : public pvac::ClientChannel::MonitorCallback,
+
133  public pvac::ClientChannel::PutCallback,
+
134  public epicsThreadRunable,
+
135  public std::tr1::enable_shared_from_this<pvaLinkChannel>
+
136 {
+
137  const pvaGlobal_t::channels_key_t key; // tuple of (channelName, pvRequest key)
+
138  const pvd::PVStructure::const_shared_pointer pvRequest; // used with monitor
+
139 
+
140  static size_t num_instances;
+
141 
+
142  pvd::Mutex lock;
+
143  epicsEvent run_done; // used by testing code
+
144 
+
145  pvac::ClientChannel chan;
+
146  pvac::Monitor op_mon;
+
147  pvac::Operation op_put;
+
148 
+
149  std::string providerName;
+
150  size_t num_disconnect, num_type_change;
+
151  bool connected;
+
152  bool connected_latched; // connection status at the run()
+
153  bool isatomic;
+
154  bool queued; // added to WorkQueue
+
155  bool debug; // set if any jlink::debug is set
+
156  std::tr1::shared_ptr<const void> previous_root;
+
157  typedef std::set<dbCommon*> after_put_t;
+
158  after_put_t after_put;
+
159 
+
160  struct LinkSort {
+
161  bool operator()(const pvaLink *L, const pvaLink *R) const;
+
162  };
+
163 
+
164  typedef std::set<pvaLink*, LinkSort> links_t;
+
165 
+
166  // list of currently attached links. maintained by pvaLink ctor/dtor
+
167  // TODO: sort by PHAS
+
168  links_t links;
+
169 
+
170  // set when 'links' is modified to trigger re-compute of record scan list
+
171  bool links_changed;
+
172 
+
173  pvaLinkChannel(const pvaGlobal_t::channels_key_t& key, const epics::pvData::PVStructure::const_shared_pointer &pvRequest);
+
174  virtual ~pvaLinkChannel();
+
175 
+
176  void open();
+
177  void put(bool force=false); // begin Put op.
+
178 
+
179  // pvac::ClientChanel::MonitorCallback
+
180  virtual void monitorEvent(const pvac::MonitorEvent& evt) OVERRIDE FINAL;
+
181 
+
182  // pvac::ClientChanel::PutCallback
+
183  virtual void putBuild(const epics::pvData::StructureConstPtr& build, pvac::ClientChannel::PutCallback::Args& args) OVERRIDE FINAL;
+
184  virtual void putDone(const pvac::PutEvent& evt) OVERRIDE FINAL;
+
185  struct AfterPut : public epicsThreadRunable {
+
186  std::tr1::weak_ptr<pvaLinkChannel> lc;
+
187  virtual ~AfterPut() {}
+
188  virtual void run() OVERRIDE FINAL;
+
189  };
+
190  std::tr1::shared_ptr<AfterPut> AP;
+
191 private:
+
192  virtual void run() OVERRIDE FINAL;
+
193  void run_dbProcess(size_t idx); // idx is index in scan_records
+
194 
+
195  // ==== Treat remaining as local to run()
+
196 
+
197  std::vector<dbCommon*> scan_records;
+
198  std::vector<bool> scan_check_passive;
+
199  std::vector<epics::pvData::BitSet> scan_changed;
+
200 
+
201  DBManyLock atomic_lock;
+
202 };
+
203 
+
204 struct pvaLink : public pvaLinkConfig
+
205 {
+
206  static size_t num_instances;
+
207 
+
208  bool alive; // attempt to catch some use after free
+
209  dbfType type;
+
210 
+
211  DBLINK * plink; // may be NULL
+
212 
+
213  std::tr1::shared_ptr<pvaLinkChannel> lchan;
+
214 
+
215  bool used_scratch, used_queue;
+
216  pvd::shared_vector<const void> put_scratch, put_queue;
+
217 
+
218  // cached fields from channel op_mon
+
219  // updated in onTypeChange()
+
220  epics::pvData::PVField::const_shared_pointer fld_value;
+
221  epics::pvData::PVScalar::const_shared_pointer fld_severity,
+
222  fld_seconds,
+
223  fld_nanoseconds;
+
224  epics::pvData::PVStructure::const_shared_pointer fld_display,
+
225  fld_control,
+
226  fld_valueAlarm;
+
227  epics::pvData::BitSet proc_changed;
+
228 
+
229  // cached snapshot of alarm and timestamp
+
230  // captured in pvaGetValue().
+
231  // we choose not to ensure consistency with display/control meta-data
+
232  epicsTimeStamp snap_time;
+
233  short snap_severity;
+
234 
+
235  pvaLink();
+
236  virtual ~pvaLink();
+
237 
+
238  // returns pvRequest to be used with monitor
+
239  pvd::PVStructurePtr makeRequest();
+
240 
+
241  bool valid() const;
+
242 
+
243  // fetch a sub-sub-field of the top monitored field.
+
244  pvd::PVField::const_shared_pointer getSubField(const char *name);
+
245 
+
246  void onDisconnect();
+
247  void onTypeChange();
+
248 };
+
249 
+
250 
+
251 } // namespace pvalink
+
252 
+
253 #endif // PVALINK_H
+ + + + + + + + + + +
+ + + + diff --git a/pvalink__channel_8cpp_source.html b/pvalink__channel_8cpp_source.html new file mode 100644 index 0000000..b8eb226 --- /dev/null +++ b/pvalink__channel_8cpp_source.html @@ -0,0 +1,535 @@ + + + + + + +pva2pva: pdbApp/pvalink_channel.cpp Source File + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
pvalink_channel.cpp
+
+
+
1 
+
2 #include <alarm.h>
+
3 
+
4 #include <pv/reftrack.h>
+
5 
+
6 #include "pvalink.h"
+
7 
+
8 int pvaLinkNWorkers = 1;
+
9 
+
10 namespace pvalink {
+
11 
+
12 pvaGlobal_t *pvaGlobal;
+
13 
+
14 
+
15 pvaGlobal_t::pvaGlobal_t()
+
16  :create(pvd::getPVDataCreate())
+
17  ,queue("PVAL")
+
18  ,running(false)
+
19 {
+
20  // worker should be above PVA worker priority?
+
21  queue.start(std::max(1, pvaLinkNWorkers), epicsThreadPriorityMedium);
+
22 }
+
23 
+
24 pvaGlobal_t::~pvaGlobal_t()
+
25 {
+
26 }
+
27 
+
28 size_t pvaLinkChannel::num_instances;
+
29 size_t pvaLink::num_instances;
+
30 
+
31 
+
32 bool pvaLinkChannel::LinkSort::operator()(const pvaLink *L, const pvaLink *R) const {
+
33  if(L->monorder==R->monorder)
+
34  return L < R;
+
35  return L->monorder < R->monorder;
+
36 }
+
37 
+
38 // being called with pvaGlobal::lock held
+
39 pvaLinkChannel::pvaLinkChannel(const pvaGlobal_t::channels_key_t &key, const pvd::PVStructure::const_shared_pointer& pvRequest)
+
40  :key(key)
+
41  ,pvRequest(pvRequest)
+
42  ,num_disconnect(0u)
+
43  ,num_type_change(0u)
+
44  ,connected(false)
+
45  ,connected_latched(false)
+
46  ,isatomic(false)
+
47  ,queued(false)
+
48  ,debug(false)
+
49  ,links_changed(false)
+
50  ,AP(new AfterPut)
+
51 {}
+
52 
+
53 pvaLinkChannel::~pvaLinkChannel() {
+
54  {
+
55  Guard G(pvaGlobal->lock);
+
56  pvaGlobal->channels.erase(key);
+
57  }
+
58 
+
59  Guard G(lock);
+
60 
+
61  assert(links.empty());
+
62  REFTRACE_DECREMENT(num_instances);
+
63 }
+
64 
+
65 void pvaLinkChannel::open()
+
66 {
+
67  Guard G(lock);
+
68 
+
69  try {
+
70  chan = pvaGlobal->provider_local.connect(key.first);
+
71  DEBUG(this, <<key.first<<" OPEN Local");
+
72  providerName = pvaGlobal->provider_local.name();
+
73  } catch(std::exception& e){
+
74  // The PDBProvider doesn't have a way to communicate to us
+
75  // whether this is an invalid record or group name,
+
76  // or if this is some sort of internal error.
+
77  // So we are forced to assume it is an invalid name.
+
78  DEBUG(this, <<key.first<<" OPEN Not local "<<e.what());
+
79  }
+
80  if(!pvaLinkIsolate && !chan) {
+
81  chan = pvaGlobal->provider_remote.connect(key.first);
+
82  DEBUG(this, <<key.first<<" OPEN Remote ");
+
83  providerName = pvaGlobal->provider_remote.name();
+
84  }
+
85 
+
86  op_mon = chan.monitor(this, pvRequest);
+
87 
+
88  REFTRACE_INCREMENT(num_instances);
+
89 }
+
90 
+
91 static
+
92 pvd::StructureConstPtr putRequestType = pvd::getFieldCreate()->createFieldBuilder()
+
93  ->addNestedStructure("field")
+
94  ->endNested()
+
95  ->addNestedStructure("record")
+
96  ->addNestedStructure("_options")
+
97  ->add("block", pvd::pvBoolean)
+
98  ->add("process", pvd::pvString) // "true", "false", or "passive"
+
99  ->endNested()
+
100  ->endNested()
+
101  ->createStructure();
+
102 
+
103 // call with channel lock held
+
104 void pvaLinkChannel::put(bool force)
+
105 {
+
106  pvd::PVStructurePtr pvReq(pvd::getPVDataCreate()->createPVStructure(putRequestType));
+
107  pvReq->getSubFieldT<pvd::PVBoolean>("record._options.block")->put(!after_put.empty());
+
108 
+
109  unsigned reqProcess = 0;
+
110  bool doit = force;
+
111  for(links_t::iterator it(links.begin()), end(links.end()); it!=end; ++it)
+
112  {
+
113  pvaLink *link = *it;
+
114 
+
115  if(!link->used_scratch) continue;
+
116 
+
117  pvd::shared_vector<const void> temp;
+
118  temp.swap(link->put_scratch);
+
119  link->used_scratch = false;
+
120  temp.swap(link->put_queue);
+
121  link->used_queue = true;
+
122 
+
123  doit = true;
+
124 
+
125  switch(link->pp) {
+
126  case pvaLink::NPP:
+
127  reqProcess |= 1;
+
128  break;
+
129  case pvaLink::Default:
+
130  break;
+
131  case pvaLink::PP:
+
132  case pvaLink::CP:
+
133  case pvaLink::CPP:
+
134  reqProcess |= 2;
+
135  break;
+
136  }
+
137  }
+
138 
+
139  /* By default, use remote default (passive).
+
140  * Request processing, or not, if any link asks.
+
141  * Prefer PP over NPP if both are specified.
+
142  *
+
143  * TODO: per field granularity?
+
144  */
+
145  const char *proc = "passive";
+
146  if((reqProcess&2) || force) {
+
147  proc = "true";
+
148  } else if(reqProcess&1) {
+
149  proc = "false";
+
150  }
+
151  pvReq->getSubFieldT<pvd::PVString>("record._options.process")->put(proc);
+
152 
+
153  DEBUG(this, <<key.first<<"Start put "<<doit);
+
154  if(doit) {
+
155  // start net Put, cancels in-progress put
+
156  op_put = chan.put(this, pvReq);
+
157  }
+
158 }
+
159 
+
160 void pvaLinkChannel::putBuild(const epics::pvData::StructureConstPtr& build, pvac::ClientChannel::PutCallback::Args& args)
+
161 {
+
162  Guard G(lock);
+
163 
+
164  pvd::PVStructurePtr top(pvaGlobal->create->createPVStructure(build));
+
165 
+
166  for(links_t::iterator it(links.begin()), end(links.end()); it!=end; ++it)
+
167  {
+
168  pvaLink *link = *it;
+
169 
+
170  if(!link->used_queue) continue;
+
171  link->used_queue = false; // clear early so unexpected exception won't get us in a retry loop
+
172 
+
173  pvd::PVFieldPtr value(link->fieldName.empty() ? pvd::PVFieldPtr(top) : top->getSubField(link->fieldName));
+
174  if(value && value->getField()->getType()==pvd::structure) {
+
175  // maybe drill into NTScalar et al.
+
176  pvd::PVFieldPtr sub(static_cast<pvd::PVStructure*>(value.get())->getSubField("value"));
+
177  if(sub)
+
178  value.swap(sub);
+
179  }
+
180 
+
181  if(!value) continue; // TODO: how to signal error?
+
182 
+
183  pvd::PVStringArray::const_svector choices; // TODO populate from op_mon
+
184 
+
185  DEBUG(this, <<key.first<<" <- "<<value->getFullName());
+
186  copyDBF2PVD(link->put_queue, value, args.tosend, choices);
+
187 
+
188  link->put_queue.clear();
+
189  }
+
190  DEBUG(this, <<key.first<<" Put built");
+
191 
+
192  args.root = top;
+
193 }
+
194 
+
195 namespace {
+
196 // soo much easier with c++11 std::shared_ptr...
+
197 struct AFLinker {
+
198  std::tr1::shared_ptr<pvaLinkChannel> chan;
+
199  AFLinker(const std::tr1::shared_ptr<pvaLinkChannel>& chan) :chan(chan) {}
+
200  void operator()(pvaLinkChannel::AfterPut *) {
+
201  chan.reset();
+
202  }
+
203 };
+
204 } // namespace
+
205 
+
206 void pvaLinkChannel::putDone(const pvac::PutEvent& evt)
+
207 {
+
208  if(evt.event==pvac::PutEvent::Fail) {
+
209  errlogPrintf("%s PVA link put ERROR: %s\n", key.first.c_str(), evt.message.c_str());
+
210  }
+
211 
+
212  bool needscans;
+
213  {
+
214  Guard G(lock);
+
215 
+
216  DEBUG(this, <<key.first<<" Put result "<<evt.event);
+
217 
+
218  needscans = !after_put.empty();
+
219  op_put = pvac::Operation();
+
220 
+
221  if(evt.event==pvac::PutEvent::Success) {
+
222  // see if we need start a queue'd put
+
223  put();
+
224  }
+
225  }
+
226 
+
227  if(needscans) {
+
228  pvaGlobal->queue.add(AP);
+
229  }
+
230 }
+
231 
+
232 void pvaLinkChannel::AfterPut::run()
+
233 {
+
234  std::set<dbCommon*> toscan;
+
235  std::tr1::shared_ptr<pvaLinkChannel> link(lc.lock());
+
236  if(!link)
+
237  return;
+
238 
+
239  {
+
240  Guard G(link->lock);
+
241  toscan.swap(link->after_put);
+
242  }
+
243 
+
244  for(after_put_t::iterator it=toscan.begin(), end=toscan.end();
+
245  it!=end; ++it)
+
246  {
+
247  dbCommon *prec = *it;
+
248  dbScanLock(prec);
+
249  if(prec->pact) { // complete async. processing
+
250  (prec)->rset->process(prec);
+
251 
+
252  } else {
+
253  // maybe the result of "cancellation" or some record support logic error?
+
254  errlogPrintf("%s : not PACT when async PVA link completed. Logic error?\n", prec->name);
+
255  }
+
256  dbScanUnlock(prec);
+
257  }
+
258 
+
259 }
+
260 
+
261 void pvaLinkChannel::monitorEvent(const pvac::MonitorEvent& evt)
+
262 {
+
263  bool queue = false;
+
264 
+
265  {
+
266  DEBUG(this, <<key.first<<" EVENT "<<evt.event);
+
267  Guard G(lock);
+
268 
+
269  switch(evt.event) {
+
270  case pvac::MonitorEvent::Disconnect:
+
271  case pvac::MonitorEvent::Data:
+
272  connected = evt.event == pvac::MonitorEvent::Data;
+
273  queue = true;
+
274  break;
+
275  case pvac::MonitorEvent::Cancel:
+
276  break; // no-op
+
277  case pvac::MonitorEvent::Fail:
+
278  connected = false;
+
279  queue = true;
+
280  errlogPrintf("%s: PVA link monitor ERROR: %s\n", chan.name().c_str(), evt.message.c_str());
+
281  break;
+
282  }
+
283 
+
284  if(queued)
+
285  return; // already scheduled
+
286 
+
287  queued = queue;
+
288  }
+
289 
+
290  if(queue) {
+
291  pvaGlobal->queue.add(shared_from_this());
+
292  }
+
293 }
+
294 
+
295 // the work in calling dbProcess() which is common to
+
296 // both dbScanLock() and dbScanLockMany()
+
297 void pvaLinkChannel::run_dbProcess(size_t idx)
+
298 {
+
299  dbCommon *precord = scan_records[idx];
+
300 
+
301  if(scan_check_passive[idx] && precord->scan!=0) {
+
302  return;
+
303 
+
304  } else if(connected_latched && !op_mon.changed.logical_and(scan_changed[idx])) {
+
305  return;
+
306 
+
307  } else if (precord->pact) {
+
308  if (precord->tpro)
+
309  printf("%s: Active %s\n",
+
310  epicsThreadGetNameSelf(), precord->name);
+
311  precord->rpro = TRUE;
+
312 
+
313  }
+
314  dbProcess(precord);
+
315 }
+
316 
+
317 // Running from global WorkQueue thread
+
318 void pvaLinkChannel::run()
+
319 {
+
320  bool requeue = false;
+
321  {
+
322  Guard G(lock);
+
323 
+
324  queued = false;
+
325 
+
326  connected_latched = connected;
+
327 
+
328  // pop next update from monitor queue.
+
329  // still under lock to safeguard concurrent calls to lset functions
+
330  if(connected && !op_mon.poll()) {
+
331  DEBUG(this, <<key.first<<" RUN "<<"empty");
+
332  run_done.signal();
+
333  return; // monitor queue is empty, nothing more to do here
+
334  }
+
335 
+
336  DEBUG(this, <<key.first<<" RUN "<<(connected_latched?"connected":"disconnected"));
+
337 
+
338  assert(!connected || !!op_mon.root);
+
339 
+
340  if(!connected) {
+
341  num_disconnect++;
+
342 
+
343  // cancel pending put operations
+
344  op_put = pvac::Operation();
+
345 
+
346  for(links_t::iterator it(links.begin()), end(links.end()); it!=end; ++it)
+
347  {
+
348  pvaLink *link = *it;
+
349  link->onDisconnect();
+
350  }
+
351 
+
352  // Don't clear previous_root on disconnect.
+
353  // We will usually re-connect with the same type,
+
354  // and may get back the same PVStructure.
+
355 
+
356  } else if(previous_root.get() != (const void*)op_mon.root.get()) {
+
357  num_type_change++;
+
358 
+
359  for(links_t::iterator it(links.begin()), end(links.end()); it!=end; ++it)
+
360  {
+
361  pvaLink *link = *it;
+
362  link->onTypeChange();
+
363  }
+
364 
+
365  previous_root = std::tr1::static_pointer_cast<const void>(op_mon.root);
+
366  }
+
367 
+
368  // at this point we know we will re-queue, but not immediately
+
369  // so an expected error won't get us stuck in a tight loop.
+
370  requeue = queued = connected_latched;
+
371 
+
372  if(links_changed) {
+
373  // a link has been added or removed since the last update.
+
374  // rebuild our cached list of records to (maybe) process.
+
375 
+
376  scan_records.clear();
+
377  scan_check_passive.clear();
+
378  scan_changed.clear();
+
379 
+
380  for(links_t::iterator it(links.begin()), end(links.end()); it!=end; ++it)
+
381  {
+
382  pvaLink *link = *it;
+
383  assert(link && link->alive);
+
384 
+
385  if(!link->plink) continue;
+
386 
+
387  // only scan on monitor update for input links
+
388  if(link->type!=DBF_INLINK)
+
389  continue;
+
390 
+
391  // NPP and none/Default don't scan
+
392  // PP, CP, and CPP do scan
+
393  // PP and CPP only if SCAN=Passive
+
394  if(link->pp != pvaLink::PP && link->pp != pvaLink::CPP && link->pp != pvaLink::CP)
+
395  continue;
+
396 
+
397  scan_records.push_back(link->plink->precord);
+
398  scan_check_passive.push_back(link->pp != pvaLink::CP);
+
399  scan_changed.push_back(link->proc_changed);
+
400  }
+
401 
+
402  DBManyLock ML(scan_records);
+
403 
+
404  atomic_lock.swap(ML);
+
405 
+
406  links_changed = false;
+
407  }
+
408  }
+
409 
+
410  if(scan_records.empty()) {
+
411  // Nothing to do, so don't bother locking
+
412 
+
413  } else if(isatomic && scan_records.size() > 1u) {
+
414  DBManyLocker L(atomic_lock);
+
415 
+
416  for(size_t i=0, N=scan_records.size(); i<N; i++) {
+
417  run_dbProcess(i);
+
418  }
+
419 
+
420  } else {
+
421  for(size_t i=0, N=scan_records.size(); i<N; i++) {
+
422  DBScanLocker L(scan_records[i]);
+
423  run_dbProcess(i);
+
424  }
+
425  }
+
426 
+
427  if(requeue) {
+
428  // re-queue until monitor queue is empty
+
429  pvaGlobal->queue.add(shared_from_this());
+
430  } else {
+
431  run_done.signal();
+
432  }
+
433 }
+
434 
+
435 } // namespace pvalink
+ +
+ + + + diff --git a/pvalink__jlif_8cpp_source.html b/pvalink__jlif_8cpp_source.html new file mode 100644 index 0000000..77a3962 --- /dev/null +++ b/pvalink__jlif_8cpp_source.html @@ -0,0 +1,424 @@ + + + + + + +pva2pva: pdbApp/pvalink_jlif.cpp Source File + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
pvalink_jlif.cpp
+
+
+
1 #include <sstream>
+
2 
+
3 #include <epicsStdio.h> // redirects stdout/stderr
+
4 
+
5 #include "pvalink.h"
+
6 
+
7 namespace pvalink {
+
8 pvaLinkConfig::pvaLinkConfig()
+
9  :queueSize(4)
+
10  ,pp(Default)
+
11  ,ms(NMS)
+
12  ,defer(false)
+
13  ,pipeline(false)
+
14  ,time(false)
+
15  ,retry(false)
+
16  ,local(false)
+
17  ,always(false)
+
18  ,monorder(0)
+
19 {}
+
20 pvaLinkConfig::~pvaLinkConfig() {}
+
21 }
+
22 
+
23 namespace {
+
24 
+
25 using namespace pvalink;
+
26 
+
27 /* link options.
+
28  *
+
29  * "pvname" # short-hand, sets PV name only
+
30  *
+
31  * {
+
32  * "pv":"name",
+
33  * "field":"blah.foo",
+
34  * "Q":5,
+
35  * "pipeline":false,
+
36  * "proc":true, // false, true, none, "", "NPP", "PP", "CP", "CPP"
+
37  * "sevr":true, // false, true, "NMS", "MS", "MSI", "MSS"
+
38  * "time":true, // false, true
+
39  * "monorder":#,// order of processing during CP scan
+
40  * "defer":true,// whether to immediately start Put, or only queue value to be sent
+
41  * "retry":true,// queue Put while disconnected, and retry on connect
+
42  * "always":true,// CP/CPP updates always process a like, even if its input field hasn't changed
+
43  * "local":false,// Require local channel
+
44  * }
+
45  */
+
46 
+
47 jlink* pva_alloc_jlink(short dbr)
+
48 {
+
49  try {
+
50  TRACE();
+
51  return new pvaLink;
+
52 
+
53  }catch(std::exception& e){
+
54  errlogPrintf("Error allocating pva link: %s\n", e.what());
+
55  return NULL;
+
56  }
+
57 }
+
58 
+
59 #define TRY pvaLinkConfig *pvt = static_cast<pvaLinkConfig*>(pjlink); (void)pvt; try
+
60 #define CATCH(RET) catch(std::exception& e){ \
+
61  errlogPrintf("Error in %s link: %s\n", __FUNCTION__, e.what()); \
+
62  return RET; }
+
63 
+
64 void pva_free_jlink(jlink *pjlink)
+
65 {
+
66  TRY {
+
67  TRACE();
+
68  delete pvt;
+
69  }catch(std::exception& e){
+
70  errlogPrintf("Error freeing pva link: %s\n", e.what());
+
71  }
+
72 }
+
73 
+
74 jlif_result pva_parse_null(jlink *pjlink)
+
75 {
+
76  TRY {
+
77  TRACE(<<pvt->jkey<<" ");
+
78  if(pvt->parseDepth!=1) {
+
79  // ignore
+
80  } else if(pvt->jkey == "proc") {
+
81  pvt->pp = pvaLinkConfig::Default;
+
82  } else if(pvt->jkey == "sevr") {
+
83  pvt->ms = pvaLinkConfig::NMS;
+
84  } else if(pvt->jkey == "local") {
+
85  pvt->local = false; // alias for local:false
+
86  } else if(pvt->debug) {
+
87  printf("pva link parsing unknown none depth=%u key=\"%s\"\n",
+
88  pvt->parseDepth, pvt->jkey.c_str());
+
89  }
+
90 
+
91  pvt->jkey.clear();
+
92  return jlif_continue;
+
93  }CATCH(jlif_stop)
+
94 }
+
95 
+
96 jlif_result pva_parse_bool(jlink *pjlink, int val)
+
97 {
+
98  TRY {
+
99  TRACE(<<pvt->jkey<<" "<<(val?"true":"false"));
+
100  if(pvt->parseDepth!=1) {
+
101  // ignore
+
102  } else if(pvt->jkey == "proc") {
+
103  pvt->pp = val ? pvaLinkConfig::PP : pvaLinkConfig::NPP;
+
104  } else if(pvt->jkey == "sevr") {
+
105  pvt->ms = val ? pvaLinkConfig::MS : pvaLinkConfig::NMS;
+
106  } else if(pvt->jkey == "defer") {
+
107  pvt->defer = !!val;
+
108  } else if(pvt->jkey == "pipeline") {
+
109  pvt->pipeline = !!val;
+
110  } else if(pvt->jkey == "time") {
+
111  pvt->time = !!val;
+
112  } else if(pvt->jkey == "retry") {
+
113  pvt->retry = !!val;
+
114  } else if(pvt->jkey == "local") {
+
115  pvt->local = !!val;
+
116  } else if(pvt->jkey == "always") {
+
117  pvt->always = !!val;
+
118  } else if(pvt->debug) {
+
119  printf("pva link parsing unknown integer depth=%u key=\"%s\" value=%s\n",
+
120  pvt->parseDepth, pvt->jkey.c_str(), val ? "true" : "false");
+
121  }
+
122 
+
123  pvt->jkey.clear();
+
124  return jlif_continue;
+
125  }CATCH(jlif_stop)
+
126 }
+
127 
+
128 jlif_result pva_parse_integer(jlink *pjlink, long long val)
+
129 {
+
130  TRY {
+
131  TRACE(<<pvt->jkey<<" "<<val);
+
132  if(pvt->parseDepth!=1) {
+
133  // ignore
+
134  } else if(pvt->jkey == "Q") {
+
135  pvt->queueSize = val < 1 ? 1 : size_t(val);
+
136  } else if(pvt->jkey == "monorder") {
+
137  pvt->monorder = std::max(-1024, std::min(int(val), 1024));
+
138  } else if(pvt->debug) {
+
139  printf("pva link parsing unknown integer depth=%u key=\"%s\" value=%lld\n",
+
140  pvt->parseDepth, pvt->jkey.c_str(), val);
+
141  }
+
142 
+
143  pvt->jkey.clear();
+
144  return jlif_continue;
+
145  }CATCH(jlif_stop)
+
146 }
+
147 
+
148 jlif_result pva_parse_string(jlink *pjlink, const char *val, size_t len)
+
149 {
+
150  TRY{
+
151  std::string sval(val, len);
+
152  TRACE(<<pvt->jkey<<" "<<sval);
+
153  if(pvt->parseDepth==0 || (pvt->parseDepth==1 && pvt->jkey=="pv")) {
+
154  pvt->channelName = sval;
+
155 
+
156  } else if(pvt->parseDepth > 1) {
+
157  // ignore
+
158 
+
159  } else if(pvt->jkey=="field") {
+
160  pvt->fieldName = sval;
+
161 
+
162  } else if(pvt->jkey=="proc") {
+
163  if(sval.empty()) {
+
164  pvt->pp = pvaLinkConfig::Default;
+
165  } else if(sval=="CP") {
+
166  pvt->pp = pvaLinkConfig::CP;
+
167  } else if(sval=="CPP") {
+
168  pvt->pp = pvaLinkConfig::CPP;
+
169  } else if(sval=="PP") {
+
170  pvt->pp = pvaLinkConfig::PP;
+
171  } else if(sval=="NPP") {
+
172  pvt->pp = pvaLinkConfig::NPP;
+
173  } else if(pvt->debug) {
+
174  printf("pva link parsing unknown proc depth=%u key=\"%s\" value=\"%s\"\n",
+
175  pvt->parseDepth, pvt->jkey.c_str(), sval.c_str());
+
176  }
+
177 
+
178  } else if(pvt->jkey=="sevr") {
+
179  if(sval=="NMS") {
+
180  pvt->ms = pvaLinkConfig::NMS;
+
181  } else if(sval=="MS") {
+
182  pvt->ms = pvaLinkConfig::MS;
+
183  } else if(sval=="MSI") {
+
184  pvt->ms = pvaLinkConfig::MSI;
+
185  } else if(sval=="MSS") {
+
186  // not sure how to handle mapping severity for MSS.
+
187  // leave room for this to happen compatibly later by
+
188  // handling as alias for MS until then.
+
189  pvt->ms = pvaLinkConfig::MS;
+
190  } else if(pvt->debug) {
+
191  printf("pva link parsing unknown sevr depth=%u key=\"%s\" value=\"%s\"\n",
+
192  pvt->parseDepth, pvt->jkey.c_str(), sval.c_str());
+
193  }
+
194 
+
195  } else if(pvt->debug) {
+
196  printf("pva link parsing unknown string depth=%u key=\"%s\" value=\"%s\"\n",
+
197  pvt->parseDepth, pvt->jkey.c_str(), sval.c_str());
+
198  }
+
199 
+
200  pvt->jkey.clear();
+
201  return jlif_continue;
+
202  }CATCH(jlif_stop)
+
203 }
+
204 
+
205 jlif_key_result pva_parse_start_map(jlink *pjlink)
+
206 {
+
207  TRY {
+
208  TRACE();
+
209  return jlif_key_continue;
+
210  }CATCH(jlif_key_stop)
+
211 }
+
212 
+
213 jlif_result pva_parse_key_map(jlink *pjlink, const char *key, size_t len)
+
214 {
+
215  TRY {
+
216  std::string sval(key, len);
+
217  TRACE(<<sval);
+
218  pvt->jkey = sval;
+
219 
+
220  return jlif_continue;
+
221  }CATCH(jlif_stop)
+
222 }
+
223 
+
224 jlif_result pva_parse_end_map(jlink *pjlink)
+
225 {
+
226  TRY {
+
227  TRACE();
+
228  return jlif_continue;
+
229  }CATCH(jlif_stop)
+
230 }
+
231 
+
232 struct lset* pva_get_lset(const jlink *pjlink)
+
233 {
+
234  TRACE();
+
235  return &pva_lset;
+
236 }
+
237 
+
238 void pva_report(const jlink *rpjlink, int lvl, int indent)
+
239 {
+
240  const pvaLink *pval = static_cast<const pvaLink*>(rpjlink);
+
241  try {
+
242  (void)pval;
+
243  printf("%*s'pva': %s", indent, "", pval->channelName.c_str());
+
244  if(!pval->fieldName.empty())
+
245  printf("|.%s", pval->fieldName.c_str());
+
246 
+
247  switch(pval->pp) {
+
248  case pvaLinkConfig::NPP: printf(" NPP"); break;
+
249  case pvaLinkConfig::Default: printf(" Def"); break;
+
250  case pvaLinkConfig::PP: printf(" PP"); break;
+
251  case pvaLinkConfig::CP: printf(" CP"); break;
+
252  case pvaLinkConfig::CPP: printf(" CPP"); break;
+
253  }
+
254  switch(pval->ms) {
+
255  case pvaLinkConfig::NMS: printf(" NMS"); break;
+
256  case pvaLinkConfig::MS: printf(" MS"); break;
+
257  case pvaLinkConfig::MSI: printf(" MSI"); break;
+
258  }
+
259  if(lvl>0) {
+
260  printf(" Q=%u pipe=%c defer=%c time=%c retry=%c morder=%d",
+
261  unsigned(pval->queueSize),
+
262  pval->pipeline ? 'T' : 'F',
+
263  pval->defer ? 'T' : 'F',
+
264  pval->time ? 'T' : 'F',
+
265  pval->retry ? 'T' : 'F',
+
266  pval->monorder);
+
267  }
+
268 
+
269  if(pval->lchan) {
+
270  // after open()
+
271  Guard G(pval->lchan->lock);
+
272 
+
273  printf(" conn=%c", pval->lchan->connected ? 'T' : 'F');
+
274  if(pval->lchan->op_put.valid()) {
+
275  printf(" Put");
+
276  }
+
277 
+
278  if(lvl>0) {
+
279  printf(" #disconn=%zu prov=%s", pval->lchan->num_disconnect, pval->lchan->providerName.c_str());
+
280  }
+
281  if(lvl>1) {
+
282  printf(" inprog=%c",
+
283  pval->lchan->queued?'T':'F');
+
284  }
+
285  if(lvl>5) {
+
286  std::ostringstream strm;
+
287  pval->lchan->chan.show(strm);
+
288  printf("\n%*s CH: %s", indent, "", strm.str().c_str());
+
289  }
+
290  } else {
+
291  printf(" No Channel");
+
292  }
+
293  printf("\n");
+
294  }CATCH()
+
295 }
+
296 
+
297 } //namespace
+
298 
+
299 namespace pvalink {
+
300 
+
301 jlif lsetPVA = {
+
302  "pva",
+
303  &pva_alloc_jlink,
+
304  &pva_free_jlink,
+
305  &pva_parse_null,
+
306  &pva_parse_bool,
+
307  &pva_parse_integer,
+
308  NULL,
+
309  &pva_parse_string,
+
310  &pva_parse_start_map,
+
311  &pva_parse_key_map,
+
312  &pva_parse_end_map,
+
313  NULL,
+
314  NULL,
+
315  NULL,
+
316  &pva_get_lset,
+
317  &pva_report,
+
318  NULL
+
319 };
+
320 
+
321 } //namespace pvalink
+ + + + +
+ + + + diff --git a/pvalink__link_8cpp_source.html b/pvalink__link_8cpp_source.html new file mode 100644 index 0000000..c4f5013 --- /dev/null +++ b/pvalink__link_8cpp_source.html @@ -0,0 +1,256 @@ + + + + + + +pva2pva: pdbApp/pvalink_link.cpp Source File + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
pvalink_link.cpp
+
+
+
1 #include <pv/reftrack.h>
+
2 #include <alarm.h>
+
3 
+
4 #include "pvalink.h"
+
5 
+
6 namespace pvalink {
+
7 
+
8 pvaLink::pvaLink()
+
9  :alive(true)
+
10  ,type((dbfType)-1)
+
11  ,plink(0)
+
12  ,used_scratch(false)
+
13  ,used_queue(false)
+
14 {
+
15  REFTRACE_INCREMENT(num_instances);
+
16 
+
17  snap_severity = INVALID_ALARM;
+
18  snap_time.secPastEpoch = 0;
+
19  snap_time.nsec = 0;
+
20 
+
21  //TODO: valgrind tells me these aren't initialized by Base, but probably should be.
+
22  parseDepth = 0;
+
23  parent = 0;
+
24 }
+
25 
+
26 pvaLink::~pvaLink()
+
27 {
+
28  alive = false;
+
29 
+
30  if(lchan) { // may be NULL if parsing fails
+
31  Guard G(lchan->lock);
+
32 
+
33  lchan->links.erase(this);
+
34  lchan->links_changed = true;
+
35 
+
36  bool new_debug = false;
+
37  for(pvaLinkChannel::links_t::const_iterator it(lchan->links.begin()), end(lchan->links.end())
+
38  ; it!=end; ++it)
+
39  {
+
40  const pvaLink *pval = *it;
+
41  if(pval->debug) {
+
42  new_debug = true;
+
43  break;
+
44  }
+
45  }
+
46 
+
47  lchan->debug = new_debug;
+
48  }
+
49 
+
50  REFTRACE_DECREMENT(num_instances);
+
51 }
+
52 
+
53 static
+
54 pvd::StructureConstPtr monitorRequestType = pvd::getFieldCreate()->createFieldBuilder()
+
55  ->addNestedStructure("field")
+
56  ->endNested()
+
57  ->addNestedStructure("record")
+
58  ->addNestedStructure("_options")
+
59  ->add("pipeline", pvd::pvBoolean)
+
60  ->add("atomic", pvd::pvBoolean)
+
61  ->add("queueSize", pvd::pvUInt)
+
62  ->endNested()
+
63  ->endNested()
+
64  ->createStructure();
+
65 
+
66 pvd::PVStructurePtr pvaLink::makeRequest()
+
67 {
+
68  pvd::PVStructurePtr ret(pvd::getPVDataCreate()->createPVStructure(monitorRequestType));
+
69  ret->getSubFieldT<pvd::PVBoolean>("record._options.pipeline")->put(pipeline);
+
70  ret->getSubFieldT<pvd::PVBoolean>("record._options.atomic")->put(true);
+
71  ret->getSubFieldT<pvd::PVUInt>("record._options.queueSize")->put(queueSize);
+
72  return ret;
+
73 }
+
74 
+
75 // caller must lock lchan->lock
+
76 bool pvaLink::valid() const
+
77 {
+
78  return lchan->connected_latched && lchan->op_mon.root;
+
79 }
+
80 
+
81 // caller must lock lchan->lock
+
82 pvd::PVField::const_shared_pointer pvaLink::getSubField(const char *name)
+
83 {
+
84  pvd::PVField::const_shared_pointer ret;
+
85  if(valid()) {
+
86  if(fieldName.empty()) {
+
87  // we access the top level struct
+
88  ret = lchan->op_mon.root->getSubField(name);
+
89 
+
90  } else {
+
91  // we access a sub-struct
+
92  ret = lchan->op_mon.root->getSubField(fieldName);
+
93  if(!ret) {
+
94  // noop
+
95  } else if(ret->getField()->getType()!=pvd::structure) {
+
96  // addressed sub-field isn't a sub-structure
+
97  if(strcmp(name, "value")!=0) {
+
98  // unless we are trying to fetch the "value", we fail here
+
99  ret.reset();
+
100  }
+
101  } else {
+
102  ret = static_cast<const pvd::PVStructure*>(ret.get())->getSubField(name);
+
103  }
+
104  }
+
105  }
+
106  return ret;
+
107 }
+
108 
+
109 // call with channel lock held
+
110 void pvaLink::onDisconnect()
+
111 {
+
112  DEBUG(this,<<plink->precord->name<<" disconnect");
+
113  // TODO: option to remain queue'd while disconnected
+
114 
+
115  used_queue = used_scratch = false;
+
116 }
+
117 
+
118 void pvaLink::onTypeChange()
+
119 {
+
120  DEBUG(this,<<plink->precord->name<<" type change");
+
121 
+
122  assert(lchan->connected_latched && !!lchan->op_mon.root); // we should only be called when connected
+
123 
+
124  fld_value = getSubField("value");
+
125  fld_seconds = std::tr1::dynamic_pointer_cast<const pvd::PVScalar>(getSubField("timeStamp.secondsPastEpoch"));
+
126  fld_nanoseconds = std::tr1::dynamic_pointer_cast<const pvd::PVScalar>(getSubField("timeStamp.nanoseconds"));
+
127  fld_severity = std::tr1::dynamic_pointer_cast<const pvd::PVScalar>(getSubField("alarm.severity"));
+
128  fld_display = std::tr1::dynamic_pointer_cast<const pvd::PVStructure>(getSubField("display"));
+
129  fld_control = std::tr1::dynamic_pointer_cast<const pvd::PVStructure>(getSubField("control"));
+
130  fld_valueAlarm = std::tr1::dynamic_pointer_cast<const pvd::PVStructure>(getSubField("valueAlarm"));
+
131 
+
132  proc_changed.clear();
+
133 
+
134  // build mask of all "changed" bits associated with our .value
+
135  // CP/CPP input links will process this link only for updates where
+
136  // the changed mask and proc_changed share at least one set bit.
+
137  if(fld_value) {
+
138  // bit for this field
+
139  proc_changed.set(fld_value->getFieldOffset());
+
140 
+
141  // bits of all parent fields
+
142  for(const pvd::PVStructure* parent = fld_value->getParent(); parent; parent = parent->getParent()) {
+
143  proc_changed.set(parent->getFieldOffset());
+
144  }
+
145 
+
146  if(fld_value->getField()->getType()==pvd::structure)
+
147  {
+
148  // bits of all child fields
+
149  const pvd::PVStructure *val = static_cast<const pvd::PVStructure*>(fld_value.get());
+
150  for(size_t i=val->getFieldOffset(), N=val->getNextFieldOffset(); i<N; i++)
+
151  proc_changed.set(i);
+
152  }
+
153  }
+
154 }
+
155 
+
156 } // namespace pvalink
+ +
+ + + + diff --git a/pvalink__lset_8cpp_source.html b/pvalink__lset_8cpp_source.html new file mode 100644 index 0000000..08c8776 --- /dev/null +++ b/pvalink__lset_8cpp_source.html @@ -0,0 +1,626 @@ + + + + + + +pva2pva: pdbApp/pvalink_lset.cpp Source File + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
pvalink_lset.cpp
+
+
+
1 
+
2 #include <epicsString.h>
+
3 #include <alarm.h>
+
4 #include <recGbl.h>
+
5 #include <epicsStdio.h> // redirect stdout/stderr
+
6 
+
7 #include <pv/current_function.h>
+
8 
+
9 #include "pvalink.h"
+
10 
+
11 
+
12 namespace {
+
13 
+
14 using namespace pvalink;
+
15 
+
16 #define TRY pvaLink *self = static_cast<pvaLink*>(plink->value.json.jlink); assert(self->alive); try
+
17 #define CATCH() catch(std::exception& e) { \
+
18  errlogPrintf("pvaLink %s fails %s: %s\n", CURRENT_FUNCTION, plink->precord->name, e.what()); \
+
19 }
+
20 
+
21 #define CHECK_VALID() if(!self->valid()) { DEBUG(self, <<CURRENT_FUNCTION<<" "<<self->channelName<<" !valid"); return -1;}
+
22 
+
23 dbfType getLinkType(DBLINK *plink)
+
24 {
+
25  dbCommon *prec = plink->precord;
+
26  pdbRecordIterator iter(prec);
+
27 
+
28  for(long status = dbFirstField(&iter.ent, 0); !status; status = dbNextField(&iter.ent, 0)) {
+
29  if(iter.ent.pfield==plink)
+
30  return iter.ent.pflddes->field_type;
+
31  }
+
32  throw std::logic_error("DBLINK* corrupt");
+
33 }
+
34 
+
35 void pvaOpenLink(DBLINK *plink)
+
36 {
+
37  try {
+
38  pvaLink* self((pvaLink*)plink->value.json.jlink);
+
39  self->type = getLinkType(plink);
+
40 
+
41  // workaround for Base not propagating info(base:lsetDebug to us
+
42  {
+
43  pdbRecordIterator rec(plink->precord);
+
44 
+
45  if(epicsStrCaseCmp(rec.info("base:lsetDebug", "NO"), "YES")==0) {
+
46  self->debug = 1;
+
47  }
+
48  }
+
49 
+
50  DEBUG(self, <<plink->precord->name<<" OPEN "<<self->channelName);
+
51 
+
52  // still single threaded at this point.
+
53  // also, no pvaLinkChannel::lock yet
+
54 
+
55  self->plink = plink;
+
56 
+
57  if(self->channelName.empty())
+
58  return; // nothing to do...
+
59 
+
60  pvd::PVStructure::const_shared_pointer pvRequest(self->makeRequest());
+
61  pvaGlobal_t::channels_key_t key;
+
62 
+
63  {
+
64  std::ostringstream strm;
+
65  strm<<*pvRequest; // print the request as a convient key for our channel cache
+
66 
+
67  key = std::make_pair(self->channelName, strm.str());
+
68  }
+
69 
+
70  std::tr1::shared_ptr<pvaLinkChannel> chan;
+
71  bool doOpen = false;
+
72  {
+
73  Guard G(pvaGlobal->lock);
+
74 
+
75  pvaGlobal_t::channels_t::iterator it(pvaGlobal->channels.find(key));
+
76 
+
77  if(it!=pvaGlobal->channels.end()) {
+
78  // re-use existing channel
+
79  chan = it->second.lock();
+
80  }
+
81 
+
82  if(!chan) {
+
83  // open new channel
+
84 
+
85  chan.reset(new pvaLinkChannel(key, pvRequest));
+
86  chan->AP->lc = chan;
+
87  pvaGlobal->channels.insert(std::make_pair(key, chan));
+
88  doOpen = true;
+
89  }
+
90 
+
91  doOpen &= pvaGlobal->running; // if not running, then open from initHook
+
92  }
+
93 
+
94  if(doOpen) {
+
95  chan->open(); // start subscription
+
96  }
+
97 
+
98  if(!self->local || chan->providerName=="QSRV"){
+
99  Guard G(chan->lock);
+
100 
+
101  chan->links.insert(self);
+
102  chan->links_changed = true;
+
103 
+
104  self->lchan.swap(chan); // we are now attached
+
105 
+
106  self->lchan->debug |= !!self->debug;
+
107  } else {
+
108  // TODO: only print duing iocInit()?
+
109  fprintf(stderr, "%s Error: local:true link to '%s' can't be fulfilled\n",
+
110  plink->precord->name, self->channelName.c_str());
+
111  plink->lset = NULL;
+
112  }
+
113 
+
114  return;
+
115  }CATCH()
+
116  // on error, prevent any further calls to our lset functions
+
117  plink->lset = NULL;
+
118 }
+
119 
+
120 void pvaRemoveLink(struct dbLocker *locker, DBLINK *plink)
+
121 {
+
122  try {
+
123  p2p::auto_ptr<pvaLink> self((pvaLink*)plink->value.json.jlink);
+
124  DEBUG(self, <<plink->precord->name<<" "<<CURRENT_FUNCTION<<" "<<self->channelName);
+
125  assert(self->alive);
+
126 
+
127  }CATCH()
+
128 }
+
129 
+
130 int pvaIsConnected(const DBLINK *plink)
+
131 {
+
132  TRY {
+
133  Guard G(self->lchan->lock);
+
134 
+
135  bool ret = self->valid();
+
136  DEBUG(self, <<plink->precord->name<<" "<<CURRENT_FUNCTION<<" "<<self->channelName<<" "<<ret);
+
137  return ret;
+
138 
+
139  }CATCH()
+
140  return 0;
+
141 }
+
142 
+
143 int pvaGetDBFtype(const DBLINK *plink)
+
144 {
+
145  TRY {
+
146  Guard G(self->lchan->lock);
+
147  CHECK_VALID();
+
148 
+
149  // if fieldName is empty, use top struct value
+
150  // if fieldName not empty
+
151  // if sub-field is struct, use sub-struct .value
+
152  // if sub-field not struct, treat as value
+
153 
+
154  pvd::PVField::const_shared_pointer value(self->getSubField("value"));
+
155 
+
156  pvd::ScalarType ftype = pvd::pvInt; // default for un-mapable types.
+
157  if(!value) {
+
158  // no-op
+
159  } else if(value->getField()->getType()==pvd::scalar)
+
160  ftype = static_cast<const pvd::Scalar*>(value->getField().get())->getScalarType();
+
161  else if(value->getField()->getType()==pvd::scalarArray)
+
162  ftype = static_cast<const pvd::ScalarArray*>(value->getField().get())->getElementType();
+
163 
+
164  int ret;
+
165  switch(ftype) {
+
166 #define CASE(BASETYPE, PVATYPE, DBFTYPE, PVACODE) case pvd::pv##PVACODE: ret = DBF_##DBFTYPE;
+
167 #define CASE_REAL_INT64
+
168 #include "pv/typemap.h"
+
169 #undef CASE_REAL_INT64
+
170 #undef CASE
+
171  case pvd::pvString: ret = DBF_STRING; // TODO: long string?
+
172  }
+
173 
+
174  DEBUG(self, <<plink->precord->name<<" "<<CURRENT_FUNCTION<<" "<<self->channelName<<" "<<dbGetFieldTypeString(ret));
+
175  return ret;
+
176 
+
177  }CATCH()
+
178  return -1;
+
179 }
+
180 
+
181 long pvaGetElements(const DBLINK *plink, long *nelements)
+
182 {
+
183  TRY {
+
184  Guard G(self->lchan->lock);
+
185  CHECK_VALID();
+
186 
+
187  long ret = 0;
+
188  if(self->fld_value && self->fld_value->getField()->getType()==pvd::scalarArray)
+
189  ret = static_cast<const pvd::PVScalarArray*>(self->fld_value.get())->getLength();
+
190 
+
191  DEBUG(self, <<plink->precord->name<<" "<<CURRENT_FUNCTION<<" "<<self->channelName<<" "<<ret);
+
192 
+
193  return ret;
+
194  }CATCH()
+
195  return -1;
+
196 }
+
197 
+
198 long pvaGetValue(DBLINK *plink, short dbrType, void *pbuffer,
+
199  long *pnRequest)
+
200 {
+
201  TRY {
+
202  Guard G(self->lchan->lock);
+
203 
+
204  if(!self->valid()) {
+
205  // disconnected
+
206  if(self->ms != pvaLink::NMS) {
+
207  recGblSetSevr(plink->precord, LINK_ALARM, self->snap_severity);
+
208  }
+
209  // TODO: better capture of disconnect time
+
210  epicsTimeGetCurrent(&self->snap_time);
+
211  if(self->time) {
+
212  plink->precord->time = self->snap_time;
+
213  }
+
214  DEBUG(self, <<CURRENT_FUNCTION<<" "<<self->channelName<<" !valid");
+
215  return -1;
+
216  }
+
217 
+
218  if(self->fld_value) {
+
219  long status = copyPVD2DBF(self->fld_value, pbuffer, dbrType, pnRequest);
+
220  if(status) {
+
221  DEBUG(self, <<plink->precord->name<<" "<<CURRENT_FUNCTION<<" "<<self->channelName<<" "<<status);
+
222  return status;
+
223  }
+
224  }
+
225 
+
226  if(self->fld_seconds) {
+
227  self->snap_time.secPastEpoch = self->fld_seconds->getAs<pvd::uint32>() - POSIX_TIME_AT_EPICS_EPOCH;
+
228  if(self->fld_nanoseconds) {
+
229  self->snap_time.nsec = self->fld_nanoseconds->getAs<pvd::uint32>();
+
230  } else {
+
231  self->snap_time.nsec = 0u;
+
232  }
+
233  } else {
+
234  self->snap_time.secPastEpoch = 0u;
+
235  self->snap_time.nsec = 0u;
+
236  }
+
237 
+
238  if(self->fld_severity) {
+
239  self->snap_severity = self->fld_severity->getAs<pvd::uint16>();
+
240  } else {
+
241  self->snap_severity = NO_ALARM;
+
242  }
+
243 
+
244  if((self->snap_severity!=NO_ALARM && self->ms == pvaLink::MS) ||
+
245  (self->snap_severity==INVALID_ALARM && self->ms == pvaLink::MSI))
+
246  {
+
247  recGblSetSevr(plink->precord, LINK_ALARM, self->snap_severity);
+
248  }
+
249 
+
250  if(self->time) {
+
251  plink->precord->time = self->snap_time;
+
252  }
+
253 
+
254  DEBUG(self, <<plink->precord->name<<" "<<CURRENT_FUNCTION<<" "<<self->channelName<<" OK");
+
255  return 0;
+
256  }CATCH()
+
257  return -1;
+
258 }
+
259 
+
260 long pvaGetControlLimits(const DBLINK *plink, double *lo, double *hi)
+
261 {
+
262  TRY {
+
263  Guard G(self->lchan->lock);
+
264  CHECK_VALID();
+
265 
+
266  if(self->fld_control) {
+
267  pvd::PVScalar::const_shared_pointer value;
+
268  if(lo) {
+
269  value = std::tr1::static_pointer_cast<const pvd::PVScalar>(self->fld_control->getSubField("limitLow"));
+
270  *lo = value ? value->getAs<double>() : 0.0;
+
271  }
+
272  if(hi) {
+
273  value = std::tr1::static_pointer_cast<const pvd::PVScalar>(self->fld_control->getSubField("limitHigh"));
+
274  *hi = value ? value->getAs<double>() : 0.0;
+
275  }
+
276  } else {
+
277  *lo = *hi = 0.0;
+
278  }
+
279  DEBUG(self, <<plink->precord->name<<" "<<CURRENT_FUNCTION<<" "<<self->channelName<<" "<<(lo ? *lo : 0)<<" "<<(hi ? *hi : 0));
+
280  return 0;
+
281  }CATCH()
+
282  return -1;
+
283 }
+
284 
+
285 long pvaGetGraphicLimits(const DBLINK *plink, double *lo, double *hi)
+
286 {
+
287  TRY {
+
288  Guard G(self->lchan->lock);
+
289  CHECK_VALID();
+
290 
+
291  if(self->fld_display) {
+
292  pvd::PVScalar::const_shared_pointer value;
+
293  if(lo) {
+
294  value = std::tr1::static_pointer_cast<const pvd::PVScalar>(self->fld_display->getSubField("limitLow"));
+
295  *lo = value ? value->getAs<double>() : 0.0;
+
296  }
+
297  if(hi) {
+
298  value = std::tr1::static_pointer_cast<const pvd::PVScalar>(self->fld_display->getSubField("limitHigh"));
+
299  *hi = value ? value->getAs<double>() : 0.0;
+
300  }
+
301  } else {
+
302  *lo = *hi = 0.0;
+
303  }
+
304  DEBUG(self, <<plink->precord->name<<" "<<CURRENT_FUNCTION<<" "<<self->channelName<<" "<<(lo ? *lo : 0)<<" "<<(hi ? *hi : 0));
+
305  return 0;
+
306  }CATCH()
+
307  return -1;
+
308 }
+
309 
+
310 long pvaGetAlarmLimits(const DBLINK *plink, double *lolo, double *lo,
+
311  double *hi, double *hihi)
+
312 {
+
313  TRY {
+
314  //Guard G(self->lchan->lock);
+
315  //CHECK_VALID();
+
316  *lolo = *lo = *hi = *hihi = 0.0;
+
317  DEBUG(self, <<plink->precord->name<<" "<<CURRENT_FUNCTION<<" "<<self->channelName<<" "<<(lolo ? *lolo : 0)<<" "<<(lo ? *lo : 0)<<" "<<(hi ? *hi : 0)<<" "<<(hihi ? *hihi : 0));
+
318  return 0;
+
319  }CATCH()
+
320  return -1;
+
321 }
+
322 
+
323 long pvaGetPrecision(const DBLINK *plink, short *precision)
+
324 {
+
325  TRY {
+
326  //Guard G(self->lchan->lock);
+
327  //CHECK_VALID();
+
328 
+
329  // No sane way to recover precision from display.format string.
+
330  *precision = 0;
+
331  DEBUG(self, <<plink->precord->name<<" "<<CURRENT_FUNCTION<<" "<<self->channelName<<" "<<precision);
+
332  return 0;
+
333  }CATCH()
+
334  return -1;
+
335 }
+
336 
+
337 long pvaGetUnits(const DBLINK *plink, char *units, int unitsSize)
+
338 {
+
339  TRY {
+
340  Guard G(self->lchan->lock);
+
341  CHECK_VALID();
+
342 
+
343  if(unitsSize==0) return 0;
+
344 
+
345  if(units && self->fld_display) {
+
346  pvd::PVString::const_shared_pointer value(std::tr1::static_pointer_cast<const pvd::PVString>(self->fld_display->getSubField("units")));
+
347  if(value) {
+
348  const std::string& egu = value->get();
+
349  strncpy(units, egu.c_str(), unitsSize);
+
350  }
+
351  } else if(units) {
+
352  units[0] = '\0';
+
353  }
+
354  units[unitsSize-1] = '\0';
+
355  DEBUG(self, <<plink->precord->name<<" "<<CURRENT_FUNCTION<<" "<<self->channelName<<" "<<units);
+
356  return 0;
+
357  }CATCH()
+
358  return -1;
+
359 }
+
360 
+
361 long pvaGetAlarm(const DBLINK *plink, epicsEnum16 *status,
+
362  epicsEnum16 *severity)
+
363 {
+
364  TRY {
+
365  Guard G(self->lchan->lock);
+
366  CHECK_VALID();
+
367 
+
368  if(severity) {
+
369  *severity = self->snap_severity;
+
370  }
+
371  if(status) {
+
372  *status = self->snap_severity ? LINK_ALARM : NO_ALARM;
+
373  }
+
374 
+
375  DEBUG(self, <<plink->precord->name<<" "<<CURRENT_FUNCTION<<" "<<self->channelName<<" "<<(severity ? *severity : 0)<<" "<<(status ? *status : 0));
+
376  return 0;
+
377  }CATCH()
+
378  return -1;
+
379 }
+
380 
+
381 long pvaGetTimeStamp(const DBLINK *plink, epicsTimeStamp *pstamp)
+
382 {
+
383  TRY {
+
384  Guard G(self->lchan->lock);
+
385  CHECK_VALID();
+
386 
+
387  if(pstamp) {
+
388  *pstamp = self->snap_time;
+
389  }
+
390 
+
391  DEBUG(self, <<plink->precord->name<<" "<<CURRENT_FUNCTION<<" "<<self->channelName<<" "<<(pstamp ? pstamp->secPastEpoch : 0)<<":"<<(pstamp ? pstamp->nsec: 0));
+
392  return 0;
+
393  }CATCH()
+
394  return -1;
+
395 }
+
396 
+
397 // note that we handle DBF_ENUM differently than in pvif.cpp
+
398 pvd::ScalarType DBR2PVD(short dbr)
+
399 {
+
400  switch(dbr) {
+
401 #define CASE(BASETYPE, PVATYPE, DBFTYPE, PVACODE) case DBR_##DBFTYPE: return pvd::pv##PVACODE;
+
402 #define CASE_SKIP_BOOL
+
403 #define CASE_REAL_INT64
+
404 #include "pv/typemap.h"
+
405 #undef CASE_SKIP_BOOL
+
406 #undef CASE_REAL_INT64
+
407 #undef CASE
+
408  case DBF_ENUM: return pvd::pvUShort;
+
409  case DBF_STRING: return pvd::pvString;
+
410  }
+
411  throw std::invalid_argument("Unsupported DBR code");
+
412 }
+
413 
+
414 long pvaPutValueX(DBLINK *plink, short dbrType,
+
415  const void *pbuffer, long nRequest, bool wait)
+
416 {
+
417  TRY {
+
418  (void)self;
+
419  Guard G(self->lchan->lock);
+
420 
+
421  if(nRequest < 0) return -1;
+
422 
+
423  if(!self->retry && !self->valid()) {
+
424  DEBUG(self, <<CURRENT_FUNCTION<<" "<<self->channelName<<" !valid");
+
425  return -1;
+
426  }
+
427 
+
428  pvd::ScalarType stype = DBR2PVD(dbrType);
+
429 
+
430  pvd::shared_vector<const void> buf;
+
431 
+
432  if(dbrType == DBF_STRING) {
+
433  const char *sbuffer = (const char*)pbuffer;
+
434  pvd::shared_vector<std::string> sval(nRequest);
+
435 
+
436  for(long n=0; n<nRequest; n++, sbuffer += MAX_STRING_SIZE) {
+
437  sval[n] = std::string(sbuffer, epicsStrnLen(sbuffer, MAX_STRING_SIZE));
+
438  }
+
439 
+
440  self->put_scratch = pvd::static_shared_vector_cast<const void>(pvd::freeze(sval));
+
441 
+
442  } else {
+
443  pvd::shared_vector<void> val(pvd::ScalarTypeFunc::allocArray(stype, size_t(nRequest)));
+
444 
+
445  assert(size_t(dbValueSize(dbrType)*nRequest) == val.size());
+
446 
+
447  memcpy(val.data(), pbuffer, val.size());
+
448 
+
449  self->put_scratch = pvd::freeze(val);
+
450  }
+
451 
+
452  self->used_scratch = true;
+
453 
+
454 #ifdef USE_MULTILOCK
+
455  if(wait)
+
456  self->lchan->after_put.insert(plink->precord);
+
457 #endif
+
458 
+
459  if(!self->defer) self->lchan->put();
+
460 
+
461  DEBUG(self, <<plink->precord->name<<" "<<CURRENT_FUNCTION<<" "<<self->channelName<<" "<<self->lchan->op_put.valid());
+
462  return 0;
+
463  }CATCH()
+
464  return -1;
+
465 }
+
466 
+
467 long pvaPutValue(DBLINK *plink, short dbrType,
+
468  const void *pbuffer, long nRequest)
+
469 {
+
470  return pvaPutValueX(plink, dbrType, pbuffer, nRequest, false);
+
471 }
+
472 
+
473 long pvaPutValueAsync(DBLINK *plink, short dbrType,
+
474  const void *pbuffer, long nRequest)
+
475 {
+
476  return pvaPutValueX(plink, dbrType, pbuffer, nRequest, true);
+
477 }
+
478 
+
479 void pvaScanForward(DBLINK *plink)
+
480 {
+
481  TRY {
+
482  Guard G(self->lchan->lock);
+
483 
+
484  if(!self->retry && !self->valid()) {
+
485  return;
+
486  }
+
487 
+
488  // FWD_LINK is never deferred, and always results in a Put
+
489  self->lchan->put(true);
+
490 
+
491  DEBUG(self, <<plink->precord->name<<" "<<CURRENT_FUNCTION<<" "<<self->channelName<<" "<<self->lchan->op_put.valid());
+
492  }CATCH()
+
493 }
+
494 
+
495 #undef TRY
+
496 #undef CATCH
+
497 
+
498 } //namespace
+
499 
+
500 namespace pvalink {
+
501 
+
502 lset pva_lset = {
+
503  0, 1, // non-const, volatile
+
504  &pvaOpenLink,
+
505  &pvaRemoveLink,
+
506  NULL, NULL, NULL,
+
507  &pvaIsConnected,
+
508  &pvaGetDBFtype,
+
509  &pvaGetElements,
+
510  &pvaGetValue,
+
511  &pvaGetControlLimits,
+
512  &pvaGetGraphicLimits,
+
513  &pvaGetAlarmLimits,
+
514  &pvaGetPrecision,
+
515  &pvaGetUnits,
+
516  &pvaGetAlarm,
+
517  &pvaGetTimeStamp,
+
518  &pvaPutValue,
+
519  &pvaPutValueAsync,
+
520  &pvaScanForward
+
521  //&pvaReportLink,
+
522 };
+
523 
+
524 } //namespace pvalink
+ + + +
+ + + + diff --git a/pvalink__null_8cpp_source.html b/pvalink__null_8cpp_source.html new file mode 100644 index 0000000..e63fe8a --- /dev/null +++ b/pvalink__null_8cpp_source.html @@ -0,0 +1,116 @@ + + + + + + +pva2pva: pdbApp/pvalink_null.cpp Source File + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
pvalink_null.cpp
+
+
+
1 
+
2 #include <epicsExport.h>
+
3 
+
4 static void installPVAAddLinkHook() {}
+
5 
+
6 struct jlif {} lsetPVA;
+
7 
+
8 extern "C" {
+
9 int pvaLinkDebug;
+
10 int pvaLinkNWorkers;
+
11 
+
12  epicsExportRegistrar(installPVAAddLinkHook);
+
13  epicsExportAddress(jlif, lsetPVA);
+
14  epicsExportAddress(int, pvaLinkDebug);
+
15  epicsExportAddress(int, pvaLinkNWorkers);
+
16 }
+ +
+ + + + diff --git a/pvif_8cpp_source.html b/pvif_8cpp_source.html new file mode 100644 index 0000000..b9f822b --- /dev/null +++ b/pvif_8cpp_source.html @@ -0,0 +1,1440 @@ + + + + + + +pva2pva: pdbApp/pvif.cpp Source File + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
pvif.cpp
+
+
+
1 
+
2 
+
3 #include <pv/pvIntrospect.h> /* for pvdVersion.h */
+
4 #include <pv/standardField.h>
+
5 
+
6 #include <dbAccess.h>
+
7 #include <dbChannel.h>
+
8 #include <dbStaticLib.h>
+
9 #include <dbLock.h>
+
10 #include <dbEvent.h>
+
11 #include <alarm.h>
+
12 #include <errSymTbl.h>
+
13 #include <epicsVersion.h>
+
14 #include <errlog.h>
+
15 #include <osiSock.h>
+
16 
+
17 #include <pv/status.h>
+
18 #include <pv/bitSet.h>
+
19 #include <pv/pvData.h>
+
20 #include <pv/anyscalar.h>
+
21 #include <pv/reftrack.h>
+
22 #include <pv/pvAccess.h>
+
23 #include <pv/security.h>
+
24 
+
25 #include "sb.h"
+
26 #include "pvif.h"
+
27 
+
28 #include <epicsExport.h>
+
29 
+
30 #ifdef EPICS_VERSION_INT
+
31 # if EPICS_VERSION_INT>=VERSION_INT(3,16,1,0)
+
32 # define USE_INT64
+
33  // effects all uses of pv/typemap.h
+
34 # define CASE_REAL_INT64
+
35 # endif
+
36 #endif
+
37 
+
38 namespace pvd = epics::pvData;
+
39 namespace pva = epics::pvAccess;
+
40 
+
41 DBCH::DBCH(dbChannel *ch) :chan(ch)
+
42 {
+
43  if(!chan)
+
44  throw std::invalid_argument("NULL channel");
+
45  prepare();
+
46 }
+
47 
+
48 DBCH::DBCH(const std::string& name)
+
49  :chan(dbChannelCreate(name.c_str()))
+
50 {
+
51  if(!chan)
+
52  throw std::invalid_argument(SB()<<"invalid channel: "<<name);
+
53  prepare();
+
54 }
+
55 
+
56 void DBCH::prepare()
+
57 {
+
58  if(!chan)
+
59  throw std::invalid_argument(SB()<<"NULL channel");
+
60  if(dbChannelOpen(chan)) {
+
61  dbChannelDelete(chan);
+
62  throw std::invalid_argument(SB()<<"Failed to open channel "<<dbChannelName(chan));
+
63  }
+
64 }
+
65 
+
66 DBCH::~DBCH()
+
67 {
+
68  if(chan) dbChannelDelete(chan);
+
69 }
+
70 
+
71 void DBCH::swap(DBCH& o)
+
72 {
+
73  std::swap(chan, o.chan);
+
74 }
+
75 
+
76 void ASCred::update(const pva::ChannelRequester::shared_pointer& req)
+
77 {
+
78  pva::PeerInfo::const_shared_pointer info(req->getPeerInfo());
+
79  std::string usertemp, hosttemp;
+
80 
+
81  if(info && info->identified) {
+
82  hosttemp = info->peer;
+
83  if(info->authority=="ca") {
+
84  usertemp = info->account;
+
85  size_t sep = usertemp.find_last_of('/');
+
86  if(sep != std::string::npos) {
+
87  // prevent CA auth from claiming to be eg. "krb/someone.special"
+
88  usertemp = usertemp.substr(sep+1);
+
89  }
+
90 
+
91  } else {
+
92  usertemp = info->authority + "/" + info->account;
+
93  }
+
94 
+
95  const char role[] = "role/";
+
96 
+
97  groups.resize(info->roles.size());
+
98  size_t idx = 0u;
+
99  for(pva::PeerInfo::roles_t::const_iterator it(info->roles.begin()), end(info->roles.end()); it!=end; ++it, idx++) {
+
100  groups[idx].resize((*it).size()+sizeof(role)); // sizeof(role) includes trailing nil
+
101  std::copy(role,
+
102  role+sizeof(role)-1,
+
103  groups[idx].begin());
+
104  std::copy(it->begin(),
+
105  it->end(),
+
106  groups[idx].begin()+sizeof(role)-1);
+
107  groups[idx][groups[idx].size()-1] = '\0';
+
108  }
+
109 
+
110  } else {
+
111  // legacy and anonymous
+
112  hosttemp = req->getRequesterName();
+
113  }
+
114 
+
115  // remote names have the form "IP:port"
+
116  size_t sep = hosttemp.find_first_of(':');
+
117  if(sep == std::string::npos) {
+
118  sep = hosttemp.size();
+
119  }
+
120  hosttemp.resize(sep);
+
121 
+
122  host.resize(hosttemp.size()+1);
+
123  std::copy(hosttemp.begin(),
+
124  hosttemp.end(),
+
125  host.begin());
+
126  host[hosttemp.size()] = '\0';
+
127 
+
128  user.resize(usertemp.size()+1);
+
129  std::copy(usertemp.begin(),
+
130  usertemp.end(),
+
131  user.begin());
+
132  user[usertemp.size()] = '\0';
+
133 }
+
134 
+
135 ASCLIENT::~ASCLIENT()
+
136 {
+
137  asRemoveClient(&aspvt);
+
138  for(size_t i=0, N=grppvt.size(); i<N; i++) {
+
139  asRemoveClient(&grppvt[i]);
+
140  }
+
141 }
+
142 
+
143 void ASCLIENT::add(dbChannel* chan, ASCred& cred)
+
144 {
+
145  asRemoveClient(&aspvt);
+
146  /* asAddClient() fails secure to no-permission */
+
147  (void)asAddClient(&aspvt, dbChannelRecord(chan)->asp, dbChannelFldDes(chan)->as_level, &cred.user[0], &cred.host[0]);
+
148 
+
149  grppvt.resize(cred.groups.size(), 0);
+
150 
+
151  for(size_t i=0, N=grppvt.size(); i<N; i++) {
+
152  asRemoveClient(&grppvt[i]);
+
153  (void)asAddClient(&grppvt[i], dbChannelRecord(chan)->asp, dbChannelFldDes(chan)->as_level, &cred.groups[i][0], &cred.host[0]);
+
154  }
+
155 }
+
156 
+
157 bool ASCLIENT::canWrite() {
+
158  if(!asActive || (aspvt && asCheckPut(aspvt)))
+
159  return true;
+
160  for(size_t i=0, N=grppvt.size(); i<N; i++) {
+
161  if(grppvt[i] && asCheckPut(grppvt[i]))
+
162  return true;
+
163  }
+
164  return false;
+
165 }
+
166 
+
167 PVIF::PVIF(dbChannel *ch)
+
168  :chan(ch)
+
169 {}
+
170 
+
171 namespace {
+
172 
+
173 struct pvTimeAlarm {
+
174  dbChannel *chan;
+
175 
+
176  pvd::uint32 nsecMask;
+
177 
+
178  pvd::BitSet maskALWAYS, maskALARM;
+
179 
+
180  pvd::PVLongPtr sec;
+
181  pvd::PVIntPtr status, severity, nsec, userTag;
+
182  pvd::PVStringPtr message;
+
183 
+
184  pvTimeAlarm() :chan(NULL), nsecMask(0) {}
+
185 };
+
186 
+
187 struct pvCommon : public pvTimeAlarm {
+
188 
+
189  pvd::BitSet maskVALUE, maskPROPERTY, maskVALUEPut;
+
190 
+
191  pvd::PVDoublePtr displayLow, displayHigh, controlLow, controlHigh;
+
192  pvd::PVStringPtr egu, desc;
+
193  pvd::PVIntPtr fmt, prec;
+
194 
+
195  pvd::PVScalarPtr warnLow, warnHigh, alarmLow, alarmHigh;
+
196 
+
197  pvd::PVStringArrayPtr enumopts;
+
198 };
+
199 
+
200 struct pvScalar : public pvCommon {
+
201  typedef pvd::PVScalar pvd_type;
+
202  pvd::PVScalarPtr value;
+
203 };
+
204 
+
205 struct pvArray : public pvCommon {
+
206  typedef pvd::PVScalarArray pvd_type;
+
207  pvd::PVScalarArrayPtr value;
+
208 };
+
209 
+
210 struct metaTIME {
+
211  DBRstatus
+
212  DBRamsg
+
213  DBRtime
+
214  DBRutag
+
215 
+
216  enum {mask = DBR_STATUS | DBR_AMSG | DBR_TIME | DBR_UTAG};
+
217 };
+
218 
+
219 struct metaDOUBLE {
+
220  DBRstatus
+
221  DBRamsg
+
222  DBRunits
+
223  DBRprecision
+
224  DBRtime
+
225  DBRutag
+
226  DBRgrDouble
+
227  DBRctrlDouble
+
228  DBRalDouble
+
229 
+
230  // similar junk
+
231  DBRenumStrs
+
232 
+
233  enum {mask = DBR_STATUS | DBR_AMSG | DBR_UNITS | DBR_PRECISION | DBR_TIME | DBR_UTAG | DBR_GR_DOUBLE | DBR_CTRL_DOUBLE | DBR_AL_DOUBLE};
+
234 };
+
235 
+
236 struct metaENUM {
+
237  DBRstatus
+
238  DBRamsg
+
239  DBRtime
+
240  DBRutag
+
241  DBRenumStrs
+
242 
+
243  // similar junk
+
244  DBRunits
+
245  DBRprecision
+
246  DBRgrDouble
+
247  DBRctrlDouble
+
248  DBRalDouble
+
249 
+
250  enum {mask = DBR_STATUS | DBR_AMSG | DBR_TIME | DBR_UTAG | DBR_ENUM_STRS};
+
251 };
+
252 
+
253 struct metaSTRING {
+
254  DBRstatus
+
255  DBRamsg
+
256  DBRtime
+
257  DBRutag
+
258 
+
259  // similar junk
+
260  DBRenumStrs
+
261  DBRunits
+
262  DBRprecision
+
263  DBRgrDouble
+
264  DBRctrlDouble
+
265  DBRalDouble
+
266 
+
267  enum {mask = DBR_STATUS | DBR_AMSG | DBR_TIME | DBR_UTAG};
+
268 };
+
269 
+
270 void attachTime(pvTimeAlarm& pvm, const pvd::PVStructurePtr& pv)
+
271 {
+
272 #define FMAP(MNAME, PVT, FNAME, DBE) pvm.MNAME = pv->getSubFieldT<pvd::PVT>(FNAME); \
+
273  pvm.mask ## DBE.set(pvm.MNAME->getFieldOffset())
+
274  FMAP(status, PVInt, "alarm.status", ALARM);
+
275  FMAP(severity, PVInt, "alarm.severity", ALARM);
+
276  FMAP(message, PVString, "alarm.message", ALARM);
+
277  FMAP(sec, PVLong, "timeStamp.secondsPastEpoch", ALWAYS);
+
278  FMAP(nsec, PVInt, "timeStamp.nanoseconds", ALWAYS);
+
279 #ifdef HAVE_UTAG
+
280  FMAP(userTag, PVInt, "timeStamp.userTag", ALWAYS);
+
281 #endif
+
282 #undef FMAP
+
283 }
+
284 
+
285 static
+
286 pvd::shared_vector<const std::string> buildFormats()
+
287 {
+
288  pvd::shared_vector<std::string> fmt;
+
289  fmt.push_back("Default");
+
290  fmt.push_back("String");
+
291  fmt.push_back("Binary");
+
292  fmt.push_back("Decimal");
+
293  fmt.push_back("Hex");
+
294  fmt.push_back("Exponential");
+
295  fmt.push_back("Engineering");
+
296  return pvd::freeze(fmt);
+
297 }
+
298 
+
299 static const
+
300 pvd::shared_vector<const std::string> displayForms(buildFormats());
+
301 
+
302 // lookup fields and populate pvCommon. Non-existant fields will be NULL.
+
303 void attachMeta(pvCommon& pvm, const pvd::PVStructurePtr& pv)
+
304 {
+
305  {
+
306  pvd::PVStructurePtr fmt(pv->getSubField<pvd::PVStructure>("display.form"));
+
307  if(fmt) {
+
308  fmt->getSubFieldT<pvd::PVStringArray>("choices")->replace(displayForms);
+
309  }
+
310  }
+
311  attachTime(pvm, pv);
+
312 #define FMAP(MNAME, PVT, FNAME, DBE) pvm.MNAME = pv->getSubField<pvd::PVT>(FNAME); \
+
313  if(pvm.MNAME) pvm.mask ## DBE.set(pvm.MNAME->getFieldOffset())
+
314  FMAP(displayHigh, PVDouble, "display.limitHigh", PROPERTY);
+
315  FMAP(displayLow, PVDouble, "display.limitLow", PROPERTY);
+
316  FMAP(controlHigh, PVDouble, "control.limitHigh", PROPERTY);
+
317  FMAP(controlLow, PVDouble, "control.limitLow", PROPERTY);
+
318  FMAP(egu, PVString, "display.units", PROPERTY);
+
319  FMAP(desc, PVString, "display.description", PROPERTY);
+
320  FMAP(prec, PVInt, "display.precision", PROPERTY);
+
321  FMAP(fmt, PVInt, "display.form.index", PROPERTY);
+
322  FMAP(warnHigh, PVScalar, "valueAlarm.highWarningLimit", PROPERTY);
+
323  FMAP(warnLow, PVScalar, "valueAlarm.lowWarningLimit", PROPERTY);
+
324  FMAP(alarmHigh, PVScalar, "valueAlarm.highAlarmLimit", PROPERTY);
+
325  FMAP(alarmLow, PVScalar, "valueAlarm.lowAlarmLimit", PROPERTY);
+
326  FMAP(enumopts, PVStringArray, "value.choices", PROPERTY);
+
327 #undef FMAP
+
328 }
+
329 
+
330 template<typename PVX>
+
331 void attachAll(PVX& pvm, const pvd::PVStructurePtr& pv)
+
332 {
+
333  pvm.value = pv->getSubField<typename PVX::pvd_type>("value.index");
+
334  if(!pvm.value)
+
335  pvm.value = pv->getSubFieldT<typename PVX::pvd_type>("value");
+
336  const pvd::PVField *fld = pvm.value.get();
+
337  pvm.maskVALUE.set(fld->getFieldOffset());
+
338  for(;fld; fld = fld->getParent()) {
+
339  // set field bit and all enclosing structure bits
+
340  pvm.maskVALUEPut.set(fld->getFieldOffset());
+
341  }
+
342  pvm.maskVALUEPut.set(0);
+
343  attachMeta(pvm, pv);
+
344 }
+
345 
+
346 template<typename Meta>
+
347 void mapStatus(const Meta& meta, pvd::PVInt* status, pvd::PVString* message)
+
348 {
+
349 #ifdef HAVE_UTAG
+
350  if(meta.amsg[0]!='\0') {
+
351  message->put(meta.amsg);
+
352  } else
+
353 #endif
+
354  if(meta.status<ALARM_NSTATUS)
+
355  message->put(epicsAlarmConditionStrings[meta.status]);
+
356  else
+
357  message->put("???");
+
358 
+
359  // Arbitrary mapping from DB status codes
+
360  unsigned out;
+
361  switch(meta.status) {
+
362  case NO_ALARM:
+
363  out = 0;
+
364  break;
+
365  case READ_ALARM:
+
366  case WRITE_ALARM:
+
367  case HIHI_ALARM:
+
368  case HIGH_ALARM:
+
369  case LOLO_ALARM:
+
370  case LOW_ALARM:
+
371  case STATE_ALARM:
+
372  case COS_ALARM:
+
373  case HW_LIMIT_ALARM:
+
374  out = 1; // DEVICE
+
375  break;
+
376  case COMM_ALARM:
+
377  case TIMEOUT_ALARM:
+
378  case UDF_ALARM:
+
379  out = 2; // DRIVER
+
380  break;
+
381  case CALC_ALARM:
+
382  case SCAN_ALARM:
+
383  case LINK_ALARM:
+
384  case SOFT_ALARM:
+
385  case BAD_SUB_ALARM:
+
386  out = 3; // RECORD
+
387  break;
+
388  case DISABLE_ALARM:
+
389  case SIMM_ALARM:
+
390  case READ_ACCESS_ALARM:
+
391  case WRITE_ACCESS_ALARM:
+
392  out = 4; // DB
+
393  break;
+
394  default:
+
395  out = 6; // UNDEFINED
+
396  }
+
397 
+
398  status->put(out);
+
399 }
+
400 
+
401 
+
402 template<typename META>
+
403 void putMetaImpl(const pvTimeAlarm& pv, const META& meta)
+
404 {
+
405  pvd::int32 nsec = meta.time.nsec;
+
406  if(pv.nsecMask) {
+
407  pv.userTag->put(nsec&pv.nsecMask);
+
408  nsec &= ~pv.nsecMask;
+
409 #ifdef HAVE_UTAG
+
410  } else {
+
411  pv.userTag->put(meta.utag);
+
412 #endif
+
413  }
+
414  pv.nsec->put(nsec); pv.sec->put(meta.time.secPastEpoch+POSIX_TIME_AT_EPICS_EPOCH);
+
415 }
+
416 
+
417 void putTime(const pvTimeAlarm& pv, unsigned dbe, db_field_log *pfl)
+
418 {
+
419  metaTIME meta;
+
420  long options = (int)metaTIME::mask, nReq = 0;
+
421 
+
422  long status = dbChannelGet(pv.chan, dbChannelFinalFieldType(pv.chan), &meta, &options, &nReq, pfl);
+
423  if(status)
+
424  throw std::runtime_error("dbGet for meta fails");
+
425 
+
426  putMetaImpl(pv, meta);
+
427  if(dbe&DBE_ALARM) {
+
428  mapStatus(meta, pv.status.get(), pv.message.get());
+
429  pv.severity->put(meta.severity);
+
430  }
+
431 }
+
432 
+
433 void putValue(dbChannel *chan, pvd::PVScalar* value, db_field_log *pfl)
+
434 {
+
435  dbrbuf buf;
+
436  long nReq = 1;
+
437 
+
438  long status = dbChannelGet(chan, dbChannelFinalFieldType(chan), &buf, NULL, &nReq, pfl);
+
439  if(status)
+
440  throw std::runtime_error("dbGet for meta fails");
+
441 
+
442  if(nReq==0) {
+
443  // this was an actual max length 1 array, which has zero elements now.
+
444  memset(&buf, 0, sizeof(buf));
+
445  }
+
446 
+
447  switch(dbChannelFinalFieldType(chan)) {
+
448 #define CASE(BASETYPE, PVATYPE, DBFTYPE, PVACODE) case DBR_##DBFTYPE: value->putFrom<PVATYPE>(buf.dbf_##DBFTYPE); break;
+
449 #define CASE_ENUM
+
450 #define CASE_SKIP_BOOL
+
451 #include "pv/typemap.h"
+
452 #undef CASE_ENUM
+
453 #undef CASE_SKIP_BOOL
+
454 #undef CASE
+
455  case DBR_STRING:
+
456  buf.dbf_STRING[sizeof(buf.dbf_STRING)-1] = '\0';
+
457  value->putFrom<std::string>(buf.dbf_STRING);
+
458  break;
+
459  default:
+
460  throw std::runtime_error("putValue unsupported DBR code");
+
461  }
+
462 }
+
463 
+
464 void getValue(dbChannel *chan, pvd::PVScalar* value)
+
465 {
+
466  dbrbuf buf;
+
467 
+
468  switch(dbChannelFinalFieldType(chan)) {
+
469 #define CASE(BASETYPE, PVATYPE, DBFTYPE, PVACODE) case DBR_##DBFTYPE: buf.dbf_##DBFTYPE = value->getAs<PVATYPE>(); break;
+
470 #define CASE_ENUM
+
471 #define CASE_SKIP_BOOL
+
472 #include "pv/typemap.h"
+
473 #undef CASE_ENUM
+
474 #undef CASE_SKIP_BOOL
+
475 #undef CASE
+
476  case DBR_STRING:
+
477  {
+
478  std::string val(value->getAs<std::string>());
+
479  strncpy(buf.dbf_STRING, val.c_str(), sizeof(buf.dbf_STRING));
+
480  buf.dbf_STRING[sizeof(buf.dbf_STRING)-1] = '\0';
+
481  }
+
482  break;
+
483  default:
+
484  throw std::runtime_error("getValue unsupported DBR code");
+
485  }
+
486 
+
487  long status = dbChannelPut(chan, dbChannelFinalFieldType(chan), &buf, 1);
+
488  if(status)
+
489  throw std::runtime_error("dbPut for meta fails");
+
490 }
+
491 
+
492 void getValue(dbChannel *chan, pvd::PVScalarArray* value)
+
493 {
+
494  short dbr = dbChannelFinalFieldType(chan);
+
495 
+
496  if(dbr!=DBR_STRING) {
+
497  pvd::shared_vector<const void> buf;
+
498 
+
499  value->getAs(buf);
+
500  long nReq = buf.size()/pvd::ScalarTypeFunc::elementSize(value->getScalarArray()->getElementType());
+
501 
+
502  long status = dbChannelPut(chan, dbr, buf.data(), nReq);
+
503  if(status)
+
504  throw std::runtime_error("dbChannelPut fails");
+
505 
+
506  } else {
+
507  pvd::shared_vector<const std::string> buf;
+
508 
+
509  value->getAs(buf);
+
510 
+
511  std::vector<char> temp(buf.size()*MAX_STRING_SIZE);
+
512 
+
513  for(size_t i=0, N=buf.size(); i<N; i++)
+
514  {
+
515  strncpy(&temp[i*MAX_STRING_SIZE], buf[i].c_str(), MAX_STRING_SIZE-1);
+
516  temp[i*MAX_STRING_SIZE + MAX_STRING_SIZE-1] = '\0';
+
517  }
+
518 
+
519  long status = dbChannelPut(chan, dbr, &temp[0], buf.size());
+
520  if(status)
+
521  throw std::runtime_error("dbChannelPut fails");
+
522  }
+
523 }
+
524 
+
525 void putValue(dbChannel *chan, pvd::PVScalarArray* value, db_field_log *pfl)
+
526 {
+
527  const short dbr = dbChannelFinalFieldType(chan);
+
528 
+
529  long nReq = dbChannelFinalElements(chan);
+
530  const pvd::ScalarType etype = value->getScalarArray()->getElementType();
+
531 
+
532  if(dbr!=DBR_STRING) {
+
533 
+
534  pvd::shared_vector<void> buf(pvd::ScalarTypeFunc::allocArray(etype, nReq)); // TODO: pool?
+
535 
+
536  long status = dbChannelGet(chan, dbr, buf.data(), NULL, &nReq, pfl);
+
537  if(status)
+
538  throw std::runtime_error("dbChannelGet for value fails");
+
539 
+
540  buf.slice(0, nReq*pvd::ScalarTypeFunc::elementSize(etype));
+
541 
+
542  value->putFrom(pvd::freeze(buf));
+
543 
+
544  } else {
+
545  std::vector<char> temp(nReq*MAX_STRING_SIZE);
+
546 
+
547  long status = dbChannelGet(chan, dbr, &temp[0], NULL, &nReq, pfl);
+
548  if(status)
+
549  throw std::runtime_error("dbChannelGet for value fails");
+
550 
+
551  pvd::shared_vector<std::string> buf(nReq);
+
552  for(long i=0; i<nReq; i++) {
+
553  temp[i*MAX_STRING_SIZE + MAX_STRING_SIZE-1] = '\0';
+
554  buf[i] = std::string(&temp[i*MAX_STRING_SIZE]);
+
555  }
+
556 
+
557  value->putFrom(pvd::freeze(buf));
+
558  }
+
559 }
+
560 template<typename META>
+
561 void putMeta(const pvCommon& pv, unsigned dbe, db_field_log *pfl)
+
562 {
+
563  META meta;
+
564  long options = (int)META::mask, nReq = 0;
+
565  dbCommon *prec = dbChannelRecord(pv.chan);
+
566 
+
567  long status = dbChannelGet(pv.chan, dbChannelFinalFieldType(pv.chan), &meta, &options, &nReq, pfl);
+
568  if(status)
+
569  throw std::runtime_error("dbGet for meta fails");
+
570 
+
571  putMetaImpl(pv, meta);
+
572 #define FMAP(MNAME, FNAME) pv.MNAME->put(meta.FNAME)
+
573  if(dbe&DBE_ALARM) {
+
574  mapStatus(meta, pv.status.get(), pv.message.get());
+
575  FMAP(severity, severity);
+
576  }
+
577  if(dbe&DBE_PROPERTY) {
+
578 #undef FMAP
+
579  if(pv.desc) pv.desc->put(prec->desc);
+
580 #define FMAP(MASK, MNAME, FNAME) if(META::mask&(MASK) && pv.MNAME) pv.MNAME->put(meta.FNAME)
+
581  FMAP(DBR_GR_DOUBLE, displayHigh, upper_disp_limit);
+
582  FMAP(DBR_GR_DOUBLE, displayLow, lower_disp_limit);
+
583  FMAP(DBR_CTRL_DOUBLE, controlHigh, upper_ctrl_limit);
+
584  FMAP(DBR_CTRL_DOUBLE, controlLow, lower_ctrl_limit);
+
585  FMAP(DBR_GR_DOUBLE, egu, units);
+
586 #undef FMAP
+
587  if(META::mask&DBR_PRECISION && pv.prec) {
+
588  pv.prec->put(pvd::int32(meta.precision.dp));
+
589  }
+
590 #define FMAP(MASK, MNAME, FNAME) if(META::mask&(MASK) && pv.MNAME) pv.MNAME->putFrom(meta.FNAME)
+
591  // not handling precision until I get a better idea of what 'format' is supposed to be...
+
592  //FMAP(prec, PVScalar, "display.form", PROPERTY);
+
593  FMAP(DBR_AL_DOUBLE, warnHigh, upper_warning_limit);
+
594  FMAP(DBR_AL_DOUBLE, warnLow, lower_warning_limit);
+
595  FMAP(DBR_AL_DOUBLE, alarmHigh, upper_alarm_limit);
+
596  FMAP(DBR_AL_DOUBLE, alarmLow, lower_alarm_limit);
+
597 #undef FMAP
+
598  if(pv.enumopts) {
+
599  pvd::shared_vector<std::string> strs(meta.no_str);
+
600  for(size_t i=0; i<strs.size(); i++)
+
601  {
+
602  meta.strs[i][sizeof(meta.strs[i])-1] = '\0';
+
603  strs[i] = meta.strs[i];
+
604  }
+
605  pv.enumopts->replace(pvd::freeze(strs));
+
606  }
+
607  }
+
608 }
+
609 
+
610 template<typename PVC, typename META>
+
611 void putAll(const PVC &pv, unsigned dbe, db_field_log *pfl)
+
612 {
+
613  if(dbe&(DBE_VALUE|DBE_ARCHIVE)) {
+
614  putValue(pv.chan, pv.value.get(), pfl);
+
615  }
+
616  if(!(dbe&DBE_PROPERTY)) {
+
617  putTime(pv, dbe, pfl);
+
618  } else {
+
619  putMeta<META>(pv, dbe, pfl);
+
620  }
+
621 }
+
622 
+
623 void findNSMask(pvTimeAlarm& pvmeta, pdbRecordIterator& info, const epics::pvData::PVStructurePtr& pvalue)
+
624 {
+
625  const char *UT = info.info("Q:time:tag");
+
626  if(UT && strncmp(UT, "nsec:lsb:", 9)==0) {
+
627  try{
+
628  pvmeta.nsecMask = epics::pvData::castUnsafe<pvd::uint32>(std::string(&UT[9]));
+
629  }catch(std::exception& e){
+
630  pvmeta.nsecMask = 0;
+
631  std::cerr<<info.name()<<" : Q:time:tag nsec:lsb: requires a number not '"<<UT[9]<<"'\n";
+
632  }
+
633  }
+
634  if(pvmeta.nsecMask>0 && pvmeta.nsecMask<=32) {
+
635  pvmeta.userTag = pvalue->getSubField<pvd::PVInt>("timeStamp.userTag");
+
636  if(!pvmeta.userTag) {
+
637  pvmeta.nsecMask = 0; // struct doesn't have userTag
+
638  } else {
+
639  pvd::uint64 mask = (1<<pvmeta.nsecMask)-1;
+
640  pvmeta.nsecMask = mask;
+
641  pvmeta.maskALWAYS.set(pvmeta.userTag->getFieldOffset());
+
642  }
+
643  } else
+
644  pvmeta.nsecMask = 0;
+
645 }
+
646 
+
647 void findFormat(pvTimeAlarm& pvmeta, pdbRecordIterator& info, const epics::pvData::PVStructurePtr& pvalue)
+
648 {
+
649  const char *FMT = info.info("Q:form");
+
650  if(FMT) {
+
651  pvd::PVScalarPtr fmt(pvalue->getSubField<pvd::PVScalar>("display.form.index"));
+
652  if(fmt) {
+
653  bool found = false;
+
654  for(size_t i=0; !found && i<displayForms.size(); i++) {
+
655  if((found=(displayForms[i]==FMT)))
+
656  fmt->putFrom<pvd::uint32>(i);
+
657  }
+
658  if(!found) {
+
659  try {
+
660  fmt->putFrom(std::string(FMT)); // attempt to parse as number
+
661  }catch(std::exception& e){
+
662  errlogPrintf("%s: info(Q:form, \"%s\") is not known format: %s\n", info.name(), FMT, e.what());
+
663  }
+
664  }
+
665  }
+
666  }
+
667 }
+
668 
+
669 pvd::Status checkDISP(dbChannel *chan)
+
670 {
+
671  dbCommon *prec = dbChannelRecord(chan);
+
672  pvd::Status ret;
+
673  if(prec->disp && dbChannelField(chan)!=&prec->disp)
+
674  ret = pvd::Status::error("Put Disabled");
+
675  return ret;
+
676 }
+
677 
+
678 template<typename PVX, typename META>
+
679 struct PVIFScalarNumeric : public PVIF
+
680 {
+
681  PVX pvmeta;
+
682  const epics::pvData::PVStructurePtr pvalue;
+
683 
+
684  PVIFScalarNumeric(dbChannel *ch, const epics::pvData::PVFieldPtr& p, pvd::PVField *enclosing)
+
685  :PVIF(ch)
+
686  ,pvalue(std::tr1::dynamic_pointer_cast<pvd::PVStructure>(p))
+
687  {
+
688  if(!pvalue)
+
689  throw std::runtime_error("Must attach to structure");
+
690 
+
691  pvmeta.chan = ch;
+
692  attachAll<PVX>(pvmeta, pvalue);
+
693  if(enclosing) {
+
694  size_t bit = enclosing->getFieldOffset();
+
695  // we are inside a structure array or similar with only one bit for all ours fields
+
696  pvmeta.maskALWAYS.clear();
+
697  pvmeta.maskALWAYS.set(bit);
+
698  pvmeta.maskVALUE.clear();
+
699  pvmeta.maskVALUE.set(bit);
+
700  pvmeta.maskALARM.clear();
+
701  pvmeta.maskALARM.set(bit);
+
702  pvmeta.maskPROPERTY.clear();
+
703  pvmeta.maskPROPERTY.set(bit);
+
704  pvmeta.maskVALUEPut.clear();
+
705  pvmeta.maskVALUEPut.set(0);
+
706  pvmeta.maskVALUEPut.set(bit);
+
707  }
+
708  pdbRecordIterator info(chan);
+
709  findNSMask(pvmeta, info, pvalue);
+
710  findFormat(pvmeta, info, pvalue);
+
711  }
+
712  virtual ~PVIFScalarNumeric() {}
+
713 
+
714  virtual void put(epics::pvData::BitSet& mask, unsigned dbe, db_field_log *pfl) OVERRIDE FINAL
+
715  {
+
716  try{
+
717  putAll<PVX, META>(pvmeta, dbe, pfl);
+
718  mask |= pvmeta.maskALWAYS;
+
719  if(dbe&(DBE_VALUE|DBE_ARCHIVE))
+
720  mask |= pvmeta.maskVALUE;
+
721  if(dbe&DBE_ALARM)
+
722  mask |= pvmeta.maskALARM;
+
723  if(dbe&DBE_PROPERTY)
+
724  mask |= pvmeta.maskPROPERTY;
+
725  }catch(...){
+
726  pvmeta.severity->put(3);
+
727  mask |= pvmeta.maskALARM;
+
728  throw;
+
729  }
+
730  }
+
731 
+
732  virtual pvd::Status get(const epics::pvData::BitSet& mask, proc_t proc, bool permit) OVERRIDE FINAL
+
733  {
+
734  pvd::Status ret = checkDISP(chan);
+
735  if(!ret)
+
736  return ret;
+
737 
+
738  bool newval = mask.logical_and(pvmeta.maskVALUEPut);
+
739  if(newval) {
+
740  if(permit)
+
741  getValue(pvmeta.chan, pvmeta.value.get());
+
742  else
+
743  ret = pvd::Status::error("Put not permitted");
+
744  }
+
745  if(newval || proc==PVIF::ProcForce) {
+
746  if(permit)
+
747  ret = PVIF::get(mask, proc);
+
748  else
+
749  ret = pvd::Status::error("Process not permitted");
+
750  }
+
751  return ret;
+
752  }
+
753 
+
754  virtual unsigned dbe(const epics::pvData::BitSet& mask) OVERRIDE FINAL
+
755  {
+
756  unsigned ret = 0;
+
757  if(mask.logical_and(pvmeta.maskVALUE))
+
758  ret |= DBE_VALUE;
+
759  if(mask.logical_and(pvmeta.maskALARM))
+
760  ret |= DBE_ALARM;
+
761  if(mask.logical_and(pvmeta.maskPROPERTY))
+
762  ret |= DBE_PROPERTY;
+
763  return ret;
+
764  }
+
765 };
+
766 
+
767 } // namespace
+
768 
+
769 static
+
770 pvd::ScalarType DBR2PVD(short dbr)
+
771 {
+
772  switch(dbr) {
+
773 #define CASE(BASETYPE, PVATYPE, DBFTYPE, PVACODE) case DBR_##DBFTYPE: return pvd::pv##PVACODE;
+
774 #define CASE_ENUM
+
775 #define CASE_SKIP_BOOL
+
776 #include "pv/typemap.h"
+
777 #undef CASE_ENUM
+
778 #undef CASE_SKIP_BOOL
+
779 #undef CASE
+
780  case DBF_STRING: return pvd::pvString;
+
781  }
+
782  throw std::invalid_argument("Unsupported DBR code");
+
783 }
+
784 
+
785 short PVD2DBR(pvd::ScalarType pvt)
+
786 {
+
787  switch(pvt) {
+
788 #define CASE(BASETYPE, PVATYPE, DBFTYPE, PVACODE) case pvd::pv##PVACODE: return DBR_##DBFTYPE;
+
789 #ifndef USE_INT64
+
790 # define CASE_SQUEEZE_INT64
+
791 #endif
+
792 #include "pv/typemap.h"
+
793 #ifndef USE_INT64
+
794 # undef CASE_SQUEEZE_INT64
+
795 #endif
+
796 #undef CASE
+
797  case pvd::pvString: return DBF_STRING;
+
798  }
+
799  return -1;
+
800 }
+
801 
+
802 static
+
803 pvd::StructureConstPtr buildTimeStamp()
+
804 {
+
805  return pvd::FieldBuilder::begin()
+
806  ->add("secondsPastEpoch", pvd::pvLong)
+
807  ->add("nanoseconds", pvd::pvInt)
+
808  ->add("userTag", pvd::pvInt)
+
809  ->createStructure();
+
810 }
+
811 
+
812 epics::pvData::FieldConstPtr
+
813 ScalarBuilder::dtype()
+
814 {
+
815  if(!channel)
+
816  throw std::runtime_error("+type:\"scalar\" requires +channel:");
+
817 
+
818  short dbr = dbChannelFinalFieldType(channel);
+
819  const long maxelem = dbChannelFinalElements(channel);
+
820  const pvd::ScalarType pvt = DBR2PVD(dbr);
+
821 
+
822  if(INVALID_DB_REQ(dbr))
+
823  throw std::invalid_argument("DBF code out of range");
+
824 
+
825  if(maxelem!=1 && dbr==DBR_ENUM)
+
826  dbr = DBF_SHORT;
+
827 
+
828  pvd::FieldBuilderPtr builder(pvd::getFieldCreate()->createFieldBuilder());
+
829  pvd::StandardFieldPtr standard(pvd::getStandardField());
+
830 
+
831  if(dbr==DBR_ENUM)
+
832  builder = builder->setId("epics:nt/NTEnum:1.0")
+
833  ->addNestedStructure("value")
+
834  ->setId("enum_t")
+
835  ->add("index", pvd::pvInt)
+
836  ->addArray("choices", pvd::pvString)
+
837  ->endNested();
+
838  else if(maxelem==1)
+
839  builder = builder->setId("epics:nt/NTScalar:1.0")
+
840  ->add("value", pvt);
+
841  else
+
842  builder = builder->setId("epics:nt/NTScalarArray:1.0")
+
843  ->addArray("value", pvt);
+
844 
+
845  builder = builder->add("alarm", standard->alarm())
+
846  ->add("timeStamp", buildTimeStamp());
+
847 
+
848  if(dbr!=DBR_ENUM) {
+
849  builder = builder->addNestedStructure("display")
+
850  ->add("limitLow", pvd::pvDouble)
+
851  ->add("limitHigh", pvd::pvDouble)
+
852  ->add("description", pvd::pvString)
+
853  ->add("units", pvd::pvString)
+
854  ->add("precision", pvd::pvInt)
+
855  ->addNestedStructure("form")
+
856  ->setId("enum_t")
+
857  ->add("index", pvd::pvInt)
+
858  ->addArray("choices", pvd::pvString)
+
859  ->endNested()
+
860  ->endNested()
+
861  ->add("control", standard->control());
+
862 
+
863  if(dbr!=DBR_STRING)
+
864  builder = builder->add("valueAlarm", standard->doubleAlarm());
+
865  }
+
866 
+
867  return builder->createStructure();
+
868 }
+
869 
+
870 PVIF*
+
871 ScalarBuilder::attach(const epics::pvData::PVStructurePtr& root, const FieldName& fldname)
+
872 {
+
873  if(!channel)
+
874  throw std::runtime_error("+type:\"scalar\" requires +channel:");
+
875  pvd::PVField *enclosing = 0;
+
876  pvd::PVFieldPtr fld(fldname.lookup(root, &enclosing));
+
877 
+
878  const short dbr = dbChannelFinalFieldType(channel);
+
879  const long maxelem = dbChannelFinalElements(channel);
+
880 
+
881  if(maxelem==1) {
+
882  switch(dbr) {
+
883  case DBR_CHAR:
+
884  case DBR_UCHAR:
+
885  case DBR_SHORT:
+
886  case DBR_USHORT:
+
887  case DBR_LONG:
+
888  case DBR_ULONG:
+
889 #ifdef USE_INT64
+
890  case DBR_INT64:
+
891  case DBR_UINT64:
+
892 #endif
+
893  return new PVIFScalarNumeric<pvScalar, metaDOUBLE>(channel, fld, enclosing);
+
894  case DBR_FLOAT:
+
895  case DBR_DOUBLE:
+
896  return new PVIFScalarNumeric<pvScalar, metaDOUBLE>(channel, fld, enclosing);
+
897  case DBR_ENUM:
+
898  return new PVIFScalarNumeric<pvScalar, metaENUM>(channel, fld, enclosing);
+
899  case DBR_STRING:
+
900  return new PVIFScalarNumeric<pvScalar, metaSTRING>(channel, fld, enclosing);
+
901  }
+
902  } else {
+
903  switch(dbr) {
+
904  case DBR_CHAR:
+
905  case DBR_UCHAR:
+
906  case DBR_SHORT:
+
907  case DBR_ENUM:
+
908  case DBR_USHORT:
+
909  case DBR_LONG:
+
910  case DBR_ULONG:
+
911  case DBR_STRING:
+
912  case DBR_FLOAT:
+
913 #ifdef USE_INT64
+
914  case DBR_INT64:
+
915  case DBR_UINT64:
+
916 #endif
+
917  case DBR_DOUBLE:
+
918  return new PVIFScalarNumeric<pvArray, metaDOUBLE>(channel, fld, enclosing);
+
919  }
+
920  }
+
921 
+
922  throw std::invalid_argument("Channel has invalid/unsupported DBR type");
+
923 }
+
924 
+
925 namespace {
+
926 template<class PVD>
+
927 struct PVIFPlain : public PVIF
+
928 {
+
929  const typename PVD::shared_pointer field;
+
930  size_t fieldOffset;
+
931  dbChannel * const channel;
+
932 
+
933  PVIFPlain(dbChannel *channel, const epics::pvData::PVFieldPtr& fld, epics::pvData::PVField* enclosing=0)
+
934  :PVIF(channel)
+
935  ,field(std::tr1::static_pointer_cast<PVD>(fld))
+
936  ,channel(channel)
+
937  {
+
938  if(!field)
+
939  throw std::logic_error("PVIFPlain attached type mis-match");
+
940  if(enclosing)
+
941  fieldOffset = enclosing->getFieldOffset();
+
942  else
+
943  fieldOffset = field->getFieldOffset();
+
944  }
+
945 
+
946  virtual ~PVIFPlain() {}
+
947 
+
948  virtual void put(epics::pvData::BitSet& mask, unsigned dbe, db_field_log *pfl) OVERRIDE FINAL
+
949  {
+
950  if(dbe&DBE_VALUE) {
+
951  putValue(channel, field.get(), pfl);
+
952  mask.set(fieldOffset);
+
953  }
+
954  }
+
955 
+
956  virtual pvd::Status get(const epics::pvData::BitSet& mask, proc_t proc, bool permit) OVERRIDE FINAL
+
957  {
+
958  pvd::Status ret = checkDISP(chan);
+
959  if(!ret)
+
960  return ret;
+
961 
+
962  bool newval = mask.get(fieldOffset);
+
963  if(newval) {
+
964  if(permit)
+
965  getValue(channel, field.get());
+
966  else
+
967  ret = pvd::Status::error("Put not permitted");
+
968  }
+
969  if(newval || proc==PVIF::ProcForce) {
+
970  if(permit)
+
971  ret = PVIF::get(mask, proc);
+
972  else
+
973  ret = pvd::Status::error("Process not permitted");
+
974  }
+
975  return ret;
+
976  }
+
977 
+
978  virtual unsigned dbe(const epics::pvData::BitSet& mask) OVERRIDE FINAL
+
979  {
+
980  // TODO: figure out how to handle various intermidiate compressed
+
981  // bitSet and enclosing.
+
982  // Until then check only also for wildcard bit (0).
+
983  if(mask.get(fieldOffset) || mask.get(0))
+
984  return DBE_VALUE;
+
985  return 0;
+
986  }
+
987 };
+
988 
+
989 struct PlainBuilder : public PVIFBuilder
+
990 {
+
991  explicit PlainBuilder(dbChannel* chan) :PVIFBuilder(chan) {}
+
992  virtual ~PlainBuilder() {}
+
993 
+
994  // fetch the structure description
+
995  virtual epics::pvData::FieldConstPtr dtype() OVERRIDE FINAL {
+
996  if(!channel)
+
997  throw std::runtime_error("+type:\"plain\" requires +channel:");
+
998 
+
999  const short dbr = dbChannelFinalFieldType(channel);
+
1000  const long maxelem = dbChannelFinalElements(channel);
+
1001  const pvd::ScalarType pvt = DBR2PVD(dbr);
+
1002 
+
1003  if(INVALID_DB_REQ(dbr))
+
1004  throw std::invalid_argument("DBF code out of range");
+
1005 
+
1006  if(maxelem==1)
+
1007  return pvd::getFieldCreate()->createScalar(pvt);
+
1008  else
+
1009  return pvd::getFieldCreate()->createScalarArray(pvt);
+
1010  }
+
1011 
+
1012  // Attach to a structure instance.
+
1013  // must be of the type returned by dtype().
+
1014  // need not be the root structure
+
1015  virtual PVIF* attach(const epics::pvData::PVStructurePtr& root,
+
1016  const FieldName& fldname) OVERRIDE FINAL
+
1017  {
+
1018  if(!channel)
+
1019  throw std::runtime_error("+type:\"plain\" requires +channel:");
+
1020  const long maxelem = dbChannelFinalElements(channel);
+
1021 
+
1022  pvd::PVField *enclosing = 0;
+
1023  pvd::PVFieldPtr fld(fldname.lookup(root, &enclosing));
+
1024 
+
1025  if(maxelem==1)
+
1026  return new PVIFPlain<pvd::PVScalar>(channel, fld, enclosing);
+
1027  else
+
1028  return new PVIFPlain<pvd::PVScalarArray>(channel, fld, enclosing);
+
1029  }
+
1030 };
+
1031 
+
1032 struct AnyScalarBuilder : public PVIFBuilder
+
1033 {
+
1034  explicit AnyScalarBuilder(dbChannel* chan) :PVIFBuilder(chan) {}
+
1035  virtual ~AnyScalarBuilder() {}
+
1036 
+
1037  // fetch the structure description
+
1038  virtual epics::pvData::FieldConstPtr dtype() OVERRIDE FINAL {
+
1039  (void)channel; //ignored
+
1040  return pvd::getFieldCreate()->createVariantUnion();
+
1041  }
+
1042 
+
1043  // Attach to a structure instance.
+
1044  // must be of the type returned by dtype().
+
1045  // need not be the root structure
+
1046  virtual PVIF* attach(const epics::pvData::PVStructurePtr& root,
+
1047  const FieldName& fldname) OVERRIDE FINAL
+
1048  {
+
1049  if(!channel)
+
1050  throw std::runtime_error("+type:\"any\" requires +channel:");
+
1051  pvd::PVDataCreatePtr create(pvd::getPVDataCreate());
+
1052  const short dbr = dbChannelFinalFieldType(channel);
+
1053  const long maxelem = dbChannelFinalElements(channel);
+
1054  const pvd::ScalarType pvt = DBR2PVD(dbr);
+
1055 
+
1056  pvd::PVField *enclosing = 0;
+
1057  pvd::PVFieldPtr fld(fldname.lookup(root, &enclosing));
+
1058 
+
1059  pvd::PVUnion *value = dynamic_cast<pvd::PVUnion*>(fld.get());
+
1060  if(!value)
+
1061  throw std::logic_error("Mis-matched attachment point");
+
1062 
+
1063  pvd::PVFieldPtr arr(value->get());
+
1064  if(!arr) {
+
1065  if(maxelem==1)
+
1066  arr = create->createPVScalar(pvt);
+
1067  else
+
1068  arr = create->createPVScalarArray(pvt);
+
1069  value->set(arr);
+
1070  }
+
1071 
+
1072  if(maxelem==1)
+
1073  return new PVIFPlain<pvd::PVScalar>(channel, arr, enclosing ? enclosing : arr.get());
+
1074  else
+
1075  return new PVIFPlain<pvd::PVScalarArray>(channel, arr, enclosing ? enclosing : arr.get());
+
1076  }
+
1077 
+
1078 };
+
1079 
+
1080 struct PVIFMeta : public PVIF
+
1081 {
+
1082  pvTimeAlarm meta;
+
1083 
+
1084  PVIFMeta(dbChannel *channel, const epics::pvData::PVFieldPtr& fld, epics::pvData::PVField* enclosing=0)
+
1085  :PVIF(channel)
+
1086  {
+
1087  pvd::PVStructurePtr field(std::tr1::dynamic_pointer_cast<pvd::PVStructure>(fld));
+
1088  if(!field)
+
1089  throw std::logic_error("PVIFMeta attached type mis-match");
+
1090  meta.chan = channel;
+
1091  pdbRecordIterator info(chan);
+
1092  attachTime(meta, field);
+
1093  findNSMask(meta, info, field);
+
1094  findFormat(meta, info, field);
+
1095  if(enclosing) {
+
1096  meta.maskALWAYS.clear();
+
1097  meta.maskALWAYS.set(enclosing->getFieldOffset());
+
1098  meta.maskALARM.clear();
+
1099  meta.maskALARM.set(enclosing->getFieldOffset());
+
1100  }
+
1101  }
+
1102 
+
1103  virtual ~PVIFMeta() {}
+
1104 
+
1105  virtual void put(epics::pvData::BitSet& mask, unsigned dbe, db_field_log *pfl) OVERRIDE FINAL
+
1106  {
+
1107  mask |= meta.maskALWAYS;
+
1108  if(dbe&DBE_ALARM)
+
1109  mask |= meta.maskALARM;
+
1110 
+
1111  putTime(meta, dbe, pfl);
+
1112  }
+
1113 
+
1114  virtual pvd::Status get(const epics::pvData::BitSet& mask, proc_t proc, bool permit) OVERRIDE FINAL
+
1115  {
+
1116  // can't put time/alarm
+
1117  if(mask.logical_and(meta.maskALARM))
+
1118  return pvd::Status::warn("Put to meta field ignored");
+
1119  return pvd::Status::Ok;
+
1120  }
+
1121 
+
1122  virtual unsigned dbe(const epics::pvData::BitSet& mask) OVERRIDE FINAL
+
1123  {
+
1124  if(mask.logical_and(meta.maskALARM))
+
1125  return DBE_ALARM;
+
1126  return 0;
+
1127  }
+
1128 };
+
1129 
+
1130 struct MetaBuilder : public PVIFBuilder
+
1131 {
+
1132  explicit MetaBuilder(dbChannel* chan) :PVIFBuilder(chan) {}
+
1133  virtual ~MetaBuilder() {}
+
1134 
+
1135  // fetch the structure description
+
1136  virtual epics::pvData::FieldConstPtr dtype() OVERRIDE FINAL {
+
1137  throw std::logic_error("Don't call me");
+
1138  }
+
1139 
+
1140  virtual epics::pvData::FieldBuilderPtr dtype(epics::pvData::FieldBuilderPtr& builder,
+
1141  const std::string& fld) OVERRIDE FINAL
+
1142  {
+
1143  pvd::StandardFieldPtr std(pvd::getStandardField());
+
1144  if(fld.empty()) {
+
1145  return builder->add("alarm", std->alarm())
+
1146  ->add("timeStamp", buildTimeStamp());
+
1147  } else {
+
1148  return builder->addNestedStructure(fld)
+
1149  ->add("alarm", std->alarm())
+
1150  ->add("timeStamp", buildTimeStamp())
+
1151  ->endNested();
+
1152  }
+
1153  }
+
1154 
+
1155  // Attach to a structure instance.
+
1156  // must be of the type returned by dtype().
+
1157  // need not be the root structure
+
1158  virtual PVIF* attach(const epics::pvData::PVStructurePtr& root,
+
1159  const FieldName& fldname) OVERRIDE FINAL
+
1160  {
+
1161  if(!channel)
+
1162  throw std::runtime_error("+type:\"meta\" requires +channel:");
+
1163 
+
1164  pvd::PVField *enclosing = 0;
+
1165  pvd::PVFieldPtr fld(fldname.lookup(root, &enclosing));
+
1166 
+
1167  return new PVIFMeta(channel, fld, enclosing);
+
1168  }
+
1169 
+
1170 };
+
1171 
+
1172 struct PVIFProc : public PVIF
+
1173 {
+
1174  PVIFProc(dbChannel *channel) :PVIF(channel) {}
+
1175 
+
1176  virtual void put(epics::pvData::BitSet& mask, unsigned dbe, db_field_log *pfl) OVERRIDE FINAL
+
1177  {
+
1178  // nothing to get
+
1179  }
+
1180 
+
1181  virtual pvd::Status get(const epics::pvData::BitSet& mask, proc_t proc, bool permit) OVERRIDE FINAL
+
1182  {
+
1183  // always process (if permitted)
+
1184  return PVIF::get(mask, PVIF::ProcForce, permit);
+
1185  }
+
1186 
+
1187  virtual unsigned dbe(const epics::pvData::BitSet& mask) OVERRIDE FINAL
+
1188  {
+
1189  return 0;
+
1190  }
+
1191 };
+
1192 
+
1193 struct ProcBuilder : public PVIFBuilder
+
1194 {
+
1195  explicit ProcBuilder(dbChannel* chan) :PVIFBuilder(chan) {}
+
1196  virtual ~ProcBuilder() {}
+
1197 
+
1198  // fetch the structure description
+
1199  virtual epics::pvData::FieldConstPtr dtype() OVERRIDE FINAL {
+
1200  throw std::logic_error("Don't call me");
+
1201  }
+
1202 
+
1203  virtual epics::pvData::FieldBuilderPtr dtype(epics::pvData::FieldBuilderPtr& builder,
+
1204  const std::string& fld) OVERRIDE FINAL
+
1205  {
+
1206  // invisible
+
1207  return builder;
+
1208  }
+
1209  virtual PVIF* attach(const epics::pvData::PVStructurePtr& root,
+
1210  const FieldName& fldname) OVERRIDE FINAL
+
1211  {
+
1212  if(!channel)
+
1213  throw std::runtime_error("+type:\"proc\" requires +channel:");
+
1214 
+
1215  return new PVIFProc(channel);
+
1216  }
+
1217 };
+
1218 
+
1219 struct PVIFNoOp : public PVIF
+
1220 {
+
1221  PVIFNoOp(dbChannel *channel) :PVIF(channel) {}
+
1222 
+
1223  virtual void put(epics::pvData::BitSet& mask, unsigned dbe, db_field_log *pfl) OVERRIDE FINAL
+
1224  {}
+
1225 
+
1226  virtual pvd::Status get(const epics::pvData::BitSet& mask, proc_t proc, bool permit) OVERRIDE FINAL
+
1227  {
+
1228  return pvd::Status();
+
1229  }
+
1230 
+
1231  virtual unsigned dbe(const epics::pvData::BitSet& mask) OVERRIDE FINAL
+
1232  {
+
1233  return 0;
+
1234  }
+
1235 };
+
1236 
+
1237 struct IDBuilder : public PVIFBuilder
+
1238 {
+
1239  explicit IDBuilder(dbChannel* chan) :PVIFBuilder(chan) {}
+
1240  virtual ~IDBuilder() {}
+
1241 
+
1242  // fetch the structure description
+
1243  virtual epics::pvData::FieldConstPtr dtype() OVERRIDE FINAL {
+
1244  throw std::logic_error("Don't call me");
+
1245  }
+
1246 
+
1247  virtual epics::pvData::FieldBuilderPtr dtype(epics::pvData::FieldBuilderPtr& builder,
+
1248  const std::string& fld) OVERRIDE FINAL
+
1249  {
+
1250  // caller has already done builder->setId(...)
+
1251  return builder;
+
1252  }
+
1253  virtual PVIF* attach(const epics::pvData::PVStructurePtr& root,
+
1254  const FieldName& fldname) OVERRIDE FINAL
+
1255  {
+
1256  return new PVIFNoOp(channel);
+
1257  }
+
1258 };
+
1259 
+
1260 }//namespace
+
1261 
+
1262 pvd::Status PVIF::get(const epics::pvData::BitSet& mask, proc_t proc, bool permit)
+
1263 {
+
1264  dbCommon *precord = dbChannelRecord(chan);
+
1265 
+
1266  bool tryproc = proc!=ProcPassive ? proc==ProcForce :
+
1267  dbChannelField(chan) == &precord->proc ||
+
1268  (dbChannelFldDes(chan)->process_passive &&
+
1269  precord->scan == 0);
+
1270 
+
1271  pvd::Status ret;
+
1272 
+
1273  if (tryproc) {
+
1274  if (!permit) {
+
1275  return pvd::Status::error("Process not permitted");
+
1276 
+
1277  } else if (precord->pact) {
+
1278  if (precord->tpro)
+
1279  printf("%s: Active %s\n",
+
1280  epicsThreadGetNameSelf(), precord->name);
+
1281  precord->rpro = TRUE;
+
1282  } else {
+
1283  /* indicate that dbPutField called dbProcess */
+
1284  precord->putf = TRUE;
+
1285  long err = dbProcess(precord);
+
1286  if(err) {
+
1287  char buf[32];
+
1288  errSymLookup(err, buf, sizeof(buf));
+
1289  std::ostringstream msg;
+
1290  msg<<"process error : "<<buf;
+
1291  ret = pvd::Status::error(msg.str());
+
1292  }
+
1293  }
+
1294  }
+
1295 
+
1296  return ret;
+
1297 }
+
1298 
+
1299 epics::pvData::FieldBuilderPtr
+
1300 PVIFBuilder::dtype(epics::pvData::FieldBuilderPtr& builder,
+
1301  const std::string &fld)
+
1302 {
+
1303  if(fld.empty())
+
1304  throw std::runtime_error(SB()<<"Can't attach +type "<<typeid(*this).name()<<" to root");
+
1305 
+
1306  epics::pvData::FieldConstPtr ftype(this->dtype());
+
1307  if(ftype)
+
1308  builder = builder->add(fld, ftype);
+
1309 
+
1310  return builder;
+
1311 }
+
1312 
+
1313 PVIFBuilder* PVIFBuilder::create(const std::string& type, dbChannel* chan)
+
1314 {
+
1315  if(type.empty() || type=="scalar")
+
1316  return new ScalarBuilder(chan);
+
1317  else if(type=="plain")
+
1318  return new PlainBuilder(chan);
+
1319  else if(type=="any")
+
1320  return new AnyScalarBuilder(chan);
+
1321  else if(type=="meta")
+
1322  return new MetaBuilder(chan);
+
1323  else if(type=="proc")
+
1324  return new ProcBuilder(chan);
+
1325  else if(type=="structure")
+
1326  return new IDBuilder(chan);
+
1327  else
+
1328  throw std::runtime_error(std::string("Unknown +type=")+type);
+
1329 }
+
Definition: pvif.h:81
+
Definition: pvif.h:100
+
Definition: sb.h:8
+
Definition: pvif.h:365
+
Definition: pvif.h:61
+ +
virtual unsigned dbe(const epics::pvData::BitSet &mask)=0
Calculate DBE mask from changed bitset.
+
virtual void put(epics::pvData::BitSet &mask, unsigned dbe, db_field_log *pfl)=0
+ +
virtual epics::pvData::Status get(const epics::pvData::BitSet &mask, proc_t proc=ProcInhibit, bool permit=true)=0
Definition: pvif.cpp:1262
+ + +
+ + + + diff --git a/pvif_8h_source.html b/pvif_8h_source.html new file mode 100644 index 0000000..6853d55 --- /dev/null +++ b/pvif_8h_source.html @@ -0,0 +1,536 @@ + + + + + + +pva2pva: pdbApp/pvif.h Source File + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
pvif.h
+
+
+
1 #ifndef PVIF_H
+
2 #define PVIF_H
+
3 
+
4 #include <map>
+
5 
+
6 #include <asLib.h>
+
7 #include <dbAccess.h>
+
8 #include <dbChannel.h>
+
9 #include <dbStaticLib.h>
+
10 #include <dbLock.h>
+
11 #include <dbEvent.h>
+
12 #include <epicsVersion.h>
+
13 
+
14 #include <pv/status.h>
+
15 #include <pv/bitSet.h>
+
16 #include <pv/pvData.h>
+
17 #include <pv/anyscalar.h>
+
18 
+
19 #include <pv/qsrv.h>
+
20 
+
21 #ifndef VERSION_INT
+
22 # define VERSION_INT(V,R,M,P) ( ((V)<<24) | ((R)<<16) | ((M)<<8) | (P))
+
23 #endif
+
24 
+
25 #ifndef EPICS_VERSION_INT
+
26 # define EPICS_VERSION_INT VERSION_INT(EPICS_VERSION, EPICS_REVISION, EPICS_MODIFICATION, EPICS_PATCH_LEVEL)
+
27 #endif
+
28 
+
29 #if EPICS_VERSION_INT>=VERSION_INT(3,16,0,2)
+
30 # define USE_MULTILOCK
+
31 #endif
+
32 
+
33 #ifndef DBRutag
+
34 # define DBR_AMSG 0
+
35 # define DBR_UTAG 0
+
36 # define DBRamsg
+
37 # define DBRutag
+
38 #else
+
39 # define HAVE_UTAG
+
40 #endif
+
41 
+
42 namespace epics {
+
43 namespace pvAccess {
+
44 class ChannelRequester;
+
45 }
+
46 }
+
47 
+
48 short PVD2DBR(epics::pvData::ScalarType pvt);
+
49 
+
50 // copy from PVField (.value sub-field) to DBF buffer
+
51 QSRV_API
+
52 long copyPVD2DBF(const epics::pvData::PVField::const_shared_pointer& in,
+
53  void *outbuf, short outdbf, long *outnReq);
+
54 // copy from DBF buffer to PVField (.value sub-field)
+
55 QSRV_API
+
56 long copyDBF2PVD(const epics::pvData::shared_vector<const void>& buf,
+
57  const epics::pvData::PVField::shared_pointer& out,
+
58  epics::pvData::BitSet &changed,
+
59  const epics::pvData::PVStringArray::const_svector& choices);
+
60 
+
61 union dbrbuf {
+
62  epicsInt8 dbf_CHAR;
+
63  epicsUInt8 dbf_UCHAR;
+
64  epicsInt16 dbf_SHORT;
+
65  epicsUInt16 dbf_USHORT;
+
66  epicsEnum16 dbf_ENUM;
+
67  epicsInt32 dbf_LONG;
+
68  epicsUInt32 dbf_ULONG;
+
69  epicsFloat32 dbf_FLOAT;
+
70  epicsFloat64 dbf_DOUBLE;
+
71 
+
72 #ifdef EPICS_VERSION_INT
+
73 # if EPICS_VERSION_INT>=VERSION_INT(3,16,1,0)
+
74  epicsInt64 dbf_INT64;
+
75  epicsUInt64 dbf_UINT64;
+
76 # endif
+
77 #endif
+
78  char dbf_STRING[MAX_STRING_SIZE];
+
79 };
+
80 
+
81 struct QSRV_API DBCH {
+
82  dbChannel *chan;
+
83  DBCH() :chan(0) {}
+
84  explicit DBCH(dbChannel *ch); // calls dbChannelOpen()
+
85  explicit DBCH(const std::string& name);
+
86  ~DBCH();
+
87 
+
88  void swap(DBCH&);
+
89 
+
90  operator dbChannel*() { return chan; }
+
91  operator const dbChannel*() const { return chan; }
+
92  dbChannel *operator->() { return chan; }
+
93  const dbChannel *operator->() const { return chan; }
+
94 private:
+
95  DBCH(const DBCH&);
+
96  DBCH& operator=(const DBCH&);
+
97  void prepare();
+
98 };
+
99 
+
100 struct ASCred {
+
101  // string storage must be safely mutable. cf. asAddClient()
+
102  std::vector<char> user, host;
+
103  std::vector<std::vector<char> > groups;
+
104  void update(const std::tr1::shared_ptr<epics::pvAccess::ChannelRequester>& request);
+
105 };
+
106 
+
107 struct ASCLIENT {
+
108  ASCLIENTPVT aspvt;
+
109  std::vector<ASCLIENTPVT> grppvt;
+
110  ASCLIENT() :aspvt(0) {}
+
111  ~ASCLIENT();
+
112  // ASCred storage must remain valid
+
113  void add(dbChannel* chan, ASCred& cred);
+
114  bool canWrite();
+
115 };
+
116 
+ +
118  DBENTRY ent;
+
119  pdbRecordInfo(const char *name)
+
120  {
+
121  dbInitEntry(pdbbase, &ent);
+
122  if(dbFindRecordPart(&ent, &name))
+
123  throw std::runtime_error(ent.message);
+
124  }
+
125  ~pdbRecordInfo()
+
126  {
+
127  dbFinishEntry(&ent);
+
128  }
+
129  const char *info(const char *key, const char *def =0)
+
130  {
+
131  if(dbFindInfo(&ent, key))
+
132  return def;
+
133  return dbGetInfoString(&ent);
+
134  }
+
135 };
+
136 
+ +
138  DBENTRY ent;
+
139  bool m_done;
+ +
141  {
+
142  dbInitEntry(pdbbase, &ent);
+
143  m_done = dbFirstRecordType(&ent)!=0;
+
144  while(!m_done) {
+
145  if(dbFirstRecord(&ent)==0)
+
146  break;
+
147  // not instances of this type
+
148  m_done = dbNextRecordType(&ent)!=0;
+
149  }
+
150  }
+
151  pdbRecordIterator(const dbChannel *chan)
+
152  {
+
153 #if EPICS_VERSION_INT>=VERSION_INT(3,16,1,0)
+
154  dbInitEntryFromRecord(dbChannelRecord(chan), &ent);
+
155 #else
+
156  dbInitEntry(pdbbase, &ent);
+
157  if(dbFindRecord(&ent, dbChannelRecord(chan)->name)!=0)
+
158  throw std::logic_error("Record not found");
+
159 #endif
+
160  m_done = false;
+
161  }
+
162 #if EPICS_VERSION_INT>=VERSION_INT(3,16,1,0)
+
163  pdbRecordIterator(dbCommon *prec)
+
164  {
+
165  dbInitEntryFromRecord(prec, &ent);
+
166  m_done = false;
+
167  }
+
168 #endif
+ +
170  {
+
171  dbFinishEntry(&ent);
+
172  }
+
173  bool done() const { return m_done; }
+
174  bool next() {
+
175  if(!m_done && dbNextRecord(&ent)!=0)
+
176  {
+
177  // done with this recordType
+
178  while(true) {
+
179  m_done = dbNextRecordType(&ent)!=0;
+
180  if(m_done) break;
+
181  if(dbFirstRecord(&ent)==0)
+
182  break;
+
183  // not instances of this type
+
184  }
+
185  }
+
186  return m_done;
+
187  }
+
188  dbCommon* record() const {
+
189  return m_done ? NULL : (dbCommon*)ent.precnode->precord;
+
190  }
+
191  const char *name() const {
+
192  return m_done ? NULL : ent.precnode->recordname;
+
193  }
+
194  const char *info(const char *key, const char *def =0)
+
195  {
+
196  if(m_done || dbFindInfo(&ent, key))
+
197  return def;
+
198  return dbGetInfoString(&ent);
+
199  }
+
200 };
+
201 
+ +
203  DBENTRY ent;
+
204  bool m_done;
+ +
206  {
+
207  dbCopyEntryContents(&const_cast<pdbRecordIterator&>(I).ent, &ent);
+
208  m_done = dbFirstInfo(&ent)!=0;
+
209  }
+
210  ~pdbInfoIterator()
+
211  {
+
212  dbFinishEntry(&ent);
+
213  }
+
214  bool done() const { return m_done; }
+
215  bool next() {
+
216  m_done = dbNextInfo(&ent)!=0;
+
217  return m_done;
+
218  }
+
219  const char *name() { return dbGetInfoName(&ent); }
+
220  const char *value() { return dbGetInfoString(&ent); }
+
221 };
+
222 
+
223 struct DBEvent
+
224 {
+
225  dbEventSubscription subscript;
+
226  unsigned dbe_mask;
+
227  void *self;
+
228  unsigned index;
+
229  dbChannel *chan;
+
230  DBEvent() :subscript(NULL), self(NULL), index(0) {}
+
231  DBEvent(void* s) :subscript(NULL), self(s), index(0) {}
+
232  ~DBEvent() {destroy();}
+
233  void create(dbEventCtx ctx, dbChannel *ch, EVENTFUNC *fn, unsigned mask)
+
234  {
+
235  subscript = db_add_event(ctx, ch, fn, this, mask);
+
236  if(!subscript)
+
237  throw std::runtime_error("Failed to subscribe to dbEvent");
+
238  chan = ch;
+
239  dbe_mask = mask;
+
240  }
+
241  void destroy() {
+
242  if(subscript) db_cancel_event(subscript);
+
243  }
+
244  bool operator!() const { return !subscript; }
+
245 private:
+
246  DBEvent(const DBEvent&);
+
247  DBEvent& operator=(const DBEvent&);
+
248 };
+
249 
+
250 struct LocalFL
+
251 {
+
252  db_field_log *pfl;
+
253  bool ours;
+
254  LocalFL(db_field_log *pfl, dbChannel *pchan)
+
255  :pfl(pfl)
+
256  ,ours(false)
+
257  {
+
258  if(!pfl && (ellCount(&pchan->pre_chain)!=0 || ellCount(&pchan->post_chain)!=0)) {
+
259  pfl = db_create_read_log(pchan);
+
260  if(pfl) {
+
261  ours = true;
+
262  pfl = dbChannelRunPreChain(pchan, pfl);
+
263  if(pfl) pfl = dbChannelRunPostChain(pchan, pfl);
+
264  }
+
265  }
+
266  this->pfl = pfl;
+
267  }
+
268  ~LocalFL() {
+
269  if(ours) db_delete_field_log(pfl);
+
270  }
+
271 };
+
272 
+ +
274 {
+
275  dbCommon *prec;
+
276  DBScanLocker(dbChannel *chan) :prec(dbChannelRecord(chan))
+
277  { dbScanLock(prec); }
+
278  DBScanLocker(dbCommon *prec) :prec(prec)
+
279  { dbScanLock(prec); }
+
280  ~DBScanLocker()
+
281  { dbScanUnlock(prec); }
+
282 };
+
283 
+
284 #ifdef USE_MULTILOCK
+
285 
+
286 struct DBManyLock
+
287 {
+
288  dbLocker *plock;
+
289  DBManyLock() :plock(NULL) {}
+
290  DBManyLock(const std::vector<dbCommon*>& recs, unsigned flags=0)
+
291  :plock(dbLockerAlloc( (recs.size() > 0 ? (dbCommon**)&recs[0] : NULL), recs.size(), flags))
+
292  {
+
293  if(!plock) throw std::invalid_argument("Failed to create locker");
+
294  }
+
295  DBManyLock(dbCommon * const *precs, size_t nrecs, unsigned flags=0)
+
296  :plock(dbLockerAlloc((dbCommon**)precs, nrecs, flags))
+
297  {
+
298  if(!plock) throw std::invalid_argument("Failed to create locker");
+
299  }
+
300  ~DBManyLock() { if(plock) dbLockerFree(plock); }
+
301  void swap(DBManyLock& O) { std::swap(plock, O.plock); }
+
302  operator dbLocker*() { return plock; }
+
303 private:
+
304  DBManyLock(const DBManyLock&);
+
305  DBManyLock& operator=(const DBManyLock&);
+
306 };
+
307 
+
308 struct DBManyLocker
+
309 {
+
310  dbLocker *plock;
+
311  DBManyLocker(dbLocker *L) :plock(L)
+
312  {
+
313  dbScanLockMany(plock);
+
314  }
+
315  ~DBManyLocker()
+
316  {
+
317  dbScanUnlockMany(plock);
+
318  }
+
319 };
+
320 #endif
+
321 
+
322 struct QSRV_API FieldName
+
323 {
+
324  struct Component {
+
325  std::string name;
+
326  epicsUInt32 index;
+
327  Component() :index((epicsUInt32)-1) {}
+
328  Component(const std::string& name, epicsUInt32 index = (epicsUInt32)-1)
+
329  :name(name), index(index)
+
330  {}
+
331  bool isArray() const { return index!=(epicsUInt32)-1; }
+
332  };
+
333  typedef std::vector<Component> parts_t;
+
334  parts_t parts;
+
335 
+
336  FieldName() {}
+
337  explicit FieldName(const std::string&);
+
338 
+
339  void swap(FieldName& o) {
+
340  parts.swap(o.parts);
+
341  }
+
342 
+
343  bool empty() const { return parts.empty(); }
+
344  size_t size() const { return parts.size(); }
+
345  const Component& operator[](size_t i) const { return parts[i]; }
+
346  const Component& back() const { return parts.back(); }
+
347 
+
348  // Apply field name(s) to given structure
+
349  // if ppenclose!=NULL then the address of the enclosing field (eg. structureArray)
+
350  // whose fieldOffset shoulbe by used, or NULL if no enclosing
+
351  epics::pvData::PVFieldPtr
+
352  lookup(const epics::pvData::PVStructurePtr& S, epics::pvData::PVField** ppenclose) const;
+
353 
+
354  void show() const;
+
355 
+
356 #if !defined(__GNUC__) || (__GNUC__ * 100 + __GNUC_MINOR__ >= 403)
+
357 // Workaround needed for older GCC
+
358 private:
+
359 #endif
+
360  // Prevent default copy/assignment op's
+
361  FieldName(const FieldName&);
+
362  FieldName& operator=(const FieldName&);
+
363 };
+
364 
+
365 struct QSRV_API PVIF {
+
366  PVIF(dbChannel *ch);
+
367  virtual ~PVIF() {}
+
368 
+
369  dbChannel * const chan; // borrowed reference from PVIFBuilder
+
370 
+
371  enum proc_t {
+
372  ProcPassive,
+
373  ProcInhibit,
+
374  ProcForce,
+
375  };
+
376 
+
379  virtual void put(epics::pvData::BitSet& mask, unsigned dbe, db_field_log *pfl) =0;
+
382  virtual epics::pvData::Status get(const epics::pvData::BitSet& mask, proc_t proc=ProcInhibit, bool permit=true) =0;
+
384  virtual unsigned dbe(const epics::pvData::BitSet& mask) =0;
+
385 
+
386 private:
+
387  PVIF(const PVIF&);
+
388  PVIF& operator=(const PVIF&);
+
389 };
+
390 
+
403 struct QSRV_API PVIFBuilder
+
404 {
+
405  dbChannel* const channel;
+
406 
+
407  virtual ~PVIFBuilder() {}
+
408 
+
409  // fetch the structure description
+
410  virtual epics::pvData::FieldConstPtr dtype() =0;
+
411 
+
412  virtual epics::pvData::FieldBuilderPtr dtype(epics::pvData::FieldBuilderPtr& builder,
+
413  const std::string& fld);
+
414 
+
415  // Attach to a structure instance.
+
416  // must be of the type returned by dtype().
+
417  // must be the root structure
+
418  virtual PVIF* attach(const epics::pvData::PVStructurePtr& root, const FieldName& fld) =0;
+
419 
+
420  // entry point for Builder
+
421  static PVIFBuilder* create(const std::string& mapname, dbChannel* chan);
+
422 protected:
+
423  explicit PVIFBuilder(dbChannel* chan) : channel(chan) {}
+
424 private:
+
425  PVIFBuilder(const PVIFBuilder&);
+
426  PVIFBuilder& operator=(const PVIFBuilder&);
+
427 };
+
428 
+
429 struct QSRV_API ScalarBuilder : public PVIFBuilder
+
430 {
+
431  explicit ScalarBuilder(dbChannel* chan) :PVIFBuilder(chan) {}
+
432  virtual ~ScalarBuilder() {}
+
433 
+
434  virtual epics::pvData::FieldConstPtr dtype() OVERRIDE FINAL;
+
435  virtual PVIF* attach(const epics::pvData::PVStructurePtr& root, const FieldName& fld) OVERRIDE FINAL;
+
436 };
+
437 
+
438 
+
439 #endif // PVIF_H
+ +
Definition: pvif.h:107
+
Definition: pvif.h:81
+
Definition: pvif.h:100
+
Definition: pvif.h:365
+
Definition: pvif.h:61
+ + +
Definition: pvif.h:223
+ + +
Definition: pvif.h:250
+ + + +
+ + + + diff --git a/qsrv_8cpp_source.html b/qsrv_8cpp_source.html new file mode 100644 index 0000000..3c04b87 --- /dev/null +++ b/qsrv_8cpp_source.html @@ -0,0 +1,249 @@ + + + + + + +pva2pva: pdbApp/qsrv.cpp Source File + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
qsrv.cpp
+
+
+
1 
+
2 #include <initHooks.h>
+
3 #include <epicsExit.h>
+
4 #include <epicsThread.h>
+
5 #include <epicsString.h>
+
6 #include <epicsStdio.h>
+
7 
+
8 #include <dbAccess.h>
+
9 #include <dbChannel.h>
+
10 #include <dbStaticLib.h>
+
11 #include <dbLock.h>
+
12 #include <dbEvent.h>
+
13 #include <epicsVersion.h>
+
14 #include <dbNotify.h>
+
15 
+
16 #include <pv/reftrack.h>
+
17 #include <pv/pvAccess.h>
+
18 #include <pv/serverContext.h>
+
19 #include <pv/iocshelper.h>
+
20 
+
21 #include "pv/qsrv.h"
+
22 #include "pvahelper.h"
+
23 #include "pvif.h"
+
24 #include "pdb.h"
+
25 #include "pdbsingle.h"
+
26 #ifdef USE_MULTILOCK
+
27 # include "pdbgroup.h"
+
28 #endif
+
29 
+
30 #include <epicsExport.h>
+
31 
+
32 namespace pva = epics::pvAccess;
+
33 
+
34 void QSRVRegistrar_counters()
+
35 {
+
36  epics::registerRefCounter("PDBSinglePV", &PDBSinglePV::num_instances);
+
37  epics::registerRefCounter("PDBSingleChannel", &PDBSingleChannel::num_instances);
+
38  epics::registerRefCounter("PDBSinglePut", &PDBSinglePut::num_instances);
+
39  epics::registerRefCounter("PDBSingleMonitor", &PDBSingleMonitor::num_instances);
+
40 #ifdef USE_MULTILOCK
+
41  epics::registerRefCounter("PDBGroupPV", &PDBGroupPV::num_instances);
+
42  epics::registerRefCounter("PDBGroupChannel", &PDBGroupChannel::num_instances);
+
43  epics::registerRefCounter("PDBGroupPut", &PDBGroupPut::num_instances);
+
44  epics::registerRefCounter("PDBGroupMonitor", &PDBGroupMonitor::num_instances);
+
45 #endif // USE_MULTILOCK
+
46  epics::registerRefCounter("PDBProvider", &PDBProvider::num_instances);
+
47 }
+
48 
+
49 long dbLoadGroup(const char* fname)
+
50 {
+
51  try {
+
52  if(!fname) {
+
53  printf("dbLoadGroup(\"file.json\")\n"
+
54  "\n"
+
55  "Load additional DB group definitions from file.\n");
+
56  return 1;
+
57  }
+
58 #ifndef USE_MULTILOCK
+
59  static bool warned;
+
60  if(!warned) {
+
61  warned = true;
+
62  fprintf(stderr, "ignoring %s\n", fname);
+
63  }
+
64 #endif
+
65 
+
66  if(fname[0]=='-') {
+
67  fname++;
+
68  if(fname[0]=='*' && fname[1]=='\0') {
+
69  PDBProvider::group_files.clear();
+
70  } else {
+
71  PDBProvider::group_files.remove(fname);
+
72  }
+
73  } else {
+
74  PDBProvider::group_files.remove(fname);
+
75  PDBProvider::group_files.push_back(fname);
+
76  }
+
77 
+
78  return 0;
+
79  }catch(std::exception& e){
+
80  fprintf(stderr, "Error: %s\n", e.what());
+
81  return 1;
+
82  }
+
83 }
+
84 
+
85 namespace {
+
86 
+
87 void dbLoadGroupWrap(const char* fname)
+
88 {
+
89  (void)dbLoadGroup(fname);
+
90 }
+
91 
+
92 void dbgl(int lvl, const char *pattern)
+
93 {
+
94  if(!pattern)
+
95  pattern = "";
+
96 
+
97  try {
+
98  PDBProvider::shared_pointer prov(
+
99  std::tr1::dynamic_pointer_cast<PDBProvider>(
+
100  pva::ChannelProviderRegistry::servers()->getProvider("QSRV")));
+
101  if(!prov)
+
102  throw std::runtime_error("No Provider (PVA server not running?)");
+
103 
+
104  PDBProvider::persist_pv_map_t pvs;
+
105  {
+
106  epicsGuard<epicsMutex> G(prov->transient_pv_map.mutex());
+
107  pvs = prov->persist_pv_map; // copy map
+
108  }
+
109 
+
110  for(PDBProvider::persist_pv_map_t::const_iterator it(pvs.begin()), end(pvs.end());
+
111  it != end; ++it)
+
112  {
+
113  if(pattern[0] && epicsStrGlobMatch(it->first.c_str(), pattern)==0)
+
114  continue;
+
115 
+
116  printf("%s\n", it->first.c_str());
+
117  if(lvl<=0)
+
118  continue;
+
119  it->second->show(lvl);
+
120  }
+
121 
+
122  }catch(std::exception& e){
+
123  fprintf(stderr, "Error: %s\n", e.what());
+
124  }
+
125 }
+
126 
+
127 void QSRVRegistrar()
+
128 {
+
129  QSRVRegistrar_counters();
+
130  pva::ChannelProviderRegistry::servers()->addSingleton<PDBProvider>("QSRV");
+
131  epics::iocshRegister<int, const char*, &dbgl>("dbgl", "level", "pattern");
+
132  epics::iocshRegister<const char*, &dbLoadGroupWrap>("dbLoadGroup", "jsonfile");
+
133 }
+
134 
+
135 } // namespace
+
136 
+
137 unsigned qsrvVersion(void)
+
138 {
+
139  return QSRV_VERSION_INT;
+
140 }
+
141 
+
142 unsigned qsrvABIVersion(void)
+
143 {
+
144  return QSRV_ABI_VERSION_INT;
+
145 }
+
146 
+
147 extern "C" {
+
148  epicsExportRegistrar(QSRVRegistrar);
+
149 }
+ +
+ + + + diff --git a/qsrv_page.html b/qsrv_page.html new file mode 100644 index 0000000..cd359dd --- /dev/null +++ b/qsrv_page.html @@ -0,0 +1,316 @@ + + + + + + +pva2pva: QSRV + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + +
+ +
+ +
+
+
+
QSRV
+
+
+

+QSRV Configuration

+

By default QSRV exposes all Process Variables (fields of process database records). In addition to these "single" PVs are special "group" PVs.

+

+Single PVs

+

"single" PVs are the same set of names server by the Channel Access server (RSRV). This is all accessible record fields. So all data which is accessible via Channel Access is also accessible via PVAccess.

+

QSRV presents all "single" PVs as Structures conforming to the Normative Types NTScalar, NTScalarArray, or NTEnum depending on the native DBF field type.

+

+Group PV definitions

+

A group is defined using a JSON syntax. Groups are defined with respect to a Group Name, which is also the PV name. So unlike records, the "field" of a group have a different meaning. Group field names are not part of the PV name.

+

A group definition may be split among several records, or included in separate JSON file(s).

+

For example of a group including two records is:

+
record(ai, "rec:X") {
+
info(Q:group, {
+
"grp:name": {
+
"X": {+channel:"VAL"}
+
}
+
})
+
}
+
record(ai, "rec:Y") {
+
info(Q:group, {
+
"grp:name": {
+
"Y": {+channel:"VAL"}
+
}
+
})
+
}
+

Or equivalently with separate .db file and .json files.

+
# some .db
+
record(ai, "rec:X") {}
+
record(ai, "rec:Y") {}
+
{
+
"grp:name": {
+
"X": {+channel:"VAL"},
+
"Y": {+channel:"VAL"}
+
}
+
}
+

This group, named "grp:name", has two fields "X" and "Y".

+
$ pvget grp:name
+
grp:name
+
structure
+
epics:nt/NTScalar:1.0 X
+
double value 0
+
alarm_t alarm INVALID DRIVER UDF
+
time_t timeStamp <undefined> 0
+
...
+
epics:nt/NTScalar:1.0 Y
+
double value 0
+
alarm_t alarm INVALID DRIVER UDF
+
time_t timeStamp <undefined> 0
+
...
+

+Group PV reference

+
record(...) {
+
info(Q:group, {
+
"<group_name>":{
+
+id:"some/NT:1.0", # top level ID
+
+atomic:true, # whether monitors default to multi-locking atomicity
+
"<field.name>":{
+
+type:"scalar", # controls how map VAL mapped onto <field.name>
+
+channel:"VAL",
+
+id:"some/NT:1.0",
+
+trigger:"*", # "*" or comma seperated list of <field.name>s
+
+putorder:0, # set for fields where put is allowed, processing done in increasing order
+
},
+
"": {+type:"meta", +channel:"VAL"} # special case adds meta-data fields at top level
+
}
+
})
+
}
+

+Field mapping types

+
    +
  • "scalar" or ""
  • +
  • "plain"
  • +
  • "any"
  • +
  • "meta"
  • +
  • "proc"
  • +
  • "structure"
  • +
+

The "scalar" mapping places an NTScalar or NTScalarArray as a sub-structure.

+

The "plain" mapping ignores all meta-data and places only the "value" as a field. The "value" is equivalent to '.value' of the equivalent NTScalar/NTScalarArray as a field.

+

The "any" mapping places a variant union into which the "value" is placed.

+

The "meta" mapping ignores the "value" and places only the alarm and time meta-data as sub-fields. Placing an entry in a blank field name '"": {+type:"meta"}' allows these meta-data fields to be placed in the top-level structure.

+

The "proc" mapping uses neither "value" nor meta-data. Instead the target record is processed during a put.

+

The "structure" mapping allows an "+id" to be attached without a "+channel". So none of "+channel", "+trigger", nor "+putorder" are meaningful for a "structure" mapping.

+

+Field Update Triggers

+

The field triggers define how changes to the consitutent field are translated into a subscription update to the group.

+

The most use of these are "" which means that changes to the field are ignored, and do not result group update. And "*" which results in a group update containing the most recent values/meta-data of all fields.

+

It may be useful to specify a comma seperated list of field names so that changes may partially update the group.

+

+QSRV Timestamp Options

+

QSRV has the ability to perform certain transformations on the timestamp before transporting it. The mechanism for configuring this is the "Q:time:tag" info() tag.

+

+Nano-seconds least significant bits

+

Setting "Q:time:tag" to a value of "nsec:lsb:#", where # is a number between 0 and 32, will split the nanoseconds value stored in the associated record. The least significant # bits are stored in the 'timeStamp.userTag' field. While the remaining 32-# bits are stored in 'timeStamp.nanoseconds' (without shifting).

+

For example, in the following situation 20 bits are split off into userTag. If the nanoseconds part of the record timestamp is 0x12345678, then the PVD structure would include "timeStamp.nanoseconds=0x12300000" and "timeStamp.userTag=0x45678".

+
record(ai, "...") {
+
info(Q:time:tag, "nsec:lsb:20")
+
}
+

+QSRV Display Form Option

+

The value of the OPI display form hint ('display.form') can be set set with the "Q:form" info() tag. This hint, along with 'display.precision', is used by some OPI clients to control how values are rendered.

+

The text value of the tag must be one of the following choices.

+
    +
  • Default
  • +
  • String
  • +
  • Binary
  • +
  • Decimal
  • +
  • Hex
  • +
  • Exponential
  • +
  • Engineering
  • +
+
record(ai, "...") {
+
info(Q:form, "Default") # implied default
+
}
+

+Access Security

+

QSRV will enforce an optional access control policy file (.acf) loaded by the usual means (cf. asSetFilename() ). This policy is applied to both Single and Group PVs. With Group PVs, restrictions are not defined for the group, but rather for the individual member records. The same policy will be applied regardess of how a record is accessed (individually, or through a group).

+

Policy application differs from CA (RSRV) in several ways:

+

Client hostname is always the numeric IP address. HAG() entries must either contained numeric IP addresses, or that asCheckClientIP=1 flag must be set to translate hostnames into IPs on ACF file load (effects CA server as well). This prevents clients from trivially forging "hostname". In additional to client usernames. UAG definitions may contained items beginning with "role/" which are matched against the list of groups of which the client username is a member. Username to group lookup is done internally to QSRV, and depends on IOC host authentication configuration. Note that this is still based on the client provided username string.

+
UAG(special) {
+
someone, "role/op"
+
}
+

The "special" UAG will match CA or PVA clients with the username "someone". It will also match a PVA client if the client provided username is a member of the "op" group (supported on POSIX targets and Windows).

+

+PVAccess Links

+

When built against Base >= 3.16.1, support is enabled for PVAccess links, which are analogous to Channel Access (CA) links. However, the syntax for PVA links is quite different.

+
Note
The "dbjlr" and "dbpvar" IOC shell command provide information about PVA links in a running IOC.
+

A simple configuration using defaults is

+
record(longin, "tgt") {}
+
record(longin, "src") {
+
field(INP, {pva:"tgt"})
+
}
+

This is a shorthand for

+
record(longin, "tgt") {}
+
record(longin, "src") {
+
field(INP, {pva:{pv:"tgt"}})
+
}
+

Some additional keys (beyond "pv") may be used. Defaults are shown below:

+
record(longin, "tgt") {}
+
record(longin, "src") {
+
field(INP, {pva:{
+
pv:"tgt",
+
field:"", # may be a sub-field
+
local:false,# Require local PV
+
Q:4, # monitor queue depth
+
pipeline:false, # require that server uses monitor flow control protocol
+
proc:none, # Request record processing (side-effects).
+
sevr:false, # Maximize severity.
+
time:false, # set record time during getValue
+
monorder:0, # Order of record processing as a result of CP and CPP
+
retry:false,# allow Put while disconnected.
+
always:false,# CP/CPP input link process even when .value field hasn't changed
+
defer:false # Defer put
+
}})
+
}
+

+pv: Target PV name

+

The PV name to search for. This is the same name which could be used with 'pvget' or other client tools.

+

+field: Structure field name

+

The name of a sub-field of the remotely provided Structure. By default, an empty string "" uses the top-level Structure.

+

If the top level structure, or a sub-structure is selected, then it is expeccted to conform to NTScalar, NTScalarArray, or NTEnum to extract value and meta-data.

+

If the sub-field is an PVScalar or PVScalarArray, then a value will be taken from it, but not meta-data will be available.

+
Todo:
Ability to traverse through unions and into structure arrays (as with group mappings).
+

+local: Require local PV

+

When true, link will not connect unless the named PV is provided by the local (QSRV) data provider.

+

+Q: Monitor queue depth

+

Requests a certain monitor queue depth. The server may, or may not, take this into consideration when selecting a queue depth.

+

+pipeline: Monitor flow control

+

Expect that the server supports PVA monitor flow control. If not, then the subscription will stall (ick.)

+

+proc: Request record processing (side-effects)

+

The meaning of this option depends on the direction of the link.

+

For output links, this option allows a request for remote processing (side-effects).

+
    +
  • none (default) - Make no special request. Uses a server specific default.
  • +
  • false, "NPP" - Request to skip processing.
  • +
  • true, "PP" - Request to force processing.
  • +
  • "CP", "CPP" - For output links, an alias for "PP".
  • +
+

For input links, this option controls whether the record containing the PVA link will be processed when subscription events are received.

+
    +
  • none (default), false, "NPP" - Do not process on subscription updates.
  • +
  • true, "CP" - Always process on subscription updates.
  • +
  • "PP", "CPP" - Process on subscription updates if SCAN=Passive
  • +
+

+sevr: Alarm propagation

+

This option controls whether reading a value from an input PVA link has the addition effect of propagating any alarm via the Maximize Severity process.

+
    +
  • false - Do not maximize severity.
  • +
  • true - Maximize alarm severity
  • +
  • "MSI" - Maximize only if the remote severity is INVALID.
  • +
+

+time: Time propagation

+

Somewhat analogous to sevr: applied to timestamp. When true, the record TIME field is updated when the link value is read.

+
Warning
TSEL must be set to -2 for time:true to have an effect.
+

+monorder: Monitor processing order

+

When multiple record target the same target PV, and request processing on subscription updates. This option allows the order of processing to be specified.

+

Record are processed in increasing order. monorder=-1 is processed before monorder=0. Both are processed before monorder=1.

+

+defer: Defer put

+

By default (defer=false) an output link will immediately start a PVA Put operation. defer=true will store the new value in an internal cache, but not start a PVA Put.

+

This option, in combination with field: allows a single Put to contain updates to multiple sub-fields.

+

+retry: Put while disconnected

+

Allow a Put operation to be queued while the link is disconnected. The Put will be executed when the link becomes connected.

+

+always: CP/CPP always process

+

By default (always:false) a subscription update will only cause a CP input link to scan if the structure field (cf. field: option) is marked as changed. Set to true to override this, and always process the link.

+

+Link semantics/behavior

+

This section attempts to answer some questions about how links behave in certain situations.

+

Links are evaluated in three basic contexts.

+
    +
  • dbPutLink()/dbScanFwdLink()
  • +
  • dbGetLink() of non-CP link
  • +
  • dbGetLink() during a scan resulting from a CP link.
  • +
+

An input link can bring in a Value as well as meta-data, alarm, time, and display/control info. For input links, the PVA link engine attempts to always maintain consistency between Value, alarm, and time. However, consistency between these, and the display/control info is only ensured during a CP scan.

+
+ + + + diff --git a/qsrvpage_8h_source.html b/qsrvpage_8h_source.html new file mode 100644 index 0000000..99eb692 --- /dev/null +++ b/qsrvpage_8h_source.html @@ -0,0 +1,100 @@ + + + + + + +pva2pva: documentation/qsrvpage.h Source File + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  0 +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
qsrvpage.h
+
+
+
1 
+
+ + + + diff --git a/release_notes.html b/release_notes.html new file mode 100644 index 0000000..0ca1277 --- /dev/null +++ b/release_notes.html @@ -0,0 +1,210 @@ + + + + + + +pva2pva: Release Notes + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + +
+ +
+ +
+
+
+
Release Notes
+
+
+

Release 1.4.1 (December 2023)

+
    +
  • Bug Fixes
      +
    • dbLoadGroup was fixed
    • +
    +
  • +
  • Additions
      +
    • Support for "meta" member at top of array of structs
    • +
    +
  • +
+

Release 1.4.0 (September 2022)

+
    +
  • Bug Fixes
      +
    • apply ACF when writing to atomic group
    • +
    +
  • +
  • Additions +
  • +
  • Changes
      +
    • Add Access Security hooks for single and group writes.
    • +
    • Enable "Async Soft Channel" for output links
    • +
    • When built against Base 7.0.6.1, set timeStamp.userTag from UTAG field.
    • +
    • Add DTYP="QSRV Set UTag" for longin, which sets UTAG=VAL.
    • +
    +
  • +
+

Release 1.3.1 (June 2021)

+
    +
  • Bug Fixes
      +
    • Correct handling for server side filters.
    • +
    +
  • +
  • Changes +
  • +
+

Release 1.3.0 (Feb 2021)

+
    +
  • Changes
      +
    • Add dbLoadGroup() iocsh function to read group JSON definitions from a file. Mappings in files must refer to full record names instead of fields. eg. 'recname.VAL' instead of 'VAL'.
    • +
    +
  • +
+

Release 1.2.4 (July 2020)

+
    +
  • Bug Fixes
      +
    • Fix stalled monitor when server side filter drops initial DBE_PROPERTY update.
    • +
    • Respect DISP
    • +
    +
  • +
  • Changes
      +
    • Refreshed softIocPVA to match options in Base.
    • +
    +
  • +
+

Release 1.2.3 (May 2020)

+ +

Release 1.2.2 (Nov 2019)

+
    +
  • Changes
      +
    • Enforce Access Security policy.
    • +
    • NTEnum .value field add missing "enum_t" type ID string.
    • +
    +
  • +
+

Release 1.2.1 (July 2019)

+
    +
  • Fixes
      +
    • Fix unittest: testpvalink. No functional change.
    • +
    +
  • +
+

Release 1.2.0 (Mar 2019)

+
    +
  • Incompatible changes +
  • +
  • Additions +
  • +
  • Fixes
      +
    • Correct handling of 64-bit integer fields.
    • +
    • Install a copy of softIocExit.db for standalone builds
    • +
    +
  • +
+

Release 1.1.0 (Nov 2018)

+
    +
  • Incompatible changes
      +
    • Requires pvDataCPP >= 7.1.0
    • +
    • Requires pvAccessCPP >= 6.1.0
    • +
    +
  • +
  • Removals
      +
    • Drop the broken ioccircle and ioccircle2 examples.
    • +
    +
  • +
  • Fixes
      +
    • Fix QSRV monitor locking causing crash
    • +
    • Fix Windows DLL import/export errors
    • +
    • Correctly handle empty "scalar" case of NELM=1, NORD=0.
    • +
    +
  • +
  • Additions
      +
    • QSRV implement channelList() (aka. 'pvlist') with list of record and group names.
    • +
    • PVAccess Links type (requires Base >= 3.16.1)
    • +
    +
  • +
+

Release 1.0.0 (Dec 2017)

+

Initial Release

+
+ + + + diff --git a/sb_8h_source.html b/sb_8h_source.html new file mode 100644 index 0000000..cccda42 --- /dev/null +++ b/sb_8h_source.html @@ -0,0 +1,116 @@ + + + + + + +pva2pva: common/sb.h Source File + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
sb.h
+
+
+
1 #ifndef SB_H
+
2 #define SB_H
+
3 
+
4 #include <sstream>
+
5 
+
6 // in-line string builder (eg. for exception messages)
+
7 // throw std::runtime_error(SB()<<"Answer: !"<<42);
+
8 struct SB {
+
9  std::ostringstream strm;
+
10  SB() {}
+
11  operator std::string() const { return strm.str(); }
+
12  template<typename T>
+
13  SB& operator<<(T i) { strm<<i; return *this; }
+
14 };
+
15 
+
16 #endif // SB_H
+
Definition: sb.h:8
+
+ + + + diff --git a/search/all_61.html b/search/all_61.html new file mode 100644 index 0000000..b8328c6 --- /dev/null +++ b/search/all_61.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/all_61.js b/search/all_61.js new file mode 100644 index 0000000..2ddecf2 --- /dev/null +++ b/search/all_61.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['afterput',['AfterPut',['../structpvalink_1_1pva_link_channel_1_1_after_put.html',1,'pvalink::pvaLinkChannel']]], + ['asclient',['ASCLIENT',['../struct_a_s_c_l_i_e_n_t.html',1,'']]], + ['ascred',['ASCred',['../struct_a_s_cred.html',1,'']]], + ['aswritepvt',['AsWritePvt',['../class_as_write_pvt.html',1,'']]] +]; diff --git a/search/all_62.html b/search/all_62.html new file mode 100644 index 0000000..281723e --- /dev/null +++ b/search/all_62.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/all_62.js b/search/all_62.js new file mode 100644 index 0000000..5390521 --- /dev/null +++ b/search/all_62.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['basechannel',['BaseChannel',['../struct_base_channel.html',1,'']]], + ['basechannelproviderfactory',['BaseChannelProviderFactory',['../struct_base_channel_provider_factory.html',1,'']]], + ['basemonitor',['BaseMonitor',['../struct_base_monitor.html',1,'']]] +]; diff --git a/search/all_63.html b/search/all_63.html new file mode 100644 index 0000000..a8fe36d --- /dev/null +++ b/search/all_63.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/all_63.js b/search/all_63.js new file mode 100644 index 0000000..8b7d72a --- /dev/null +++ b/search/all_63.js @@ -0,0 +1,11 @@ +var searchData= +[ + ['cacheclean',['cacheClean',['../struct_channel_cache_1_1cache_clean.html',1,'ChannelCache']]], + ['channelcache',['ChannelCache',['../struct_channel_cache.html',1,'']]], + ['channelcacheentry',['ChannelCacheEntry',['../struct_channel_cache_entry.html',1,'']]], + ['channelname',['channelName',['../structpvalink_1_1pva_link_config.html#a87b194f54983a2d55f617cb6178368e2',1,'pvalink::pvaLinkConfig']]], + ['clear',['clear',['../classweak__value__map.html#ade67193285ef79b15cb6303b7326ca69',1,'weak_value_map::clear()'],['../classweak__set.html#ad2f334e307156c71951739779f82f05b',1,'weak_set::clear()']]], + ['component',['Component',['../struct_field_name_1_1_component.html',1,'FieldName']]], + ['connect',['connect',['../struct_base_monitor.html#ada8d7a8b60703ff92bea53153975da3c',1,'BaseMonitor']]], + ['crequester',['CRequester',['../struct_channel_cache_entry_1_1_c_requester.html',1,'ChannelCacheEntry']]] +]; diff --git a/search/all_64.html b/search/all_64.html new file mode 100644 index 0000000..b415c0e --- /dev/null +++ b/search/all_64.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/all_64.js b/search/all_64.js new file mode 100644 index 0000000..8dd8a44 --- /dev/null +++ b/search/all_64.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['dbch',['DBCH',['../struct_d_b_c_h.html',1,'']]], + ['dbe',['dbe',['../struct_p_v_i_f.html#a88688f71c8732aa31befd7f17f5d5dff',1,'PVIF']]], + ['dbevent',['DBEvent',['../struct_d_b_event.html',1,'']]], + ['dbrbuf',['dbrbuf',['../uniondbrbuf.html',1,'']]], + ['dbscanlocker',['DBScanLocker',['../struct_d_b_scan_locker.html',1,'']]] +]; diff --git a/search/all_65.html b/search/all_65.html new file mode 100644 index 0000000..49e2cae --- /dev/null +++ b/search/all_65.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/all_65.js b/search/all_65.js new file mode 100644 index 0000000..573a1af --- /dev/null +++ b/search/all_65.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['element_5fproxy',['element_proxy',['../classweak__value__map_1_1element__proxy.html',1,'weak_value_map']]], + ['empty',['empty',['../classweak__value__map.html#afa70a96eef949d4846c2f5e0a55c55d3',1,'weak_value_map::empty()'],['../classweak__set.html#a85208d398474d848e5e0c01e40237963',1,'weak_set::empty()']]], + ['erase',['erase',['../classweak__set.html#acc4699fb90930ee403f96f95aacbd113',1,'weak_set']]] +]; diff --git a/search/all_66.html b/search/all_66.html new file mode 100644 index 0000000..6aa068f --- /dev/null +++ b/search/all_66.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/all_66.js b/search/all_66.js new file mode 100644 index 0000000..05feef0 --- /dev/null +++ b/search/all_66.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['field',['Field',['../struct_group_config_1_1_field.html',1,'GroupConfig']]], + ['fieldname',['FieldName',['../struct_field_name.html',1,'FieldName'],['../structpvalink_1_1pva_link_config.html#a747c31e4118c1ce1f10bb5301a66d281',1,'pvalink::pvaLinkConfig::fieldName()']]], + ['find',['find',['../classweak__value__map.html#a36d469f7d550860fbb60c6f73178d015',1,'weak_value_map']]] +]; diff --git a/search/all_67.html b/search/all_67.html new file mode 100644 index 0000000..a6568a3 --- /dev/null +++ b/search/all_67.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/all_67.js b/search/all_67.js new file mode 100644 index 0000000..ea97ecc --- /dev/null +++ b/search/all_67.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['get',['get',['../struct_p_v_i_f.html#af77de9930438edc2dcf677ecc2449367',1,'PVIF']]], + ['group',['Group',['../struct_group_config_1_1_group.html',1,'GroupConfig']]], + ['groupconfig',['GroupConfig',['../struct_group_config.html',1,'']]], + ['gwchannel',['GWChannel',['../struct_g_w_channel.html',1,'']]], + ['gwserverchannelprovider',['GWServerChannelProvider',['../struct_g_w_server_channel_provider.html',1,'']]] +]; diff --git a/search/all_69.html b/search/all_69.html new file mode 100644 index 0000000..676651e --- /dev/null +++ b/search/all_69.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/all_69.js b/search/all_69.js new file mode 100644 index 0000000..db545f4 --- /dev/null +++ b/search/all_69.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['info',['Info',['../struct_p_d_b_group_p_v_1_1_info.html',1,'PDBGroupPV']]], + ['insert',['insert',['../classweak__value__map.html#a461d05342f43e08f12725f41045407aa',1,'weak_value_map::insert()'],['../classweak__set.html#ab841af866b907702f804be850f3b40ba',1,'weak_set::insert()']]] +]; diff --git a/search/all_6a.html b/search/all_6a.html new file mode 100644 index 0000000..12ef2ec --- /dev/null +++ b/search/all_6a.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/all_6a.js b/search/all_6a.js new file mode 100644 index 0000000..6472dbb --- /dev/null +++ b/search/all_6a.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['jlif',['jlif',['../structjlif.html',1,'']]] +]; diff --git a/search/all_6c.html b/search/all_6c.html new file mode 100644 index 0000000..3623130 --- /dev/null +++ b/search/all_6c.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/all_6c.js b/search/all_6c.js new file mode 100644 index 0000000..f5624a9 --- /dev/null +++ b/search/all_6c.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['lastelem',['lastelem',['../struct_monitor_cache_entry.html#ac32c2f4b0e388af0295f80e460f9c72e',1,'MonitorCacheEntry']]], + ['linksort',['LinkSort',['../structpvalink_1_1pva_link_channel_1_1_link_sort.html',1,'pvalink::pvaLinkChannel']]], + ['localfl',['LocalFL',['../struct_local_f_l.html',1,'']]], + ['lock_5fmap',['lock_map',['../classweak__value__map.html#ae2c29b1ad0568c24b4eb26a230cd8332',1,'weak_value_map']]], + ['lock_5fset',['lock_set',['../classweak__set.html#a733d68c57853458884c05a5deb1c2b3e',1,'weak_set']]], + ['lock_5fvector',['lock_vector',['../classweak__value__map.html#a0987b450867e9e43262504a81a9a2dd4',1,'weak_value_map::lock_vector()'],['../classweak__set.html#a4738c02e5bcd758679e669a4be6a7eb1',1,'weak_set::lock_vector()']]] +]; diff --git a/search/all_6d.html b/search/all_6d.html new file mode 100644 index 0000000..82ceec7 --- /dev/null +++ b/search/all_6d.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/all_6d.js b/search/all_6d.js new file mode 100644 index 0000000..8a59ad2 --- /dev/null +++ b/search/all_6d.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['monitorcacheentry',['MonitorCacheEntry',['../struct_monitor_cache_entry.html',1,'']]], + ['monitoruser',['MonitorUser',['../struct_monitor_user.html',1,'']]], + ['mutex',['mutex',['../classweak__value__map.html#aad008499708cb7743e5ac7c1c15877e6',1,'weak_value_map::mutex()'],['../classweak__set.html#a0dd6280b6281db730f643ec9a3a9d51d',1,'weak_set::mutex()']]] +]; diff --git a/search/all_6e.html b/search/all_6e.html new file mode 100644 index 0000000..92a12bb --- /dev/null +++ b/search/all_6e.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/all_6e.js b/search/all_6e.js new file mode 100644 index 0000000..b61d050 --- /dev/null +++ b/search/all_6e.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['next',['next',['../structweak__set_1_1_x_iterator.html#a5d0b1327596691e00b05a8c79a90faa0',1,'weak_set::XIterator']]], + ['no_5foverflow',['no_overflow',['../struct_base_monitor_1_1no__overflow.html',1,'BaseMonitor']]] +]; diff --git a/search/all_6f.html b/search/all_6f.html new file mode 100644 index 0000000..51c8b11 --- /dev/null +++ b/search/all_6f.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/all_6f.js b/search/all_6f.js new file mode 100644 index 0000000..5189619 --- /dev/null +++ b/search/all_6f.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['operator_20value_5fpointer',['operator value_pointer',['../classweak__value__map_1_1element__proxy.html#a1b4cebcb96ce7a699077bb857b03f4bb',1,'weak_value_map::element_proxy']]], + ['operator_2a',['operator*',['../classweak__value__map_1_1element__proxy.html#ad027b985867564c2928f3137f8f58776',1,'weak_value_map::element_proxy']]], + ['operator_2d_3e',['operator->',['../classweak__value__map_1_1element__proxy.html#ae625d2a3b7892dc67cfbee0a47b63650',1,'weak_value_map::element_proxy']]], + ['operator_3d',['operator=',['../classweak__value__map_1_1element__proxy.html#ab534aca5e5498b566aec46b7c364abb4',1,'weak_value_map::element_proxy']]] +]; diff --git a/search/all_70.html b/search/all_70.html new file mode 100644 index 0000000..a279cb2 --- /dev/null +++ b/search/all_70.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/all_70.js b/search/all_70.js new file mode 100644 index 0000000..5de2495 --- /dev/null +++ b/search/all_70.js @@ -0,0 +1,25 @@ +var searchData= +[ + ['pva2pva_20home_20of_20qsrv_20and_20pvaccess_202_20pvaccess_20gateway',['pva2pva Home of QSRV and pvAccess 2 pvAccess gateway',['../index.html',1,'']]], + ['pdbgroupchannel',['PDBGroupChannel',['../struct_p_d_b_group_channel.html',1,'']]], + ['pdbgroupmonitor',['PDBGroupMonitor',['../struct_p_d_b_group_monitor.html',1,'']]], + ['pdbgroupput',['PDBGroupPut',['../struct_p_d_b_group_put.html',1,'']]], + ['pdbgrouppv',['PDBGroupPV',['../struct_p_d_b_group_p_v.html',1,'']]], + ['pdbinfoiterator',['pdbInfoIterator',['../structpdb_info_iterator.html',1,'']]], + ['pdbprovider',['PDBProvider',['../struct_p_d_b_provider.html',1,'']]], + ['pdbpv',['PDBPV',['../struct_p_d_b_p_v.html',1,'']]], + ['pdbrecordinfo',['pdbRecordInfo',['../structpdb_record_info.html',1,'']]], + ['pdbrecorditerator',['pdbRecordIterator',['../structpdb_record_iterator.html',1,'']]], + ['pdbsinglechannel',['PDBSingleChannel',['../struct_p_d_b_single_channel.html',1,'']]], + ['pdbsinglemonitor',['PDBSingleMonitor',['../struct_p_d_b_single_monitor.html',1,'']]], + ['pdbsingleput',['PDBSinglePut',['../struct_p_d_b_single_put.html',1,'']]], + ['pdbsinglepv',['PDBSinglePV',['../struct_p_d_b_single_p_v.html',1,'']]], + ['post',['post',['../struct_base_monitor.html#a6bae642fe4f1981a7fc0e92477f963c0',1,'BaseMonitor::post(guard_t &guard, const epics::pvData::BitSet &updated, no_overflow)'],['../struct_base_monitor.html#ae4c204a580cbb7f7febce7b632de6636',1,'BaseMonitor::post(guard_t &guard)'],['../struct_base_monitor.html#a0fdc1067e909a8be074e6f6d79d36ad7',1,'BaseMonitor::post(guard_t &guard, const epics::pvData::BitSet &updated, const epics::pvData::BitSet &overflowed)'],['../struct_base_monitor.html#af4c2dfbb286a9d52e9ae920ac9b8ebc6',1,'BaseMonitor::post(guard_t &guard, const epics::pvData::BitSet &updated)']]], + ['put',['put',['../struct_p_v_i_f.html#a85b75751dfef8bacfda925da28c6f357',1,'PVIF']]], + ['pvaglobal_5ft',['pvaGlobal_t',['../structpvalink_1_1pva_global__t.html',1,'pvalink']]], + ['pvalink',['pvaLink',['../structpvalink_1_1pva_link.html',1,'pvalink']]], + ['pvalinkchannel',['pvaLinkChannel',['../structpvalink_1_1pva_link_channel.html',1,'pvalink']]], + ['pvalinkconfig',['pvaLinkConfig',['../structpvalink_1_1pva_link_config.html',1,'pvalink']]], + ['pvif',['PVIF',['../struct_p_v_i_f.html',1,'']]], + ['pvifbuilder',['PVIFBuilder',['../struct_p_v_i_f_builder.html',1,'']]] +]; diff --git a/search/all_71.html b/search/all_71.html new file mode 100644 index 0000000..ee4ba24 --- /dev/null +++ b/search/all_71.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/all_71.js b/search/all_71.js new file mode 100644 index 0000000..0de28dc --- /dev/null +++ b/search/all_71.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['qsrv',['QSRV',['../qsrv_page.html',1,'']]] +]; diff --git a/search/all_72.html b/search/all_72.html new file mode 100644 index 0000000..315ac4f --- /dev/null +++ b/search/all_72.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/all_72.js b/search/all_72.js new file mode 100644 index 0000000..11c94a3 --- /dev/null +++ b/search/all_72.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['release_20notes',['Release Notes',['../release_notes.html',1,'']]], + ['requestupdate',['requestUpdate',['../struct_p_d_b_group_monitor.html#a2234c632ad420916a7006923bb4a4c37',1,'PDBGroupMonitor::requestUpdate()'],['../struct_p_d_b_single_monitor.html#ae7a3df03fd5580c3c44425fcc44d2d66',1,'PDBSingleMonitor::requestUpdate()'],['../struct_base_monitor.html#a4e88164d25cff25ecb5b59c419002db1',1,'BaseMonitor::requestUpdate()']]] +]; diff --git a/search/all_73.html b/search/all_73.html new file mode 100644 index 0000000..09f8ce8 --- /dev/null +++ b/search/all_73.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/all_73.js b/search/all_73.js new file mode 100644 index 0000000..2ef98ae --- /dev/null +++ b/search/all_73.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['sb',['SB',['../struct_s_b.html',1,'']]], + ['scalaraccessor',['ScalarAccessor',['../struct_scalar_accessor.html',1,'']]], + ['scalarbuilder',['ScalarBuilder',['../struct_scalar_builder.html',1,'']]], + ['serverconfig',['ServerConfig',['../struct_server_config.html',1,'']]], + ['size',['size',['../classweak__value__map.html#ac75448a45ea808754f865306603b0d67',1,'weak_value_map::size()'],['../classweak__set.html#a7200042241c652af5f3c315e0185d3fc',1,'weak_set::size()']]], + ['swap',['swap',['../classweak__value__map.html#a345b6fd964bbd24019462159e77e3769',1,'weak_value_map::swap()'],['../classweak__set.html#a4e686399a7ef165641aa5de49288a899',1,'weak_set::swap()']]] +]; diff --git a/search/all_74.html b/search/all_74.html new file mode 100644 index 0000000..c2cd095 --- /dev/null +++ b/search/all_74.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/all_74.js b/search/all_74.js new file mode 100644 index 0000000..5192dd0 --- /dev/null +++ b/search/all_74.js @@ -0,0 +1,14 @@ +var searchData= +[ + ['testchannelfieldrequester',['TestChannelFieldRequester',['../struct_test_channel_field_requester.html',1,'']]], + ['testchannelgetrequester',['TestChannelGetRequester',['../struct_test_channel_get_requester.html',1,'']]], + ['testchannelmonitorrequester',['TestChannelMonitorRequester',['../struct_test_channel_monitor_requester.html',1,'']]], + ['testchannelputrequester',['TestChannelPutRequester',['../struct_test_channel_put_requester.html',1,'']]], + ['testchannelrequester',['TestChannelRequester',['../struct_test_channel_requester.html',1,'']]], + ['testioc',['TestIOC',['../struct_test_i_o_c.html',1,'']]], + ['testprovider',['TestProvider',['../struct_test_provider.html',1,'']]], + ['testpv',['TestPV',['../struct_test_p_v.html',1,'']]], + ['testpvchannel',['TestPVChannel',['../struct_test_p_v_channel.html',1,'']]], + ['testpvmonitor',['TestPVMonitor',['../struct_test_p_v_monitor.html',1,'']]], + ['todo_20list',['Todo List',['../todo.html',1,'']]] +]; diff --git a/search/all_76.html b/search/all_76.html new file mode 100644 index 0000000..5643d68 --- /dev/null +++ b/search/all_76.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/all_76.js b/search/all_76.js new file mode 100644 index 0000000..b5ca06f --- /dev/null +++ b/search/all_76.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['value',['Value',['../structpvalink_1_1pva_link_1_1_value.html',1,'pvalink::pvaLink']]] +]; diff --git a/search/all_77.html b/search/all_77.html new file mode 100644 index 0000000..d01abb9 --- /dev/null +++ b/search/all_77.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/all_77.js b/search/all_77.js new file mode 100644 index 0000000..da7906f --- /dev/null +++ b/search/all_77.js @@ -0,0 +1,13 @@ +var searchData= +[ + ['weak_5fset',['weak_set',['../classweak__set.html',1,'weak_set< T >'],['../classweak__set.html#a36f38a6bd628016c6fd2e107ded76147',1,'weak_set::weak_set()']]], + ['weak_5fset_3c_20gwchannel_20_3e',['weak_set< GWChannel >',['../classweak__set.html',1,'']]], + ['weak_5fset_3c_20monitoruser_20_3e',['weak_set< MonitorUser >',['../classweak__set.html',1,'']]], + ['weak_5fset_3c_20testpvchannel_20_3e',['weak_set< TestPVChannel >',['../classweak__set.html',1,'']]], + ['weak_5fset_3c_20testpvmonitor_20_3e',['weak_set< TestPVMonitor >',['../classweak__set.html',1,'']]], + ['weak_5fvalue_5fmap',['weak_value_map',['../classweak__value__map.html',1,'weak_value_map< K, V, C >'],['../classweak__value__map.html#a8e175241057abbd795098554c51e2e55',1,'weak_value_map::weak_value_map()']]], + ['weak_5fvalue_5fmap_3c_20pvrequest_5ft_2c_20monitorcacheentry_20_3e',['weak_value_map< pvrequest_t, MonitorCacheEntry >',['../classweak__value__map.html',1,'']]], + ['weak_5fvalue_5fmap_3c_20std_3a_3astring_2c_20pdbpv_20_3e',['weak_value_map< std::string, PDBPV >',['../classweak__value__map.html',1,'']]], + ['weak_5fvalue_5fmap_3c_20std_3a_3astring_2c_20testpv_20_3e',['weak_value_map< std::string, TestPV >',['../classweak__value__map.html',1,'']]], + ['workqueue',['WorkQueue',['../struct_work_queue.html',1,'']]] +]; diff --git a/search/all_78.html b/search/all_78.html new file mode 100644 index 0000000..d1f9d7a --- /dev/null +++ b/search/all_78.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/all_78.js b/search/all_78.js new file mode 100644 index 0000000..0d74a97 --- /dev/null +++ b/search/all_78.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['xiterator',['XIterator',['../structweak__set_1_1_x_iterator.html',1,'weak_set']]] +]; diff --git a/search/classes_61.html b/search/classes_61.html new file mode 100644 index 0000000..80ea25b --- /dev/null +++ b/search/classes_61.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/classes_61.js b/search/classes_61.js new file mode 100644 index 0000000..2ddecf2 --- /dev/null +++ b/search/classes_61.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['afterput',['AfterPut',['../structpvalink_1_1pva_link_channel_1_1_after_put.html',1,'pvalink::pvaLinkChannel']]], + ['asclient',['ASCLIENT',['../struct_a_s_c_l_i_e_n_t.html',1,'']]], + ['ascred',['ASCred',['../struct_a_s_cred.html',1,'']]], + ['aswritepvt',['AsWritePvt',['../class_as_write_pvt.html',1,'']]] +]; diff --git a/search/classes_62.html b/search/classes_62.html new file mode 100644 index 0000000..d850f52 --- /dev/null +++ b/search/classes_62.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/classes_62.js b/search/classes_62.js new file mode 100644 index 0000000..5390521 --- /dev/null +++ b/search/classes_62.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['basechannel',['BaseChannel',['../struct_base_channel.html',1,'']]], + ['basechannelproviderfactory',['BaseChannelProviderFactory',['../struct_base_channel_provider_factory.html',1,'']]], + ['basemonitor',['BaseMonitor',['../struct_base_monitor.html',1,'']]] +]; diff --git a/search/classes_63.html b/search/classes_63.html new file mode 100644 index 0000000..0dccad2 --- /dev/null +++ b/search/classes_63.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/classes_63.js b/search/classes_63.js new file mode 100644 index 0000000..0001d01 --- /dev/null +++ b/search/classes_63.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['cacheclean',['cacheClean',['../struct_channel_cache_1_1cache_clean.html',1,'ChannelCache']]], + ['channelcache',['ChannelCache',['../struct_channel_cache.html',1,'']]], + ['channelcacheentry',['ChannelCacheEntry',['../struct_channel_cache_entry.html',1,'']]], + ['component',['Component',['../struct_field_name_1_1_component.html',1,'FieldName']]], + ['crequester',['CRequester',['../struct_channel_cache_entry_1_1_c_requester.html',1,'ChannelCacheEntry']]] +]; diff --git a/search/classes_64.html b/search/classes_64.html new file mode 100644 index 0000000..31fc70b --- /dev/null +++ b/search/classes_64.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/classes_64.js b/search/classes_64.js new file mode 100644 index 0000000..353218a --- /dev/null +++ b/search/classes_64.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['dbch',['DBCH',['../struct_d_b_c_h.html',1,'']]], + ['dbevent',['DBEvent',['../struct_d_b_event.html',1,'']]], + ['dbrbuf',['dbrbuf',['../uniondbrbuf.html',1,'']]], + ['dbscanlocker',['DBScanLocker',['../struct_d_b_scan_locker.html',1,'']]] +]; diff --git a/search/classes_65.html b/search/classes_65.html new file mode 100644 index 0000000..1f0d2ff --- /dev/null +++ b/search/classes_65.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/classes_65.js b/search/classes_65.js new file mode 100644 index 0000000..8bf5fbe --- /dev/null +++ b/search/classes_65.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['element_5fproxy',['element_proxy',['../classweak__value__map_1_1element__proxy.html',1,'weak_value_map']]] +]; diff --git a/search/classes_66.html b/search/classes_66.html new file mode 100644 index 0000000..61dded0 --- /dev/null +++ b/search/classes_66.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/classes_66.js b/search/classes_66.js new file mode 100644 index 0000000..7bba8f7 --- /dev/null +++ b/search/classes_66.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['field',['Field',['../struct_group_config_1_1_field.html',1,'GroupConfig']]], + ['fieldname',['FieldName',['../struct_field_name.html',1,'']]] +]; diff --git a/search/classes_67.html b/search/classes_67.html new file mode 100644 index 0000000..ea38f24 --- /dev/null +++ b/search/classes_67.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/classes_67.js b/search/classes_67.js new file mode 100644 index 0000000..056b24a --- /dev/null +++ b/search/classes_67.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['group',['Group',['../struct_group_config_1_1_group.html',1,'GroupConfig']]], + ['groupconfig',['GroupConfig',['../struct_group_config.html',1,'']]], + ['gwchannel',['GWChannel',['../struct_g_w_channel.html',1,'']]], + ['gwserverchannelprovider',['GWServerChannelProvider',['../struct_g_w_server_channel_provider.html',1,'']]] +]; diff --git a/search/classes_69.html b/search/classes_69.html new file mode 100644 index 0000000..7437847 --- /dev/null +++ b/search/classes_69.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/classes_69.js b/search/classes_69.js new file mode 100644 index 0000000..a20eaf4 --- /dev/null +++ b/search/classes_69.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['info',['Info',['../struct_p_d_b_group_p_v_1_1_info.html',1,'PDBGroupPV']]] +]; diff --git a/search/classes_6a.html b/search/classes_6a.html new file mode 100644 index 0000000..adba8b1 --- /dev/null +++ b/search/classes_6a.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/classes_6a.js b/search/classes_6a.js new file mode 100644 index 0000000..6472dbb --- /dev/null +++ b/search/classes_6a.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['jlif',['jlif',['../structjlif.html',1,'']]] +]; diff --git a/search/classes_6c.html b/search/classes_6c.html new file mode 100644 index 0000000..18594ee --- /dev/null +++ b/search/classes_6c.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/classes_6c.js b/search/classes_6c.js new file mode 100644 index 0000000..79f255c --- /dev/null +++ b/search/classes_6c.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['linksort',['LinkSort',['../structpvalink_1_1pva_link_channel_1_1_link_sort.html',1,'pvalink::pvaLinkChannel']]], + ['localfl',['LocalFL',['../struct_local_f_l.html',1,'']]] +]; diff --git a/search/classes_6d.html b/search/classes_6d.html new file mode 100644 index 0000000..aa83590 --- /dev/null +++ b/search/classes_6d.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/classes_6d.js b/search/classes_6d.js new file mode 100644 index 0000000..c1de695 --- /dev/null +++ b/search/classes_6d.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['monitorcacheentry',['MonitorCacheEntry',['../struct_monitor_cache_entry.html',1,'']]], + ['monitoruser',['MonitorUser',['../struct_monitor_user.html',1,'']]] +]; diff --git a/search/classes_6e.html b/search/classes_6e.html new file mode 100644 index 0000000..1f4391e --- /dev/null +++ b/search/classes_6e.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/classes_6e.js b/search/classes_6e.js new file mode 100644 index 0000000..9942426 --- /dev/null +++ b/search/classes_6e.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['no_5foverflow',['no_overflow',['../struct_base_monitor_1_1no__overflow.html',1,'BaseMonitor']]] +]; diff --git a/search/classes_70.html b/search/classes_70.html new file mode 100644 index 0000000..be46ae3 --- /dev/null +++ b/search/classes_70.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/classes_70.js b/search/classes_70.js new file mode 100644 index 0000000..e35e02a --- /dev/null +++ b/search/classes_70.js @@ -0,0 +1,22 @@ +var searchData= +[ + ['pdbgroupchannel',['PDBGroupChannel',['../struct_p_d_b_group_channel.html',1,'']]], + ['pdbgroupmonitor',['PDBGroupMonitor',['../struct_p_d_b_group_monitor.html',1,'']]], + ['pdbgroupput',['PDBGroupPut',['../struct_p_d_b_group_put.html',1,'']]], + ['pdbgrouppv',['PDBGroupPV',['../struct_p_d_b_group_p_v.html',1,'']]], + ['pdbinfoiterator',['pdbInfoIterator',['../structpdb_info_iterator.html',1,'']]], + ['pdbprovider',['PDBProvider',['../struct_p_d_b_provider.html',1,'']]], + ['pdbpv',['PDBPV',['../struct_p_d_b_p_v.html',1,'']]], + ['pdbrecordinfo',['pdbRecordInfo',['../structpdb_record_info.html',1,'']]], + ['pdbrecorditerator',['pdbRecordIterator',['../structpdb_record_iterator.html',1,'']]], + ['pdbsinglechannel',['PDBSingleChannel',['../struct_p_d_b_single_channel.html',1,'']]], + ['pdbsinglemonitor',['PDBSingleMonitor',['../struct_p_d_b_single_monitor.html',1,'']]], + ['pdbsingleput',['PDBSinglePut',['../struct_p_d_b_single_put.html',1,'']]], + ['pdbsinglepv',['PDBSinglePV',['../struct_p_d_b_single_p_v.html',1,'']]], + ['pvaglobal_5ft',['pvaGlobal_t',['../structpvalink_1_1pva_global__t.html',1,'pvalink']]], + ['pvalink',['pvaLink',['../structpvalink_1_1pva_link.html',1,'pvalink']]], + ['pvalinkchannel',['pvaLinkChannel',['../structpvalink_1_1pva_link_channel.html',1,'pvalink']]], + ['pvalinkconfig',['pvaLinkConfig',['../structpvalink_1_1pva_link_config.html',1,'pvalink']]], + ['pvif',['PVIF',['../struct_p_v_i_f.html',1,'']]], + ['pvifbuilder',['PVIFBuilder',['../struct_p_v_i_f_builder.html',1,'']]] +]; diff --git a/search/classes_73.html b/search/classes_73.html new file mode 100644 index 0000000..b57bc4d --- /dev/null +++ b/search/classes_73.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/classes_73.js b/search/classes_73.js new file mode 100644 index 0000000..3131927 --- /dev/null +++ b/search/classes_73.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['sb',['SB',['../struct_s_b.html',1,'']]], + ['scalaraccessor',['ScalarAccessor',['../struct_scalar_accessor.html',1,'']]], + ['scalarbuilder',['ScalarBuilder',['../struct_scalar_builder.html',1,'']]], + ['serverconfig',['ServerConfig',['../struct_server_config.html',1,'']]] +]; diff --git a/search/classes_74.html b/search/classes_74.html new file mode 100644 index 0000000..ed66151 --- /dev/null +++ b/search/classes_74.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/classes_74.js b/search/classes_74.js new file mode 100644 index 0000000..b7147bc --- /dev/null +++ b/search/classes_74.js @@ -0,0 +1,13 @@ +var searchData= +[ + ['testchannelfieldrequester',['TestChannelFieldRequester',['../struct_test_channel_field_requester.html',1,'']]], + ['testchannelgetrequester',['TestChannelGetRequester',['../struct_test_channel_get_requester.html',1,'']]], + ['testchannelmonitorrequester',['TestChannelMonitorRequester',['../struct_test_channel_monitor_requester.html',1,'']]], + ['testchannelputrequester',['TestChannelPutRequester',['../struct_test_channel_put_requester.html',1,'']]], + ['testchannelrequester',['TestChannelRequester',['../struct_test_channel_requester.html',1,'']]], + ['testioc',['TestIOC',['../struct_test_i_o_c.html',1,'']]], + ['testprovider',['TestProvider',['../struct_test_provider.html',1,'']]], + ['testpv',['TestPV',['../struct_test_p_v.html',1,'']]], + ['testpvchannel',['TestPVChannel',['../struct_test_p_v_channel.html',1,'']]], + ['testpvmonitor',['TestPVMonitor',['../struct_test_p_v_monitor.html',1,'']]] +]; diff --git a/search/classes_76.html b/search/classes_76.html new file mode 100644 index 0000000..a62123a --- /dev/null +++ b/search/classes_76.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/classes_76.js b/search/classes_76.js new file mode 100644 index 0000000..b5ca06f --- /dev/null +++ b/search/classes_76.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['value',['Value',['../structpvalink_1_1pva_link_1_1_value.html',1,'pvalink::pvaLink']]] +]; diff --git a/search/classes_77.html b/search/classes_77.html new file mode 100644 index 0000000..6fac2af --- /dev/null +++ b/search/classes_77.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/classes_77.js b/search/classes_77.js new file mode 100644 index 0000000..37ad21a --- /dev/null +++ b/search/classes_77.js @@ -0,0 +1,13 @@ +var searchData= +[ + ['weak_5fset',['weak_set',['../classweak__set.html',1,'']]], + ['weak_5fset_3c_20gwchannel_20_3e',['weak_set< GWChannel >',['../classweak__set.html',1,'']]], + ['weak_5fset_3c_20monitoruser_20_3e',['weak_set< MonitorUser >',['../classweak__set.html',1,'']]], + ['weak_5fset_3c_20testpvchannel_20_3e',['weak_set< TestPVChannel >',['../classweak__set.html',1,'']]], + ['weak_5fset_3c_20testpvmonitor_20_3e',['weak_set< TestPVMonitor >',['../classweak__set.html',1,'']]], + ['weak_5fvalue_5fmap',['weak_value_map',['../classweak__value__map.html',1,'']]], + ['weak_5fvalue_5fmap_3c_20pvrequest_5ft_2c_20monitorcacheentry_20_3e',['weak_value_map< pvrequest_t, MonitorCacheEntry >',['../classweak__value__map.html',1,'']]], + ['weak_5fvalue_5fmap_3c_20std_3a_3astring_2c_20pdbpv_20_3e',['weak_value_map< std::string, PDBPV >',['../classweak__value__map.html',1,'']]], + ['weak_5fvalue_5fmap_3c_20std_3a_3astring_2c_20testpv_20_3e',['weak_value_map< std::string, TestPV >',['../classweak__value__map.html',1,'']]], + ['workqueue',['WorkQueue',['../struct_work_queue.html',1,'']]] +]; diff --git a/search/classes_78.html b/search/classes_78.html new file mode 100644 index 0000000..bef6654 --- /dev/null +++ b/search/classes_78.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/classes_78.js b/search/classes_78.js new file mode 100644 index 0000000..0d74a97 --- /dev/null +++ b/search/classes_78.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['xiterator',['XIterator',['../structweak__set_1_1_x_iterator.html',1,'weak_set']]] +]; diff --git a/search/close.png b/search/close.png new file mode 100644 index 0000000000000000000000000000000000000000..9342d3dfeea7b7c4ee610987e717804b5a42ceb9 GIT binary patch literal 273 zcmV+s0q*{ZP)4(RlMby96)VwnbG{ zbe&}^BDn7x>$<{ck4zAK-=nT;=hHG)kmplIF${xqm8db3oX6wT3bvp`TE@m0cg;b) zBuSL}5?N7O(iZLdAlz@)b)Rd~DnSsSX&P5qC`XwuFwcAYLC+d2>+1(8on;wpt8QIC X2MT$R4iQDd00000NkvXXu0mjfia~GN literal 0 HcmV?d00001 diff --git a/search/functions_63.html b/search/functions_63.html new file mode 100644 index 0000000..98924d8 --- /dev/null +++ b/search/functions_63.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/functions_63.js b/search/functions_63.js new file mode 100644 index 0000000..2e86729 --- /dev/null +++ b/search/functions_63.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['clear',['clear',['../classweak__value__map.html#ade67193285ef79b15cb6303b7326ca69',1,'weak_value_map::clear()'],['../classweak__set.html#ad2f334e307156c71951739779f82f05b',1,'weak_set::clear()']]], + ['connect',['connect',['../struct_base_monitor.html#ada8d7a8b60703ff92bea53153975da3c',1,'BaseMonitor']]] +]; diff --git a/search/functions_64.html b/search/functions_64.html new file mode 100644 index 0000000..bcfb550 --- /dev/null +++ b/search/functions_64.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/functions_64.js b/search/functions_64.js new file mode 100644 index 0000000..c18c1cd --- /dev/null +++ b/search/functions_64.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['dbe',['dbe',['../struct_p_v_i_f.html#a88688f71c8732aa31befd7f17f5d5dff',1,'PVIF']]] +]; diff --git a/search/functions_65.html b/search/functions_65.html new file mode 100644 index 0000000..f81fa7b --- /dev/null +++ b/search/functions_65.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/functions_65.js b/search/functions_65.js new file mode 100644 index 0000000..a786a31 --- /dev/null +++ b/search/functions_65.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['empty',['empty',['../classweak__value__map.html#afa70a96eef949d4846c2f5e0a55c55d3',1,'weak_value_map::empty()'],['../classweak__set.html#a85208d398474d848e5e0c01e40237963',1,'weak_set::empty()']]], + ['erase',['erase',['../classweak__set.html#acc4699fb90930ee403f96f95aacbd113',1,'weak_set']]] +]; diff --git a/search/functions_66.html b/search/functions_66.html new file mode 100644 index 0000000..d0c32b6 --- /dev/null +++ b/search/functions_66.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/functions_66.js b/search/functions_66.js new file mode 100644 index 0000000..c1c90b2 --- /dev/null +++ b/search/functions_66.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['find',['find',['../classweak__value__map.html#a36d469f7d550860fbb60c6f73178d015',1,'weak_value_map']]] +]; diff --git a/search/functions_67.html b/search/functions_67.html new file mode 100644 index 0000000..39cc96d --- /dev/null +++ b/search/functions_67.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/functions_67.js b/search/functions_67.js new file mode 100644 index 0000000..19db9d8 --- /dev/null +++ b/search/functions_67.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['get',['get',['../struct_p_v_i_f.html#af77de9930438edc2dcf677ecc2449367',1,'PVIF']]] +]; diff --git a/search/functions_69.html b/search/functions_69.html new file mode 100644 index 0000000..954ac84 --- /dev/null +++ b/search/functions_69.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/functions_69.js b/search/functions_69.js new file mode 100644 index 0000000..707e563 --- /dev/null +++ b/search/functions_69.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['insert',['insert',['../classweak__value__map.html#a461d05342f43e08f12725f41045407aa',1,'weak_value_map::insert()'],['../classweak__set.html#ab841af866b907702f804be850f3b40ba',1,'weak_set::insert()']]] +]; diff --git a/search/functions_6c.html b/search/functions_6c.html new file mode 100644 index 0000000..903fb01 --- /dev/null +++ b/search/functions_6c.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/functions_6c.js b/search/functions_6c.js new file mode 100644 index 0000000..b8f4399 --- /dev/null +++ b/search/functions_6c.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['lock_5fmap',['lock_map',['../classweak__value__map.html#ae2c29b1ad0568c24b4eb26a230cd8332',1,'weak_value_map']]], + ['lock_5fset',['lock_set',['../classweak__set.html#a733d68c57853458884c05a5deb1c2b3e',1,'weak_set']]], + ['lock_5fvector',['lock_vector',['../classweak__value__map.html#a0987b450867e9e43262504a81a9a2dd4',1,'weak_value_map::lock_vector()'],['../classweak__set.html#a4738c02e5bcd758679e669a4be6a7eb1',1,'weak_set::lock_vector()']]] +]; diff --git a/search/functions_6d.html b/search/functions_6d.html new file mode 100644 index 0000000..f721e11 --- /dev/null +++ b/search/functions_6d.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/functions_6d.js b/search/functions_6d.js new file mode 100644 index 0000000..df578f6 --- /dev/null +++ b/search/functions_6d.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['mutex',['mutex',['../classweak__value__map.html#aad008499708cb7743e5ac7c1c15877e6',1,'weak_value_map::mutex()'],['../classweak__set.html#a0dd6280b6281db730f643ec9a3a9d51d',1,'weak_set::mutex()']]] +]; diff --git a/search/functions_6e.html b/search/functions_6e.html new file mode 100644 index 0000000..2838a65 --- /dev/null +++ b/search/functions_6e.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/functions_6e.js b/search/functions_6e.js new file mode 100644 index 0000000..c541b64 --- /dev/null +++ b/search/functions_6e.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['next',['next',['../structweak__set_1_1_x_iterator.html#a5d0b1327596691e00b05a8c79a90faa0',1,'weak_set::XIterator']]] +]; diff --git a/search/functions_6f.html b/search/functions_6f.html new file mode 100644 index 0000000..f233220 --- /dev/null +++ b/search/functions_6f.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/functions_6f.js b/search/functions_6f.js new file mode 100644 index 0000000..5189619 --- /dev/null +++ b/search/functions_6f.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['operator_20value_5fpointer',['operator value_pointer',['../classweak__value__map_1_1element__proxy.html#a1b4cebcb96ce7a699077bb857b03f4bb',1,'weak_value_map::element_proxy']]], + ['operator_2a',['operator*',['../classweak__value__map_1_1element__proxy.html#ad027b985867564c2928f3137f8f58776',1,'weak_value_map::element_proxy']]], + ['operator_2d_3e',['operator->',['../classweak__value__map_1_1element__proxy.html#ae625d2a3b7892dc67cfbee0a47b63650',1,'weak_value_map::element_proxy']]], + ['operator_3d',['operator=',['../classweak__value__map_1_1element__proxy.html#ab534aca5e5498b566aec46b7c364abb4',1,'weak_value_map::element_proxy']]] +]; diff --git a/search/functions_70.html b/search/functions_70.html new file mode 100644 index 0000000..c7cadcf --- /dev/null +++ b/search/functions_70.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/functions_70.js b/search/functions_70.js new file mode 100644 index 0000000..d717731 --- /dev/null +++ b/search/functions_70.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['post',['post',['../struct_base_monitor.html#a6bae642fe4f1981a7fc0e92477f963c0',1,'BaseMonitor::post(guard_t &guard, const epics::pvData::BitSet &updated, no_overflow)'],['../struct_base_monitor.html#ae4c204a580cbb7f7febce7b632de6636',1,'BaseMonitor::post(guard_t &guard)'],['../struct_base_monitor.html#a0fdc1067e909a8be074e6f6d79d36ad7',1,'BaseMonitor::post(guard_t &guard, const epics::pvData::BitSet &updated, const epics::pvData::BitSet &overflowed)'],['../struct_base_monitor.html#af4c2dfbb286a9d52e9ae920ac9b8ebc6',1,'BaseMonitor::post(guard_t &guard, const epics::pvData::BitSet &updated)']]], + ['put',['put',['../struct_p_v_i_f.html#a85b75751dfef8bacfda925da28c6f357',1,'PVIF']]] +]; diff --git a/search/functions_72.html b/search/functions_72.html new file mode 100644 index 0000000..de10844 --- /dev/null +++ b/search/functions_72.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/functions_72.js b/search/functions_72.js new file mode 100644 index 0000000..50b9d38 --- /dev/null +++ b/search/functions_72.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['requestupdate',['requestUpdate',['../struct_p_d_b_group_monitor.html#a2234c632ad420916a7006923bb4a4c37',1,'PDBGroupMonitor::requestUpdate()'],['../struct_p_d_b_single_monitor.html#ae7a3df03fd5580c3c44425fcc44d2d66',1,'PDBSingleMonitor::requestUpdate()'],['../struct_base_monitor.html#a4e88164d25cff25ecb5b59c419002db1',1,'BaseMonitor::requestUpdate()']]] +]; diff --git a/search/functions_73.html b/search/functions_73.html new file mode 100644 index 0000000..a895245 --- /dev/null +++ b/search/functions_73.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/functions_73.js b/search/functions_73.js new file mode 100644 index 0000000..c6328be --- /dev/null +++ b/search/functions_73.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['size',['size',['../classweak__value__map.html#ac75448a45ea808754f865306603b0d67',1,'weak_value_map::size()'],['../classweak__set.html#a7200042241c652af5f3c315e0185d3fc',1,'weak_set::size()']]], + ['swap',['swap',['../classweak__value__map.html#a345b6fd964bbd24019462159e77e3769',1,'weak_value_map::swap()'],['../classweak__set.html#a4e686399a7ef165641aa5de49288a899',1,'weak_set::swap()']]] +]; diff --git a/search/functions_77.html b/search/functions_77.html new file mode 100644 index 0000000..26195f0 --- /dev/null +++ b/search/functions_77.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/functions_77.js b/search/functions_77.js new file mode 100644 index 0000000..9bf5899 --- /dev/null +++ b/search/functions_77.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['weak_5fset',['weak_set',['../classweak__set.html#a36f38a6bd628016c6fd2e107ded76147',1,'weak_set']]], + ['weak_5fvalue_5fmap',['weak_value_map',['../classweak__value__map.html#a8e175241057abbd795098554c51e2e55',1,'weak_value_map']]] +]; diff --git a/search/mag_sel.png b/search/mag_sel.png new file mode 100644 index 0000000000000000000000000000000000000000..81f6040a2092402b4d98f9ffa8855d12a0d4ca17 GIT binary patch literal 563 zcmV-30?hr1P)zxx&tqG15pu7)IiiXFflOc2k;dXd>%13GZAy? zRz!q0=|E6a6vV)&ZBS~G9oe0kbqyw1*gvY`{Pop2oKq#FlzgXt@Xh-7fxh>}`Fxg> z$%N%{$!4=5nM{(;=c!aG1Ofr^Do{u%Ih{^&Fc@H2)+a-?TBXrw5DW&z%Nb6mQ!L9O zl}b@6mB?f=tX3;#vl)}ggh(Vpyh(IK z(Mb0D{l{U$FsRjP;!{($+bsaaVi8T#1c0V#qEIOCYa9@UVLV`f__E81L;?WEaRA;Y zUH;rZ;vb;mk7JX|$=i3O~&If0O@oZfLg8gfIjW=dcBsz;gI=!{-r4# z4%6v$&~;q^j7Fo67yJ(NJWuX+I~I!tj^nW3?}^9bq|<3^+vapS5sgM^x7!cs(+mMT z&y%j};&~po+YO)3hoUH4E*E;e9>?R6SS&`X)p`njycAVcg{rEb41T{~Hk(bl-7eSb zmFxA2uIqo#@R?lKm50ND`~6Nfn|-b1|L6O98vt3Tx@gKz#isxO002ovPDHLkV1kyW B_l^Jn literal 0 HcmV?d00001 diff --git a/search/nomatches.html b/search/nomatches.html new file mode 100644 index 0000000..b1ded27 --- /dev/null +++ b/search/nomatches.html @@ -0,0 +1,12 @@ + + + + + + + +
+
No Matches
+
+ + diff --git a/search/pages_70.html b/search/pages_70.html new file mode 100644 index 0000000..f02d845 --- /dev/null +++ b/search/pages_70.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/pages_70.js b/search/pages_70.js new file mode 100644 index 0000000..af608c9 --- /dev/null +++ b/search/pages_70.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['pva2pva_20home_20of_20qsrv_20and_20pvaccess_202_20pvaccess_20gateway',['pva2pva Home of QSRV and pvAccess 2 pvAccess gateway',['../index.html',1,'']]] +]; diff --git a/search/pages_71.html b/search/pages_71.html new file mode 100644 index 0000000..6c7cda8 --- /dev/null +++ b/search/pages_71.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/pages_71.js b/search/pages_71.js new file mode 100644 index 0000000..0de28dc --- /dev/null +++ b/search/pages_71.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['qsrv',['QSRV',['../qsrv_page.html',1,'']]] +]; diff --git a/search/pages_72.html b/search/pages_72.html new file mode 100644 index 0000000..d96429b --- /dev/null +++ b/search/pages_72.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/pages_72.js b/search/pages_72.js new file mode 100644 index 0000000..3f24440 --- /dev/null +++ b/search/pages_72.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['release_20notes',['Release Notes',['../release_notes.html',1,'']]] +]; diff --git a/search/pages_74.html b/search/pages_74.html new file mode 100644 index 0000000..377f68e --- /dev/null +++ b/search/pages_74.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/pages_74.js b/search/pages_74.js new file mode 100644 index 0000000..441b2de --- /dev/null +++ b/search/pages_74.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['todo_20list',['Todo List',['../todo.html',1,'']]] +]; diff --git a/search/search.css b/search/search.css new file mode 100644 index 0000000..4d7612f --- /dev/null +++ b/search/search.css @@ -0,0 +1,271 @@ +/*---------------- Search Box */ + +#FSearchBox { + float: left; +} + +#MSearchBox { + white-space : nowrap; + position: absolute; + float: none; + display: inline; + margin-top: 8px; + right: 0px; + width: 170px; + z-index: 102; + background-color: white; +} + +#MSearchBox .left +{ + display:block; + position:absolute; + left:10px; + width:20px; + height:19px; + background:url('search_l.png') no-repeat; + background-position:right; +} + +#MSearchSelect { + display:block; + position:absolute; + width:20px; + height:19px; +} + +.left #MSearchSelect { + left:4px; +} + +.right #MSearchSelect { + right:5px; +} + +#MSearchField { + display:block; + position:absolute; + height:19px; + background:url('search_m.png') repeat-x; + border:none; + width:111px; + margin-left:20px; + padding-left:4px; + color: #909090; + outline: none; + font: 9pt Arial, Verdana, sans-serif; +} + +#FSearchBox #MSearchField { + margin-left:15px; +} + +#MSearchBox .right { + display:block; + position:absolute; + right:10px; + top:0px; + width:20px; + height:19px; + background:url('search_r.png') no-repeat; + background-position:left; +} + +#MSearchClose { + display: none; + position: absolute; + top: 4px; + background : none; + border: none; + margin: 0px 4px 0px 0px; + padding: 0px 0px; + outline: none; +} + +.left #MSearchClose { + left: 6px; +} + +.right #MSearchClose { + right: 2px; +} + +.MSearchBoxActive #MSearchField { + color: #000000; +} + +/*---------------- Search filter selection */ + +#MSearchSelectWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid #90A5CE; + background-color: #F9FAFC; + z-index: 1; + padding-top: 4px; + padding-bottom: 4px; + -moz-border-radius: 4px; + -webkit-border-top-left-radius: 4px; + -webkit-border-top-right-radius: 4px; + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +.SelectItem { + font: 8pt Arial, Verdana, sans-serif; + padding-left: 2px; + padding-right: 12px; + border: 0px; +} + +span.SelectionMark { + margin-right: 4px; + font-family: monospace; + outline-style: none; + text-decoration: none; +} + +a.SelectItem { + display: block; + outline-style: none; + color: #000000; + text-decoration: none; + padding-left: 6px; + padding-right: 12px; +} + +a.SelectItem:focus, +a.SelectItem:active { + color: #000000; + outline-style: none; + text-decoration: none; +} + +a.SelectItem:hover { + color: #FFFFFF; + background-color: #3D578C; + outline-style: none; + text-decoration: none; + cursor: pointer; + display: block; +} + +/*---------------- Search results window */ + +iframe#MSearchResults { + width: 60ex; + height: 15em; +} + +#MSearchResultsWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid #000; + background-color: #EEF1F7; +} + +/* ----------------------------------- */ + + +#SRIndex { + clear:both; + padding-bottom: 15px; +} + +.SREntry { + font-size: 10pt; + padding-left: 1ex; +} + +.SRPage .SREntry { + font-size: 8pt; + padding: 1px 5px; +} + +body.SRPage { + margin: 5px 2px; +} + +.SRChildren { + padding-left: 3ex; padding-bottom: .5em +} + +.SRPage .SRChildren { + display: none; +} + +.SRSymbol { + font-weight: bold; + color: #425E97; + font-family: Arial, Verdana, sans-serif; + text-decoration: none; + outline: none; +} + +a.SRScope { + display: block; + color: #425E97; + font-family: Arial, Verdana, sans-serif; + text-decoration: none; + outline: none; +} + +a.SRSymbol:focus, a.SRSymbol:active, +a.SRScope:focus, a.SRScope:active { + text-decoration: underline; +} + +span.SRScope { + padding-left: 4px; +} + +.SRPage .SRStatus { + padding: 2px 5px; + font-size: 8pt; + font-style: italic; +} + +.SRResult { + display: none; +} + +DIV.searchresults { + margin-left: 10px; + margin-right: 10px; +} + +/*---------------- External search page results */ + +.searchresult { + background-color: #F0F3F8; +} + +.pages b { + color: white; + padding: 5px 5px 3px 5px; + background-image: url("../tab_a.png"); + background-repeat: repeat-x; + text-shadow: 0 1px 1px #000000; +} + +.pages { + line-height: 17px; + margin-left: 4px; + text-decoration: none; +} + +.hl { + font-weight: bold; +} + +#searchresults { + margin-bottom: 20px; +} + +.searchpages { + margin-top: 10px; +} + diff --git a/search/search.js b/search/search.js new file mode 100644 index 0000000..580875b --- /dev/null +++ b/search/search.js @@ -0,0 +1,803 @@ +// Search script generated by doxygen +// Copyright (C) 2009 by Dimitri van Heesch. + +// The code in this file is loosly based on main.js, part of Natural Docs, +// which is Copyright (C) 2003-2008 Greg Valure +// Natural Docs is licensed under the GPL. + +var indexSectionsWithContent = +{ + 0: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111111101101111111110011000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + 1: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111111101101110100110011000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + 2: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111101001111101100010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + 3: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001001000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + 4: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" +}; + +var indexSectionNames = +{ + 0: "all", + 1: "classes", + 2: "functions", + 3: "variables", + 4: "pages" +}; + +function convertToId(search) +{ + var result = ''; + for (i=0;i do a search + { + this.Search(); + } + } + + this.OnSearchSelectKey = function(evt) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==40 && this.searchIndex0) // Up + { + this.searchIndex--; + this.OnSelectItem(this.searchIndex); + } + else if (e.keyCode==13 || e.keyCode==27) + { + this.OnSelectItem(this.searchIndex); + this.CloseSelectionWindow(); + this.DOMSearchField().focus(); + } + return false; + } + + // --------- Actions + + // Closes the results window. + this.CloseResultsWindow = function() + { + this.DOMPopupSearchResultsWindow().style.display = 'none'; + this.DOMSearchClose().style.display = 'none'; + this.Activate(false); + } + + this.CloseSelectionWindow = function() + { + this.DOMSearchSelectWindow().style.display = 'none'; + } + + // Performs a search. + this.Search = function() + { + this.keyTimeout = 0; + + // strip leading whitespace + var searchValue = this.DOMSearchField().value.replace(/^ +/, ""); + + var code = searchValue.toLowerCase().charCodeAt(0); + var hexCode; + if (code<16) + { + hexCode="0"+code.toString(16); + } + else + { + hexCode=code.toString(16); + } + + var resultsPage; + var resultsPageWithSearch; + var hasResultsPage; + + if (indexSectionsWithContent[this.searchIndex].charAt(code) == '1') + { + resultsPage = this.resultsPath + '/' + indexSectionNames[this.searchIndex] + '_' + hexCode + '.html'; + resultsPageWithSearch = resultsPage+'?'+escape(searchValue); + hasResultsPage = true; + } + else // nothing available for this search term + { + resultsPage = this.resultsPath + '/nomatches.html'; + resultsPageWithSearch = resultsPage; + hasResultsPage = false; + } + + window.frames.MSearchResults.location = resultsPageWithSearch; + var domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow(); + + if (domPopupSearchResultsWindow.style.display!='block') + { + var domSearchBox = this.DOMSearchBox(); + this.DOMSearchClose().style.display = 'inline'; + if (this.insideFrame) + { + var domPopupSearchResults = this.DOMPopupSearchResults(); + domPopupSearchResultsWindow.style.position = 'relative'; + domPopupSearchResultsWindow.style.display = 'block'; + var width = document.body.clientWidth - 8; // the -8 is for IE :-( + domPopupSearchResultsWindow.style.width = width + 'px'; + domPopupSearchResults.style.width = width + 'px'; + } + else + { + var domPopupSearchResults = this.DOMPopupSearchResults(); + var left = getXPos(domSearchBox) + 150; // domSearchBox.offsetWidth; + var top = getYPos(domSearchBox) + 20; // domSearchBox.offsetHeight + 1; + domPopupSearchResultsWindow.style.display = 'block'; + left -= domPopupSearchResults.offsetWidth; + domPopupSearchResultsWindow.style.top = top + 'px'; + domPopupSearchResultsWindow.style.left = left + 'px'; + } + } + + this.lastSearchValue = searchValue; + this.lastResultsPage = resultsPage; + } + + // -------- Activation Functions + + // Activates or deactivates the search panel, resetting things to + // their default values if necessary. + this.Activate = function(isActive) + { + if (isActive || // open it + this.DOMPopupSearchResultsWindow().style.display == 'block' + ) + { + this.DOMSearchBox().className = 'MSearchBoxActive'; + + var searchField = this.DOMSearchField(); + + if (searchField.value == this.searchLabel) // clear "Search" term upon entry + { + searchField.value = ''; + this.searchActive = true; + } + } + else if (!isActive) // directly remove the panel + { + this.DOMSearchBox().className = 'MSearchBoxInactive'; + this.DOMSearchField().value = this.searchLabel; + this.searchActive = false; + this.lastSearchValue = '' + this.lastResultsPage = ''; + } + } +} + +// ----------------------------------------------------------------------- + +// The class that handles everything on the search results page. +function SearchResults(name) +{ + // The number of matches from the last run of . + this.lastMatchCount = 0; + this.lastKey = 0; + this.repeatOn = false; + + // Toggles the visibility of the passed element ID. + this.FindChildElement = function(id) + { + var parentElement = document.getElementById(id); + var element = parentElement.firstChild; + + while (element && element!=parentElement) + { + if (element.nodeName == 'DIV' && element.className == 'SRChildren') + { + return element; + } + + if (element.nodeName == 'DIV' && element.hasChildNodes()) + { + element = element.firstChild; + } + else if (element.nextSibling) + { + element = element.nextSibling; + } + else + { + do + { + element = element.parentNode; + } + while (element && element!=parentElement && !element.nextSibling); + + if (element && element!=parentElement) + { + element = element.nextSibling; + } + } + } + } + + this.Toggle = function(id) + { + var element = this.FindChildElement(id); + if (element) + { + if (element.style.display == 'block') + { + element.style.display = 'none'; + } + else + { + element.style.display = 'block'; + } + } + } + + // Searches for the passed string. If there is no parameter, + // it takes it from the URL query. + // + // Always returns true, since other documents may try to call it + // and that may or may not be possible. + this.Search = function(search) + { + if (!search) // get search word from URL + { + search = window.location.search; + search = search.substring(1); // Remove the leading '?' + search = unescape(search); + } + + search = search.replace(/^ +/, ""); // strip leading spaces + search = search.replace(/ +$/, ""); // strip trailing spaces + search = search.toLowerCase(); + search = convertToId(search); + + var resultRows = document.getElementsByTagName("div"); + var matches = 0; + + var i = 0; + while (i < resultRows.length) + { + var row = resultRows.item(i); + if (row.className == "SRResult") + { + var rowMatchName = row.id.toLowerCase(); + rowMatchName = rowMatchName.replace(/^sr\d*_/, ''); // strip 'sr123_' + + if (search.length<=rowMatchName.length && + rowMatchName.substr(0, search.length)==search) + { + row.style.display = 'block'; + matches++; + } + else + { + row.style.display = 'none'; + } + } + i++; + } + document.getElementById("Searching").style.display='none'; + if (matches == 0) // no results + { + document.getElementById("NoMatches").style.display='block'; + } + else // at least one result + { + document.getElementById("NoMatches").style.display='none'; + } + this.lastMatchCount = matches; + return true; + } + + // return the first item with index index or higher that is visible + this.NavNext = function(index) + { + var focusItem; + while (1) + { + var focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') + { + break; + } + else if (!focusItem) // last element + { + break; + } + focusItem=null; + index++; + } + return focusItem; + } + + this.NavPrev = function(index) + { + var focusItem; + while (1) + { + var focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') + { + break; + } + else if (!focusItem) // last element + { + break; + } + focusItem=null; + index--; + } + return focusItem; + } + + this.ProcessKeys = function(e) + { + if (e.type == "keydown") + { + this.repeatOn = false; + this.lastKey = e.keyCode; + } + else if (e.type == "keypress") + { + if (!this.repeatOn) + { + if (this.lastKey) this.repeatOn = true; + return false; // ignore first keypress after keydown + } + } + else if (e.type == "keyup") + { + this.lastKey = 0; + this.repeatOn = false; + } + return this.lastKey!=0; + } + + this.Nav = function(evt,itemIndex) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) // Up + { + var newIndex = itemIndex-1; + var focusItem = this.NavPrev(newIndex); + if (focusItem) + { + var child = this.FindChildElement(focusItem.parentNode.parentNode.id); + if (child && child.style.display == 'block') // children visible + { + var n=0; + var tmpElem; + while (1) // search for last child + { + tmpElem = document.getElementById('Item'+newIndex+'_c'+n); + if (tmpElem) + { + focusItem = tmpElem; + } + else // found it! + { + break; + } + n++; + } + } + } + if (focusItem) + { + focusItem.focus(); + } + else // return focus to search field + { + parent.document.getElementById("MSearchField").focus(); + } + } + else if (this.lastKey==40) // Down + { + var newIndex = itemIndex+1; + var focusItem; + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem && elem.style.display == 'block') // children visible + { + focusItem = document.getElementById('Item'+itemIndex+'_c0'); + } + if (!focusItem) focusItem = this.NavNext(newIndex); + if (focusItem) focusItem.focus(); + } + else if (this.lastKey==39) // Right + { + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'block'; + } + else if (this.lastKey==37) // Left + { + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'none'; + } + else if (this.lastKey==27) // Escape + { + parent.searchBox.CloseResultsWindow(); + parent.document.getElementById("MSearchField").focus(); + } + else if (this.lastKey==13) // Enter + { + return true; + } + return false; + } + + this.NavChild = function(evt,itemIndex,childIndex) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) // Up + { + if (childIndex>0) + { + var newIndex = childIndex-1; + document.getElementById('Item'+itemIndex+'_c'+newIndex).focus(); + } + else // already at first child, jump to parent + { + document.getElementById('Item'+itemIndex).focus(); + } + } + else if (this.lastKey==40) // Down + { + var newIndex = childIndex+1; + var elem = document.getElementById('Item'+itemIndex+'_c'+newIndex); + if (!elem) // last child, jump to parent next parent + { + elem = this.NavNext(itemIndex+1); + } + if (elem) + { + elem.focus(); + } + } + else if (this.lastKey==27) // Escape + { + parent.searchBox.CloseResultsWindow(); + parent.document.getElementById("MSearchField").focus(); + } + else if (this.lastKey==13) // Enter + { + return true; + } + return false; + } +} + +function setKeyActions(elem,action) +{ + elem.setAttribute('onkeydown',action); + elem.setAttribute('onkeypress',action); + elem.setAttribute('onkeyup',action); +} + +function setClassAttr(elem,attr) +{ + elem.setAttribute('class',attr); + elem.setAttribute('className',attr); +} + +function createResults() +{ + var results = document.getElementById("SRResults"); + for (var e=0; ek7RCwB~R6VQOP#AvB$vH7i{6H{96zot$7cZT<7246EF5Np6N}+$IbiG6W zg#87A+NFaX+=_^xM1#gCtshC=E{%9^uQX_%?YwXvo{#q&MnpJ8uh(O?ZRc&~_1%^SsPxG@rfElJg-?U zm!Cz-IOn(qJP3kDp-^~qt+FGbl=5jNli^Wj_xIBG{Rc0en{!oFvyoNC7{V~T8}b>| z=jL2WIReZzX(YN(_9fV;BBD$VXQIxNasAL8ATvEu822WQ%mvv4FO#qs` BFGc_W literal 0 HcmV?d00001 diff --git a/search/search_r.png b/search/search_r.png new file mode 100644 index 0000000000000000000000000000000000000000..97ee8b439687084201b79c6f776a41f495c6392a GIT binary patch literal 612 zcmV-q0-ODbP)PbXFRCwB?)W514K@j&X?z2*SxFI6-@HT2E2K=9X9%Pb zEK*!TBw&g(DMC;|A)uGlRkOS9vd-?zNs%bR4d$w+ox_iFnE8fvIvv7^5<(>Te12Li z7C)9srCzmK{ZcNM{YIl9j{DePFgOWiS%xG@5CnnnJa4nvY<^glbz7^|-ZY!dUkAwd z{gaTC@_>b5h~;ug#R0wRL0>o5!hxm*s0VW?8dr}O#zXTRTnrQm_Z7z1Mrnx>&p zD4qifUjzLvbVVWi?l?rUzwt^sdb~d!f_LEhsRVIXZtQ=qSxuxqm zEX#tf>$?M_Y1-LSDT)HqG?`%-%ZpY!#{N!rcNIiL;G7F0`l?)mNGTD9;f9F5Up3Kg zw}a<-JylhG&;=!>B+fZaCX+?C+kHYrP%c?X2!Zu_olK|GcS4A70HEy;vn)I0>0kLH z`jc(WIaaHc7!HS@f*^R^Znx8W=_jIl2oWJoQ*h1^$FX!>*PqR1J8k|fw}w_y}TpE>7m8DqDO<3z`OzXt$ccSejbEZCg@0000 + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/variables_63.js b/search/variables_63.js new file mode 100644 index 0000000..033dcd7 --- /dev/null +++ b/search/variables_63.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['channelname',['channelName',['../structpvalink_1_1pva_link_config.html#a87b194f54983a2d55f617cb6178368e2',1,'pvalink::pvaLinkConfig']]] +]; diff --git a/search/variables_66.html b/search/variables_66.html new file mode 100644 index 0000000..802fdbc --- /dev/null +++ b/search/variables_66.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/variables_66.js b/search/variables_66.js new file mode 100644 index 0000000..15bf295 --- /dev/null +++ b/search/variables_66.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['fieldname',['fieldName',['../structpvalink_1_1pva_link_config.html#a747c31e4118c1ce1f10bb5301a66d281',1,'pvalink::pvaLinkConfig']]] +]; diff --git a/search/variables_6c.html b/search/variables_6c.html new file mode 100644 index 0000000..c136114 --- /dev/null +++ b/search/variables_6c.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/variables_6c.js b/search/variables_6c.js new file mode 100644 index 0000000..81602ec --- /dev/null +++ b/search/variables_6c.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['lastelem',['lastelem',['../struct_monitor_cache_entry.html#ac32c2f4b0e388af0295f80e460f9c72e',1,'MonitorCacheEntry']]] +]; diff --git a/server_8cpp_source.html b/server_8cpp_source.html new file mode 100644 index 0000000..9305610 --- /dev/null +++ b/server_8cpp_source.html @@ -0,0 +1,424 @@ + + + + + + +pva2pva: p2pApp/server.cpp Source File + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
server.cpp
+
+
+
1 #include <stdio.h>
+
2 
+
3 #include <epicsAtomic.h>
+
4 #include <epicsString.h>
+
5 #include <epicsTimer.h>
+
6 
+
7 #include <pv/logger.h>
+
8 #include <pv/pvIntrospect.h> /* for pvdVersion.h */
+
9 #include <pv/epicsException.h>
+
10 #include <pv/serverContext.h>
+
11 #include <pv/logger.h>
+
12 
+
13 #define epicsExportSharedSymbols
+
14 #include "helper.h"
+
15 #include "pva2pva.h"
+
16 #include "server.h"
+
17 
+
18 #if defined(PVDATA_VERSION_INT)
+
19 #if PVDATA_VERSION_INT > VERSION_INT(7,0,0,0)
+
20 # define USE_MSTATS
+
21 #endif
+
22 #endif
+
23 
+
24 namespace pva = epics::pvAccess;
+
25 namespace pvd = epics::pvData;
+
26 
+
27 std::tr1::shared_ptr<pva::ChannelProvider>
+
28 GWServerChannelProvider::getChannelProvider()
+
29 {
+
30  return shared_from_this();
+
31 }
+
32 
+
33 // Called from UDP search thread with no locks held
+
34 // Called from TCP threads (for search w/ TCP)
+
35 pva::ChannelFind::shared_pointer
+
36 GWServerChannelProvider::channelFind(std::string const & channelName,
+
37  pva::ChannelFindRequester::shared_pointer const & channelFindRequester)
+
38 {
+
39  pva::ChannelFind::shared_pointer ret;
+
40  bool found = false;
+
41 
+
42  if(!channelName.empty())
+
43  {
+
44  LOG(pva::logLevelDebug, "Searching for '%s'", channelName.c_str());
+
45  ChannelCacheEntry::shared_pointer ent(cache.lookup(channelName));
+
46  if(ent) {
+
47  found = true;
+
48  ret = shared_from_this();
+
49  }
+
50  }
+
51 
+
52  // unlock for callback
+
53 
+
54  channelFindRequester->channelFindResult(pvd::Status::Ok, ret, found);
+
55 
+
56  return ret;
+
57 }
+
58 
+
59 // The return value of this function is ignored
+
60 // The newly created channel is given to the ChannelRequester
+
61 pva::Channel::shared_pointer
+
62 GWServerChannelProvider::createChannel(std::string const & channelName,
+
63  pva::ChannelRequester::shared_pointer const & channelRequester,
+
64  short priority, std::string const & addressx)
+
65 {
+
66  GWChannel::shared_pointer ret;
+
67  std::string address = channelRequester->getRequesterName();
+
68 
+
69  if(!channelName.empty())
+
70  {
+
71  Guard G(cache.cacheLock);
+
72 
+
73  ChannelCacheEntry::shared_pointer ent(cache.lookup(channelName)); // recursively locks cacheLock
+
74 
+
75  if(ent)
+
76  {
+
77  ret.reset(new GWChannel(ent, shared_from_this(), channelRequester, address));
+
78  ent->interested.insert(ret);
+
79  ret->weakref = ret;
+
80  }
+
81  }
+
82 
+
83  if(!ret) {
+
84  pvd::Status S(pvd::Status::STATUSTYPE_ERROR, "Not found");
+
85  channelRequester->channelCreated(S, ret);
+
86  } else {
+
87  channelRequester->channelCreated(pvd::Status::Ok, ret);
+
88  channelRequester->channelStateChange(ret, pva::Channel::CONNECTED);
+
89  }
+
90 
+
91  return ret; // ignored by caller
+
92 }
+
93 
+
94 void GWServerChannelProvider::destroy() {}
+
95 
+
96 GWServerChannelProvider::GWServerChannelProvider(const pva::ChannelProvider::shared_pointer& prov)
+
97  :cache(prov)
+
98 {}
+
99 
+
100 GWServerChannelProvider::~GWServerChannelProvider() {}
+
101 
+
102 void ServerConfig::drop(const char *client, const char *channel)
+
103 {
+
104  if(!client)
+
105  client= "";
+
106  if(!channel)
+
107  channel = "";
+
108  // TODO: channel glob match
+
109 
+
110  FOREACH(clients_t::const_iterator, it, end, clients)
+
111  {
+
112  if(client[0]!='\0' && client[0]!='*' && it->first!=client)
+
113  continue;
+
114 
+
115  const GWServerChannelProvider::shared_pointer& prov(it->second);
+
116 
+
117  ChannelCacheEntry::shared_pointer entry;
+
118 
+
119  // find the channel, if it's there
+
120  {
+
121  Guard G(prov->cache.cacheLock);
+
122 
+
123  ChannelCache::entries_t::iterator it = prov->cache.entries.find(channel);
+
124  if(it==prov->cache.entries.end())
+
125  continue;
+
126 
+
127  std::cout<<"Drop from "<<it->first<<" : "<<it->second->channelName<<"\n";
+
128 
+
129  entry = it->second;
+
130  prov->cache.entries.erase(it); // drop out of cache (TODO: not required)
+
131  }
+
132 
+
133  // trigger client side disconnect (recursively calls call CRequester::channelStateChange())
+
134  // TODO: shouldn't need this
+
135  entry->channel->destroy();
+
136 
+
137  }
+
138 }
+
139 
+
140 void ServerConfig::status_server(int lvl, const char *server)
+
141 {
+
142  if(!server)
+
143  server = "";
+
144 
+
145  FOREACH(servers_t::const_iterator, it, end, servers)
+
146  {
+
147  if(server[0]!='\0' && server[0]!='*' && it->first!=server)
+
148  continue;
+
149 
+
150  const pva::ServerContext::shared_pointer& serv(it->second);
+
151  std::cout<<"==> Server: "<<it->first<<"\n";
+
152  serv->printInfo(std::cout);
+
153  std::cout<<"<== Server: "<<it->first<<"\n\n";
+
154  // TODO: print client list somehow
+
155  }
+
156 }
+
157 
+
158 void ServerConfig::status_client(int lvl, const char *client, const char *channel)
+
159 {
+
160  if(!client)
+
161  client= "";
+
162  if(!channel)
+
163  channel = "";
+
164 
+
165  bool iswild = strchr(channel, '?') || strchr(channel, '*');
+
166 
+
167  FOREACH(clients_t::const_iterator, it, end, clients)
+
168  {
+
169  if(client[0]!='\0' && client[0]!='*' && it->first!=client)
+
170  continue;
+
171 
+
172  const GWServerChannelProvider::shared_pointer& prov(it->second);
+
173 
+
174  std::cout<<"==> Client: "<<it->first<<"\n";
+
175 
+
176  ChannelCache::entries_t entries;
+
177 
+
178  size_t ncache, ncleaned, ndust;
+
179  {
+
180  Guard G(prov->cache.cacheLock);
+
181 
+
182  ncache = prov->cache.entries.size();
+
183  ncleaned = prov->cache.cleanerRuns;
+
184  ndust = prov->cache.cleanerDust;
+
185 
+
186  if(lvl>0) {
+
187  if(!iswild) { // no string or some glob pattern
+
188  entries = prov->cache.entries; // copy of std::map
+
189  } else { // just one channel
+
190  ChannelCache::entries_t::iterator it(prov->cache.entries.find(channel));
+
191  if(it!=prov->cache.entries.end())
+
192  entries[it->first] = it->second;
+
193  }
+
194  }
+
195  }
+
196 
+
197  std::cout<<"Cache has "<<ncache<<" channels. Cleaned "
+
198  <<ncleaned<<" times closing "<<ndust<<" channels\n";
+
199 
+
200  if(lvl<=0)
+
201  continue;
+
202 
+
203  FOREACH(ChannelCache::entries_t::const_iterator, it2, end2, entries)
+
204  {
+
205  const std::string& channame = it2->first;
+
206  if(iswild && !epicsStrGlobMatch(channame.c_str(), channel))
+
207  continue;
+
208 
+
209  ChannelCacheEntry& E = *it2->second;
+
210  ChannelCacheEntry::mon_entries_t::lock_vector_type mons;
+
211  size_t nsrv, nmon;
+
212  bool dropflag;
+
213  const char *chstate;
+
214  {
+
215  Guard G(E.mutex());
+
216  chstate = pva::Channel::ConnectionStateNames[E.channel->getConnectionState()];
+
217  nsrv = E.interested.size();
+
218  nmon = E.mon_entries.size();
+
219  dropflag = E.dropPoke;
+
220 
+
221  if(lvl>1)
+
222  mons = E.mon_entries.lock_vector();
+
223  }
+
224 
+
225  std::cout<<chstate
+
226  <<" Client Channel '"<<channame
+
227  <<"' used by "<<nsrv<<" Server channel(s) with "
+
228  <<nmon<<" unique subscription(s) "
+
229  <<(dropflag?'!':'_')<<"\n";
+
230 
+
231  if(lvl<=1)
+
232  continue;
+
233 
+
234  FOREACH(ChannelCacheEntry::mon_entries_t::lock_vector_type::const_iterator, it2, end2, mons) {
+
235  MonitorCacheEntry& ME = *it2->second;
+
236 
+
237  MonitorCacheEntry::interested_t::vector_type usrs;
+
238  size_t nsrvmon;
+
239 #ifdef USE_MSTATS
+
240  pvd::Monitor::Stats mstats;
+
241 #endif
+
242  bool hastype, hasdata, isdone;
+
243  {
+
244  Guard G(ME.mutex());
+
245 
+
246  nsrvmon = ME.interested.size();
+
247  hastype = !!ME.typedesc;
+
248  hasdata = !!ME.lastelem;
+
249  isdone = ME.done;
+
250 
+
251 #ifdef USE_MSTATS
+
252  if(ME.mon)
+
253  ME.mon->getStats(mstats);
+
254 #endif
+
255 
+
256  if(lvl>2)
+
257  usrs = ME.interested.lock_vector();
+
258  }
+
259 
+
260  // TODO: how to describe pvRequest in a compact way...
+
261  std::cout<<" Client Monitor used by "<<nsrvmon<<" Server monitors, "
+
262  <<"Has "<<(hastype?"":"not ")
+
263  <<"opened, Has "<<(hasdata?"":"not ")
+
264  <<"recv'd some data, Has "<<(isdone?"":"not ")<<"finalized\n"
+
265  " "<< epicsAtomicGetSizeT(&ME.nwakeups)<<" wakeups "
+
266  <<epicsAtomicGetSizeT(&ME.nevents)<<" events\n";
+
267 #ifdef USE_MSTATS
+
268  if(mstats.nempty || mstats.nfilled || mstats.noutstanding)
+
269  std::cout<<" US monitor queue "<<mstats.nfilled
+
270  <<" filled, "<<mstats.noutstanding
+
271  <<" outstanding, "<<mstats.nempty<<" empty\n";
+
272 #endif
+
273  if(lvl<=2)
+
274  continue;
+
275 
+
276  FOREACH(MonitorCacheEntry::interested_t::vector_type::const_iterator, it3, end3, usrs) {
+
277  MonitorUser& MU = **it3;
+
278 
+
279  size_t nempty, nfilled, nused, total;
+
280  std::string remote;
+
281  bool isrunning;
+
282  {
+
283  Guard G(MU.mutex());
+
284 
+
285  nempty = MU.empty.size();
+
286  nfilled = MU.filled.size();
+
287  nused = MU.inuse.size();
+
288  isrunning = MU.running;
+
289 
+
290  GWChannel::shared_pointer srvchan(MU.srvchan.lock());
+
291  if(srvchan)
+
292  remote = srvchan->address;
+
293  else
+
294  remote = "<unknown>";
+
295  }
+
296  total = nempty + nfilled + nused;
+
297 
+
298  std::cout<<" Server monitor from "
+
299  <<remote
+
300  <<(isrunning?"":" Paused")
+
301  <<" buffer "<<nfilled<<"/"<<total
+
302  <<" out "<<nused<<"/"<<total
+
303  <<" "<<epicsAtomicGetSizeT(&MU.nwakeups)<<" wakeups "
+
304  <<epicsAtomicGetSizeT(&MU.nevents)<<" events "
+
305  <<epicsAtomicGetSizeT(&MU.ndropped)<<" drops\n";
+
306  }
+
307  }
+
308 
+
309 
+
310 
+
311  }
+
312 
+
313 
+
314  std::cout<<"<== Client: "<<it->first<<"\n\n";
+
315  }
+
316 }
+
epics::pvData::MonitorElement::shared_pointer lastelem
Definition: chancache.h:46
+
Definition: chancache.h:103
+ +
size_t size() const
Definition: weakmap.h:147
+
lock_vector_type lock_vector() const
Definition: weakmap.h:259
+
vector_type lock_vector() const
Definition: weakset.h:268
+
size_t size() const
Definition: weakset.h:168
+
Definition: chancache.h:22
+ +
+ + + + diff --git a/server_8h_source.html b/server_8h_source.html new file mode 100644 index 0000000..8d89531 --- /dev/null +++ b/server_8h_source.html @@ -0,0 +1,158 @@ + + + + + + +pva2pva: p2pApp/server.h Source File + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
server.h
+
+
+
1 #ifndef SERVER_H
+
2 #define SERVER_H
+
3 
+
4 #include <pv/serverContext.h>
+
5 
+
6 #include "chancache.h"
+
7 #include "channel.h"
+
8 
+ +
10  public epics::pvAccess::ChannelProvider,
+
11  public epics::pvAccess::ChannelFind,
+
12  public std::tr1::enable_shared_from_this<GWServerChannelProvider>
+
13 {
+
14  POINTER_DEFINITIONS(GWServerChannelProvider);
+
15  ChannelCache cache;
+
16 
+
17  virtual std::tr1::shared_ptr<ChannelProvider> getChannelProvider();
+
18 
+
19  virtual void cancel() {}
+
20 
+
21  virtual std::string getProviderName() {
+
22  return "GWServer";
+
23  }
+
24 
+
25  virtual epics::pvAccess::ChannelFind::shared_pointer channelFind(std::string const & channelName,
+
26  epics::pvAccess::ChannelFindRequester::shared_pointer const & channelFindRequester);
+
27 
+
28  using epics::pvAccess::ChannelProvider::createChannel;
+
29  virtual epics::pvAccess::Channel::shared_pointer createChannel(std::string const & channelName,
+
30  epics::pvAccess::ChannelRequester::shared_pointer const & channelRequester,
+
31  short priority, std::string const & addressx);
+
32  virtual void destroy();
+
33 
+
34  explicit GWServerChannelProvider(const epics::pvAccess::ChannelProvider::shared_pointer& prov);
+
35  virtual ~GWServerChannelProvider();
+
36 };
+
37 
+
38 struct ServerConfig {
+
39  int debug;
+
40  bool interactive;
+
41  epics::pvData::PVStructure::shared_pointer conf;
+
42 
+
43  typedef std::map<std::string, GWServerChannelProvider::shared_pointer> clients_t;
+
44  clients_t clients;
+
45 
+
46  typedef std::map<std::string, epics::pvAccess::ServerContext::shared_pointer> servers_t;
+
47  servers_t servers;
+
48 
+
49  ServerConfig() :debug(1), interactive(true) {}
+
50 
+
51  void drop(const char *client, const char *channel);
+
52  void status_server(int lvl, const char *server);
+
53  void status_client(int lvl, const char *client, const char *channel);
+
54 };
+
55 
+
56 #endif // SERVER_H
+ + + +
+ + + + diff --git a/soft_main_8cpp_source.html b/soft_main_8cpp_source.html new file mode 100644 index 0000000..347f0d4 --- /dev/null +++ b/soft_main_8cpp_source.html @@ -0,0 +1,381 @@ + + + + + + +pva2pva: pdbApp/softMain.cpp Source File + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
softMain.cpp
+
+
+
1 /*************************************************************************\
+
2 * Copyright (c) 2008 UChicago Argonne LLC, as Operator of Argonne
+
3 * National Laboratory.
+
4 * Copyright (c) 2003 The Regents of the University of California, as
+
5 * Operator of Los Alamos National Laboratory.
+
6 * EPICS BASE is distributed subject to the Software License Agreement
+
7 * found in the file LICENSE that is included with this distribution.
+
8 \*************************************************************************/
+
9 
+
10 /* Author: Andrew Johnson Date: 2003-04-08 */
+
11 
+
12 #include <iostream>
+
13 #include <string>
+
14 #include <list>
+
15 #include <stdexcept>
+
16 
+
17 #include <epicsVersion.h>
+
18 #include <epicsGetopt.h>
+
19 #include "registryFunction.h"
+
20 #include "epicsThread.h"
+
21 #include "epicsExit.h"
+
22 #include "epicsStdio.h"
+
23 #include "epicsString.h"
+
24 #include "dbStaticLib.h"
+
25 #include "subRecord.h"
+
26 #include "dbAccess.h"
+
27 #include "asDbLib.h"
+
28 #include "iocInit.h"
+
29 #include "iocsh.h"
+
30 #include "osiFileName.h"
+
31 
+
32 #include <pv/qsrv.h>
+
33 
+
34 extern "C" int softIocPVA_registerRecordDeviceDriver(struct dbBase *pdbbase);
+
35 
+
36 #ifndef EPICS_BASE
+
37 // so IDEs knows EPICS_BASE is a string constant
+
38 # define EPICS_BASE "/"
+
39 # error -DEPICS_BASE required
+
40 #endif
+
41 
+
42 #if EPICS_VERSION_INT>=VERSION_INT(7,0,2,0)
+
43 # define USE_EXECDIR
+
44 #endif
+
45 
+
46 #define DBD_BASE "dbd" OSI_PATH_SEPARATOR "softIocPVA.dbd"
+
47 #define EXIT_BASE "db" OSI_PATH_SEPARATOR "softIocExit.db"
+
48 #define DBD_FILE_REL ".." OSI_PATH_SEPARATOR ".." OSI_PATH_SEPARATOR DBD_BASE
+
49 #define EXIT_FILE_REL ".." OSI_PATH_SEPARATOR ".." OSI_PATH_SEPARATOR EXIT_BASE
+
50 #define DBD_FILE EPICS_BASE OSI_PATH_SEPARATOR DBD_BASE
+
51 #define EXIT_FILE EPICS_BASE OSI_PATH_SEPARATOR EXIT_BASE
+
52 
+
53 namespace {
+
54 
+
55 bool verbose = false;
+
56 
+
57 static void exitSubroutine(subRecord *precord) {
+
58  epicsExitLater((precord->a == 0.0) ? EXIT_SUCCESS : EXIT_FAILURE);
+
59 }
+
60 
+
61 void usage(const char *arg0, const std::string& base_dbd) {
+
62  std::cout<<"Usage: "<<arg0<<
+
63  " [-D softIocPVA.dbd] [-h] [-S] [-s] [-v] [-a ascf]\n"
+
64  "[-m macro=value,macro2=value2] [-d file.db]\n"
+
65  "[-x prefix] [st.cmd]\n"
+
66  "\n"
+
67  " -D <dbd> If used, must come first. Specify the path to the softIocPVA.dbdfile."
+
68  " The compile-time install location is saved in the binary as a default.\n"
+
69  "\n"
+
70  " -h Print this mesage and exit.\n"
+
71  "\n"
+
72  " -S Prevents an interactive shell being started.\n"
+
73  "\n"
+
74  " -s Previously caused a shell to be started. Now accepted and ignored.\n"
+
75  "\n"
+
76  " -v Verbose, display steps taken during startup.\n"
+
77  "\n"
+
78  " -a <acf> Access Security configuration file. Macro substitution is\n"
+
79  " performed.\n"
+
80  "\n"
+
81  " -G <json> DB Group definition file in JSON format.\n"
+
82  "\n"
+
83  " -m <MAC>=<value>,... Set/replace macro definitions used by subsequent -d and\n"
+
84  " -a.\n"
+
85  "\n"
+
86  " -d <db> Load records from file (dbLoadRecords). Macro substitution is\n"
+
87  " performed.\n"
+
88  "\n"
+
89  " -x <prefix> Load softIocExit.db. Provides a record \"<prefix>:exit\".\n"
+
90  " Put 0 to exit with success, or non-zero to exit with an error.\n"
+
91  "\n"
+
92  "Any number of -m and -d arguments can be interspersed; the macros are applied\n"
+
93  "to the following .db files. Each later -m option causes earlier macros to be\n"
+
94  "discarded.\n"
+
95  "\n"
+
96  "A st.cmd file is optional. If any databases were loaded the st.cmd file will\n"
+
97  "be run *after* iocInit. To perform iocsh commands before iocInit, all database\n"
+
98  "loading must be performed by the script itself, or by the user from the\n"
+
99  "interactive IOC shell.\n"
+
100  "\n"
+
101  "Compiled-in path to softIocPVA.dbd is:\n"
+
102  "\t"<<base_dbd.c_str()<<"\n";
+
103 }
+
104 
+
105 void errIf(int ret, const std::string& msg)
+
106 {
+
107  if(ret)
+
108  throw std::runtime_error(msg);
+
109 }
+
110 
+
111 bool lazy_dbd_loaded;
+
112 
+
113 void lazy_dbd(const std::string& dbd_file) {
+
114  if(lazy_dbd_loaded) return;
+
115  lazy_dbd_loaded = true;
+
116 
+
117  if (verbose)
+
118  std::cout<<"dbLoadDatabase(\""<<dbd_file<<"\")\n";
+
119  errIf(dbLoadDatabase(dbd_file.c_str(), NULL, NULL),
+
120  std::string("Failed to load DBD file: ")+dbd_file);
+
121 
+
122  if (verbose)
+
123  std::cout<<"softIocPVA_registerRecordDeviceDriver(pdbbase)\n";
+
124  softIocPVA_registerRecordDeviceDriver(pdbbase);
+
125  registryFunctionAdd("exit", (REGISTRYFUNCTION) exitSubroutine);
+
126 }
+
127 
+
128 } // namespace
+
129 
+
130 int main(int argc, char *argv[])
+
131 {
+
132  try {
+
133  std::string dbd_file(DBD_FILE),
+
134  exit_file(EXIT_FILE),
+
135  macros, // scratch space for macros (may be given more than once)
+
136  xmacro;
+
137  bool interactive = true;
+
138  bool loadedDb = false;
+
139  bool ranScript = false;
+
140 
+
141 #ifdef USE_EXECDIR
+
142  // attempt to compute relative paths
+
143  {
+
144  std::string prefix;
+
145  char *cprefix = epicsGetExecDir();
+
146  if(cprefix) {
+
147  try {
+
148  prefix = cprefix;
+
149  free(cprefix);
+
150  } catch(...) {
+
151  free(cprefix);
+
152  throw;
+
153  }
+
154  }
+
155 
+
156  dbd_file = prefix + DBD_FILE_REL;
+
157  exit_file = prefix + EXIT_FILE_REL;
+
158  }
+
159 #endif
+
160 
+
161  int opt;
+
162 
+
163  while ((opt = getopt(argc, argv, "ha:D:d:m:Ssx:G:v")) != -1) {
+
164  switch (opt) {
+
165  case 'h': /* Print usage */
+
166  usage(argv[0], dbd_file);
+
167  epicsExit(0);
+
168  return 0;
+
169  default:
+
170  usage(argv[0], dbd_file);
+
171  std::cerr<<"Unknown argument: -"<<char(opt)<<"\n";
+
172  epicsExit(2);
+
173  return 2;
+
174  case 'a':
+
175  lazy_dbd(dbd_file);
+
176  if (!macros.empty()) {
+
177  if (verbose)
+
178  std::cout<<"asSetSubstitutions(\""<<macros<<"\")\n";
+
179  if(asSetSubstitutions(macros.c_str()))
+
180  throw std::bad_alloc();
+
181  }
+
182  if (verbose)
+
183  std::cout<<"asSetFilename(\""<<optarg<<"\")\n";
+
184  if(asSetFilename(optarg))
+
185  throw std::bad_alloc();
+
186  break;
+
187  case 'D':
+
188  if(lazy_dbd_loaded) {
+
189  throw std::runtime_error("-D specified too late. softIocPVA.dbd already loaded.\n");
+
190  }
+
191  dbd_file = optarg;
+
192  break;
+
193  case 'd':
+
194  lazy_dbd(dbd_file);
+
195  if (verbose) {
+
196  std::cout<<"dbLoadRecords(\""<<optarg<<"\"";
+
197  if(!macros.empty())
+
198  std::cout<<", \""<<macros<<"\"";
+
199  std::cout<<")\n";
+
200  }
+
201  errIf(dbLoadRecords(optarg, macros.c_str()),
+
202  std::string("Failed to load: ")+optarg);
+
203  loadedDb = true;
+
204  break;
+
205  case 'm':
+
206  macros = optarg;
+
207  break;
+
208  case 'S':
+
209  interactive = false;
+
210  break;
+
211  case 's':
+
212  break; // historical
+
213  case 'v':
+
214  verbose = true;
+
215  break;
+
216  case 'x':
+
217  lazy_dbd(dbd_file);
+
218  xmacro = "IOC=";
+
219  xmacro += optarg;
+
220  errIf(dbLoadRecords(exit_file.c_str(), xmacro.c_str()),
+
221  std::string("Failed to load: ")+exit_file);
+
222  loadedDb = true;
+
223  break;
+
224  case 'G':
+
225  dbLoadGroup(optarg);
+
226  break;
+
227  }
+
228  }
+
229 
+
230  lazy_dbd(dbd_file);
+
231 
+
232  if(optind<argc) {
+
233  // run script
+
234  // ignore any extra positional args (historical)
+
235 
+
236  if (verbose)
+
237  std::cout<<"# Begin "<<argv[optind]<<"\n";
+
238  errIf(iocsh(argv[optind]),
+
239  std::string("Error in ")+argv[optind]);
+
240  if (verbose)
+
241  std::cout<<"# End "<<argv[optind]<<"\n";
+
242 
+
243  epicsThreadSleep(0.2);
+
244  ranScript = true; /* Assume the script has done any necessary initialization */
+
245  }
+
246 
+
247  if (loadedDb) {
+
248  if (verbose)
+
249  std::cout<<"iocInit()\n";
+
250  iocInit();
+
251  epicsThreadSleep(0.2);
+
252  }
+
253 
+
254  if(interactive) {
+
255  std::cout.flush();
+
256  std::cerr.flush();
+
257  if(iocsh(NULL)) {
+
258  epicsExit(1);
+
259  return 1;
+
260  }
+
261 
+
262  } else {
+
263  if (loadedDb || ranScript) {
+
264  epicsThreadExitMain();
+
265 
+
266  } else {
+
267  usage(argv[0], dbd_file);
+
268  std::cerr<<"Nothing to do!\n";
+
269  epicsExit(1);
+
270  return 1;
+
271  }
+
272  }
+
273 
+
274  epicsExit(0);
+
275  return 0;
+
276 
+
277  }catch(std::exception& e){
+
278  std::cerr<<"Error: "<<e.what()<<"\n";
+
279  epicsExit(2);
+
280  return 2;
+
281  }
+
282 }
+
+ + + + diff --git a/struct_a_s_c_l_i_e_n_t-members.html b/struct_a_s_c_l_i_e_n_t-members.html new file mode 100644 index 0000000..fc5b291 --- /dev/null +++ b/struct_a_s_c_l_i_e_n_t-members.html @@ -0,0 +1,107 @@ + + + + + + +pva2pva: Member List + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ +
+
+
+
ASCLIENT Member List
+
+
+ +

This is the complete list of members for ASCLIENT, including all inherited members.

+ + + + + + + +
add(dbChannel *chan, ASCred &cred) (defined in ASCLIENT)ASCLIENT
ASCLIENT() (defined in ASCLIENT)ASCLIENTinline
aspvt (defined in ASCLIENT)ASCLIENT
canWrite() (defined in ASCLIENT)ASCLIENT
grppvt (defined in ASCLIENT)ASCLIENT
~ASCLIENT() (defined in ASCLIENT)ASCLIENT
+ + + + diff --git a/struct_a_s_c_l_i_e_n_t.html b/struct_a_s_c_l_i_e_n_t.html new file mode 100644 index 0000000..05ea88d --- /dev/null +++ b/struct_a_s_c_l_i_e_n_t.html @@ -0,0 +1,128 @@ + + + + + + +pva2pva: ASCLIENT Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ +
+
+ +
+
ASCLIENT Struct Reference
+
+
+ + + + + + +

+Public Member Functions

+void add (dbChannel *chan, ASCred &cred)
 
+bool canWrite ()
 
+ + + + + +

+Public Attributes

+ASCLIENTPVT aspvt
 
+std::vector< ASCLIENTPVT > grppvt
 
+

Detailed Description

+
+

Definition at line 107 of file pvif.h.

+

The documentation for this struct was generated from the following files: +
+ + + + diff --git a/struct_a_s_cred-members.html b/struct_a_s_cred-members.html new file mode 100644 index 0000000..5ebd1b8 --- /dev/null +++ b/struct_a_s_cred-members.html @@ -0,0 +1,105 @@ + + + + + + +pva2pva: Member List + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ +
+
+
+
ASCred Member List
+
+
+ +

This is the complete list of members for ASCred, including all inherited members.

+ + + + + +
groups (defined in ASCred)ASCred
host (defined in ASCred)ASCred
update(const std::tr1::shared_ptr< epics::pvAccess::ChannelRequester > &request) (defined in ASCred)ASCred
user (defined in ASCred)ASCred
+ + + + diff --git a/struct_a_s_cred.html b/struct_a_s_cred.html new file mode 100644 index 0000000..2744a5e --- /dev/null +++ b/struct_a_s_cred.html @@ -0,0 +1,128 @@ + + + + + + +pva2pva: ASCred Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ +
+
+ +
+
ASCred Struct Reference
+
+
+ + + + +

+Public Member Functions

+void update (const std::tr1::shared_ptr< epics::pvAccess::ChannelRequester > &request)
 
+ + + + + + + +

+Public Attributes

+std::vector< char > user
 
+std::vector< char > host
 
+std::vector< std::vector< char > > groups
 
+

Detailed Description

+
+

Definition at line 100 of file pvif.h.

+

The documentation for this struct was generated from the following files: +
+ + + + diff --git a/struct_base_channel-members.html b/struct_base_channel-members.html new file mode 100644 index 0000000..ef41a37 --- /dev/null +++ b/struct_base_channel-members.html @@ -0,0 +1,117 @@ + + + + + + +pva2pva: Member List + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ +
+
+
+
BaseChannel Member List
+
+
+ +

This is the complete list of members for BaseChannel, including all inherited members.

+ + + + + + + + + + + + + + + + + +
BaseChannel(const std::string &name, const std::tr1::weak_ptr< epics::pvAccess::ChannelProvider > &prov, const epics::pvAccess::ChannelRequester::shared_pointer &req, const epics::pvData::StructureConstPtr &dtype) (defined in BaseChannel)BaseChannelinline
destroy() OVERRIDE FINAL (defined in BaseChannel)BaseChannelinlinevirtual
fielddesc (defined in BaseChannel)BaseChannel
getChannelName() OVERRIDE FINAL (defined in BaseChannel)BaseChannelinlinevirtual
getChannelRequester() OVERRIDE FINAL (defined in BaseChannel)BaseChannelinlinevirtual
getField(epics::pvAccess::GetFieldRequester::shared_pointer const &requester, std::string const &subField) OVERRIDE (defined in BaseChannel)BaseChannelinlinevirtual
getProvider() OVERRIDE FINAL (defined in BaseChannel)BaseChannelinlinevirtual
getRemoteAddress() OVERRIDE (defined in BaseChannel)BaseChannelinlinevirtual
getRequesterName() OVERRIDE (defined in BaseChannel)BaseChannelinlinevirtual
guard_t typedef (defined in BaseChannel)BaseChannel
lock (defined in BaseChannel)BaseChannelmutable
printInfo(std::ostream &out) OVERRIDE (defined in BaseChannel)BaseChannelinlinevirtual
provider (defined in BaseChannel)BaseChannel
pvname (defined in BaseChannel)BaseChannel
requester (defined in BaseChannel)BaseChannel
~BaseChannel() (defined in BaseChannel)BaseChannelinlinevirtual
+ + + + diff --git a/struct_base_channel.html b/struct_base_channel.html new file mode 100644 index 0000000..f0d927b --- /dev/null +++ b/struct_base_channel.html @@ -0,0 +1,180 @@ + + + + + + +pva2pva: BaseChannel Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ +
+
+ +
+
BaseChannel Struct Reference
+
+
+
+Inheritance diagram for BaseChannel:
+
+
Inheritance graph
+ + +
[legend]
+
+Collaboration diagram for BaseChannel:
+
+
Collaboration graph
+
[legend]
+ + + + +

+Public Types

+typedef epicsGuard< epicsMutex > guard_t
 
+ + + + + + + + + + + + + + + + + + + +

+Public Member Functions

BaseChannel (const std::string &name, const std::tr1::weak_ptr< epics::pvAccess::ChannelProvider > &prov, const epics::pvAccess::ChannelRequester::shared_pointer &req, const epics::pvData::StructureConstPtr &dtype)
 
+virtual std::string getRequesterName () OVERRIDE
 
+virtual void destroy () OVERRIDE FINAL
 
+virtual std::tr1::shared_ptr
+< epics::pvAccess::ChannelProvider > 
getProvider () OVERRIDE FINAL
 
+virtual std::string getRemoteAddress () OVERRIDE
 
+virtual std::string getChannelName () OVERRIDE FINAL
 
+virtual std::tr1::shared_ptr
+< epics::pvAccess::ChannelRequester > 
getChannelRequester () OVERRIDE FINAL
 
+virtual void getField (epics::pvAccess::GetFieldRequester::shared_pointer const &requester, std::string const &subField) OVERRIDE
 
+virtual void printInfo (std::ostream &out) OVERRIDE
 
+ + + + + + + + + + + +

+Public Attributes

+epicsMutex lock
 
+const std::string pvname
 
+const
+epics::pvAccess::ChannelProvider::weak_pointer 
provider
 
+const requester_type::weak_pointer requester
 
+const
+epics::pvData::StructureConstPtr 
fielddesc
 
+

Detailed Description

+
+

Definition at line 19 of file pvahelper.h.

+

The documentation for this struct was generated from the following file: +
+ + + + diff --git a/struct_base_channel__coll__graph.map b/struct_base_channel__coll__graph.map new file mode 100644 index 0000000..0a54029 --- /dev/null +++ b/struct_base_channel__coll__graph.map @@ -0,0 +1,2 @@ + + diff --git a/struct_base_channel__coll__graph.md5 b/struct_base_channel__coll__graph.md5 new file mode 100644 index 0000000..21866c0 --- /dev/null +++ b/struct_base_channel__coll__graph.md5 @@ -0,0 +1 @@ +ebcad8780f5b5a97bcf99f46503f36f3 \ No newline at end of file diff --git a/struct_base_channel__coll__graph.png b/struct_base_channel__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..f9629261c56d9db727e612e1c73635ea6b153279 GIT binary patch literal 3585 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 M`1(yl9K + + + + diff --git a/struct_base_channel__inherit__graph.md5 b/struct_base_channel__inherit__graph.md5 new file mode 100644 index 0000000..66a07e8 --- /dev/null +++ b/struct_base_channel__inherit__graph.md5 @@ -0,0 +1 @@ +c6748908d104a7637f9fccb67293c091 \ No newline at end of file diff --git a/struct_base_channel__inherit__graph.png b/struct_base_channel__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..766fc4ab8d1af066f2a8587f9062a68686b04ccd GIT binary patch literal 9916 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 literal 0 HcmV?d00001 diff --git a/struct_base_channel_provider_factory-members.html b/struct_base_channel_provider_factory-members.html new file mode 100644 index 0000000..7d78980 --- /dev/null +++ b/struct_base_channel_provider_factory-members.html @@ -0,0 +1,110 @@ + + + + + + +pva2pva: Member List + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ +
+
+
+
BaseChannelProviderFactory< CP > Member List
+
+
+ +

This is the complete list of members for BaseChannelProviderFactory< CP >, including all inherited members.

+ + + + + + + + + + +
BaseChannelProviderFactory(const char *name) (defined in BaseChannelProviderFactory< CP >)BaseChannelProviderFactory< CP >inline
getFactoryName() (defined in BaseChannelProviderFactory< CP >)BaseChannelProviderFactory< CP >inlinevirtual
last_shared (defined in BaseChannelProviderFactory< CP >)BaseChannelProviderFactory< CP >
lock (defined in BaseChannelProviderFactory< CP >)BaseChannelProviderFactory< CP >
name (defined in BaseChannelProviderFactory< CP >)BaseChannelProviderFactory< CP >
newInstance(const std::tr1::shared_ptr< epics::pvAccess::Configuration > &) (defined in BaseChannelProviderFactory< CP >)BaseChannelProviderFactory< CP >inlinevirtual
provider_type typedef (defined in BaseChannelProviderFactory< CP >)BaseChannelProviderFactory< CP >
sharedInstance() (defined in BaseChannelProviderFactory< CP >)BaseChannelProviderFactory< CP >inlinevirtual
~BaseChannelProviderFactory() (defined in BaseChannelProviderFactory< CP >)BaseChannelProviderFactory< CP >inlinevirtual
+ + + + diff --git a/struct_base_channel_provider_factory.html b/struct_base_channel_provider_factory.html new file mode 100644 index 0000000..9b301d3 --- /dev/null +++ b/struct_base_channel_provider_factory.html @@ -0,0 +1,158 @@ + + + + + + +pva2pva: BaseChannelProviderFactory< CP > Struct Template Reference + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ +
+
+ +
+
BaseChannelProviderFactory< CP > Struct Template Reference
+
+
+
+Inheritance diagram for BaseChannelProviderFactory< CP >:
+
+
Inheritance graph
+
[legend]
+
+Collaboration diagram for BaseChannelProviderFactory< CP >:
+
+
Collaboration graph
+
[legend]
+ + + + +

+Public Types

+typedef CP provider_type
 
+ + + + + + + + + +

+Public Member Functions

BaseChannelProviderFactory (const char *name)
 
+virtual std::string getFactoryName ()
 
+virtual
+epics::pvAccess::ChannelProvider::shared_pointer 
sharedInstance ()
 
+virtual
+epics::pvAccess::ChannelProvider::shared_pointer 
newInstance (const std::tr1::shared_ptr< epics::pvAccess::Configuration > &)
 
+ + + + + + + +

+Public Attributes

+std::string name
 
+epicsMutex lock
 
+std::tr1::weak_ptr< CP > last_shared
 
+

Detailed Description

+

template<class CP>
+struct BaseChannelProviderFactory< CP >

+ + +

Definition at line 351 of file pvahelper.h.

+

The documentation for this struct was generated from the following file: +
+ + + + diff --git a/struct_base_channel_provider_factory__coll__graph.map b/struct_base_channel_provider_factory__coll__graph.map new file mode 100644 index 0000000..eb95b42 --- /dev/null +++ b/struct_base_channel_provider_factory__coll__graph.map @@ -0,0 +1,2 @@ + + diff --git a/struct_base_channel_provider_factory__coll__graph.md5 b/struct_base_channel_provider_factory__coll__graph.md5 new file mode 100644 index 0000000..5179ac1 --- /dev/null +++ b/struct_base_channel_provider_factory__coll__graph.md5 @@ -0,0 +1 @@ +6df3c9c141dc31d4b391983b367c2049 \ No newline at end of file diff --git a/struct_base_channel_provider_factory__coll__graph.png b/struct_base_channel_provider_factory__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..c1b5f1e30db2c7731a1da77f3480501ec2164592 GIT binary patch literal 6133 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 + diff --git a/struct_base_channel_provider_factory__inherit__graph.md5 b/struct_base_channel_provider_factory__inherit__graph.md5 new file mode 100644 index 0000000..5179ac1 --- /dev/null +++ b/struct_base_channel_provider_factory__inherit__graph.md5 @@ -0,0 +1 @@ +6df3c9c141dc31d4b391983b367c2049 \ No newline at end of file diff --git a/struct_base_channel_provider_factory__inherit__graph.png b/struct_base_channel_provider_factory__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..c1b5f1e30db2c7731a1da77f3480501ec2164592 GIT binary patch literal 6133 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 + + + + + +pva2pva: Member List + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ +
+
+
+
BaseMonitor Member List
+
+
+ +

This is the complete list of members for BaseMonitor, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + +
BaseMonitor(epicsMutex &lock, const requester_t::weak_pointer &requester, const epics::pvData::PVStructure::shared_pointer &pvReq) (defined in BaseMonitor)BaseMonitorinline
connect(guard_t &guard, const epics::pvData::PVStructurePtr &value)BaseMonitorinline
destroy() (defined in BaseMonitor)BaseMonitorinlinevirtual
getStats(Stats &s) const (defined in BaseMonitor)BaseMonitorinlinevirtual
getValue() (defined in BaseMonitor)BaseMonitorinline
guard_t typedef (defined in BaseMonitor)BaseMonitor
lock (defined in BaseMonitor)BaseMonitor
onStart() (defined in BaseMonitor)BaseMonitorinlinevirtual
onStop() (defined in BaseMonitor)BaseMonitorinlinevirtual
POINTER_DEFINITIONS(BaseMonitor) (defined in BaseMonitor)BaseMonitor
post(guard_t &guard, const epics::pvData::BitSet &updated, no_overflow)BaseMonitorinline
post(guard_t &guard)BaseMonitorinline
post(guard_t &guard, const epics::pvData::BitSet &updated, const epics::pvData::BitSet &overflowed)BaseMonitorinline
post(guard_t &guard, const epics::pvData::BitSet &updated)BaseMonitorinline
requester_t typedef (defined in BaseMonitor)BaseMonitor
requestUpdate()BaseMonitorinlinevirtual
shared_from_this() (defined in BaseMonitor)BaseMonitorinline
unguard_t typedef (defined in BaseMonitor)BaseMonitor
weakself (defined in BaseMonitor)BaseMonitor
~BaseMonitor() (defined in BaseMonitor)BaseMonitorinlinevirtual
+ + + + diff --git a/struct_base_monitor.html b/struct_base_monitor.html new file mode 100644 index 0000000..1df90cf --- /dev/null +++ b/struct_base_monitor.html @@ -0,0 +1,293 @@ + + + + + + +pva2pva: BaseMonitor Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ +
+
+ +
+
BaseMonitor Struct Reference
+
+
+ +

#include <pvahelper.h>

+
+Inheritance diagram for BaseMonitor:
+
+
Inheritance graph
+ + +
[legend]
+
+Collaboration diagram for BaseMonitor:
+
+
Collaboration graph
+
[legend]
+ + + + +

+Classes

struct  no_overflow
 
+ + + + + + + +

+Public Types

+typedef
+epics::pvAccess::MonitorRequester 
requester_t
 
+typedef epicsGuard< epicsMutex > guard_t
 
+typedef epicsGuardRelease
+< epicsMutex > 
unguard_t
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

POINTER_DEFINITIONS (BaseMonitor)
 
+shared_pointer shared_from_this ()
 
BaseMonitor (epicsMutex &lock, const requester_t::weak_pointer &requester, const epics::pvData::PVStructure::shared_pointer &pvReq)
 
+const
+epics::pvData::PVStructurePtr & 
getValue ()
 
void connect (guard_t &guard, const epics::pvData::PVStructurePtr &value)
 
+bool post (guard_t &guard, const epics::pvData::BitSet &updated, no_overflow)
 post update if queue not full, if full return false w/o overflow
 
+bool post (guard_t &guard)
 post update of pending changes. eg. call from requestUpdate()
 
+bool post (guard_t &guard, const epics::pvData::BitSet &updated, const epics::pvData::BitSet &overflowed)
 post update with changed and overflowed masks (eg. when updates were lost in some upstream queue)
 
+bool post (guard_t &guard, const epics::pvData::BitSet &updated)
 post update with changed
 
+virtual void onStart ()
 
+virtual void onStop ()
 
virtual void requestUpdate ()
 
+virtual void destroy ()
 
+virtual void getStats (Stats &s) const
 
+ + + + + +

+Public Attributes

+weak_pointer weakself
 
+epicsMutex & lock
 
+

Detailed Description

+

Helper which implements a Monitor queue. connect()s to a complete copy of a PVStructure. When this struct has changed, post(BitSet) should be called.

+

Derived class may use onStart(), onStop(), and requestUpdate() to react to subscriber events.

+ +

Definition at line 69 of file pvahelper.h.

+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void BaseMonitor::connect (guard_t & guard,
const epics::pvData::PVStructurePtr & value 
)
+
+inline
+
+

Must call before first post(). Sets .complete and calls monitorConnect()

+
Note
that value will never by accessed except by post() and requestUpdate()
+ +

Definition at line 110 of file pvahelper.h.

+
111  {
+
112  guard.assertIdenticalMutex(lock);
+
113  epics::pvData::StructureConstPtr dtype(value->getStructure());
+
114  epics::pvData::PVDataCreatePtr create(epics::pvData::getPVDataCreate());
+
115  BaseMonitor::shared_pointer self(shared_from_this());
+
116  requester_t::shared_pointer req(requester.lock());
+
117 
+
118  assert(!complete); // can't call twice
+
119 
+
120  complete = value;
+
121  empty.resize(nbuffers);
+
122  for(size_t i=0; i<empty.size(); i++) {
+
123  empty[i].reset(new epics::pvAccess::MonitorElement(create->createPVStructure(dtype)));
+
124  }
+
125 
+
126  if(req) {
+
127  unguard_t U(guard);
+
128  epics::pvData::Status sts;
+
129  req->monitorConnect(sts, self, dtype);
+
130  }
+
131  }
+
+
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual void BaseMonitor::requestUpdate ()
+
+inlinevirtual
+
+

called when within release() when the opportunity exists to end the overflow condition May do nothing, or lock and call post()

+ +

Reimplemented in PDBGroupMonitor, and PDBSingleMonitor.

+ +

Definition at line 271 of file pvahelper.h.

+
271 {guard_t G(lock); post(G);}
+
bool post(guard_t &guard, const epics::pvData::BitSet &updated, no_overflow)
post update if queue not full, if full return false w/o overflow
Definition: pvahelper.h:136
+
+
+
+
The documentation for this struct was generated from the following file: +
+ + + + diff --git a/struct_base_monitor_1_1no__overflow.html b/struct_base_monitor_1_1no__overflow.html new file mode 100644 index 0000000..fc5748c --- /dev/null +++ b/struct_base_monitor_1_1no__overflow.html @@ -0,0 +1,108 @@ + + + + + + +pva2pva: BaseMonitor::no_overflow Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
BaseMonitor::no_overflow Struct Reference
+
+
+

Detailed Description

+
+

Definition at line 133 of file pvahelper.h.

+

The documentation for this struct was generated from the following file: +
+ + + + diff --git a/struct_base_monitor__coll__graph.map b/struct_base_monitor__coll__graph.map new file mode 100644 index 0000000..6f78e05 --- /dev/null +++ b/struct_base_monitor__coll__graph.map @@ -0,0 +1,2 @@ + + diff --git a/struct_base_monitor__coll__graph.md5 b/struct_base_monitor__coll__graph.md5 new file mode 100644 index 0000000..757450a --- /dev/null +++ b/struct_base_monitor__coll__graph.md5 @@ -0,0 +1 @@ +9bec16926cf082cebd95eaf02e9651b7 \ No newline at end of file diff --git a/struct_base_monitor__coll__graph.png b/struct_base_monitor__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..fca0b62afbcbd2fc662fbcf7b4dbc7caad21635b GIT binary patch literal 3691 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 XY4%JMKhYQH9zoai&Gg + + + diff --git a/struct_base_monitor__inherit__graph.md5 b/struct_base_monitor__inherit__graph.md5 new file mode 100644 index 0000000..89fb8c7 --- /dev/null +++ b/struct_base_monitor__inherit__graph.md5 @@ -0,0 +1 @@ +a4965d29b916fab80b5fae9a6e523c63 \ No newline at end of file diff --git a/struct_base_monitor__inherit__graph.png b/struct_base_monitor__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..5493dd092ab8608b5ca11d42d18383e3df761261 GIT binary patch literal 8182 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 literal 0 HcmV?d00001 diff --git a/struct_channel_cache-members.html b/struct_channel_cache-members.html new file mode 100644 index 0000000..54974b8 --- /dev/null +++ b/struct_channel_cache-members.html @@ -0,0 +1,113 @@ + + + + + + +pva2pva: Member List + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ +
+
+
+
ChannelCache Member List
+
+
+ +

This is the complete list of members for ChannelCache, including all inherited members.

+ + + + + + + + + + + + + +
cacheLock (defined in ChannelCache)ChannelCache
ChannelCache(const epics::pvAccess::ChannelProvider::shared_pointer &prov) (defined in ChannelCache)ChannelCache
cleaner (defined in ChannelCache)ChannelCache
cleanerDust (defined in ChannelCache)ChannelCache
cleanerRuns (defined in ChannelCache)ChannelCache
cleanTimer (defined in ChannelCache)ChannelCache
entries (defined in ChannelCache)ChannelCache
entries_t typedef (defined in ChannelCache)ChannelCache
lookup(const std::string &name) (defined in ChannelCache)ChannelCache
provider (defined in ChannelCache)ChannelCache
timerQueue (defined in ChannelCache)ChannelCache
~ChannelCache() (defined in ChannelCache)ChannelCache
+ + + + diff --git a/struct_channel_cache.html b/struct_channel_cache.html new file mode 100644 index 0000000..071bf76 --- /dev/null +++ b/struct_channel_cache.html @@ -0,0 +1,170 @@ + + + + + + +pva2pva: ChannelCache Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ +
+
+ +
+
ChannelCache Struct Reference
+
+
+ +

#include <chancache.h>

+
+Collaboration diagram for ChannelCache:
+
+
Collaboration graph
+ + +
[legend]
+ + + + +

+Classes

struct  cacheClean
 
+ + + +

+Public Types

+typedef std::map< std::string,
+ChannelCacheEntry::shared_pointer > 
entries_t
 
+ + + + + +

+Public Member Functions

ChannelCache (const epics::pvAccess::ChannelProvider::shared_pointer &prov)
 
+ChannelCacheEntry::shared_pointer lookup (const std::string &name)
 
+ + + + + + + + + + + + + + + + + +

+Public Attributes

+epicsMutex cacheLock
 
+entries_t entries
 
+epics::pvAccess::ChannelProvider::shared_pointer provider
 
+epicsTimerQueueActive * timerQueue
 
+epicsTimer * cleanTimer
 
+cacheCleancleaner
 
+size_t cleanerRuns
 
+size_t cleanerDust
 
+

Detailed Description

+

Holds the set of channels the GW is searching for, or has found.

+ +

Definition at line 151 of file chancache.h.

+

The documentation for this struct was generated from the following files: +
+ + + + diff --git a/struct_channel_cache_1_1cache_clean-members.html b/struct_channel_cache_1_1cache_clean-members.html new file mode 100644 index 0000000..3debdbb --- /dev/null +++ b/struct_channel_cache_1_1cache_clean-members.html @@ -0,0 +1,108 @@ + + + + + + +pva2pva: Member List + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
ChannelCache::cacheClean Member List
+
+
+ +

This is the complete list of members for ChannelCache::cacheClean, including all inherited members.

+ + + + +
cache (defined in ChannelCache::cacheClean)ChannelCache::cacheClean
cacheClean(ChannelCache *c) (defined in ChannelCache::cacheClean)ChannelCache::cacheCleaninline
expire(const epicsTime &currentTime) (defined in ChannelCache::cacheClean)ChannelCache::cacheCleaninline
+ + + + diff --git a/struct_channel_cache_1_1cache_clean.html b/struct_channel_cache_1_1cache_clean.html new file mode 100644 index 0000000..31bbd23 --- /dev/null +++ b/struct_channel_cache_1_1cache_clean.html @@ -0,0 +1,140 @@ + + + + + + +pva2pva: ChannelCache::cacheClean Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
ChannelCache::cacheClean Struct Reference
+
+
+
+Inheritance diagram for ChannelCache::cacheClean:
+
+
Inheritance graph
+
[legend]
+
+Collaboration diagram for ChannelCache::cacheClean:
+
+
Collaboration graph
+ + +
[legend]
+ + + + + + +

+Public Member Functions

cacheClean (ChannelCache *c)
 
+epicsTimerNotify::expireStatus expire (const epicsTime &currentTime)
 
+ + + +

+Public Attributes

+ChannelCachecache
 
+

Detailed Description

+
+

Definition at line 102 of file chancache.cpp.

+

The documentation for this struct was generated from the following file: +
+ + + + diff --git a/struct_channel_cache_1_1cache_clean__coll__graph.map b/struct_channel_cache_1_1cache_clean__coll__graph.map new file mode 100644 index 0000000..59dc1b0 --- /dev/null +++ b/struct_channel_cache_1_1cache_clean__coll__graph.map @@ -0,0 +1,3 @@ + + + diff --git a/struct_channel_cache_1_1cache_clean__coll__graph.md5 b/struct_channel_cache_1_1cache_clean__coll__graph.md5 new file mode 100644 index 0000000..c12dd80 --- /dev/null +++ b/struct_channel_cache_1_1cache_clean__coll__graph.md5 @@ -0,0 +1 @@ +beaf1b066deb6032961387c292579351 \ No newline at end of file diff --git a/struct_channel_cache_1_1cache_clean__coll__graph.png b/struct_channel_cache_1_1cache_clean__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..d9b2bc0d144ecb17418c0d9cb3d3bc81b110a7c8 GIT binary patch literal 6492 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 N$_g;~QmDy?{{V|!gwy~4 literal 0 HcmV?d00001 diff --git a/struct_channel_cache_1_1cache_clean__inherit__graph.map b/struct_channel_cache_1_1cache_clean__inherit__graph.map new file mode 100644 index 0000000..5fe1835 --- /dev/null +++ b/struct_channel_cache_1_1cache_clean__inherit__graph.map @@ -0,0 +1,2 @@ + + diff --git a/struct_channel_cache_1_1cache_clean__inherit__graph.md5 b/struct_channel_cache_1_1cache_clean__inherit__graph.md5 new file mode 100644 index 0000000..bb5aaaa --- /dev/null +++ b/struct_channel_cache_1_1cache_clean__inherit__graph.md5 @@ -0,0 +1 @@ +a4d6464eb72604b2d3a5908f8f2e5694 \ No newline at end of file diff --git a/struct_channel_cache_1_1cache_clean__inherit__graph.png b/struct_channel_cache_1_1cache_clean__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..c39794abe236a56df53ae5ca6784374990e7706c GIT binary patch literal 3394 zcmc&%c{J307atNe)|5vo`-C(`i>)k)v5YiiNnz|`f0`-#k|7@Q*kWuGhKb388J=V; zMJhy%Tau!m*e2xWcQE(qb)9#X$dr--#cV-( zO0F?EvE-LBl7bHZS#^HO#9u~vzfGZCSJpbIx?k^wP4%=*%`>^1@t3%hLA~FiRyG+y zeJd@j`A3js&`jJamIj*H@S}oL$aQWh6HL z5q-W_3oRg$gwM+Ih|nIqTM>-Nf(#B0?rd*kD?H)|OJ%XKvC_JsI`;GAJQo|)91AkL zQx*q5bY{rYcAz(uWTp3bZjEcACqNpaY|$f7n!v zrgoW!g>ip`oRWw9k|Gdb z^XiRT$(L=svK7pw`Iem6=g*%PIgwjNZW<>91qF?bjpH9YaEV%`_4nVXEUIbU-O4nR zA?Qbi!r|?!bDhiZy5=pcPGPB82JCh%L`B7SZ+E9NLsnE&l*{GfzO`^!bltEOXJ6mN zjugowMompk3Yot2T(!^H%AuxaX0EuM5QAd%W8gJ5JNPmxFc4~_qN6ivlZ^I8B9Y$S zO7^JI{*A3ImzGEgI_aHIL4Al9a%*EQ1CPgln`|0nFm^{hGg@}mCq5p2oS#2BG&D3Y zATA|!+s+PNOe>CNBP=Z~qoRJMozx~qv)?y2>t#VSPYCDHbIc(?p1U#?U0hsFq$P^D zhrDyTqmZB#IBF;ckBGQrv^byVs&wc{UEMKx4L!X;Gsa`hfS8S0fi%;2v89!jm8B*2 z>T0G1`Q~ytnM`$VVy`bxEH5vMUfKQ=Z3eyO=&hxxxf-q)|Hd%O%f!UQ(lT`{@YOex zHx7AES2-E3u=N7_rJGoP(tA{sM@kJFGh1j*vcenqPVc|$B!Rn z0*&?c!?lWK!pc%+AIv6M4$w$&~T2`d=po$k(3N)^@el+*Qr_;B`UGvF_n`YHDg7>!F&SzWzv! ztE-cfuAW}>I%}-1PD4QV?S(rF5QAc?qCp5E9oSb_XTAB+?{~4Kr6us;!z6lALc$LY z=LR!iqkbjSNP)G>Pk=onc?ff#7>PRKtjL5xH`u+R&M;7Ef80vEL#<`q} zxZP+gt3D!8#(xc{j-Vtg7~*STVSz%S?CtHHoeQm1+6RuX8jJA5HLiQTy5D|qxeW~s zH7+e%f02ysb^#v=aK}7756CKkNJQrKb#;x>0wgsFn2CC7Ypbk$`z%)c=+OXw|3eS* zfuygmuX8v>HzQILl9D7PC1rK6vEzUddHs6N`}a(s%8QHP+^I0;;Y3HbF^^65ylLrb zyr@A}SJ&%-6u-EhYZZ!LArIsj;d5!PUmMC~G@$9ZtE+eYwN%yBMFj=t);2LMoZOpL zWC!ufMKE=BbqJ(=dK%Z3D6FWcXs3ID5ZM33gtL{ljG+r$}K!RJf7Nq)c%w*oMT}!EwXxg_&bEkw`7>49D)3t_a#&OxCV%D?6 zI`5S+_dbe10Y!=iXeg)}uXgd*s4Jkn;Hwn*)>#qrIS#{=+xViQ`?GHkMmiW7y`7nnGl=LG5)n~? zKy;pT-W|P>el3;?bCQ(!t5+ zbYyD-Tr~%VdZBUUO7XamprCEl&;F)y=soNO4)$>-zC`O?EJd1 z)0<-My;<4k%*fT7+JOJiYZ>fY|X0#Nnd?#G=Ni|hOD{9OK_kZO8V+0^p z`kd@HZoa<0C1K}@w`?y0G%YHlXRcpv*t0CM0OifLV$z<+9 z>rMmd#mD{>iKG7GTrHmf?re_P*#bt8j{xEi4hFGCpN)@?Qz%fUd13zee%~K#_T$3B zvSF#CM~@;+oL@yp+`dh)ATKeQXH-=FsHq9t&uDvlJDbgB{9UrL#B(g>1AUjkCK4t4 z^~8e&lHB~K1Y`wub@Y`F^6{NAh~8N1yP^(-e)OjSQ*0D>B`qzDX3yyB!vJ>*xYMhv zs}YJWd{Dve(u^ z_Gd>5KrX5pM!oPf=_Az>4 j)T=rESe(#*fsE)e3cdGCg4kccPZ0=Vf`nHaxjpzBbOeaJ literal 0 HcmV?d00001 diff --git a/struct_channel_cache__coll__graph.map b/struct_channel_cache__coll__graph.map new file mode 100644 index 0000000..fecacde --- /dev/null +++ b/struct_channel_cache__coll__graph.map @@ -0,0 +1,3 @@ + + + diff --git a/struct_channel_cache__coll__graph.md5 b/struct_channel_cache__coll__graph.md5 new file mode 100644 index 0000000..0150234 --- /dev/null +++ b/struct_channel_cache__coll__graph.md5 @@ -0,0 +1 @@ +dd0609ddf8e924817b5a1f06ec72d95a \ No newline at end of file diff --git a/struct_channel_cache__coll__graph.png b/struct_channel_cache__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..228ca561fd2d2c77372769de21e0944f1f991485 GIT binary patch literal 7481 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 literal 0 HcmV?d00001 diff --git a/struct_channel_cache_entry-members.html b/struct_channel_cache_entry-members.html new file mode 100644 index 0000000..cfe6e6c --- /dev/null +++ b/struct_channel_cache_entry-members.html @@ -0,0 +1,116 @@ + + + + + + +pva2pva: Member List + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ +
+
+
+
ChannelCacheEntry Member List
+
+
+ +

This is the complete list of members for ChannelCacheEntry, including all inherited members.

+ + + + + + + + + + + + + + + + +
cache (defined in ChannelCacheEntry)ChannelCacheEntry
channel (defined in ChannelCacheEntry)ChannelCacheEntry
ChannelCacheEntry(ChannelCache *, const std::string &n) (defined in ChannelCacheEntry)ChannelCacheEntry
channelName (defined in ChannelCacheEntry)ChannelCacheEntry
dropPoke (defined in ChannelCacheEntry)ChannelCacheEntry
interested (defined in ChannelCacheEntry)ChannelCacheEntry
interested_t typedef (defined in ChannelCacheEntry)ChannelCacheEntry
mon_entries (defined in ChannelCacheEntry)ChannelCacheEntry
mon_entries_t typedef (defined in ChannelCacheEntry)ChannelCacheEntry
mutex() const (defined in ChannelCacheEntry)ChannelCacheEntryinline
num_instances (defined in ChannelCacheEntry)ChannelCacheEntrystatic
POINTER_DEFINITIONS(ChannelCacheEntry) (defined in ChannelCacheEntry)ChannelCacheEntry
pvrequest_t typedef (defined in ChannelCacheEntry)ChannelCacheEntry
requester (defined in ChannelCacheEntry)ChannelCacheEntry
~ChannelCacheEntry() (defined in ChannelCacheEntry)ChannelCacheEntryvirtual
+ + + + diff --git a/struct_channel_cache_entry.html b/struct_channel_cache_entry.html new file mode 100644 index 0000000..121b38d --- /dev/null +++ b/struct_channel_cache_entry.html @@ -0,0 +1,182 @@ + + + + + + +pva2pva: ChannelCacheEntry Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ +
+ +
+
+Collaboration diagram for ChannelCacheEntry:
+
+
Collaboration graph
+ + +
[legend]
+ + + + +

+Classes

struct  CRequester
 
+ + + + + + + +

+Public Types

+typedef weak_set< GWChannelinterested_t
 
+typedef
+MonitorCacheEntry::pvrequest_t 
pvrequest_t
 
+typedef weak_value_map
+< pvrequest_t,
+MonitorCacheEntry
mon_entries_t
 
+ + + + + + + +

+Public Member Functions

POINTER_DEFINITIONS (ChannelCacheEntry)
 
+epicsMutex & mutex () const
 
ChannelCacheEntry (ChannelCache *, const std::string &n)
 
+ + + + + + + + + + + + + + + +

+Public Attributes

+const std::string channelName
 
+ChannelCache *const cache
 
+epics::pvAccess::Channel::shared_pointer channel
 
+epics::pvAccess::ChannelRequester::shared_pointer requester
 
+bool dropPoke
 
+interested_t interested
 
+mon_entries_t mon_entries
 
+ + + +

+Static Public Attributes

+static size_t num_instances
 
+

Detailed Description

+
+

Definition at line 103 of file chancache.h.

+

The documentation for this struct was generated from the following files: +
+ + + + diff --git a/struct_channel_cache_entry_1_1_c_requester-members.html b/struct_channel_cache_entry_1_1_c_requester-members.html new file mode 100644 index 0000000..5b979a3 --- /dev/null +++ b/struct_channel_cache_entry_1_1_c_requester-members.html @@ -0,0 +1,112 @@ + + + + + + +pva2pva: Member List + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
ChannelCacheEntry::CRequester Member List
+
+
+ +

This is the complete list of members for ChannelCacheEntry::CRequester, including all inherited members.

+ + + + + + + + +
chan (defined in ChannelCacheEntry::CRequester)ChannelCacheEntry::CRequester
channelCreated(const epics::pvData::Status &status, epics::pvAccess::Channel::shared_pointer const &channel) (defined in ChannelCacheEntry::CRequester)ChannelCacheEntry::CRequestervirtual
channelStateChange(epics::pvAccess::Channel::shared_pointer const &channel, epics::pvAccess::Channel::ConnectionState connectionState) (defined in ChannelCacheEntry::CRequester)ChannelCacheEntry::CRequestervirtual
CRequester(const ChannelCacheEntry::shared_pointer &p) (defined in ChannelCacheEntry::CRequester)ChannelCacheEntry::CRequester
getRequesterName() (defined in ChannelCacheEntry::CRequester)ChannelCacheEntry::CRequestervirtual
num_instances (defined in ChannelCacheEntry::CRequester)ChannelCacheEntry::CRequesterstatic
~CRequester() (defined in ChannelCacheEntry::CRequester)ChannelCacheEntry::CRequestervirtual
+ + + + diff --git a/struct_channel_cache_entry_1_1_c_requester.html b/struct_channel_cache_entry_1_1_c_requester.html new file mode 100644 index 0000000..7228f8b --- /dev/null +++ b/struct_channel_cache_entry_1_1_c_requester.html @@ -0,0 +1,156 @@ + + + + + + +pva2pva: ChannelCacheEntry::CRequester Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
ChannelCacheEntry::CRequester Struct Reference
+
+
+
+Inheritance diagram for ChannelCacheEntry::CRequester:
+
+
Inheritance graph
+ + +
[legend]
+
+Collaboration diagram for ChannelCacheEntry::CRequester:
+
+
Collaboration graph
+ + +
[legend]
+ + + + + + + + + + +

+Public Member Functions

CRequester (const ChannelCacheEntry::shared_pointer &p)
 
+virtual std::string getRequesterName ()
 
+virtual void channelCreated (const epics::pvData::Status &status, epics::pvAccess::Channel::shared_pointer const &channel)
 
+virtual void channelStateChange (epics::pvAccess::Channel::shared_pointer const &channel, epics::pvAccess::Channel::ConnectionState connectionState)
 
+ + + +

+Public Attributes

+ChannelCacheEntry::weak_pointer chan
 
+ + + +

+Static Public Attributes

+static size_t num_instances
 
+

Detailed Description

+
+

Definition at line 132 of file chancache.h.

+

The documentation for this struct was generated from the following files: +
+ + + + diff --git a/struct_channel_cache_entry_1_1_c_requester__coll__graph.map b/struct_channel_cache_entry_1_1_c_requester__coll__graph.map new file mode 100644 index 0000000..4449dc1 --- /dev/null +++ b/struct_channel_cache_entry_1_1_c_requester__coll__graph.map @@ -0,0 +1,2 @@ + + diff --git a/struct_channel_cache_entry_1_1_c_requester__coll__graph.md5 b/struct_channel_cache_entry_1_1_c_requester__coll__graph.md5 new file mode 100644 index 0000000..d785009 --- /dev/null +++ b/struct_channel_cache_entry_1_1_c_requester__coll__graph.md5 @@ -0,0 +1 @@ +28296036f805238230f051c4baad01f5 \ No newline at end of file diff --git a/struct_channel_cache_entry_1_1_c_requester__coll__graph.png b/struct_channel_cache_entry_1_1_c_requester__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..3fe5f33d3a4e3c370c766475db23c5ca087132fd GIT binary patch literal 5591 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 literal 0 HcmV?d00001 diff --git a/struct_channel_cache_entry_1_1_c_requester__inherit__graph.map b/struct_channel_cache_entry_1_1_c_requester__inherit__graph.map new file mode 100644 index 0000000..4449dc1 --- /dev/null +++ b/struct_channel_cache_entry_1_1_c_requester__inherit__graph.map @@ -0,0 +1,2 @@ + + diff --git a/struct_channel_cache_entry_1_1_c_requester__inherit__graph.md5 b/struct_channel_cache_entry_1_1_c_requester__inherit__graph.md5 new file mode 100644 index 0000000..d785009 --- /dev/null +++ b/struct_channel_cache_entry_1_1_c_requester__inherit__graph.md5 @@ -0,0 +1 @@ +28296036f805238230f051c4baad01f5 \ No newline at end of file diff --git a/struct_channel_cache_entry_1_1_c_requester__inherit__graph.png b/struct_channel_cache_entry_1_1_c_requester__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..3fe5f33d3a4e3c370c766475db23c5ca087132fd GIT binary patch literal 5591 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 literal 0 HcmV?d00001 diff --git a/struct_channel_cache_entry__coll__graph.map b/struct_channel_cache_entry__coll__graph.map new file mode 100644 index 0000000..1d1d4fd --- /dev/null +++ b/struct_channel_cache_entry__coll__graph.map @@ -0,0 +1,6 @@ + + + + + + diff --git a/struct_channel_cache_entry__coll__graph.md5 b/struct_channel_cache_entry__coll__graph.md5 new file mode 100644 index 0000000..f471200 --- /dev/null +++ b/struct_channel_cache_entry__coll__graph.md5 @@ -0,0 +1 @@ +71ebd1a2c65ce8d94912bbd7f0ac52f8 \ No newline at end of file diff --git a/struct_channel_cache_entry__coll__graph.png b/struct_channel_cache_entry__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..fd33e26b2b6847eda5479ac0015850396721203d GIT binary patch literal 20691 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 + + + + + +pva2pva: Member List + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ +
+
+
+
DBCH Member List
+
+
+ +

This is the complete list of members for DBCH, including all inherited members.

+ + + + + + + + + + + +
chan (defined in DBCH)DBCH
DBCH() (defined in DBCH)DBCHinline
DBCH(dbChannel *ch) (defined in DBCH)DBCHexplicit
DBCH(const std::string &name) (defined in DBCH)DBCHexplicit
operator const dbChannel *() const (defined in DBCH)DBCHinline
operator dbChannel *() (defined in DBCH)DBCHinline
operator->() (defined in DBCH)DBCHinline
operator->() const (defined in DBCH)DBCHinline
swap(DBCH &) (defined in DBCH)DBCH
~DBCH() (defined in DBCH)DBCH
+ + + + diff --git a/struct_d_b_c_h.html b/struct_d_b_c_h.html new file mode 100644 index 0000000..5f6b43f --- /dev/null +++ b/struct_d_b_c_h.html @@ -0,0 +1,140 @@ + + + + + + +pva2pva: DBCH Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ +
+ +
+ + + + + + + + + + + + + + + + +

+Public Member Functions

DBCH (dbChannel *ch)
 
DBCH (const std::string &name)
 
+void swap (DBCH &)
 
operator dbChannel * ()
 
operator const dbChannel * () const
 
+dbChannel * operator-> ()
 
+const dbChannel * operator-> () const
 
+ + + +

+Public Attributes

+dbChannel * chan
 
+

Detailed Description

+
+

Definition at line 81 of file pvif.h.

+

The documentation for this struct was generated from the following files: +
+ + + + diff --git a/struct_d_b_event-members.html b/struct_d_b_event-members.html new file mode 100644 index 0000000..51e73b4 --- /dev/null +++ b/struct_d_b_event-members.html @@ -0,0 +1,112 @@ + + + + + + +pva2pva: Member List + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ +
+
+
+
DBEvent Member List
+
+
+ +

This is the complete list of members for DBEvent, including all inherited members.

+ + + + + + + + + + + + +
chan (defined in DBEvent)DBEvent
create(dbEventCtx ctx, dbChannel *ch, EVENTFUNC *fn, unsigned mask) (defined in DBEvent)DBEventinline
dbe_mask (defined in DBEvent)DBEvent
DBEvent() (defined in DBEvent)DBEventinline
DBEvent(void *s) (defined in DBEvent)DBEventinline
destroy() (defined in DBEvent)DBEventinline
index (defined in DBEvent)DBEvent
operator!() const (defined in DBEvent)DBEventinline
self (defined in DBEvent)DBEvent
subscript (defined in DBEvent)DBEvent
~DBEvent() (defined in DBEvent)DBEventinline
+ + + + diff --git a/struct_d_b_event.html b/struct_d_b_event.html new file mode 100644 index 0000000..6d5bad0 --- /dev/null +++ b/struct_d_b_event.html @@ -0,0 +1,142 @@ + + + + + + +pva2pva: DBEvent Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ +
+
+ +
+
DBEvent Struct Reference
+
+
+ + + + + + + + + + +

+Public Member Functions

DBEvent (void *s)
 
+void create (dbEventCtx ctx, dbChannel *ch, EVENTFUNC *fn, unsigned mask)
 
+void destroy ()
 
+bool operator! () const
 
+ + + + + + + + + + + +

+Public Attributes

+dbEventSubscription subscript
 
+unsigned dbe_mask
 
+void * self
 
+unsigned index
 
+dbChannel * chan
 
+

Detailed Description

+
+

Definition at line 223 of file pvif.h.

+

The documentation for this struct was generated from the following file: +
+ + + + diff --git a/struct_d_b_scan_locker-members.html b/struct_d_b_scan_locker-members.html new file mode 100644 index 0000000..7a6c0d0 --- /dev/null +++ b/struct_d_b_scan_locker-members.html @@ -0,0 +1,105 @@ + + + + + + +pva2pva: Member List + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ +
+
+
+
DBScanLocker Member List
+
+
+ +

This is the complete list of members for DBScanLocker, including all inherited members.

+ + + + + +
DBScanLocker(dbChannel *chan) (defined in DBScanLocker)DBScanLockerinline
DBScanLocker(dbCommon *prec) (defined in DBScanLocker)DBScanLockerinline
prec (defined in DBScanLocker)DBScanLocker
~DBScanLocker() (defined in DBScanLocker)DBScanLockerinline
+ + + + diff --git a/struct_d_b_scan_locker.html b/struct_d_b_scan_locker.html new file mode 100644 index 0000000..9fa6851 --- /dev/null +++ b/struct_d_b_scan_locker.html @@ -0,0 +1,124 @@ + + + + + + +pva2pva: DBScanLocker Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ +
+
+ +
+
DBScanLocker Struct Reference
+
+
+ + + + + + +

+Public Member Functions

DBScanLocker (dbChannel *chan)
 
DBScanLocker (dbCommon *prec)
 
+ + + +

+Public Attributes

+dbCommon * prec
 
+

Detailed Description

+
+

Definition at line 273 of file pvif.h.

+

The documentation for this struct was generated from the following file: +
+ + + + diff --git a/struct_field_name-members.html b/struct_field_name-members.html new file mode 100644 index 0000000..ec4d34f --- /dev/null +++ b/struct_field_name-members.html @@ -0,0 +1,112 @@ + + + + + + +pva2pva: Member List + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ +
+
+
+
FieldName Member List
+
+
+ +

This is the complete list of members for FieldName, including all inherited members.

+ + + + + + + + + + + + +
back() const (defined in FieldName)FieldNameinline
empty() const (defined in FieldName)FieldNameinline
FieldName() (defined in FieldName)FieldNameinline
FieldName(const std::string &) (defined in FieldName)FieldNameexplicit
lookup(const epics::pvData::PVStructurePtr &S, epics::pvData::PVField **ppenclose) const (defined in FieldName)FieldName
operator[](size_t i) const (defined in FieldName)FieldNameinline
parts (defined in FieldName)FieldName
parts_t typedef (defined in FieldName)FieldName
show() const (defined in FieldName)FieldName
size() const (defined in FieldName)FieldNameinline
swap(FieldName &o) (defined in FieldName)FieldNameinline
+ + + + diff --git a/struct_field_name.html b/struct_field_name.html new file mode 100644 index 0000000..d36c798 --- /dev/null +++ b/struct_field_name.html @@ -0,0 +1,156 @@ + + + + + + +pva2pva: FieldName Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ +
+
+ +
+
FieldName Struct Reference
+
+
+ + + + +

+Classes

struct  Component
 
+ + + +

+Public Types

+typedef std::vector< Componentparts_t
 
+ + + + + + + + + + + + + + + + + +

+Public Member Functions

FieldName (const std::string &)
 
+void swap (FieldName &o)
 
+bool empty () const
 
+size_t size () const
 
+const Componentoperator[] (size_t i) const
 
+const Componentback () const
 
+epics::pvData::PVFieldPtr lookup (const epics::pvData::PVStructurePtr &S, epics::pvData::PVField **ppenclose) const
 
+void show () const
 
+ + + +

+Public Attributes

+parts_t parts
 
+

Detailed Description

+
+

Definition at line 322 of file pvif.h.

+

The documentation for this struct was generated from the following files: +
+ + + + diff --git a/struct_field_name_1_1_component-members.html b/struct_field_name_1_1_component-members.html new file mode 100644 index 0000000..e0285ea --- /dev/null +++ b/struct_field_name_1_1_component-members.html @@ -0,0 +1,111 @@ + + + + + + +pva2pva: Member List + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
FieldName::Component Member List
+
+
+ +

This is the complete list of members for FieldName::Component, including all inherited members.

+ + + + + + + +
__pad0__ (defined in FieldName::Component)FieldName::Component
Component() (defined in FieldName::Component)FieldName::Componentinline
index (defined in FieldName::Component)FieldName::Component
index(index) (defined in FieldName::Component)FieldName::Componentinline
isArray() const (defined in FieldName::Component)FieldName::Componentinline
name (defined in FieldName::Component)FieldName::Component
+ + + + diff --git a/struct_field_name_1_1_component.html b/struct_field_name_1_1_component.html new file mode 100644 index 0000000..9ba2d90 --- /dev/null +++ b/struct_field_name_1_1_component.html @@ -0,0 +1,134 @@ + + + + + + +pva2pva: FieldName::Component Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
FieldName::Component Struct Reference
+
+
+ + + + + + +

+Public Member Functions

index (index)
 
+bool isArray () const
 
+ + + + + + + +

+Public Attributes

+std::string name
 
+epicsUInt32 index
 
__pad0__:name(name)
 
+

Detailed Description

+
+

Definition at line 324 of file pvif.h.

+

The documentation for this struct was generated from the following file: +
+ + + + diff --git a/struct_g_w_channel-members.html b/struct_g_w_channel-members.html new file mode 100644 index 0000000..94285f0 --- /dev/null +++ b/struct_g_w_channel-members.html @@ -0,0 +1,127 @@ + + + + + + +pva2pva: Member List + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ +
+
+
+
GWChannel Member List
+
+
+ +

This is the complete list of members for GWChannel, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
address (defined in GWChannel)GWChannel
createChannelArray(epics::pvAccess::ChannelArrayRequester::shared_pointer const &channelArrayRequester, epics::pvData::PVStructure::shared_pointer const &pvRequest) (defined in GWChannel)GWChannelvirtual
createChannelGet(epics::pvAccess::ChannelGetRequester::shared_pointer const &channelGetRequester, epics::pvData::PVStructure::shared_pointer const &pvRequest) (defined in GWChannel)GWChannelvirtual
createChannelProcess(epics::pvAccess::ChannelProcessRequester::shared_pointer const &channelProcessRequester, epics::pvData::PVStructure::shared_pointer const &pvRequest) (defined in GWChannel)GWChannelvirtual
createChannelPut(epics::pvAccess::ChannelPutRequester::shared_pointer const &channelPutRequester, epics::pvData::PVStructure::shared_pointer const &pvRequest) (defined in GWChannel)GWChannelvirtual
createChannelPutGet(epics::pvAccess::ChannelPutGetRequester::shared_pointer const &channelPutGetRequester, epics::pvData::PVStructure::shared_pointer const &pvRequest) (defined in GWChannel)GWChannelvirtual
createChannelRPC(epics::pvAccess::ChannelRPCRequester::shared_pointer const &channelRPCRequester, epics::pvData::PVStructure::shared_pointer const &pvRequest) (defined in GWChannel)GWChannelvirtual
createMonitor(epics::pvData::MonitorRequester::shared_pointer const &monitorRequester, epics::pvData::PVStructure::shared_pointer const &pvRequest) (defined in GWChannel)GWChannelvirtual
destroy() (defined in GWChannel)GWChannelvirtual
entry (defined in GWChannel)GWChannel
getAccessRights(epics::pvData::PVField::shared_pointer const &pvField) (defined in GWChannel)GWChannelvirtual
getChannelName() (defined in GWChannel)GWChannelvirtual
getChannelRequester() (defined in GWChannel)GWChannelvirtual
getConnectionState() (defined in GWChannel)GWChannelvirtual
getField(epics::pvAccess::GetFieldRequester::shared_pointer const &requester, std::string const &subField) (defined in GWChannel)GWChannelvirtual
getProvider() (defined in GWChannel)GWChannelvirtual
getRemoteAddress() (defined in GWChannel)GWChannelvirtual
getRequesterName() (defined in GWChannel)GWChannelvirtual
GWChannel(const ChannelCacheEntry::shared_pointer &e, const epics::pvAccess::ChannelProvider::weak_pointer &srvprov, const requester_type::weak_pointer &, const std::string &addr) (defined in GWChannel)GWChannel
num_instances (defined in GWChannel)GWChannelstatic
POINTER_DEFINITIONS(GWChannel) (defined in GWChannel)GWChannel
printInfo(std::ostream &out) (defined in GWChannel)GWChannelvirtual
requester (defined in GWChannel)GWChannel
server_provder (defined in GWChannel)GWChannel
weakref (defined in GWChannel)GWChannel
~GWChannel() (defined in GWChannel)GWChannelvirtual
+ + + + diff --git a/struct_g_w_channel.html b/struct_g_w_channel.html new file mode 100644 index 0000000..22fcd17 --- /dev/null +++ b/struct_g_w_channel.html @@ -0,0 +1,217 @@ + + + + + + +pva2pva: GWChannel Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ +
+ +
+
+Inheritance diagram for GWChannel:
+
+
Inheritance graph
+
[legend]
+
+Collaboration diagram for GWChannel:
+
+
Collaboration graph
+
[legend]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

POINTER_DEFINITIONS (GWChannel)
 
GWChannel (const ChannelCacheEntry::shared_pointer &e, const epics::pvAccess::ChannelProvider::weak_pointer &srvprov, const requester_type::weak_pointer &, const std::string &addr)
 
+virtual std::string getRequesterName ()
 
+virtual void destroy ()
 
+virtual std::tr1::shared_ptr
+< epics::pvAccess::ChannelProvider > 
getProvider ()
 
+virtual std::string getRemoteAddress ()
 
+virtual ConnectionState getConnectionState ()
 
+virtual std::string getChannelName ()
 
+virtual std::tr1::shared_ptr
+< epics::pvAccess::ChannelRequester > 
getChannelRequester ()
 
+virtual void getField (epics::pvAccess::GetFieldRequester::shared_pointer const &requester, std::string const &subField)
 
+virtual
+epics::pvAccess::AccessRights 
getAccessRights (epics::pvData::PVField::shared_pointer const &pvField)
 
+virtual
+epics::pvAccess::ChannelProcess::shared_pointer 
createChannelProcess (epics::pvAccess::ChannelProcessRequester::shared_pointer const &channelProcessRequester, epics::pvData::PVStructure::shared_pointer const &pvRequest)
 
+virtual
+epics::pvAccess::ChannelGet::shared_pointer 
createChannelGet (epics::pvAccess::ChannelGetRequester::shared_pointer const &channelGetRequester, epics::pvData::PVStructure::shared_pointer const &pvRequest)
 
+virtual
+epics::pvAccess::ChannelPut::shared_pointer 
createChannelPut (epics::pvAccess::ChannelPutRequester::shared_pointer const &channelPutRequester, epics::pvData::PVStructure::shared_pointer const &pvRequest)
 
+virtual
+epics::pvAccess::ChannelPutGet::shared_pointer 
createChannelPutGet (epics::pvAccess::ChannelPutGetRequester::shared_pointer const &channelPutGetRequester, epics::pvData::PVStructure::shared_pointer const &pvRequest)
 
+virtual
+epics::pvAccess::ChannelRPC::shared_pointer 
createChannelRPC (epics::pvAccess::ChannelRPCRequester::shared_pointer const &channelRPCRequester, epics::pvData::PVStructure::shared_pointer const &pvRequest)
 
+virtual
+epics::pvData::Monitor::shared_pointer 
createMonitor (epics::pvData::MonitorRequester::shared_pointer const &monitorRequester, epics::pvData::PVStructure::shared_pointer const &pvRequest)
 
+virtual
+epics::pvAccess::ChannelArray::shared_pointer 
createChannelArray (epics::pvAccess::ChannelArrayRequester::shared_pointer const &channelArrayRequester, epics::pvData::PVStructure::shared_pointer const &pvRequest)
 
+virtual void printInfo (std::ostream &out)
 
+ + + + + + + + + + + +

+Public Attributes

+weak_pointer weakref
 
+const
+ChannelCacheEntry::shared_pointer 
entry
 
+const requester_type::weak_pointer requester
 
+const std::string address
 
+const
+epics::pvAccess::ChannelProvider::weak_pointer 
server_provder
 
+ + + +

+Static Public Attributes

+static size_t num_instances
 
+

Detailed Description

+
+

Definition at line 8 of file channel.h.

+

The documentation for this struct was generated from the following files: +
+ + + + diff --git a/struct_g_w_channel__coll__graph.map b/struct_g_w_channel__coll__graph.map new file mode 100644 index 0000000..530c431 --- /dev/null +++ b/struct_g_w_channel__coll__graph.map @@ -0,0 +1,2 @@ + + diff --git a/struct_g_w_channel__coll__graph.md5 b/struct_g_w_channel__coll__graph.md5 new file mode 100644 index 0000000..be8ca34 --- /dev/null +++ b/struct_g_w_channel__coll__graph.md5 @@ -0,0 +1 @@ +e934d05e08425536a8955787022740f7 \ No newline at end of file diff --git a/struct_g_w_channel__coll__graph.png b/struct_g_w_channel__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..5a92cdfaaf57727c2fd77c151fdcd9cb5e127116 GIT binary patch literal 2768 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 + diff --git a/struct_g_w_channel__inherit__graph.md5 b/struct_g_w_channel__inherit__graph.md5 new file mode 100644 index 0000000..be8ca34 --- /dev/null +++ b/struct_g_w_channel__inherit__graph.md5 @@ -0,0 +1 @@ +e934d05e08425536a8955787022740f7 \ No newline at end of file diff --git a/struct_g_w_channel__inherit__graph.png b/struct_g_w_channel__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..5a92cdfaaf57727c2fd77c151fdcd9cb5e127116 GIT binary patch literal 2768 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 + + + + + +pva2pva: Member List + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ +
+
+
+
GWServerChannelProvider Member List
+
+
+ +

This is the complete list of members for GWServerChannelProvider, including all inherited members.

+ + + + + + + + + + + +
cache (defined in GWServerChannelProvider)GWServerChannelProvider
cancel() (defined in GWServerChannelProvider)GWServerChannelProviderinlinevirtual
channelFind(std::string const &channelName, epics::pvAccess::ChannelFindRequester::shared_pointer const &channelFindRequester) (defined in GWServerChannelProvider)GWServerChannelProvidervirtual
createChannel(std::string const &channelName, epics::pvAccess::ChannelRequester::shared_pointer const &channelRequester, short priority, std::string const &addressx) (defined in GWServerChannelProvider)GWServerChannelProvidervirtual
destroy() (defined in GWServerChannelProvider)GWServerChannelProvidervirtual
getChannelProvider() (defined in GWServerChannelProvider)GWServerChannelProvidervirtual
getProviderName() (defined in GWServerChannelProvider)GWServerChannelProviderinlinevirtual
GWServerChannelProvider(const epics::pvAccess::ChannelProvider::shared_pointer &prov) (defined in GWServerChannelProvider)GWServerChannelProviderexplicit
POINTER_DEFINITIONS(GWServerChannelProvider) (defined in GWServerChannelProvider)GWServerChannelProvider
~GWServerChannelProvider() (defined in GWServerChannelProvider)GWServerChannelProvidervirtual
+ + + + diff --git a/struct_g_w_server_channel_provider.html b/struct_g_w_server_channel_provider.html new file mode 100644 index 0000000..cf65469 --- /dev/null +++ b/struct_g_w_server_channel_provider.html @@ -0,0 +1,160 @@ + + + + + + +pva2pva: GWServerChannelProvider Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ +
+
+ +
+
GWServerChannelProvider Struct Reference
+
+
+
+Inheritance diagram for GWServerChannelProvider:
+
+
Inheritance graph
+ + +
[legend]
+
+Collaboration diagram for GWServerChannelProvider:
+
+
Collaboration graph
+ + +
[legend]
+ + + + + + + + + + + + + + + + + + +

+Public Member Functions

POINTER_DEFINITIONS (GWServerChannelProvider)
 
+virtual std::tr1::shared_ptr
+< ChannelProvider > 
getChannelProvider ()
 
+virtual void cancel ()
 
+virtual std::string getProviderName ()
 
+virtual
+epics::pvAccess::ChannelFind::shared_pointer 
channelFind (std::string const &channelName, epics::pvAccess::ChannelFindRequester::shared_pointer const &channelFindRequester)
 
+virtual
+epics::pvAccess::Channel::shared_pointer 
createChannel (std::string const &channelName, epics::pvAccess::ChannelRequester::shared_pointer const &channelRequester, short priority, std::string const &addressx)
 
+virtual void destroy ()
 
GWServerChannelProvider (const epics::pvAccess::ChannelProvider::shared_pointer &prov)
 
+ + + +

+Public Attributes

+ChannelCache cache
 
+

Detailed Description

+
+

Definition at line 9 of file server.h.

+

The documentation for this struct was generated from the following files: +
+ + + + diff --git a/struct_g_w_server_channel_provider__coll__graph.map b/struct_g_w_server_channel_provider__coll__graph.map new file mode 100644 index 0000000..ff26c15 --- /dev/null +++ b/struct_g_w_server_channel_provider__coll__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/struct_g_w_server_channel_provider__coll__graph.md5 b/struct_g_w_server_channel_provider__coll__graph.md5 new file mode 100644 index 0000000..0028527 --- /dev/null +++ b/struct_g_w_server_channel_provider__coll__graph.md5 @@ -0,0 +1 @@ +72e7285ff5abe413dfae04bd61b17271 \ No newline at end of file diff --git a/struct_g_w_server_channel_provider__coll__graph.png b/struct_g_w_server_channel_provider__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..019aa200603de609e4177a300ae8e662c7bd170f GIT binary patch literal 24844 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

4%>HH8VWR-Kf#JOwJeJZk2FnPUoRNBI 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 + diff --git a/struct_g_w_server_channel_provider__inherit__graph.md5 b/struct_g_w_server_channel_provider__inherit__graph.md5 new file mode 100644 index 0000000..6c38274 --- /dev/null +++ b/struct_g_w_server_channel_provider__inherit__graph.md5 @@ -0,0 +1 @@ +695b45b64deffe77a65a97cc5b3e94c4 \ No newline at end of file diff --git a/struct_g_w_server_channel_provider__inherit__graph.png b/struct_g_w_server_channel_provider__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..07ee7284969ec30f8f870928bc5b8a13022c18e7 GIT binary patch literal 11522 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 Jf#fsa{|AHp_?`d& literal 0 HcmV?d00001 diff --git a/struct_group_config-members.html b/struct_group_config-members.html new file mode 100644 index 0000000..5cf038b --- /dev/null +++ b/struct_group_config-members.html @@ -0,0 +1,106 @@ + + + + + + +pva2pva: Member List + + + + + + + + + +

+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ +
+
+
+
GroupConfig Member List
+
+
+ +

This is the complete list of members for GroupConfig, including all inherited members.

+ + + + + + +
groups (defined in GroupConfig)GroupConfig
groups_t typedef (defined in GroupConfig)GroupConfig
parse(const char *txt, const char *recname, GroupConfig &result) (defined in GroupConfig)GroupConfigstatic
swap(GroupConfig &o) (defined in GroupConfig)GroupConfiginline
warning (defined in GroupConfig)GroupConfig
+ + + + diff --git a/struct_group_config.html b/struct_group_config.html new file mode 100644 index 0000000..a87b69f --- /dev/null +++ b/struct_group_config.html @@ -0,0 +1,148 @@ + + + + + + +pva2pva: GroupConfig Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ +
+ +
+ + + + + + +

+Classes

struct  Field
 
struct  Group
 
+ + + +

+Public Types

+typedef std::map< std::string,
+Group
groups_t
 
+ + + +

+Public Member Functions

+void swap (GroupConfig &o)
 
+ + + +

+Static Public Member Functions

+static void parse (const char *txt, const char *recname, GroupConfig &result)
 
+ + + + + +

+Public Attributes

+groups_t groups
 
+std::string warning
 
+

Detailed Description

+
+

Definition at line 20 of file pdbgroup.h.

+

The documentation for this struct was generated from the following files: +
+ + + + diff --git a/struct_group_config_1_1_field-members.html b/struct_group_config_1_1_field-members.html new file mode 100644 index 0000000..9f4fa75 --- /dev/null +++ b/struct_group_config_1_1_field-members.html @@ -0,0 +1,112 @@ + + + + + + +pva2pva: Member List + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
GroupConfig::Field Member List
+
+
+ +

This is the complete list of members for GroupConfig::Field, including all inherited members.

+ + + + + + + + +
channel (defined in GroupConfig::Field)GroupConfig::Field
Field() (defined in GroupConfig::Field)GroupConfig::Fieldinline
id (defined in GroupConfig::Field)GroupConfig::Field
putorder (defined in GroupConfig::Field)GroupConfig::Field
swap(Field &o) (defined in GroupConfig::Field)GroupConfig::Fieldinline
trigger (defined in GroupConfig::Field)GroupConfig::Field
type (defined in GroupConfig::Field)GroupConfig::Field
+ + + + diff --git a/struct_group_config_1_1_field.html b/struct_group_config_1_1_field.html new file mode 100644 index 0000000..7588325 --- /dev/null +++ b/struct_group_config_1_1_field.html @@ -0,0 +1,137 @@ + + + + + + +pva2pva: GroupConfig::Field Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
GroupConfig::Field Struct Reference
+
+
+ + + + +

+Public Member Functions

+void swap (Field &o)
 
+ + + + + + + + + + + +

+Public Attributes

+std::string type
 
+std::string channel
 
+std::string trigger
 
+std::string id
 
+int putorder
 
+

Detailed Description

+
+

Definition at line 22 of file pdbgroup.h.

+

The documentation for this struct was generated from the following file: +
+ + + + diff --git a/struct_group_config_1_1_group-members.html b/struct_group_config_1_1_group-members.html new file mode 100644 index 0000000..d480212 --- /dev/null +++ b/struct_group_config_1_1_group-members.html @@ -0,0 +1,112 @@ + + + + + + +pva2pva: Member List + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
GroupConfig::Group Member List
+
+
+ +

This is the complete list of members for GroupConfig::Group, including all inherited members.

+ + + + + + + + +
atomic (defined in GroupConfig::Group)GroupConfig::Group
atomic_set (defined in GroupConfig::Group)GroupConfig::Group
fields (defined in GroupConfig::Group)GroupConfig::Group
fields_t typedef (defined in GroupConfig::Group)GroupConfig::Group
Group() (defined in GroupConfig::Group)GroupConfig::Groupinline
id (defined in GroupConfig::Group)GroupConfig::Group
swap(Group &o) (defined in GroupConfig::Group)GroupConfig::Groupinline
+ + + + diff --git a/struct_group_config_1_1_group.html b/struct_group_config_1_1_group.html new file mode 100644 index 0000000..688a874 --- /dev/null +++ b/struct_group_config_1_1_group.html @@ -0,0 +1,142 @@ + + + + + + +pva2pva: GroupConfig::Group Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
GroupConfig::Group Struct Reference
+
+
+ + + + +

+Public Types

+typedef std::map< std::string,
+Field
fields_t
 
+ + + +

+Public Member Functions

+void swap (Group &o)
 
+ + + + + + + + + +

+Public Attributes

+fields_t fields
 
+bool atomic
 
+bool atomic_set
 
+std::string id
 
+

Detailed Description

+
+

Definition at line 37 of file pdbgroup.h.

+

The documentation for this struct was generated from the following file: +
+ + + + diff --git a/struct_local_f_l-members.html b/struct_local_f_l-members.html new file mode 100644 index 0000000..202c49c --- /dev/null +++ b/struct_local_f_l-members.html @@ -0,0 +1,105 @@ + + + + + + +pva2pva: Member List + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ +
+
+
+
LocalFL Member List
+
+
+ +

This is the complete list of members for LocalFL, including all inherited members.

+ + + + + +
LocalFL(db_field_log *pfl, dbChannel *pchan) (defined in LocalFL)LocalFLinline
ours (defined in LocalFL)LocalFL
pfl (defined in LocalFL)LocalFL
~LocalFL() (defined in LocalFL)LocalFLinline
+ + + + diff --git a/struct_local_f_l.html b/struct_local_f_l.html new file mode 100644 index 0000000..ee0938e --- /dev/null +++ b/struct_local_f_l.html @@ -0,0 +1,124 @@ + + + + + + +pva2pva: LocalFL Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ +
+
+ +
+
LocalFL Struct Reference
+
+
+ + + + +

+Public Member Functions

LocalFL (db_field_log *pfl, dbChannel *pchan)
 
+ + + + + +

+Public Attributes

+db_field_log * pfl
 
+bool ours
 
+

Detailed Description

+
+

Definition at line 250 of file pvif.h.

+

The documentation for this struct was generated from the following file: +
+ + + + diff --git a/struct_monitor_cache_entry-members.html b/struct_monitor_cache_entry-members.html new file mode 100644 index 0000000..1f55461 --- /dev/null +++ b/struct_monitor_cache_entry-members.html @@ -0,0 +1,124 @@ + + + + + + +pva2pva: Member List + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ +
+
+
+
MonitorCacheEntry Member List
+
+
+ +

This is the complete list of members for MonitorCacheEntry, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + +
bufferSize (defined in MonitorCacheEntry)MonitorCacheEntry
chan (defined in MonitorCacheEntry)MonitorCacheEntry
done (defined in MonitorCacheEntry)MonitorCacheEntry
getRequesterName() (defined in MonitorCacheEntry)MonitorCacheEntryvirtual
havedata (defined in MonitorCacheEntry)MonitorCacheEntry
interested (defined in MonitorCacheEntry)MonitorCacheEntry
interested_t typedef (defined in MonitorCacheEntry)MonitorCacheEntry
lastelemMonitorCacheEntry
mon (defined in MonitorCacheEntry)MonitorCacheEntry
MonitorCacheEntry(ChannelCacheEntry *ent, const epics::pvData::PVStructure::shared_pointer &pvr) (defined in MonitorCacheEntry)MonitorCacheEntry
monitorConnect(epics::pvData::Status const &status, epics::pvData::MonitorPtr const &monitor, epics::pvData::StructureConstPtr const &structure) (defined in MonitorCacheEntry)MonitorCacheEntryvirtual
monitorEvent(epics::pvData::MonitorPtr const &monitor) (defined in MonitorCacheEntry)MonitorCacheEntryvirtual
mutex() const (defined in MonitorCacheEntry)MonitorCacheEntryinline
nevents (defined in MonitorCacheEntry)MonitorCacheEntry
num_instances (defined in MonitorCacheEntry)MonitorCacheEntrystatic
nwakeups (defined in MonitorCacheEntry)MonitorCacheEntry
POINTER_DEFINITIONS(MonitorCacheEntry) (defined in MonitorCacheEntry)MonitorCacheEntry
pvrequest_t typedef (defined in MonitorCacheEntry)MonitorCacheEntry
startresult (defined in MonitorCacheEntry)MonitorCacheEntry
typedesc (defined in MonitorCacheEntry)MonitorCacheEntry
unlisten(epics::pvData::MonitorPtr const &monitor) (defined in MonitorCacheEntry)MonitorCacheEntryvirtual
weakref (defined in MonitorCacheEntry)MonitorCacheEntry
~MonitorCacheEntry() (defined in MonitorCacheEntry)MonitorCacheEntryvirtual
+ + + + diff --git a/struct_monitor_cache_entry.html b/struct_monitor_cache_entry.html new file mode 100644 index 0000000..e0357ea --- /dev/null +++ b/struct_monitor_cache_entry.html @@ -0,0 +1,217 @@ + + + + + + +pva2pva: MonitorCacheEntry Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ +
+ +
+
+Inheritance diagram for MonitorCacheEntry:
+
+
Inheritance graph
+
[legend]
+
+Collaboration diagram for MonitorCacheEntry:
+
+
Collaboration graph
+ + +
[legend]
+ + + + + + +

+Public Types

+typedef std::vector< epicsUInt8 > pvrequest_t
 
+typedef weak_set< MonitorUserinterested_t
 
+ + + + + + + + + + + + + + + +

+Public Member Functions

POINTER_DEFINITIONS (MonitorCacheEntry)
 
+epicsMutex & mutex () const
 
MonitorCacheEntry (ChannelCacheEntry *ent, const epics::pvData::PVStructure::shared_pointer &pvr)
 
+virtual void monitorConnect (epics::pvData::Status const &status, epics::pvData::MonitorPtr const &monitor, epics::pvData::StructureConstPtr const &structure)
 
+virtual void monitorEvent (epics::pvData::MonitorPtr const &monitor)
 
+virtual void unlisten (epics::pvData::MonitorPtr const &monitor)
 
+virtual std::string getRequesterName ()
 
+ + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Attributes

+weak_pointer weakref
 
+ChannelCacheEntry *const chan
 
+const size_t bufferSize
 
+bool havedata
 
+bool done
 
+size_t nwakeups
 
+size_t nevents
 
+epics::pvData::StructureConstPtr typedesc
 
epics::pvData::MonitorElement::shared_pointer lastelem
 
+epics::pvData::MonitorPtr mon
 
+epics::pvData::Status startresult
 
+interested_t interested
 
+ + + +

+Static Public Attributes

+static size_t num_instances
 
+

Detailed Description

+
+

Definition at line 22 of file chancache.h.

+

Member Data Documentation

+ +
+
+ + + + +
epics::pvData::MonitorElement::shared_pointer MonitorCacheEntry::lastelem
+
+

value of upstream monitor (accumulation of all deltas) changed/overflow bit masks of last delta

+ +

Definition at line 46 of file chancache.h.

+ +
+
+
The documentation for this struct was generated from the following files: +
+ + + + diff --git a/struct_monitor_cache_entry__coll__graph.map b/struct_monitor_cache_entry__coll__graph.map new file mode 100644 index 0000000..b7ff1a9 --- /dev/null +++ b/struct_monitor_cache_entry__coll__graph.map @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/struct_monitor_cache_entry__coll__graph.md5 b/struct_monitor_cache_entry__coll__graph.md5 new file mode 100644 index 0000000..9627e47 --- /dev/null +++ b/struct_monitor_cache_entry__coll__graph.md5 @@ -0,0 +1 @@ +a12bf28b5c29fe2d8ddc0d8d32846c50 \ No newline at end of file diff --git a/struct_monitor_cache_entry__coll__graph.png b/struct_monitor_cache_entry__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..0447207ce5ccd29e44266d13c4599a643c2c2113 GIT binary patch literal 28435 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 + diff --git a/struct_monitor_cache_entry__inherit__graph.md5 b/struct_monitor_cache_entry__inherit__graph.md5 new file mode 100644 index 0000000..df060d5 --- /dev/null +++ b/struct_monitor_cache_entry__inherit__graph.md5 @@ -0,0 +1 @@ +d05ff58af12878bd053f0c3463304ae0 \ No newline at end of file diff --git a/struct_monitor_cache_entry__inherit__graph.png b/struct_monitor_cache_entry__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..bc39503a87d0daa53542d384a0f02512f6a12452 GIT binary patch literal 3699 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 literal 0 HcmV?d00001 diff --git a/struct_monitor_user-members.html b/struct_monitor_user-members.html new file mode 100644 index 0000000..bf2cf7b --- /dev/null +++ b/struct_monitor_user-members.html @@ -0,0 +1,126 @@ + + + + + + +pva2pva: Member List + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ +
+
+
+
MonitorUser Member List
+
+
+ +

This is the complete list of members for MonitorUser, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
destroy() (defined in MonitorUser)MonitorUservirtual
empty (defined in MonitorUser)MonitorUser
entry (defined in MonitorUser)MonitorUser
filled (defined in MonitorUser)MonitorUser
getRequesterName() (defined in MonitorUser)MonitorUservirtual
initial (defined in MonitorUser)MonitorUser
inoverflow (defined in MonitorUser)MonitorUser
inuse (defined in MonitorUser)MonitorUser
MonitorUser(const MonitorCacheEntry::shared_pointer &) (defined in MonitorUser)MonitorUser
mutex() const (defined in MonitorUser)MonitorUserinline
ndropped (defined in MonitorUser)MonitorUser
nevents (defined in MonitorUser)MonitorUser
num_instances (defined in MonitorUser)MonitorUserstatic
nwakeups (defined in MonitorUser)MonitorUser
overflowElement (defined in MonitorUser)MonitorUser
POINTER_DEFINITIONS(MonitorUser) (defined in MonitorUser)MonitorUser
poll() (defined in MonitorUser)MonitorUservirtual
release(epics::pvData::MonitorElementPtr const &monitorElement) (defined in MonitorUser)MonitorUservirtual
req (defined in MonitorUser)MonitorUser
running (defined in MonitorUser)MonitorUser
srvchan (defined in MonitorUser)MonitorUser
start() (defined in MonitorUser)MonitorUservirtual
stop() (defined in MonitorUser)MonitorUservirtual
weakref (defined in MonitorUser)MonitorUser
~MonitorUser() (defined in MonitorUser)MonitorUservirtual
+ + + + diff --git a/struct_monitor_user.html b/struct_monitor_user.html new file mode 100644 index 0000000..f786095 --- /dev/null +++ b/struct_monitor_user.html @@ -0,0 +1,206 @@ + + + + + + +pva2pva: MonitorUser Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ +
+ +
+
+Inheritance diagram for MonitorUser:
+
+
Inheritance graph
+
[legend]
+
+Collaboration diagram for MonitorUser:
+
+
Collaboration graph
+
[legend]
+ + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

POINTER_DEFINITIONS (MonitorUser)
 
+epicsMutex & mutex () const
 
MonitorUser (const MonitorCacheEntry::shared_pointer &)
 
+virtual void destroy ()
 
+virtual epics::pvData::Status start ()
 
+virtual epics::pvData::Status stop ()
 
+virtual
+epics::pvData::MonitorElementPtr 
poll ()
 
+virtual void release (epics::pvData::MonitorElementPtr const &monitorElement)
 
+virtual std::string getRequesterName ()
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Attributes

+weak_pointer weakref
 
+MonitorCacheEntry::shared_pointer entry
 
+epics::pvData::MonitorRequester::weak_pointer req
 
+std::tr1::weak_ptr< GWChannelsrvchan
 
+bool initial
 
+bool running
 
+bool inoverflow
 
+size_t nwakeups
 
+size_t nevents
 
+size_t ndropped
 
+std::deque
+< epics::pvData::MonitorElementPtr > 
filled
 
+std::deque
+< epics::pvData::MonitorElementPtr > 
empty
 
+std::set
+< epics::pvData::MonitorElementPtr > 
inuse
 
+epics::pvData::MonitorElementPtr overflowElement
 
+ + + +

+Static Public Attributes

+static size_t num_instances
 
+

Detailed Description

+
+

Definition at line 65 of file chancache.h.

+

The documentation for this struct was generated from the following files: +
+ + + + diff --git a/struct_monitor_user__coll__graph.map b/struct_monitor_user__coll__graph.map new file mode 100644 index 0000000..800c3cb --- /dev/null +++ b/struct_monitor_user__coll__graph.map @@ -0,0 +1,2 @@ + + diff --git a/struct_monitor_user__coll__graph.md5 b/struct_monitor_user__coll__graph.md5 new file mode 100644 index 0000000..a527139 --- /dev/null +++ b/struct_monitor_user__coll__graph.md5 @@ -0,0 +1 @@ +f7d6bd32f99b56d00465312439452992 \ No newline at end of file diff --git a/struct_monitor_user__coll__graph.png b/struct_monitor_user__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..62fac348bd190d209a7e0db3b70c502eedbbbc1a GIT binary patch literal 2397 zcmbuBXH=6*8pnYP5>Oztfb<|zqgdm})0g=!Ni2{e3 z8z8w-LRBdNDWL_fN)2nkP^5P*_jS+i-4FY5-#PEhInT_TdFGk_^P73$^66pMI15|E*&^L+JKSBijdhK*CebExs)^Y>#) zVtr~PAz0zKjFF*+#3|pqqV@p=3AOs$^qfh-nyl>NO}1I9Uw{7g20`s{iT*z(q3SPT zIkdLwFrHRT4>_=wFbKjQ&v$(IUX644MmQP?1$`VF3;#^L6YDW8YJA~BrIWf3WeWo< zkXBSo>flK=$s;4``qjqS@7}$OMXsLvIiDB%OI!!{4bNa+i=F*_M*Y1PFJCHy3ahFZ zd%=5qd!RUv`9*d|p<=M&#hAs#MT5#SnRaP524fbUo}N@H6%2DOA7L`Xpz9dwJWE+w zxuT*XnN(9#v%j^3Ur?&7tlZt*1wnBt*4EZidKcBPIyz8j0hKyrf*_Gdv$L})2zqCy zL%zujhr?M~Lanl_$nIFMGKe+Pmc-4?eSh>f4R!TPsxD#M%M&1Ic=-04gkf`8Sy@zc z^i2dpDwwVg4xu&CXuH`HV3^{C=ttq<=>08it7}LkQq%pnoxM#>n2mCplSF1-o{WOR zxWa^}6B?}o<4 zJ>Nodo>@t$rP=fo&G7`n)oUXdei30g6Q960M53QwuDQ8+sDFXe{M?-N!(x8GRuYvb z>2H+3Jiuh$>GSHf9(VS9rJ|zZ>gIM$!VpRP^eqJQp*nc>N+grP__036*r1k{s==Q3 z`5~l7VLR+Tyj1jAziJ5<3hbL1|6AfW-RhKiFL!`sQLoY9{sbSxP z^SZ}pvQo~1?4hr^Z+CWdtnMC6Px}}f8zW8eeGYbZ=h1&2ynlbm(UDPef6Up%g?!S9 z?9Nb&w(ux4O=@p%-~KU$?{~>#v3!9c1k>=f2s4G$Yyu(ZX}*xGQG9%SL`1~7C%6`E>;}kT%I4jY3IA(*^4Y?#lv**eYbzlh0UM?3D~EL*TzROS}H4DO7-VM z6B`;F$nO3N$-O?QEE$lT zarnHUQ}J?gE&g4%^*TFMk9LqLeQW!oriY=t(Du0_S*QwFt}aZOO(`nhi+a|<{eczx zKSu%N`2TIj_}=_tuOdeA*jk%)7p7y{R;$AxQ@1D{%4uCAOp(0XdbwUzjP7oVTg(%C zFE1ioRX<4garEJ`WI6=X)YNoRdq?iyya9Z<)E-P52S9Z4NUQtPCsqjU^5x5;srm*6 z?cYLf3G_x3&{{SQxD|ri+S&lAce-WT-MN|l)lN=cK2`2q92nPqdvI{D8Xm~!H2zB7 z6t37hI67Jz^tF~I%vxN`PfL3SR<;#807)RYB>=gO4h{L{lh1m$7?6D`-AU`~>qSLH z;$mWUc6RgUyF7L33JPX+R%erhcFm7k)(`5I-iHd*;^pc%Ip9wxZ3Z8pB1PDiVU)N!Q)o zy=WmF0I^`cH_1joLaVBl6c)1P2aEXl_(BgiIGlUAa8)qq!9>Gp2)3uEhpafPbt(A7 zu~P;H8AS5Z(vpRR1<9RUX#9P1ucV~p@m&AYh=`rNJ)+rDYD)`oQbJsOc78r$W!fTs zfWaiA~pPATysnwXpWoy}%1EC3FBx5fk= z=J-9E8cIq?m}q*cZ*Gq2G;=$XsbV{1SSJbt=+t@d?naTc7W$PBbevA7|IxQ$J`wu4 zySu!)y1JpEp{Xf)xa6vahDPI)B^XFZM1G|pH8&4|?Vd#TOYZRfYL0j~)gliD zPXizf^rv_Lq9`k~QB4;*abmm`eNkEYV;;AmOiJcVT3VWwl@$phoe>8ax4;wjoYUXp)51^&i_pH8elS~4-WPlOeR!KA0B xr)+BIUcsfOV=$Pjh{ZbfOag}SU*vb8xhdG!FK<26efaaiWNYPMSqbxr`wOvYoU#A_ literal 0 HcmV?d00001 diff --git a/struct_monitor_user__inherit__graph.map b/struct_monitor_user__inherit__graph.map new file mode 100644 index 0000000..800c3cb --- /dev/null +++ b/struct_monitor_user__inherit__graph.map @@ -0,0 +1,2 @@ + + diff --git a/struct_monitor_user__inherit__graph.md5 b/struct_monitor_user__inherit__graph.md5 new file mode 100644 index 0000000..a527139 --- /dev/null +++ b/struct_monitor_user__inherit__graph.md5 @@ -0,0 +1 @@ +f7d6bd32f99b56d00465312439452992 \ No newline at end of file diff --git a/struct_monitor_user__inherit__graph.png b/struct_monitor_user__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..62fac348bd190d209a7e0db3b70c502eedbbbc1a GIT binary patch literal 2397 zcmbuBXH=6*8pnYP5>Oztfb<|zqgdm})0g=!Ni2{e3 z8z8w-LRBdNDWL_fN)2nkP^5P*_jS+i-4FY5-#PEhInT_TdFGk_^P73$^66pMI15|E*&^L+JKSBijdhK*CebExs)^Y>#) zVtr~PAz0zKjFF*+#3|pqqV@p=3AOs$^qfh-nyl>NO}1I9Uw{7g20`s{iT*z(q3SPT zIkdLwFrHRT4>_=wFbKjQ&v$(IUX644MmQP?1$`VF3;#^L6YDW8YJA~BrIWf3WeWo< zkXBSo>flK=$s;4``qjqS@7}$OMXsLvIiDB%OI!!{4bNa+i=F*_M*Y1PFJCHy3ahFZ zd%=5qd!RUv`9*d|p<=M&#hAs#MT5#SnRaP524fbUo}N@H6%2DOA7L`Xpz9dwJWE+w zxuT*XnN(9#v%j^3Ur?&7tlZt*1wnBt*4EZidKcBPIyz8j0hKyrf*_Gdv$L})2zqCy zL%zujhr?M~Lanl_$nIFMGKe+Pmc-4?eSh>f4R!TPsxD#M%M&1Ic=-04gkf`8Sy@zc z^i2dpDwwVg4xu&CXuH`HV3^{C=ttq<=>08it7}LkQq%pnoxM#>n2mCplSF1-o{WOR zxWa^}6B?}o<4 zJ>Nodo>@t$rP=fo&G7`n)oUXdei30g6Q960M53QwuDQ8+sDFXe{M?-N!(x8GRuYvb z>2H+3Jiuh$>GSHf9(VS9rJ|zZ>gIM$!VpRP^eqJQp*nc>N+grP__036*r1k{s==Q3 z`5~l7VLR+Tyj1jAziJ5<3hbL1|6AfW-RhKiFL!`sQLoY9{sbSxP z^SZ}pvQo~1?4hr^Z+CWdtnMC6Px}}f8zW8eeGYbZ=h1&2ynlbm(UDPef6Up%g?!S9 z?9Nb&w(ux4O=@p%-~KU$?{~>#v3!9c1k>=f2s4G$Yyu(ZX}*xGQG9%SL`1~7C%6`E>;}kT%I4jY3IA(*^4Y?#lv**eYbzlh0UM?3D~EL*TzROS}H4DO7-VM z6B`;F$nO3N$-O?QEE$lT zarnHUQ}J?gE&g4%^*TFMk9LqLeQW!oriY=t(Du0_S*QwFt}aZOO(`nhi+a|<{eczx zKSu%N`2TIj_}=_tuOdeA*jk%)7p7y{R;$AxQ@1D{%4uCAOp(0XdbwUzjP7oVTg(%C zFE1ioRX<4garEJ`WI6=X)YNoRdq?iyya9Z<)E-P52S9Z4NUQtPCsqjU^5x5;srm*6 z?cYLf3G_x3&{{SQxD|ri+S&lAce-WT-MN|l)lN=cK2`2q92nPqdvI{D8Xm~!H2zB7 z6t37hI67Jz^tF~I%vxN`PfL3SR<;#807)RYB>=gO4h{L{lh1m$7?6D`-AU`~>qSLH z;$mWUc6RgUyF7L33JPX+R%erhcFm7k)(`5I-iHd*;^pc%Ip9wxZ3Z8pB1PDiVU)N!Q)o zy=WmF0I^`cH_1joLaVBl6c)1P2aEXl_(BgiIGlUAa8)qq!9>Gp2)3uEhpafPbt(A7 zu~P;H8AS5Z(vpRR1<9RUX#9P1ucV~p@m&AYh=`rNJ)+rDYD)`oQbJsOc78r$W!fTs zfWaiA~pPATysnwXpWoy}%1EC3FBx5fk= z=J-9E8cIq?m}q*cZ*Gq2G;=$XsbV{1SSJbt=+t@d?naTc7W$PBbevA7|IxQ$J`wu4 zySu!)y1JpEp{Xf)xa6vahDPI)B^XFZM1G|pH8&4|?Vd#TOYZRfYL0j~)gliD zPXizf^rv_Lq9`k~QB4;*abmm`eNkEYV;;AmOiJcVT3VWwl@$phoe>8ax4;wjoYUXp)51^&i_pH8elS~4-WPlOeR!KA0B xr)+BIUcsfOV=$Pjh{ZbfOag}SU*vb8xhdG!FK<26efaaiWNYPMSqbxr`wOvYoU#A_ literal 0 HcmV?d00001 diff --git a/struct_p_d_b_group_channel-members.html b/struct_p_d_b_group_channel-members.html new file mode 100644 index 0000000..ed8eb9f --- /dev/null +++ b/struct_p_d_b_group_channel-members.html @@ -0,0 +1,126 @@ + + + + + + +pva2pva: Member List + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ +
+
+
+
PDBGroupChannel Member List
+
+
+ +

This is the complete list of members for PDBGroupChannel, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
aspvt (defined in PDBGroupChannel)PDBGroupChannel
BaseChannel(const std::string &name, const std::tr1::weak_ptr< epics::pvAccess::ChannelProvider > &prov, const epics::pvAccess::ChannelRequester::shared_pointer &req, const epics::pvData::StructureConstPtr &dtype) (defined in BaseChannel)BaseChannelinline
createChannelPut(epics::pvAccess::ChannelPutRequester::shared_pointer const &requester, epics::pvData::PVStructure::shared_pointer const &pvRequest) OVERRIDE FINAL (defined in PDBGroupChannel)PDBGroupChannelvirtual
createMonitor(epics::pvData::MonitorRequester::shared_pointer const &requester, epics::pvData::PVStructure::shared_pointer const &pvRequest) OVERRIDE FINAL (defined in PDBGroupChannel)PDBGroupChannelvirtual
cred (defined in PDBGroupChannel)PDBGroupChannel
destroy() OVERRIDE FINAL (defined in BaseChannel)BaseChannelinlinevirtual
fielddesc (defined in BaseChannel)BaseChannel
getChannelName() OVERRIDE FINAL (defined in BaseChannel)BaseChannelinlinevirtual
getChannelRequester() OVERRIDE FINAL (defined in BaseChannel)BaseChannelinlinevirtual
getField(epics::pvAccess::GetFieldRequester::shared_pointer const &requester, std::string const &subField) OVERRIDE (defined in BaseChannel)BaseChannelinlinevirtual
getProvider() OVERRIDE FINAL (defined in BaseChannel)BaseChannelinlinevirtual
getRemoteAddress() OVERRIDE (defined in BaseChannel)BaseChannelinlinevirtual
getRequesterName() OVERRIDE (defined in BaseChannel)BaseChannelinlinevirtual
guard_t typedef (defined in BaseChannel)BaseChannel
lock (defined in BaseChannel)BaseChannelmutable
num_instances (defined in PDBGroupChannel)PDBGroupChannelstatic
PDBGroupChannel(const PDBGroupPV::shared_pointer &pv, const std::tr1::shared_ptr< epics::pvAccess::ChannelProvider > &prov, const epics::pvAccess::ChannelRequester::shared_pointer &req) (defined in PDBGroupChannel)PDBGroupChannel
POINTER_DEFINITIONS(PDBGroupChannel) (defined in PDBGroupChannel)PDBGroupChannel
printInfo(std::ostream &out) OVERRIDE FINAL (defined in PDBGroupChannel)PDBGroupChannelvirtual
provider (defined in BaseChannel)BaseChannel
pv (defined in PDBGroupChannel)PDBGroupChannel
pvname (defined in BaseChannel)BaseChannel
requester (defined in BaseChannel)BaseChannel
~BaseChannel() (defined in BaseChannel)BaseChannelinlinevirtual
~PDBGroupChannel() (defined in PDBGroupChannel)PDBGroupChannelvirtual
+ + + + diff --git a/struct_p_d_b_group_channel.html b/struct_p_d_b_group_channel.html new file mode 100644 index 0000000..a6ae1ce --- /dev/null +++ b/struct_p_d_b_group_channel.html @@ -0,0 +1,215 @@ + + + + + + +pva2pva: PDBGroupChannel Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ +
+ +
+
+Inheritance diagram for PDBGroupChannel:
+
+
Inheritance graph
+ + +
[legend]
+
+Collaboration diagram for PDBGroupChannel:
+
+
Collaboration graph
+ + +
[legend]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

POINTER_DEFINITIONS (PDBGroupChannel)
 
PDBGroupChannel (const PDBGroupPV::shared_pointer &pv, const std::tr1::shared_ptr< epics::pvAccess::ChannelProvider > &prov, const epics::pvAccess::ChannelRequester::shared_pointer &req)
 
+virtual
+epics::pvAccess::ChannelPut::shared_pointer 
createChannelPut (epics::pvAccess::ChannelPutRequester::shared_pointer const &requester, epics::pvData::PVStructure::shared_pointer const &pvRequest) OVERRIDE FINAL
 
+virtual
+epics::pvData::Monitor::shared_pointer 
createMonitor (epics::pvData::MonitorRequester::shared_pointer const &requester, epics::pvData::PVStructure::shared_pointer const &pvRequest) OVERRIDE FINAL
 
+virtual void printInfo (std::ostream &out) OVERRIDE FINAL
 
- Public Member Functions inherited from BaseChannel
BaseChannel (const std::string &name, const std::tr1::weak_ptr< epics::pvAccess::ChannelProvider > &prov, const epics::pvAccess::ChannelRequester::shared_pointer &req, const epics::pvData::StructureConstPtr &dtype)
 
+virtual std::string getRequesterName () OVERRIDE
 
+virtual void destroy () OVERRIDE FINAL
 
+virtual std::tr1::shared_ptr
+< epics::pvAccess::ChannelProvider > 
getProvider () OVERRIDE FINAL
 
+virtual std::string getRemoteAddress () OVERRIDE
 
+virtual std::string getChannelName () OVERRIDE FINAL
 
+virtual std::tr1::shared_ptr
+< epics::pvAccess::ChannelRequester > 
getChannelRequester () OVERRIDE FINAL
 
+virtual void getField (epics::pvAccess::GetFieldRequester::shared_pointer const &requester, std::string const &subField) OVERRIDE
 
+ + + + + + + + + + + + + + + + + + +

+Public Attributes

+PDBGroupPV::shared_pointer pv
 
+std::vector< ASCLIENTaspvt
 
+ASCred cred
 
- Public Attributes inherited from BaseChannel
+epicsMutex lock
 
+const std::string pvname
 
+const
+epics::pvAccess::ChannelProvider::weak_pointer 
provider
 
+const requester_type::weak_pointer requester
 
+const
+epics::pvData::StructureConstPtr 
fielddesc
 
+ + + +

+Static Public Attributes

+static size_t num_instances
 
+ + + + +

+Additional Inherited Members

- Public Types inherited from BaseChannel
+typedef epicsGuard< epicsMutex > guard_t
 
+

Detailed Description

+
+

Definition at line 136 of file pdbgroup.h.

+

The documentation for this struct was generated from the following files: +
+ + + + diff --git a/struct_p_d_b_group_channel__coll__graph.map b/struct_p_d_b_group_channel__coll__graph.map new file mode 100644 index 0000000..e4e447e --- /dev/null +++ b/struct_p_d_b_group_channel__coll__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/struct_p_d_b_group_channel__coll__graph.md5 b/struct_p_d_b_group_channel__coll__graph.md5 new file mode 100644 index 0000000..f2beb03 --- /dev/null +++ b/struct_p_d_b_group_channel__coll__graph.md5 @@ -0,0 +1 @@ +dfb888b6e25befe674889d4d84d852f4 \ No newline at end of file diff --git a/struct_p_d_b_group_channel__coll__graph.png b/struct_p_d_b_group_channel__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..50f092e025ff5db3ae961443ffb22f25121f817a GIT binary patch literal 13428 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 literal 0 HcmV?d00001 diff --git a/struct_p_d_b_group_channel__inherit__graph.map b/struct_p_d_b_group_channel__inherit__graph.map new file mode 100644 index 0000000..98e277f --- /dev/null +++ b/struct_p_d_b_group_channel__inherit__graph.map @@ -0,0 +1,3 @@ + + + diff --git a/struct_p_d_b_group_channel__inherit__graph.md5 b/struct_p_d_b_group_channel__inherit__graph.md5 new file mode 100644 index 0000000..945f46e --- /dev/null +++ b/struct_p_d_b_group_channel__inherit__graph.md5 @@ -0,0 +1 @@ +6d6f25b044503b8c23e2719f8452efb4 \ No newline at end of file diff --git a/struct_p_d_b_group_channel__inherit__graph.png b/struct_p_d_b_group_channel__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..c3b2ef24669f1053a0193bb4396f96edb22cbc27 GIT binary patch literal 10102 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 LW$6;B$3g!Ke0`AF literal 0 HcmV?d00001 diff --git a/struct_p_d_b_group_monitor-members.html b/struct_p_d_b_group_monitor-members.html new file mode 100644 index 0000000..91858b1 --- /dev/null +++ b/struct_p_d_b_group_monitor-members.html @@ -0,0 +1,127 @@ + + + + + + +pva2pva: Member List + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ +
+
+
+
PDBGroupMonitor Member List
+
+
+ +

This is the complete list of members for PDBGroupMonitor, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
atomic (defined in PDBGroupMonitor)PDBGroupMonitor
BaseMonitor(epicsMutex &lock, const requester_t::weak_pointer &requester, const epics::pvData::PVStructure::shared_pointer &pvReq) (defined in BaseMonitor)BaseMonitorinline
connect(guard_t &guard, const epics::pvData::PVStructurePtr &value)BaseMonitorinline
destroy() OVERRIDE FINAL (defined in PDBGroupMonitor)PDBGroupMonitorvirtual
getStats(Stats &s) const (defined in BaseMonitor)BaseMonitorinlinevirtual
getValue() (defined in BaseMonitor)BaseMonitorinline
guard_t typedef (defined in BaseMonitor)BaseMonitor
lock (defined in BaseMonitor)BaseMonitor
num_instances (defined in PDBGroupMonitor)PDBGroupMonitorstatic
onStart() OVERRIDE FINAL (defined in PDBGroupMonitor)PDBGroupMonitorvirtual
onStop() OVERRIDE FINAL (defined in PDBGroupMonitor)PDBGroupMonitorvirtual
PDBGroupMonitor(const PDBGroupPV::shared_pointer &pv, const requester_type::weak_pointer &requester, const epics::pvData::PVStructure::shared_pointer &pvReq) (defined in PDBGroupMonitor)PDBGroupMonitor
POINTER_DEFINITIONS(PDBGroupMonitor) (defined in PDBGroupMonitor)PDBGroupMonitor
POINTER_DEFINITIONS(BaseMonitor) (defined in BaseMonitor)BaseMonitor
post(guard_t &guard, const epics::pvData::BitSet &updated, no_overflow)BaseMonitorinline
post(guard_t &guard)BaseMonitorinline
post(guard_t &guard, const epics::pvData::BitSet &updated, const epics::pvData::BitSet &overflowed)BaseMonitorinline
post(guard_t &guard, const epics::pvData::BitSet &updated)BaseMonitorinline
pv (defined in PDBGroupMonitor)PDBGroupMonitor
requester_t typedef (defined in BaseMonitor)BaseMonitor
requestUpdate() OVERRIDE FINALPDBGroupMonitorvirtual
shared_from_this() (defined in BaseMonitor)BaseMonitorinline
unguard_t typedef (defined in BaseMonitor)BaseMonitor
weakself (defined in BaseMonitor)BaseMonitor
~BaseMonitor() (defined in BaseMonitor)BaseMonitorinlinevirtual
~PDBGroupMonitor() (defined in PDBGroupMonitor)PDBGroupMonitorvirtual
+ + + + diff --git a/struct_p_d_b_group_monitor.html b/struct_p_d_b_group_monitor.html new file mode 100644 index 0000000..e0b3869 --- /dev/null +++ b/struct_p_d_b_group_monitor.html @@ -0,0 +1,251 @@ + + + + + + +pva2pva: PDBGroupMonitor Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ +
+ +
+
+Inheritance diagram for PDBGroupMonitor:
+
+
Inheritance graph
+ + +
[legend]
+
+Collaboration diagram for PDBGroupMonitor:
+
+
Collaboration graph
+ + +
[legend]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

POINTER_DEFINITIONS (PDBGroupMonitor)
 
PDBGroupMonitor (const PDBGroupPV::shared_pointer &pv, const requester_type::weak_pointer &requester, const epics::pvData::PVStructure::shared_pointer &pvReq)
 
+virtual void onStart () OVERRIDE FINAL
 
+virtual void onStop () OVERRIDE FINAL
 
virtual void requestUpdate () OVERRIDE FINAL
 
+virtual void destroy () OVERRIDE FINAL
 
- Public Member Functions inherited from BaseMonitor
POINTER_DEFINITIONS (BaseMonitor)
 
+shared_pointer shared_from_this ()
 
BaseMonitor (epicsMutex &lock, const requester_t::weak_pointer &requester, const epics::pvData::PVStructure::shared_pointer &pvReq)
 
+const
+epics::pvData::PVStructurePtr & 
getValue ()
 
void connect (guard_t &guard, const epics::pvData::PVStructurePtr &value)
 
+bool post (guard_t &guard, const epics::pvData::BitSet &updated, no_overflow)
 post update if queue not full, if full return false w/o overflow
 
+bool post (guard_t &guard)
 post update of pending changes. eg. call from requestUpdate()
 
+bool post (guard_t &guard, const epics::pvData::BitSet &updated, const epics::pvData::BitSet &overflowed)
 post update with changed and overflowed masks (eg. when updates were lost in some upstream queue)
 
+bool post (guard_t &guard, const epics::pvData::BitSet &updated)
 post update with changed
 
+virtual void getStats (Stats &s) const
 
+ + + + + + + + + + +

+Public Attributes

+PDBGroupPV::shared_pointer pv
 
+bool atomic
 
- Public Attributes inherited from BaseMonitor
+weak_pointer weakself
 
+epicsMutex & lock
 
+ + + +

+Static Public Attributes

+static size_t num_instances
 
+ + + + + + + + +

+Additional Inherited Members

- Public Types inherited from BaseMonitor
+typedef
+epics::pvAccess::MonitorRequester 
requester_t
 
+typedef epicsGuard< epicsMutex > guard_t
 
+typedef epicsGuardRelease
+< epicsMutex > 
unguard_t
 
+

Detailed Description

+
+

Definition at line 196 of file pdbgroup.h.

+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
void PDBGroupMonitor::requestUpdate ()
+
+virtual
+
+

called when within release() when the opportunity exists to end the overflow condition May do nothing, or lock and call post()

+ +

Reimplemented from BaseMonitor.

+ +

Definition at line 470 of file pdbgroup.cpp.

+
471 {
+
472  Guard G(pv->lock);
+
473  post(G);
+
474 }
+
bool post(guard_t &guard, const epics::pvData::BitSet &updated, no_overflow)
post update if queue not full, if full return false w/o overflow
Definition: pvahelper.h:136
+
+
+
+
The documentation for this struct was generated from the following files: +
+ + + + diff --git a/struct_p_d_b_group_monitor__coll__graph.map b/struct_p_d_b_group_monitor__coll__graph.map new file mode 100644 index 0000000..08acf52 --- /dev/null +++ b/struct_p_d_b_group_monitor__coll__graph.map @@ -0,0 +1,3 @@ + + + diff --git a/struct_p_d_b_group_monitor__coll__graph.md5 b/struct_p_d_b_group_monitor__coll__graph.md5 new file mode 100644 index 0000000..c77b5c1 --- /dev/null +++ b/struct_p_d_b_group_monitor__coll__graph.md5 @@ -0,0 +1 @@ +e3dadae42c249257c0997dd1050e9e15 \ No newline at end of file diff --git a/struct_p_d_b_group_monitor__coll__graph.png b/struct_p_d_b_group_monitor__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..18feb004d149bb5948999411a07ac8b55e29395a GIT binary patch literal 5657 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 literal 0 HcmV?d00001 diff --git a/struct_p_d_b_group_monitor__inherit__graph.map b/struct_p_d_b_group_monitor__inherit__graph.map new file mode 100644 index 0000000..08acf52 --- /dev/null +++ b/struct_p_d_b_group_monitor__inherit__graph.map @@ -0,0 +1,3 @@ + + + diff --git a/struct_p_d_b_group_monitor__inherit__graph.md5 b/struct_p_d_b_group_monitor__inherit__graph.md5 new file mode 100644 index 0000000..c77b5c1 --- /dev/null +++ b/struct_p_d_b_group_monitor__inherit__graph.md5 @@ -0,0 +1 @@ +e3dadae42c249257c0997dd1050e9e15 \ No newline at end of file diff --git a/struct_p_d_b_group_monitor__inherit__graph.png b/struct_p_d_b_group_monitor__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..18feb004d149bb5948999411a07ac8b55e29395a GIT binary patch literal 5657 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 literal 0 HcmV?d00001 diff --git a/struct_p_d_b_group_p_v-members.html b/struct_p_d_b_group_p_v-members.html new file mode 100644 index 0000000..42c0fef --- /dev/null +++ b/struct_p_d_b_group_p_v-members.html @@ -0,0 +1,132 @@ + + + + + + +pva2pva: Member List + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ +
+
+
+
PDBGroupPV Member List
+
+
+ +

This is the complete list of members for PDBGroupPV, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
addMonitor(PDBGroupMonitor *) (defined in PDBGroupPV)PDBGroupPV
complete (defined in PDBGroupPV)PDBGroupPV
connect(const std::tr1::shared_ptr< PDBProvider > &prov, const epics::pvAccess::ChannelRequester::shared_pointer &req) OVERRIDE FINAL (defined in PDBGroupPV)PDBGroupPVvirtual
fielddesc (defined in PDBPV)PDBPV
finalizeMonitor() (defined in PDBGroupPV)PDBGroupPV
initial_waits (defined in PDBGroupPV)PDBGroupPV
interested (defined in PDBGroupPV)PDBGroupPV
interested_add (defined in PDBGroupPV)PDBGroupPV
interested_iterating (defined in PDBGroupPV)PDBGroupPV
interested_remove (defined in PDBGroupPV)PDBGroupPV
interested_remove_t typedef (defined in PDBGroupPV)PDBGroupPV
interested_t typedef (defined in PDBGroupPV)PDBGroupPV
lock (defined in PDBGroupPV)PDBGroupPV
locker (defined in PDBGroupPV)PDBGroupPV
members (defined in PDBGroupPV)PDBGroupPV
members_t typedef (defined in PDBGroupPV)PDBGroupPV
monatomic (defined in PDBGroupPV)PDBGroupPV
name (defined in PDBGroupPV)PDBGroupPV
num_instances (defined in PDBGroupPV)PDBGroupPVstatic
PDBGroupPV() (defined in PDBGroupPV)PDBGroupPV
PDBPV() (defined in PDBPV)PDBPVinline
pgatomic (defined in PDBGroupPV)PDBGroupPV
POINTER_DEFINITIONS(PDBGroupPV) (defined in PDBGroupPV)PDBGroupPV
POINTER_DEFINITIONS(PDBPV) (defined in PDBPV)PDBPV
removeMonitor(PDBGroupMonitor *) (defined in PDBGroupPV)PDBGroupPV
scratch (defined in PDBGroupPV)PDBGroupPV
shared_from_this() (defined in PDBGroupPV)PDBGroupPVinline
show(int lvl) OVERRIDE (defined in PDBGroupPV)PDBGroupPVvirtual
weakself (defined in PDBGroupPV)PDBGroupPV
~PDBGroupPV() (defined in PDBGroupPV)PDBGroupPVvirtual
~PDBPV() (defined in PDBPV)PDBPVinlinevirtual
+ + + + diff --git a/struct_p_d_b_group_p_v.html b/struct_p_d_b_group_p_v.html new file mode 100644 index 0000000..ab9936f --- /dev/null +++ b/struct_p_d_b_group_p_v.html @@ -0,0 +1,232 @@ + + + + + + +pva2pva: PDBGroupPV Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ +
+ +
+
+Inheritance diagram for PDBGroupPV:
+
+
Inheritance graph
+ + +
[legend]
+
+Collaboration diagram for PDBGroupPV:
+
+
Collaboration graph
+ + +
[legend]
+ + + + +

+Classes

struct  Info
 
+ + + + + + + +

+Public Types

+typedef
+epics::pvData::shared_vector
+< Info
members_t
 
+typedef std::set
+< PDBGroupMonitor * > 
interested_t
 
+typedef std::set
+< BaseMonitor::shared_pointer > 
interested_remove_t
 
+ + + + + + + + + + + + + + + + + + +

+Public Member Functions

POINTER_DEFINITIONS (PDBGroupPV)
 
+shared_pointer shared_from_this ()
 
+virtual
+epics::pvAccess::Channel::shared_pointer 
connect (const std::tr1::shared_ptr< PDBProvider > &prov, const epics::pvAccess::ChannelRequester::shared_pointer &req) OVERRIDE FINAL
 
+void addMonitor (PDBGroupMonitor *)
 
+void removeMonitor (PDBGroupMonitor *)
 
+void finalizeMonitor ()
 
+virtual void show (int lvl) OVERRIDE
 
- Public Member Functions inherited from PDBPV
POINTER_DEFINITIONS (PDBPV)
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Attributes

+weak_pointer weakself
 
+epics::pvData::BitSet scratch
 
+epicsMutex lock
 
+bool pgatomic
 
+bool monatomic
 
+std::string name
 
+members_t members
 
+DBManyLock locker
 
+epics::pvData::PVStructurePtr complete
 
+bool interested_iterating
 
+interested_t interested
 
+interested_t interested_add
 
+interested_remove_t interested_remove
 
+size_t initial_waits
 
- Public Attributes inherited from PDBPV
+epics::pvData::StructureConstPtr fielddesc
 
+ + + +

+Static Public Attributes

+static size_t num_instances
 
+

Detailed Description

+
+

Definition at line 71 of file pdbgroup.h.

+

The documentation for this struct was generated from the following files: +
+ + + + diff --git a/struct_p_d_b_group_p_v_1_1_info-members.html b/struct_p_d_b_group_p_v_1_1_info-members.html new file mode 100644 index 0000000..93fbd40 --- /dev/null +++ b/struct_p_d_b_group_p_v_1_1_info-members.html @@ -0,0 +1,119 @@ + + + + + + +pva2pva: Member List + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
PDBGroupPV::Info Member List
+
+
+ +

This is the complete list of members for PDBGroupPV::Info, including all inherited members.

+ + + + + + + + + + + + + + + +
allowProc (defined in PDBGroupPV::Info)PDBGroupPV::Info
attachment (defined in PDBGroupPV::Info)PDBGroupPV::Info
builder (defined in PDBGroupPV::Info)PDBGroupPV::Info
chan (defined in PDBGroupPV::Info)PDBGroupPV::Info
chan2 (defined in PDBGroupPV::Info)PDBGroupPV::Info
evt_PROPERTY (defined in PDBGroupPV::Info)PDBGroupPV::Info
evt_VALUE (defined in PDBGroupPV::Info)PDBGroupPV::Info
had_initial_PROPERTY (defined in PDBGroupPV::Info)PDBGroupPV::Info
had_initial_VALUE (defined in PDBGroupPV::Info)PDBGroupPV::Info
Info() (defined in PDBGroupPV::Info)PDBGroupPV::Infoinline
locker (defined in PDBGroupPV::Info)PDBGroupPV::Info
pvif (defined in PDBGroupPV::Info)PDBGroupPV::Info
triggers (defined in PDBGroupPV::Info)PDBGroupPV::Info
triggers_t typedef (defined in PDBGroupPV::Info)PDBGroupPV::Info
+ + + + diff --git a/struct_p_d_b_group_p_v_1_1_info.html b/struct_p_d_b_group_p_v_1_1_info.html new file mode 100644 index 0000000..946df5e --- /dev/null +++ b/struct_p_d_b_group_p_v_1_1_info.html @@ -0,0 +1,165 @@ + + + + + + +pva2pva: PDBGroupPV::Info Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
PDBGroupPV::Info Struct Reference
+
+
+
+Collaboration diagram for PDBGroupPV::Info:
+
+
Collaboration graph
+ + +
[legend]
+ + + + +

+Public Types

+typedef std::vector< size_t > triggers_t
 
+ + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Attributes

+DBCH chan
 
+DBCH chan2
 
+std::tr1::shared_ptr< PVIFBuilderbuilder
 
+FieldName attachment
 
+triggers_t triggers
 
+DBManyLock locker
 
+p2p::auto_ptr< PVIFpvif
 
+DBEvent evt_VALUE
 
+DBEvent evt_PROPERTY
 
+bool had_initial_VALUE
 
+bool had_initial_PROPERTY
 
+bool allowProc
 
+

Detailed Description

+
+

Definition at line 88 of file pdbgroup.h.

+

The documentation for this struct was generated from the following file: +
+ + + + diff --git a/struct_p_d_b_group_p_v_1_1_info__coll__graph.map b/struct_p_d_b_group_p_v_1_1_info__coll__graph.map new file mode 100644 index 0000000..ea43ec5 --- /dev/null +++ b/struct_p_d_b_group_p_v_1_1_info__coll__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/struct_p_d_b_group_p_v_1_1_info__coll__graph.md5 b/struct_p_d_b_group_p_v_1_1_info__coll__graph.md5 new file mode 100644 index 0000000..14f086f --- /dev/null +++ b/struct_p_d_b_group_p_v_1_1_info__coll__graph.md5 @@ -0,0 +1 @@ +bf86f02ee8adfeb408fa18611625bfaf \ No newline at end of file diff --git a/struct_p_d_b_group_p_v_1_1_info__coll__graph.png b/struct_p_d_b_group_p_v_1_1_info__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..9d9d36e4b3ad671484fd7a8e82bea6ad6fe05940 GIT binary patch literal 9818 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 Ml8O>#Vuk_#10(1*w*UYD literal 0 HcmV?d00001 diff --git a/struct_p_d_b_group_p_v__coll__graph.map b/struct_p_d_b_group_p_v__coll__graph.map new file mode 100644 index 0000000..420da88 --- /dev/null +++ b/struct_p_d_b_group_p_v__coll__graph.map @@ -0,0 +1,3 @@ + + + diff --git a/struct_p_d_b_group_p_v__coll__graph.md5 b/struct_p_d_b_group_p_v__coll__graph.md5 new file mode 100644 index 0000000..880d9f4 --- /dev/null +++ b/struct_p_d_b_group_p_v__coll__graph.md5 @@ -0,0 +1 @@ +e4464774e1b37c7c9cb8002aaf10879d \ No newline at end of file diff --git a/struct_p_d_b_group_p_v__coll__graph.png b/struct_p_d_b_group_p_v__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..07c0d4ee92d6030764c44f88dc26b03fc4b2b65b GIT binary patch literal 2706 zcmbtWS5#Bm7Cls{4+Jj8P^1J1T_REg3Ifu5?hZq%5=|xHe4Mo6EE^t9aiZtmL zkX|DK7Z6Yckxr=6-|^!)-pBiU_v@|ROU#*k83^@&W!irM3r5P6arQq=d zMo+6xw23%zc42tDy%`njMP&{di5FP;*?BdyxWbE;Pn8*q@8m&0yy6v%PmZ8iwB&v% z5)z!Ej*+lrs=nEHd}=%VS1h$O9?P7uG=ay=E;pJy!1%385d;{*!eR-9oG(2D@{%<) z1tX(0yT(5RvUFT!iF^@%U4Wf|mO5Nq?PWtW3S#Zz;)fEm)_n4$d6_5nwF4XwfWwOm z3O?+HNDU2dssL)WQC-bmv7ECKU%~c7KaZF4XHld zDDdoFv4C*|DDm=kzcyxwczGi<#Mig%^7yC64p=8ACkzI2`*wGKx@-WiiLNfhOoZ6G zG1E9PJ=p6k1YN=3I>>D@mW8ob1vZA0H?2sdg>x z#D!)f5=X^qCbI5@Ua$`2*Jsyqc6P?&t3&=s=v49l5@so}zOsV&#{`eZhlYlNcS57l z-rj3mZYnC@rx&|5WYSfYl(02ZvMwzP3k%gXHEKcIZd%fSD;BE@=Q{fN^L=9@&l<54 z{@w-C7;$q=ox(wq&un*lTG+!S0 z`8Lv0VvjTyMFTD8^L4 zY_qCKk;5_M?)o7W0DF;^ogJQ?O%+$r`LQ124rTZwfd|5(5~*=1Va{IVQipBhNSlU{ zw)VHJiU)zV4rb(HYc>ZJVH)s%Nr`)^XR_2A%Z}lk^Wk@gkPlPQ@tv#+3ix-1MWdym z<#nEU`h^W8B^klcQu3G7)WPOv&wlso>ekY`<*l<`^6xh|-g2KGZyu!ebwf(+v38R@ zP=W&Lj>j@j0t^ism)u<%ZfR)Xo|$`01^B-ze&hALKQ*ndPhecKy6L19Nc@bX0)P<- z3Fsh+K(;M6WqEXM<*wW_PRRb1oh3BPS^`Y0uXoD)Pq-#y1lBu6zi{UJa37>}zP?GF zsS}9p821ci%Z-eL0%4??P48tqPc-W9Zp`jnrd^tce;p&R)qN$D8t|Q)#Vl*FpbHyM zcIkfSKo{DI=$xknW@Kc5 zl`mX^R8vcrb;-`m>~pW$qv7M_wJvvl@?%7>#9EXXr}gLe@9y-GUpF^%Qc?<3%dbmy z>7SAFZ+CWfLSoF$Ma39U6J<_dmvEBGpCBBHbzu@9AxTR&2knSzuwRmO<~57H^G_wZ z`{?-C!rc7m=xCRw+^JDCy+2x0u)gWd8*uI5%*<&QfybuYd2e@jU|`_nXm1sU%W~Y# z%gdXYnK3dlvaCu==(E_D zx-^_~u)Y0})Jb4+Yzhp}*Y8`MDDPd=*4FM%lkV^9o5$5V$|wp8qfd|a4mRgu%m!q*-e_&hRJPEM}exfyyr*|6DTh4S|H_VwM^+Jf(JE{hH??er>ECtKCj)HHmHq!@mm>+!6yFEqbMn`a8& z-q`_hL}G?snK^)c{Sc4;apCObuqroK0D<5Dt|F12$>guAs|K}ZuPp&Ul&Ji0!%?E5 zpkU!A<(s3-0f;7u;^E<;MCwX=G_w@9q>vD*6bZ8J>-^>l%su@5w_po~I#?WTd(+inTErmjmCAk3Kf?ilJ0X=sVg-JzuZu9C z#!KxMwu_75C4&in-{eFgG!x?E6PpM^#9q9jyoA5Me?@h*yrksn*N#{j z85u)S3sGV~z2jDrR-yT2PR?6&Ls^P!z{u!mzaAVo~8YHw_>$~$Ze4qF0;_*3@0TeVGtR| z2b-<;SFJ(O1#N_nkMx+5kkI@Oa=vGc3KEG_SD$@(($UcYHow@z$LGzS!W*&K%J9-CpqJZ{?G zv?@G&>-6-rJGe$tGpDSqjO~hg;-TYN&vW5Vd$R42&oeWM-v8t_x&<4GDiLm?|BHin ZLSIpy&efjff|e3Ao7%=&Wty%L{{{@-7wiB4 literal 0 HcmV?d00001 diff --git a/struct_p_d_b_group_p_v__inherit__graph.map b/struct_p_d_b_group_p_v__inherit__graph.map new file mode 100644 index 0000000..420da88 --- /dev/null +++ b/struct_p_d_b_group_p_v__inherit__graph.map @@ -0,0 +1,3 @@ + + + diff --git a/struct_p_d_b_group_p_v__inherit__graph.md5 b/struct_p_d_b_group_p_v__inherit__graph.md5 new file mode 100644 index 0000000..880d9f4 --- /dev/null +++ b/struct_p_d_b_group_p_v__inherit__graph.md5 @@ -0,0 +1 @@ +e4464774e1b37c7c9cb8002aaf10879d \ No newline at end of file diff --git a/struct_p_d_b_group_p_v__inherit__graph.png b/struct_p_d_b_group_p_v__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..07c0d4ee92d6030764c44f88dc26b03fc4b2b65b GIT binary patch literal 2706 zcmbtWS5#Bm7Cls{4+Jj8P^1J1T_REg3Ifu5?hZq%5=|xHe4Mo6EE^t9aiZtmL zkX|DK7Z6Yckxr=6-|^!)-pBiU_v@|ROU#*k83^@&W!irM3r5P6arQq=d zMo+6xw23%zc42tDy%`njMP&{di5FP;*?BdyxWbE;Pn8*q@8m&0yy6v%PmZ8iwB&v% z5)z!Ej*+lrs=nEHd}=%VS1h$O9?P7uG=ay=E;pJy!1%385d;{*!eR-9oG(2D@{%<) z1tX(0yT(5RvUFT!iF^@%U4Wf|mO5Nq?PWtW3S#Zz;)fEm)_n4$d6_5nwF4XwfWwOm z3O?+HNDU2dssL)WQC-bmv7ECKU%~c7KaZF4XHld zDDdoFv4C*|DDm=kzcyxwczGi<#Mig%^7yC64p=8ACkzI2`*wGKx@-WiiLNfhOoZ6G zG1E9PJ=p6k1YN=3I>>D@mW8ob1vZA0H?2sdg>x z#D!)f5=X^qCbI5@Ua$`2*Jsyqc6P?&t3&=s=v49l5@so}zOsV&#{`eZhlYlNcS57l z-rj3mZYnC@rx&|5WYSfYl(02ZvMwzP3k%gXHEKcIZd%fSD;BE@=Q{fN^L=9@&l<54 z{@w-C7;$q=ox(wq&un*lTG+!S0 z`8Lv0VvjTyMFTD8^L4 zY_qCKk;5_M?)o7W0DF;^ogJQ?O%+$r`LQ124rTZwfd|5(5~*=1Va{IVQipBhNSlU{ zw)VHJiU)zV4rb(HYc>ZJVH)s%Nr`)^XR_2A%Z}lk^Wk@gkPlPQ@tv#+3ix-1MWdym z<#nEU`h^W8B^klcQu3G7)WPOv&wlso>ekY`<*l<`^6xh|-g2KGZyu!ebwf(+v38R@ zP=W&Lj>j@j0t^ism)u<%ZfR)Xo|$`01^B-ze&hALKQ*ndPhecKy6L19Nc@bX0)P<- z3Fsh+K(;M6WqEXM<*wW_PRRb1oh3BPS^`Y0uXoD)Pq-#y1lBu6zi{UJa37>}zP?GF zsS}9p821ci%Z-eL0%4??P48tqPc-W9Zp`jnrd^tce;p&R)qN$D8t|Q)#Vl*FpbHyM zcIkfSKo{DI=$xknW@Kc5 zl`mX^R8vcrb;-`m>~pW$qv7M_wJvvl@?%7>#9EXXr}gLe@9y-GUpF^%Qc?<3%dbmy z>7SAFZ+CWfLSoF$Ma39U6J<_dmvEBGpCBBHbzu@9AxTR&2knSzuwRmO<~57H^G_wZ z`{?-C!rc7m=xCRw+^JDCy+2x0u)gWd8*uI5%*<&QfybuYd2e@jU|`_nXm1sU%W~Y# z%gdXYnK3dlvaCu==(E_D zx-^_~u)Y0})Jb4+Yzhp}*Y8`MDDPd=*4FM%lkV^9o5$5V$|wp8qfd|a4mRgu%m!q*-e_&hRJPEM}exfyyr*|6DTh4S|H_VwM^+Jf(JE{hH??er>ECtKCj)HHmHq!@mm>+!6yFEqbMn`a8& z-q`_hL}G?snK^)c{Sc4;apCObuqroK0D<5Dt|F12$>guAs|K}ZuPp&Ul&Ji0!%?E5 zpkU!A<(s3-0f;7u;^E<;MCwX=G_w@9q>vD*6bZ8J>-^>l%su@5w_po~I#?WTd(+inTErmjmCAk3Kf?ilJ0X=sVg-JzuZu9C z#!KxMwu_75C4&in-{eFgG!x?E6PpM^#9q9jyoA5Me?@h*yrksn*N#{j z85u)S3sGV~z2jDrR-yT2PR?6&Ls^P!z{u!mzaAVo~8YHw_>$~$Ze4qF0;_*3@0TeVGtR| z2b-<;SFJ(O1#N_nkMx+5kkI@Oa=vGc3KEG_SD$@(($UcYHow@z$LGzS!W*&K%J9-CpqJZ{?G zv?@G&>-6-rJGe$tGpDSqjO~hg;-TYN&vW5Vd$R42&oeWM-v8t_x&<4GDiLm?|BHin ZLSIpy&efjff|e3Ao7%=&Wty%L{{{@-7wiB4 literal 0 HcmV?d00001 diff --git a/struct_p_d_b_group_put-members.html b/struct_p_d_b_group_put-members.html new file mode 100644 index 0000000..01c85a1 --- /dev/null +++ b/struct_p_d_b_group_put-members.html @@ -0,0 +1,120 @@ + + + + + + +pva2pva: Member List + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ +
+
+
+
PDBGroupPut Member List
+
+
+ +

This is the complete list of members for PDBGroupPut, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + +
atomic (defined in PDBGroupPut)PDBGroupPut
cancel() OVERRIDE FINAL (defined in PDBGroupPut)PDBGroupPutinlinevirtual
changed (defined in PDBGroupPut)PDBGroupPut
channel (defined in PDBGroupPut)PDBGroupPut
destroy() OVERRIDE FINAL (defined in PDBGroupPut)PDBGroupPutinlinevirtual
doProc (defined in PDBGroupPut)PDBGroupPut
doWait (defined in PDBGroupPut)PDBGroupPut
get() OVERRIDE FINAL (defined in PDBGroupPut)PDBGroupPutvirtual
getChannel() OVERRIDE FINAL (defined in PDBGroupPut)PDBGroupPutinlinevirtual
lastRequest() OVERRIDE FINAL (defined in PDBGroupPut)PDBGroupPutinlinevirtual
num_instances (defined in PDBGroupPut)PDBGroupPutstatic
PDBGroupPut(const PDBGroupChannel::shared_pointer &channel, const epics::pvAccess::ChannelPutRequester::shared_pointer &requester, const epics::pvData::PVStructure::shared_pointer &pvReq) (defined in PDBGroupPut)PDBGroupPut
POINTER_DEFINITIONS(PDBGroupPut) (defined in PDBGroupPut)PDBGroupPut
put(epics::pvData::PVStructure::shared_pointer const &pvPutStructure, epics::pvData::BitSet::shared_pointer const &putBitSet) OVERRIDE FINAL (defined in PDBGroupPut)PDBGroupPutvirtual
pvf (defined in PDBGroupPut)PDBGroupPut
pvif (defined in PDBGroupPut)PDBGroupPut
requester (defined in PDBGroupPut)PDBGroupPut
requester_t typedef (defined in PDBGroupPut)PDBGroupPut
~PDBGroupPut() (defined in PDBGroupPut)PDBGroupPutvirtual
+ + + + diff --git a/struct_p_d_b_group_put.html b/struct_p_d_b_group_put.html new file mode 100644 index 0000000..c120ed3 --- /dev/null +++ b/struct_p_d_b_group_put.html @@ -0,0 +1,191 @@ + + + + + + +pva2pva: PDBGroupPut Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ +
+ +
+
+Inheritance diagram for PDBGroupPut:
+
+
Inheritance graph
+
[legend]
+
+Collaboration diagram for PDBGroupPut:
+
+
Collaboration graph
+
[legend]
+ + + + +

+Public Types

+typedef
+epics::pvAccess::ChannelPutRequester 
requester_t
 
+ + + + + + + + + + + + + + + + + +

+Public Member Functions

POINTER_DEFINITIONS (PDBGroupPut)
 
PDBGroupPut (const PDBGroupChannel::shared_pointer &channel, const epics::pvAccess::ChannelPutRequester::shared_pointer &requester, const epics::pvData::PVStructure::shared_pointer &pvReq)
 
+virtual void destroy () OVERRIDE FINAL
 
+virtual std::tr1::shared_ptr
+< epics::pvAccess::Channel > 
getChannel () OVERRIDE FINAL
 
+virtual void cancel () OVERRIDE FINAL
 
+virtual void lastRequest () OVERRIDE FINAL
 
+virtual void put (epics::pvData::PVStructure::shared_pointer const &pvPutStructure, epics::pvData::BitSet::shared_pointer const &putBitSet) OVERRIDE FINAL
 
+virtual void get () OVERRIDE FINAL
 
+ + + + + + + + + + + + + + + + + +

+Public Attributes

+PDBGroupChannel::shared_pointer channel
 
+requester_type::weak_pointer requester
 
+bool atomic
 
+bool doWait
 
+PVIF::proc_t doProc
 
+epics::pvData::BitSetPtr changed
 
+epics::pvData::PVStructurePtr pvf
 
+std::vector
+< std::tr1::shared_ptr< PVIF > > 
pvif
 
+ + + +

+Static Public Attributes

+static size_t num_instances
 
+

Detailed Description

+
+

Definition at line 163 of file pdbgroup.h.

+

The documentation for this struct was generated from the following files: +
+ + + + diff --git a/struct_p_d_b_group_put__coll__graph.map b/struct_p_d_b_group_put__coll__graph.map new file mode 100644 index 0000000..adbcafd --- /dev/null +++ b/struct_p_d_b_group_put__coll__graph.map @@ -0,0 +1,2 @@ + + diff --git a/struct_p_d_b_group_put__coll__graph.md5 b/struct_p_d_b_group_put__coll__graph.md5 new file mode 100644 index 0000000..a49eadb --- /dev/null +++ b/struct_p_d_b_group_put__coll__graph.md5 @@ -0,0 +1 @@ +9b974a0837f395f03e9f6c67833c2728 \ No newline at end of file diff --git a/struct_p_d_b_group_put__coll__graph.png b/struct_p_d_b_group_put__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..154b5cf1c89dc88178974f6d6d5e16bca1a5779b GIT binary patch literal 7946 zcmZvBbyQU0xAp)6qtp=6jRJy{5(5Z~qzDcz4H6~K}20?{4XI}iwjNb#AhIs}513x4*8VuNd+ z`MVSFfoH0uAPc$q_nq1FB^ClR(0eRN zYaQbof=Ouqm}76_7dxK6*$?{+2j?S};89=&nhZo9bl{Vj0I>yusQw>U>H}d2sfGM$Ik&@hI~b!uwr z#H6I2xjTp+*fDd6s5k^Njt%>t*T9>Hs+HB%l3pi-)p(E}OwP{E9R^yQ4<0zWxxM_w zBw8G7Xek_G($Ud@L?U;MDeiXIPv0DEP20L@X~j1xV`<{m-Nd9zcv)Cm&oa=6(np!T zgAelxmT=(U5ymtz_;ac0=x`e2+`@i}LZPNC%qwQTAk)M=4$NP?7`W8M@5WE8z==yg zTpMbrtJ_##_ugy8?}}oOfksjbV6&K8S%t%v56>Iiww)XuH)blQ&3P)Tbp==QczGxNlD3&@TzWXyjt#v zn4FxH)s&I>4jvIM_)AEL%~8T?H22R`sfdt}8cxrw6+x?`H`wIkH-p~Cn_9lUe`8o= zCQA$>R^ZazU0q+AoBx8>L$hXQ^@LLf%pbL!|E8mih)+xmgMqlP7E(X9P*zh@Ln5PM zW5;HzYzmG?DS2P_!7P-M9t96rWQaQBv1n>&u(c8%oXBzCohrK%n4cUljb#}9u%o1; z1gWHCbGox|e0+=@kcq*37+TZFYwhS*oig^jKX!96XHS-{sD|kq8lp--V1xVb-o4xI zDlZ?>&>$YQ0%ch~Uv{d4W-Tw95{DkP++3Fy6oe10{cQAzg;ErXh>F&!WJr#CS`j3a zzlJ`xo39O6foBXQ{2&~8EuZw`QF;vQ%IfT(dudkN{IYKUN zxiOjtY6|3Xe0;oiiNQ>z6*=kU?|~FHg{Uy2Sem@21}u*)`gLmT7WxwS4i67Gkg0DM zzhTX8(G!REtv*WX2VogV5n)5q($R(IPkhx*h>M$V@$64A{`!QbRjI zVwY^1Y?%9lDI)f>1DrIvgELF;^wiX?_4RJ^N1)U-G&CIP*Y@9L_+At=H%msX0Brh) zF-}gSV`G@Qar z7nf3_rmd|lQ!}&ctE>Kjfp8~e`jd^t#aDKA&7Q~B#Gzw$OX}6i3Iog$WW|~W-?^ZM z6^PbVr|)fTP^$B?GJf6!rOLiK=QRTZgZ}>hmqj`wv$M~yu~4&>J%fXT6{!qJgCKQ0RaAeE{+tRJ!8hU@{_1sRY?&>O%!U$_D)W|WMj)ApyGuwO%>~}ZES?E z)PDW?=k%wa%B|64mO#~T;$WOReXJF#9Z`vNg~i2rRX^L? zZ?Tx0n2hZ3$#$CJL$X~Wr^9)r$%nq5?XUE79PsE@$B^`t7&hP$QpaRu7^|xCd!Oxr z%^O_R*WL<+WF3SD6e5_vIX)2*nwXtU?pj%b^TMDPM;qi!OwlW6Aw+cGKM`^AHh3uJ zZHZCZ`K$&|C<@StiHUF$jpP3vM~$WnJRkW1WkJZ;tbAZLH$rDYQKYnS*GC%e z?x(l}l&Y?gsS$DX;1tQ8%g-&gyQ-;?0@C2(5}A=!8*jg9D!SAy^9qH!1}M5L#>dC^ z=nVF4Csbhu;eOB;|W`c5!h5 z@W=0PKtwiquEt(lOY8jd@=uEyh%z8M9v&W*|9!Si5#8P0088+0-I{Om5|NVf`!iWA zARv(2_Kr1D1+muru!ow4h6PPVMh1A1vNEC2bI%$=QFSAu^tiYq(Diq|W*aJ`mN+$i zT%?ng#po1)HG`H*Lh~p$E9mXgu}Aep7*`r4WTQg5Ur zLMf4lj4R_=#oK*TA0MBCiH`e9pWZV`rCS#xm>pbP-iL){3dy9RD!*P<;wkx2-QqK9 z+}q#BR9Ei+t_5N@Iy&0T35v_VHm)*Yx%uG;ZSdJrDAW7*@97yB0E&JH(+@HKCHX$y zw|&71T^KX`aTkYdm+l_LeHc{oa;xG+itvaqAq2A@keAD`>1^TQX)%C@$) zFH4PHT-mUqqZlPNH#e=p{(UY_(CAzE`1m+DIHuJ#3tSFjH7uLapC+Xg!wL(z)S^Z2 zb&5O_ywkN0dKn3WSe&q#o0~AEf<0;lFxsgS!yJpEl9Iu`zSz&jxu=A&ue?L)Q!G>D zXaOPDWp>BJmU)D?wA@T%%rYc>k~1=H!2a!K%5l3K(E!MpQU=)B>Aih?W^CQOy`M;j z=}aaV;3C(AW!YhC8M2@Po6Zl{Qj(J56A}m}0^85JEsr*6kmLn)NnQAQG%cob{+kB|mv1L!P@`w`zUn`;W?qt^|c5u4?lfH&(` z+j^XA=^_x{s!?+n$A7f-^k(gN)m}w#Ab6PL`r6v0H8c(ZQIK66`=WxfwXH9_;~2$W z`B%}x!s7b!w8iVx4&;RE?W(awxbNO#Yfmgkg#5AZn4To_|RiVmvPL-@t>*S;NXXpHr+8S5}rpfkErg##1WChqoc_ZUTzK! zdqCbWNqV0xxc>wg)1neE3SS<+;2@$E3+3JXg+AOMMV#} zxf?tVe;;j(fm>rRAc~*VR1-j4e&veRgJs)T>uPUY=3h?I9~GtCW-!AD=w{B_KX1 zw>w9x<8Ni$b4-7e?b3}=WQOH_0e~&((;h|&k9zawO$OXCI~K|HQK1epe4D~yFzS8b z*RKRnD8GOJro3FQ%KB~{t&%uZNc+&tZPDeh-`SH&e==m%jg6TY7`E5f&p=Da;=GNg znqev~F7D^&XDy><2C{d4ejX60?rHFeG3%nGrmn584?&{^g@nLHpY>Lg9V?Qpfuw%B z!H|N?kd!cO56jKHM;t1n9|xD6Ak3*&($bm$P56m~gm_LeWRKXCsf$!1- zGuso$i}HeJ^W_LCH$ijNV0E)sugc7O$UO8%B&oek7J5@e26E(4r3F@|{DQNyw=66q zz93yQ;QK(lF;rCwuAkHJ`$(*r<`cB16@j*2y5a_EZL|S5!mqoj&qHG^yZ|)sM^`T^-LL$ziV@yWPsnI4J zcto4ms|hlnm1)ea3V4GIATbid6|uM}A}Ws`KOP=F8yY8x?xKP^NHPuec~!aE6oz)4 z1_$@nIMYKo37Fl=5yr+|KPCMfD{`>0qD&GaB7!R_f^E04Awt;gNO|vr@Ugbw3;}9E zq9_yUpe)C;y(wk(el7^Y9ZMx)Yr4#&_xMk=QFGDiA+EGqgWI{7SX&?)5p@Vi{CxdW z`cFjOl7G(}w}1L+Cns$n6ZZld2h<4A-XVxB^U!KxHeumc2fv!e5qL7r>#AN}UgRFS zd5g6T4dnVf4<1BDrZ%`|SiHWw(0E>1mlOokEB`gd>rr#dl8QZ6@fzyuR&H^55`n=? zg%75E{v6WO6kbu$QDqZ7S#)kXQ!XGKLGAzXU{ebvFTa$hgnPOxMGkd%@q&mkx-=_5 zR4n<8MMzLYo&f|CD`a4ok}$QiHe@q9d#233vN9l# zo-P1+@Jn$un81UIkMfC!dRA7zKVo`y=`BE=tX&#%@@MMri2}kMV#-2H zWN8LHh2TqGN^EF5(&*}-ZyT(w`NmgFs0@Q~9Z1%&vhw)p{n&bp-JW`jli&%XUwarT zKHk1vLYXk+_qTv*E34Mz{HL)m|} zpe$&96l&nl)YQ?28M{pd4RV|n<*wG{W6#_G&b>CSj0J8PKWTj zi)&JiU2#?UqmMNKkfSY%6x|BRdZ+twT`MYyu=wPQn#KXFb&tJFm*w_+arbxRWX%AQ zZLDutxU7Xa(*hx;U)JGb$;OSfy;JTwuU<(zIH)T{khLH)Jpr))>gKWE%|M~NUR#7j z(~J#`jk#{9tAO;tlQG-WbhqDa1toZfPu#}vYxo*p zk&}tp?YWAZThGC27YGswW2%%(eiJD4r|;fz;oy+>_HO!J^iUZn#!-Q2O0X%2fsl)f z>nmq4Ixl_`Iy>FeQ&-+RqdOZ;e-$cX&8zP{q$?mtA3bOmqbUta&x}s zvkEqk3-T_H`ceDegH$u`mlHP(hKDDF=Wd`Wqd8~F*PCs-BA2I4Vuh1Ujk!f z^x)&!IhxucA!z!cL0)2FMg<=nLRBopmL}!Dzs%Pk--E*y6+%505s)IAuZ;ZfwRGp_ zw@Qo*C7g0AT5edTu{0k&VU*(9>`fKj&+wT%ovm_E6^p;+=~hTWZ_Sc4I$Hm_k1YL3 z!PUM36BE<4(bLxf>1mrdp?c32ug;(Fl^PoG-T)lRbSWe{+8Pg@eEH+^ix!UitNv5e zt#dW0#rhiIcr&$*T(LdiU=XL+reBP{Wl`S3#VrEa783GX!t1KB5wClW9zh8<-{ddD z0~M(+(D19S6zuOO1UqE{JB@OHqol4JjEGM6^1pgDSWko(72O1*-xeE)8flRK-I{>H z#E*mFM*PaTULiR+wOwH@3kw1SG(HS+8Q

MlhYXd>A5{#feRruZ(@%c>E+*G0sPsc+s)DRovE*T=PZx|RnAx3&fy zUL03^blmno_;+JSc6M)`5_w_abou;7O;tPnkAh2TQKp=*zPmc2yg?)u=4VY z4Bvy}6UO;sS1hjEVGMgl-M>{Me*N;YnfgpfJAU~spiWr0b3v0JbJl;lfE~;vyiT@0 zyf7pT!F(9W?d-HAUVAN~m6fxSoA-Kh`iw(5(5^7>U1TItM90Uca{dnkR#r60DI+FY z{BCqBEP6hR(JN5@p1(eRzx$VK7!X6?+?%VCGMoJ?Nie2RQBeWo5Xd`h+aI?f{(2DL zI{l9;0fqGdP~SZ^!15CjsR5Q8Fod%>2?!#d2H^pBpO%Iu++uuc>U3`pdiyquneM~M zzt@)p1O!!;l^3VGEw5U!fl04RO9IJ83?Ub0z`~LqzX9C!`fx~U1tECP2|S65&IkQ!-e-KC%~x3HjOU}$n)LxMLiE-ohUHFV&r1nx@% z!&x~+xLDj45{C;DckSx#&etwAVrORuGS0-r1ZawZfq`*O4UMtZAbk6|>Ve+gcboq5 z7F%;QyI^3jyU?J32CfQl?)U`-$7lY1d33zH3tS^H->cg9kyO&mu(Fx0oiZ#{O2n4G z-^lPV0=j?hJ;F)&y|Jmu*~!WBF_6%-bT@~T+IDt3{Yj4nwtg}M0VNIG0#fPMuU~_( z4-O2Z0U7i3=~J+fCowvNA0tXxWvr0y@{ZC28XpYvm zv(le<^h03D0%r1SdU&c>uLh9|RzN}mn&Q})mBj)kBEUnH@H)wTVP#{ZZ)C)q3~YxJ zFyApUGJ>)&Mr#`x?JO=La;>baovxKZB(nu<{nj+%Qr$*__I%D&X}S0R1#P>~As+=0dy% zwTKsplMNu1@T9w^r*&jxK*R!}5Bc~+gs$I&a+;2o0Ro*IF&~m!SvlU`o@*FnMSwL< z1BB~CA|fJ?z`*GwVSF-O>u4q?hl?3RL>7Pj`n9l7%yAiAS0}pkrp9t4`{?NC?Ck8# zP7uNxEGO3iv@eL2nB6=aSuK7aPC8$2|D*RU`zPY4(XK$^10)`5x3f4TPUU{(MUBR0G% zlCB207{E3FGWFu}Qi*?Vcv!U(rliytfP)Y0zr)cyrQHR7e|78>_d@pO=4RkA1NZM! z4T~WHSRo+6f;-z5z+*(J?H29~1#e<~*ZI$E6)`e0HkKmhTG&_&iDLwz91(c*=nfH4 ze9c||QJnt`Q2+T2vV%*>!~}3i{Z&-(ftr@qeS30$JFIr3(1)4*>B7*Yq#5*W@?R+2 r;p1;~6c9*0F8`bVg?0b+sJ$B&RLOTKL$fq6QidqXA!SRXUj_a@{0ebZ literal 0 HcmV?d00001 diff --git a/struct_p_d_b_group_put__inherit__graph.map b/struct_p_d_b_group_put__inherit__graph.map new file mode 100644 index 0000000..adbcafd --- /dev/null +++ b/struct_p_d_b_group_put__inherit__graph.map @@ -0,0 +1,2 @@ + + diff --git a/struct_p_d_b_group_put__inherit__graph.md5 b/struct_p_d_b_group_put__inherit__graph.md5 new file mode 100644 index 0000000..a49eadb --- /dev/null +++ b/struct_p_d_b_group_put__inherit__graph.md5 @@ -0,0 +1 @@ +9b974a0837f395f03e9f6c67833c2728 \ No newline at end of file diff --git a/struct_p_d_b_group_put__inherit__graph.png b/struct_p_d_b_group_put__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..154b5cf1c89dc88178974f6d6d5e16bca1a5779b GIT binary patch literal 7946 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 literal 0 HcmV?d00001 diff --git a/struct_p_d_b_p_v-members.html b/struct_p_d_b_p_v-members.html new file mode 100644 index 0000000..942dd78 --- /dev/null +++ b/struct_p_d_b_p_v-members.html @@ -0,0 +1,107 @@ + + + + + + +pva2pva: Member List + + + + + + + + + +

+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ +
+
+
+
PDBPV Member List
+
+
+ +

This is the complete list of members for PDBPV, including all inherited members.

+ + + + + + + +
connect(const std::tr1::shared_ptr< PDBProvider > &prov, const epics::pvAccess::ChannelRequester::shared_pointer &req)=0 (defined in PDBPV)PDBPVpure virtual
fielddesc (defined in PDBPV)PDBPV
PDBPV() (defined in PDBPV)PDBPVinline
POINTER_DEFINITIONS(PDBPV) (defined in PDBPV)PDBPV
show(int lvl) (defined in PDBPV)PDBPVinlinevirtual
~PDBPV() (defined in PDBPV)PDBPVinlinevirtual
+ + + + diff --git a/struct_p_d_b_p_v.html b/struct_p_d_b_p_v.html new file mode 100644 index 0000000..6764f1b --- /dev/null +++ b/struct_p_d_b_p_v.html @@ -0,0 +1,135 @@ + + + + + + +pva2pva: PDBPV Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ +
+
+ +
+
PDBPV Struct Referenceabstract
+
+
+
+Inheritance diagram for PDBPV:
+
+
Inheritance graph
+ + +
[legend]
+ + + + + + + + +

+Public Member Functions

POINTER_DEFINITIONS (PDBPV)
 
+virtual
+epics::pvAccess::Channel::shared_pointer 
connect (const std::tr1::shared_ptr< PDBProvider > &prov, const epics::pvAccess::ChannelRequester::shared_pointer &req)=0
 
+virtual void show (int lvl)
 
+ + + +

+Public Attributes

+epics::pvData::StructureConstPtr fielddesc
 
+

Detailed Description

+
+

Definition at line 16 of file pdb.h.

+

The documentation for this struct was generated from the following file: +
+ + + + diff --git a/struct_p_d_b_p_v__inherit__graph.map b/struct_p_d_b_p_v__inherit__graph.map new file mode 100644 index 0000000..9750083 --- /dev/null +++ b/struct_p_d_b_p_v__inherit__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/struct_p_d_b_p_v__inherit__graph.md5 b/struct_p_d_b_p_v__inherit__graph.md5 new file mode 100644 index 0000000..aea35e5 --- /dev/null +++ b/struct_p_d_b_p_v__inherit__graph.md5 @@ -0,0 +1 @@ +5db70f9878068b7f76dba4a7f7ef0999 \ No newline at end of file diff --git a/struct_p_d_b_p_v__inherit__graph.png b/struct_p_d_b_p_v__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..05c0f77b06bf4756cc2f66a1872639abc7c9ee64 GIT binary patch literal 4602 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 Imp2dj7s0&$t^fc4 literal 0 HcmV?d00001 diff --git a/struct_p_d_b_provider-members.html b/struct_p_d_b_provider-members.html new file mode 100644 index 0000000..b0a8034 --- /dev/null +++ b/struct_p_d_b_provider-members.html @@ -0,0 +1,120 @@ + + + + + + +pva2pva: Member List + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ +
+
+
+
PDBProvider Member List
+
+
+ +

This is the complete list of members for PDBProvider, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + +
cancel() OVERRIDE FINAL (defined in PDBProvider)PDBProviderinlinevirtual
channelFind(std::string const &channelName, epics::pvAccess::ChannelFindRequester::shared_pointer const &channelFindRequester) OVERRIDE FINAL (defined in PDBProvider)PDBProvidervirtual
channelList(epics::pvAccess::ChannelListRequester::shared_pointer const &channelListRequester) OVERRIDE FINAL (defined in PDBProvider)PDBProvidervirtual
createChannel(std::string const &channelName, epics::pvAccess::ChannelRequester::shared_pointer const &channelRequester, short priority=PRIORITY_DEFAULT) OVERRIDE FINAL (defined in PDBProvider)PDBProvidervirtual
createChannel(std::string const &channelName, epics::pvAccess::ChannelRequester::shared_pointer const &channelRequester, short priority, std::string const &address) OVERRIDE FINAL (defined in PDBProvider)PDBProvidervirtual
destroy() OVERRIDE FINAL (defined in PDBProvider)PDBProvidervirtual
event_context (defined in PDBProvider)PDBProvider
getChannelProvider() OVERRIDE FINAL (defined in PDBProvider)PDBProviderinlinevirtual
getProviderName() OVERRIDE FINAL (defined in PDBProvider)PDBProvidervirtual
group_files (defined in PDBProvider)PDBProviderstatic
group_files_t typedef (defined in PDBProvider)PDBProvider
num_instances (defined in PDBProvider)PDBProviderstatic
PDBProvider(const epics::pvAccess::Configuration::const_shared_pointer &=epics::pvAccess::Configuration::const_shared_pointer()) (defined in PDBProvider)PDBProviderexplicit
persist_pv_map (defined in PDBProvider)PDBProvider
persist_pv_map_t typedef (defined in PDBProvider)PDBProvider
POINTER_DEFINITIONS(PDBProvider) (defined in PDBProvider)PDBProvider
transient_pv_map (defined in PDBProvider)PDBProvider
transient_pv_map_t typedef (defined in PDBProvider)PDBProvider
~PDBProvider() (defined in PDBProvider)PDBProvidervirtual
+ + + + diff --git a/struct_p_d_b_provider.html b/struct_p_d_b_provider.html new file mode 100644 index 0000000..5abee9a --- /dev/null +++ b/struct_p_d_b_provider.html @@ -0,0 +1,199 @@ + + + + + + +pva2pva: PDBProvider Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ +
+ +
+
+Inheritance diagram for PDBProvider:
+
+
Inheritance graph
+ + +
[legend]
+
+Collaboration diagram for PDBProvider:
+
+
Collaboration graph
+ + +
[legend]
+ + + + + + + + +

+Public Types

+typedef std::map< std::string,
+PDBPV::shared_pointer > 
persist_pv_map_t
 
+typedef weak_value_map
+< std::string, PDBPV
transient_pv_map_t
 
+typedef std::list< std::string > group_files_t
 
+ + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

POINTER_DEFINITIONS (PDBProvider)
 
PDBProvider (const epics::pvAccess::Configuration::const_shared_pointer &=epics::pvAccess::Configuration::const_shared_pointer())
 
+virtual void destroy () OVERRIDE FINAL
 
+virtual std::string getProviderName () OVERRIDE FINAL
 
+virtual
+epics::pvAccess::ChannelFind::shared_pointer 
channelFind (std::string const &channelName, epics::pvAccess::ChannelFindRequester::shared_pointer const &channelFindRequester) OVERRIDE FINAL
 
+virtual
+epics::pvAccess::ChannelFind::shared_pointer 
channelList (epics::pvAccess::ChannelListRequester::shared_pointer const &channelListRequester) OVERRIDE FINAL
 
+virtual
+epics::pvAccess::Channel::shared_pointer 
createChannel (std::string const &channelName, epics::pvAccess::ChannelRequester::shared_pointer const &channelRequester, short priority=PRIORITY_DEFAULT) OVERRIDE FINAL
 
+virtual
+epics::pvAccess::Channel::shared_pointer 
createChannel (std::string const &channelName, epics::pvAccess::ChannelRequester::shared_pointer const &channelRequester, short priority, std::string const &address) OVERRIDE FINAL
 
+virtual std::tr1::shared_ptr
+< ChannelProvider > 
getChannelProvider () OVERRIDE FINAL
 
+virtual void cancel () OVERRIDE FINAL
 
+ + + + + + + +

+Public Attributes

+persist_pv_map_t persist_pv_map
 
+transient_pv_map_t transient_pv_map
 
+dbEventCtx event_context
 
+ + + + + +

+Static Public Attributes

+static group_files_t group_files
 
+static size_t num_instances
 
+

Detailed Description

+
+

Definition at line 34 of file pdb.h.

+

The documentation for this struct was generated from the following files: +
+ + + + diff --git a/struct_p_d_b_provider__coll__graph.map b/struct_p_d_b_provider__coll__graph.map new file mode 100644 index 0000000..29143fd --- /dev/null +++ b/struct_p_d_b_provider__coll__graph.map @@ -0,0 +1,3 @@ + + + diff --git a/struct_p_d_b_provider__coll__graph.md5 b/struct_p_d_b_provider__coll__graph.md5 new file mode 100644 index 0000000..6a04c4c --- /dev/null +++ b/struct_p_d_b_provider__coll__graph.md5 @@ -0,0 +1 @@ +c2ac46d0b7a470d00aac2cdbe45431aa \ No newline at end of file diff --git a/struct_p_d_b_provider__coll__graph.png b/struct_p_d_b_provider__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..c1128cdf785eefa9006e4fe53609b53f488e46bb GIT binary patch literal 19060 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 Yk>grPgU38PfC3>YD)+nu`RdL81AfErG5`Po literal 0 HcmV?d00001 diff --git a/struct_p_d_b_provider__inherit__graph.map b/struct_p_d_b_provider__inherit__graph.map new file mode 100644 index 0000000..cfe7147 --- /dev/null +++ b/struct_p_d_b_provider__inherit__graph.map @@ -0,0 +1,2 @@ + + diff --git a/struct_p_d_b_provider__inherit__graph.md5 b/struct_p_d_b_provider__inherit__graph.md5 new file mode 100644 index 0000000..c60a081 --- /dev/null +++ b/struct_p_d_b_provider__inherit__graph.md5 @@ -0,0 +1 @@ +d472b3f6fea1a14b4fe7f375a6ded550 \ No newline at end of file diff --git a/struct_p_d_b_provider__inherit__graph.png b/struct_p_d_b_provider__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..44f0529b4e1afe7fd66b7ce07baf8f804c95ae63 GIT binary patch literal 11363 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 + + + + + +pva2pva: Member List + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ +
+
+
+
PDBSingleChannel Member List
+
+
+ +

This is the complete list of members for PDBSingleChannel, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
aspvt (defined in PDBSingleChannel)PDBSingleChannel
BaseChannel(const std::string &name, const std::tr1::weak_ptr< epics::pvAccess::ChannelProvider > &prov, const epics::pvAccess::ChannelRequester::shared_pointer &req, const epics::pvData::StructureConstPtr &dtype) (defined in BaseChannel)BaseChannelinline
createChannelPut(epics::pvAccess::ChannelPutRequester::shared_pointer const &requester, epics::pvData::PVStructure::shared_pointer const &pvRequest) OVERRIDE FINAL (defined in PDBSingleChannel)PDBSingleChannelvirtual
createMonitor(epics::pvData::MonitorRequester::shared_pointer const &requester, epics::pvData::PVStructure::shared_pointer const &pvRequest) OVERRIDE FINAL (defined in PDBSingleChannel)PDBSingleChannelvirtual
cred (defined in PDBSingleChannel)PDBSingleChannel
destroy() OVERRIDE FINAL (defined in BaseChannel)BaseChannelinlinevirtual
fielddesc (defined in BaseChannel)BaseChannel
getChannelName() OVERRIDE FINAL (defined in BaseChannel)BaseChannelinlinevirtual
getChannelRequester() OVERRIDE FINAL (defined in BaseChannel)BaseChannelinlinevirtual
getField(epics::pvAccess::GetFieldRequester::shared_pointer const &requester, std::string const &subField) OVERRIDE (defined in BaseChannel)BaseChannelinlinevirtual
getProvider() OVERRIDE FINAL (defined in BaseChannel)BaseChannelinlinevirtual
getRemoteAddress() OVERRIDE (defined in BaseChannel)BaseChannelinlinevirtual
getRequesterName() OVERRIDE (defined in BaseChannel)BaseChannelinlinevirtual
guard_t typedef (defined in BaseChannel)BaseChannel
lock (defined in BaseChannel)BaseChannelmutable
num_instances (defined in PDBSingleChannel)PDBSingleChannelstatic
PDBSingleChannel(const PDBSinglePV::shared_pointer &pv, const epics::pvAccess::ChannelRequester::shared_pointer &req) (defined in PDBSingleChannel)PDBSingleChannel
POINTER_DEFINITIONS(PDBSingleChannel) (defined in PDBSingleChannel)PDBSingleChannel
printInfo(std::ostream &out) OVERRIDE FINAL (defined in PDBSingleChannel)PDBSingleChannelvirtual
provider (defined in BaseChannel)BaseChannel
pv (defined in PDBSingleChannel)PDBSingleChannel
pvname (defined in BaseChannel)BaseChannel
requester (defined in BaseChannel)BaseChannel
~BaseChannel() (defined in BaseChannel)BaseChannelinlinevirtual
~PDBSingleChannel() (defined in PDBSingleChannel)PDBSingleChannelvirtual
+ + + + diff --git a/struct_p_d_b_single_channel.html b/struct_p_d_b_single_channel.html new file mode 100644 index 0000000..a32b3b8 --- /dev/null +++ b/struct_p_d_b_single_channel.html @@ -0,0 +1,215 @@ + + + + + + +pva2pva: PDBSingleChannel Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ +
+ +
+
+Inheritance diagram for PDBSingleChannel:
+
+
Inheritance graph
+ + +
[legend]
+
+Collaboration diagram for PDBSingleChannel:
+
+
Collaboration graph
+ + +
[legend]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

POINTER_DEFINITIONS (PDBSingleChannel)
 
PDBSingleChannel (const PDBSinglePV::shared_pointer &pv, const epics::pvAccess::ChannelRequester::shared_pointer &req)
 
+virtual
+epics::pvAccess::ChannelPut::shared_pointer 
createChannelPut (epics::pvAccess::ChannelPutRequester::shared_pointer const &requester, epics::pvData::PVStructure::shared_pointer const &pvRequest) OVERRIDE FINAL
 
+virtual
+epics::pvData::Monitor::shared_pointer 
createMonitor (epics::pvData::MonitorRequester::shared_pointer const &requester, epics::pvData::PVStructure::shared_pointer const &pvRequest) OVERRIDE FINAL
 
+virtual void printInfo (std::ostream &out) OVERRIDE FINAL
 
- Public Member Functions inherited from BaseChannel
BaseChannel (const std::string &name, const std::tr1::weak_ptr< epics::pvAccess::ChannelProvider > &prov, const epics::pvAccess::ChannelRequester::shared_pointer &req, const epics::pvData::StructureConstPtr &dtype)
 
+virtual std::string getRequesterName () OVERRIDE
 
+virtual void destroy () OVERRIDE FINAL
 
+virtual std::tr1::shared_ptr
+< epics::pvAccess::ChannelProvider > 
getProvider () OVERRIDE FINAL
 
+virtual std::string getRemoteAddress () OVERRIDE
 
+virtual std::string getChannelName () OVERRIDE FINAL
 
+virtual std::tr1::shared_ptr
+< epics::pvAccess::ChannelRequester > 
getChannelRequester () OVERRIDE FINAL
 
+virtual void getField (epics::pvAccess::GetFieldRequester::shared_pointer const &requester, std::string const &subField) OVERRIDE
 
+ + + + + + + + + + + + + + + + + + +

+Public Attributes

+PDBSinglePV::shared_pointer pv
 
+ASCred cred
 
+ASCLIENT aspvt
 
- Public Attributes inherited from BaseChannel
+epicsMutex lock
 
+const std::string pvname
 
+const
+epics::pvAccess::ChannelProvider::weak_pointer 
provider
 
+const requester_type::weak_pointer requester
 
+const
+epics::pvData::StructureConstPtr 
fielddesc
 
+ + + +

+Static Public Attributes

+static size_t num_instances
 
+ + + + +

+Additional Inherited Members

- Public Types inherited from BaseChannel
+typedef epicsGuard< epicsMutex > guard_t
 
+

Detailed Description

+
+

Definition at line 76 of file pdbsingle.h.

+

The documentation for this struct was generated from the following files: +
+ + + + diff --git a/struct_p_d_b_single_channel__coll__graph.map b/struct_p_d_b_single_channel__coll__graph.map new file mode 100644 index 0000000..6b46e6b --- /dev/null +++ b/struct_p_d_b_single_channel__coll__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/struct_p_d_b_single_channel__coll__graph.md5 b/struct_p_d_b_single_channel__coll__graph.md5 new file mode 100644 index 0000000..229c4c5 --- /dev/null +++ b/struct_p_d_b_single_channel__coll__graph.md5 @@ -0,0 +1 @@ +31f17e39ba412b2363a21adde09ed252 \ No newline at end of file diff --git a/struct_p_d_b_single_channel__coll__graph.png b/struct_p_d_b_single_channel__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..5b82065bf1473f1f9a81b5dcc8280736d5d49dd5 GIT binary patch literal 16713 zcmdVCby$^K*Dk&k1(XH}NkKwskWgB>OBw+Q0cq(5C6$uyE@@CgT0lUgTe@2sq~Q$q z`@O&4_nqrK=l`?zb-CPot@S+5oO8@E?)x71+#eL>B{1$1-$fu07*dj=$_T_wS@`=D z>P`5wEwe@&-jEGsBt#Kc*Z-u|=SCtB4-itK&sCh0Hm6+pqE09fJKMo;yPx`hI{PST zpJBfmrDC5}X`WX;Wm(&}CDvYdt3CCR9V)xFq;L{ECR!%UnU zV<_8qSOvD#y}I^2ihK7>Q+oM&_xUA>{3+q)LPX&oFyS4s`uNi#yrD8l+QOSJ0rfL@ z6Ao(T4Udi<{{350vx&q?^1mxf&Hn5qN2@Wo!T9m#Ds*!r6me}S6_wGvonQM0guyz zHDqMuDyyk^@g8pU2EU@PvLbI@&wKEZ>+XDO43oCA!g97uEGFsG@5yyuR}JCe;pOG! z_4OViB1pok9g%d##>O1Pa;mDs-Q5_JDw>*)nV2>=H;XbdsAy>XSURdoi;!+0yl>oE zz`1{4Q%mb(MNwX!l!Aiw)#XKYcD9m|(yw2?MvHaOu&^Xhi(Xc>)j+mi2VrnFnp{jXABof zY;r@X7#U^7#dC`Aw3U?JVQZDXdhX(KGErq+QC`lh*YHwLPa#`bA%#ygYocZx%O?CAELRS};_=E)8$jPy?2ddknpFMk~si{eS_0(zWrJNjwu%xPLw0P!R zCprliBMVDd?XUJQio?Uh-Ck+CPtoPLL<_GKmD- zo#o`@q@?ax>zkT>4hg|Ju6S`E;~x!}84HU)-`*~y z2zrHLLm)tgVrFLcygWa7hlG-pl=Q8DQMc|GB51TkujKRRr*_L-FcT;k#P{yse+K^o zt4kZ%VZ@%NLhrdB9v4SMN*Y}9^9(jiQBhGre*WL>nMT(`GxxHeKYv0@`=Jrq9&N3z z#z8iUiD|n|5AI>%*58wP?&5xcPM0H&r^S5*hjn#SN9=24C^5W)yPun+RVd`0M|%>~-!g znwguQINs;9;ovC67LJJU#W0^H92yzHB?E|n`rRuc>DxEw=g)6UKW_7OI6s#0?F%Ja z_<-sAYJPrRGyrP!)L|;^t+f1n&qYZm-_p?%Ec!>1IAl=My{%wKS2)B8!Pvrq_XuKy zZ63kbYcL`vy>21X+B_u+@VR}P2Ad4+x@^CvJ}Sw`SkKDht6NxCFWI|$R{)O;=bwwf zC$qEETcz1lREwWJjs9qZDxQ}3pyPspmGxbV{zB@Qh5V}rd}X%~-j{IknJ-^{u|JXd zrYgsV-r2?Ia@FA5mj*YsN29K8oNBoED2y}5goBTN=Z=er3g7h;VZo1XBH<+_j@8jH z67W8FKt7Ih6CreUTMCoXSGVy}MNx6Mrml3y&eqm*yB+Q>^x#1UrLUrmjdGAl^iw6J z@Y&g{=`a*{S|Onb5mL;*qk1J;d<8$sH2$QeiEambLa1^HSz!thl3DOy@d!w- zC&XI`RZFX?hmaC>j;Q^E>k*(`uk`;CqqX($;2<#cCi+twI_}wf{{Y1L!m_e5KmeLzdnI^`Zw_WpR-2wWxfLn5*{utD!MmI9j3;sR}cE% zl^Yow=M)vm+23>jR$Z;CqVn>aO}cqOZfyT~8bhVa6LeI)&T|S!rrU-iwZk ziru7#^v<0-R(Hasta?-Uxvi(ESrHA7?%noP)X=yM4|34WJ#&0^hDYQL*bnXxesP$bK5_fw^|^1k_pd#8nt z=i_C*wJvv!xcAJ)^768`HzETo(D^uTmjB6)Jm${Z{|!)LC-69!d3rV^Cr?4C!xlc; znj&E{@J&jZ%n%C_@VX2xsW5C0)o<~yIPR)7c=IL?KFO2_0}N(pU{Gl_m5`FM_2*Al zt$72l`vS+rUA|fI>Iv!AHnHrFbxTklY_|*Ozn%eW~mp^rH;9YVvxPj1-c=Zd? z_q_x?BYrvW6?%5|F92SXZ)ap?zTwc4m6e6@)Yo6sx$N)QT3T*G1wd~BO#S1>56`QM zqvq!3{gvLxj>W@`Q9~jELPA0!qCl3ev-nyADX9;D48DGa^1|li1f}n~&dBdgNxpay znUXSnd2uEqBa@kt0Ys)mr&jGh0Y%mS1Szq}$>nJy0SyUyoI=sg%gJ#(KYn|@WNv5o zWG2Mvyh}wz<$*5&qlTic?&aT2Z6>Co&RCXx44W&7sunk?nE-zN!!X48O9YzL3YMPpF%*C0s`d5s5R z6B85d^y+p!mxqUj%FRcaU%y_e{M+O75Q{?K9wFfjgr=~hl++ujuvp}LrDbJJtbbPf zGe7?G8W|Z`T3P}O3ZzLS08&urf zd%L^Wh-M&L21pO!TK?C+?oHpmi-uOMfP*7UOG}H6oVhSDIyCghLh`>rD?R-r?vp1^ z&VBw17ot;&rYmmEG&Y(I(_;o0zIye&=viKIv3$1jZm+nwI23cTF=w>Rr2BA(bEJlL zfTH9AGs%woKW-wlHc++~0UJnN!G_XkaIZ$psAlEnPK=G^<>hsBbjT%gZ9*<^c6t4p z=7Z?E-}ntbKR;^R4?EH{b+)#)5P2zlF3M_Z#)gK5mX=fV$_2&6J!d@hEG#82Cbos6 zJs>$^V1&$j{b+9oDn^_tMiuTH3;gR6n8U@zggK%V_NI% zO-HV2VO|q|*~?z_ydu_b0liMSQ+#D<6|frNl34&kb_sxITTj)fYHMqYi?;X@# z)B9dod?y)pWhHE2E3ug;x7_3x7Z)J~jv5e#hK2&gXc7z~=TA7$gM~h3#QjiiF~&ZP zUu7}&K9z%kfkBx87E9;pwCATqY++ANPsoBWV!)wZkSG3bPTc-7mX$^Q;>8O?!-dk) zQb25IXhASTK+x|REnEOgTI`B{0-wjr0z}PH&O4UF75d;K?JQ`g{s*;zB%ae;4YqHYVLLrNy@8=&dkD$V`H5Xa0VoO!n!f)H zhmupOsH;~&yaNpS{rk5M3Rbb^SN~e+cJAq(__bF=o7=F7&}zD7X7nT^a>XK%OiWfF zW6aLZ{`q6!#$6;QVR#pP^H6$eip*#i$cb%W?!`2KQ z4g1~TQJbDl*}%GOvh~r~aG1cPLaa5il520dJMr<0oa;?%W=1aPNqV+o4YLry0%LMt z?MwehBB6Wp<_#Gc85R~6%o$Je*22OQm%T+!^N~mN^k!yem*@Mv7F>x(T~*W0?Y*)= zSM&^Og+LQ$Nsuq`mzX=8a@`dQu^(j3OWE3f2@L$X&>n^(JT^AwtZ!)e&`-F@TzKv# z5|Tt1d5D+QO2YTnIU63^*ES9g7wf4dM+_;b=Sh8Q2Yr2g1a5C_Y<}0dJh^lk`m6-3 z@eRYWb>oHO&rg&X7#PkSFcj^iav+R$8x0Pk8~c5!5u}OT@={VjCVquKl-SV>qY&ic z2>T2@HC%Bk~D5`%W{UdPp5WZ~#JIoo5CsNbV z(NR(Hy|7!V@i_Zis^0>Yh=57!$1B$3t+I>^VQK00y`@fIMjXT#dJ!NUu%5n(KoXio zm9hmcSo!5kGi%rP@7`|xufC4i^LT(>QPg;QQx6X`p;h}+;PDj|6%VPXw7g=0?qFbW zvazKPuAvb!PnN%VK_P4Vo}W&mDspmTv_wu;_M7^4ilptu!rP@kV_&7HBVbYkaUQ~z zc4Ab~ky}Pa9O3ei*+4qs^*nbrFqj8f3JBcx%1Uf}d|pP?m1D|3>G<_)Z{+sQ;b92u@t`2L!}aLYREimXD&O^u4G>O1)zGbT z-UXrz8*i6skwn}&MI3<~1;lgS!4za3q?(SmiAmcl7UG_eNvr(LU{00wOi$9YuhxItX?N@faG-)NcvL_(Y)Ph} zr(Xwd2?9WHaPStnHp!{PrnI17BV75R@A~?BC^T}(_&RMf%o?!xTsE7<%@+LcMXPNCh#RbFzd z+e|{P^GWtUntV_i&$f8CjDonwKpT{omnY$}2n-JXvmAQ7P9Y_)tLq6^5;YyZ2Z>xu zON$4jI~ZJ%`J4Ts#qO$_zn}q_o0-ANI(udL`uhX9zXbenY}CHtSM~X4PgUuH>hO)S zwotMO6t`96VWo%oQF=225N=g_lfzrInYj4H#R0J7R>anoL_dJHO}GV;Vo#(BwEv0Hw;6FR)9D* zoIzd`7KUYgG)z`P*mKk_AJiPGu8M-NM+s=DcG!ris^UIs?E)2PH`flLaK?RKPDh8# zN&kH9eq#65PtNqKO2k^V-GGNZ&&5#Q3qZ8(3?is%SCY1{89{`C7fi=Eq%5fA5ZK2f z1IyYSiPjF5|5s_jZ+F;rZgay~^{}C%w^u<%W&;pFeJM-B=Dq#BJy9{S+EPvkvaK`3 zn>T9^F}c~Y=2v8OJKn(25@0oy6f2T zrMx_*zdi_bAXH6i%F@07HM+ACE!CnR#Q1FUBhN-bx8$jkPfw)~O1JxSl7J&`7Hu_$n4?;nYREC-_=jNPFsMPLC>ETake8t z4s03dCuBbMsCQ%~lTvZ$aB3Xo(CDFOm3% zhRR!6F*`+AlXN?d#*NzATG)&wy7k1A<<>I-AV8a# zm_W}5I3ecNZR=c9BO~9c7mG1=0d-0$DgeG{k9tb#>Ly!SMD+A#K>2GAC4(OUd^~2{ z(tZapK}}Wl;$$V&@(^z-L!R+cz8H2l14HM)fbBq*)G-NfosN=)MPWsSgNDX$P;P;} zjvKuAEoeytg?Xnk!t3%RH$8nWU$p@AOArRDLu73xW1=91zsQko($;gxN>>iT^W$DU zp9`RXuQ<1pn2}+D9;|P3#0ju!a`L5&Oee5P=*OI%p4z%KAg5u0#8ZQ6%?hej8YmG= zL!+Zt2Wxnj_qWYSy&MC$s~$vlBon_+6XO+QwlbH5v=0Eju2>pyU`z~*M-_5}jSZ_O zN}G-!NRy!HGcy+_uZvL#dcqpb$LxP|-S2fq+$)gk`YWVIb+?n!^?IvIa||2;>NrmE*FKR)0= zq6noBoL)jsuG8PyN|w%s0`wP#w$hUfotUA%zE$(#r5m&B6d_H|DSY*KfK_fy*LN~? z_4HW1bs8XJ8h>p2R$F9bbQHoKhNP~ldY^=Z7j|T$XL8G&1+=gL{OSBQ1ZLgX=%sx) z|ILzP*HP^D?c1;~j~T6MGe!z_2NNH%`%wYb=8{lIAhsX_L%Rg(OmF-Xlx^<61==loqmVIL zp;rLSPbsN6mg#T1&zjQe0>`uh~2bj1e1VQg${BqStydV1{f zd;p6xeAZ2F*-m}JBeN*^TmLO^@#GK1Eqskp)O9zxbj2MMN*(QFda9!5oPAluX4063 zZ{ySjFBm_4Ms4ya_IbD`zXe1FBs|g0WbE6w4+)vGMu*E9YN$W>%F5xZ7xt~h#Kp(I zWmtBQICHYCXZ_WMp!m5Apa^gos97*wOpx;x85He^+cstLxuh06v8C%R8>Ah{%_t`j1xn zR|x6Qhy}O}Ezl{;XYL~L)x>x*sUnpwLzTjHXB5YRv8jS0*f3EHAEHy@ z3LD*(>W|~uK1w%InsfP%EQjhkG26sWNvZAh2Nm_M>u?WC@N=ImM#h8j1T@5I)Gt}_ zKmF$eQLeam^hrgjC^aoVyo;O@FnQt=ll2fiTue&i$-J)1)51nCvq)^J51&k>Grr1W z;N+kOq&d=1{`m38q?cLH=GBdOS*pmBb1z(c{IV);e4KZUn24#?!Z)683upiCb?sFh zqKXiCs?tRUlj7eAEhOxB__1V9{ga9s6K&yaB0*IA-kmQYxedOBrBf&0Uq`VrGslb; zd(b_8ES_He=az4)fnN1qSI64kRIRl};U(L9LWBoK?tPhkmi^Skm`jsq{`#aT{^mFPi_*%SN=3H3Ia|8-fny`9xG=_<1$kKJK?ly8agG)gtjpXS@m$5r3z1J9 zS^6z1@<|%aMqfrs8hLE9&U%uo<`?WxgYmpQb6K}!J{h`B<~1)PW9FU+5<0Q_Wf{`Y zF%NzqU-tFhd-OQ@zOB*SD~a$(NAu4KQb)Fu^&-EwWY5TSbXw1jyzJjr@9n+jy5tR# zrDf8ynp-tpUNu!yQ31BfAlUeAV^j~FEZ@SM*LK&y4kKji@+Q-xN8fo@Zu94tmv42( ziu3cY?%h3X{=HN;@5Lm0nHeQ|xiYut^)`X6<@VkB`wDvB^$qVL57n)%6D(1)6IV!& z*@X9{V249hz$0rBqNAj&F%4f^={@Y|I6cBNO)^OPg9dl~(H1~u(S^vomob|oZ!N>2YR3NGPM!|L!m_SSa-?Ni)}LHbL$xPqjCdQVu_=d_LSQ zj2(72ljYNk!rRrf`%>8I=#UU$`u%-Xuq{E`b9fMW_2#XQH^hYFSRQ;@JdJVM{%1O%}BmE#KU@pRux1Qc|jm`9T*v@O5V!21(91@ALPeiO=?rYn@t&{67SKQdL*Kc z3^UMmFL$L5Gn1cD<4W0LzYb4L&#L>BdKZ*~i2$r@O3D%>Bs@Wnd{Q>ymZm2Axn?#W zgw7@)Y#6cQnuxuC`Isac$s^iWd(MX zoXq_KJe~Xgd8ti`eGyI=(Tsx_`Tjx3;g=ICj}K~(@U8Ffmk|HN2&bn1u8SlkPh|5{ z!@$5wQE`5ALJF)LFLH@_p2qd0Sl+~HM^)GEBxP$Z%3GT`O3TPF!bEw-t1w<+9vT&e zJ@R|&VFJmsqY)3&&t@rJuUE}eBM!W6(M1A%jZ+5);~t3E+t;TvR-_a&QPOs=P<=17 zvMPKNGfa&AP*NxYk6xB`qd&9i`STCq;oGJhceE$MF)?$Djd_sr3I8-0FSHdLZDp66 zZcC;I{`@6fQ#Xlw3)C-B+||KnFc0OcF{LY@B1+^jkUBCW0MhVY}Ydw7T<=uuP4ErM%xzX`t=(<8xAQQJCn=jhG*w|xO_ z(Z4dYjfUoAx+$ouZ@lYX=JQIyCyKM#*1a3h63^NB8y0@NT)&RL$UDVu&*-??4yVY? z6b~OieK3#Ps_+Sy+CysAxfho)IA7@Px}4}Ub)r6mX17Pvj@Ca_Qj8yCeOuCou$Z2H z{%H|8W_;Wq1#18v+0a1X(c_M;L~h#-T)S`0f6Fs6%e1``D6ukQ*>b*gxRkkkNl}UgGx*Cv~_ho9QxF0GnRQ@jg6ue%kDQGOrZ3Ro(e< znZc^!YcTh;26fMwP1uo=db*vkC$^l_CO&45=P(K!@IkqX{Di%yCM{H&u>RZHU3%cW zGfU-1o2BY#!f7;D1tMZnC^jO3f++5ICG~?|11p_upPdbBGPgA_WupGKcM_rV+nrcq z_mt>^FE*8?Hi@8noa4@H^Kbzj9vShf!j|RvL;ZGXST0JX>GDdtBZA>D0lR_NlHfv9VL#+J|sLw66{-49IT!g|dh zD~d{>oQAB2$x6BOzvJ>1b^^w8rKF|hcC?lF{k!kb&`nj<(`G-zSQd(sB8=_w+plIC zX5oVZbsbqbhnKdK`7>#8sOhGN+rPXZ z3Tm~ouvoTiY%(Z|WjQ)ME}NgOr$pzrO`uk`Tq>%UKljm4|GwfXHM zdYew{k?Y7_#3Gw%u^IndGJsdZ#mcH0fxPskc3!2BXUbczqeEs2kCL&5SfY)zpa5%6+0^HHl@W{L99K z1@UQ7h!Cd8YQ|Glr~5lEy7o64^blkZGzTRiq4O}oX+Af{cpsm~{bdIZjL5u3hi<_> zV<$v`Qg>P+_fH3MeD}pDn)6lUvfHoHxPE#|+lw|M0mmjFDtzgUNmc`9v=?4ihj_HB zIAk(2t@?&omB#9?IlGQHu@l^q+udv#o{+Rzz8L)C+ctF*Sqc*s8C`7}?0c1to6)f> zc3V>u$lYAyxNaO*BBo1qG9visek+c-WtEyy^fyCl-ELApd+@5xCwc*vR+C-+`3?FH z4ychGU#gDI_x$b?*T{(@^H48la#R=Rg%+{lY&i>EhXnt7m^iRE0CH2Cz61EsZY5=8 zL~Z9t4=Yy&RUfqpLz@Mb%#~pK)sjm7x8$iuM1|)C0|R#nna_uNtPVONWdcKQqjs&3 z8b_#?jX!5@ow1a z9R&OW9ht!zC8$-m;d~xSoxc8ripr{Jz~Bb!fxTBs)W_ey59!}el_n-?gKPsc0!K10d;9o}J1I;RXNa7%@RgzyupQmE_d_861}hGtm5qeeMR!gk-oaT20RK1M6*79GtcGP(KJ$md7qSgcaKh zKdn(np3zsPkWf$v0x!FNKOWeBz559+r3x4=>FADD`ycA)Oo8qReOgdq2G;DMHKd@R z;9dmjDujqlSYF-=G`>_pFM?O)4y|$_6@Pk)4;MS|Kzbz($$?U~yzEby^7O5+j7*St zCb&MKeM{v_&gabPu&x5)4X82DD*)8`_9-bStU9%ha|IlnoE@E=f*_s(Wd(K0(a{mQ zX}Gifhi*g&4{a%_?ra%_q9TR-&lV)Sj#ud-PIh*kA22^6Zrs?Vr=KX+^OA=GQ%sxc z;vl}4Nj65xm0ArX3^c`9W*v|td2AO0>+0M=GyHGO`?vqGUmp`5PDxAq_iVcnnyaA4 zr^wPmr@Y}TeMFt3mHf=!<>i3+_Iyu~#(yw{Vv~`{W%e5w80_uuLxW_cI}w_7&dyJT zO_zQ}gK7hYSLmmKPzg;^Fti-!2>;uk>aRaOJ`VhKN|0IqrWED@$^HAS0hm){&j#eg zUME%@cF4r0fF^-Mrc%P={#50~z84!CMIdGt3a84~n*=#iy1Svn-&tDqe?wdK+Cu8J z{BH}X3s@$FSD|Z0SvQU_&$srp%U%rYu(s-w zmpWvyv|6;cI?Txl4o1fe0Dq|Rix<$|Z)s_v5O9~wR^FbhZZTrlWF+uu`p(J-7CB|* zFU4EiSL?dEx?q`haB$!t-UJbq$R9c}j}&PKVAC@(iJ?Mglgbww>#*7?Dwjo{-WVIJX=psP_|0kslI|U!rd2K9Zj7X= z8%rGxG~i7gGFzIH!GAoT?71!SKTQDtm`UL>|H)wB`zb%4K194los`Q$0|c@V@vmRM zqTRjA&cRXVc4P(j9}Ru|z#I1FeE=%3-8&)!F86}?1vE}h57kkAzFMNjT^q`?CME0j zI@?_8>)U?)`pmqd#Zi&E1MkSR{Hu3D!Z;`n)sdi*?}M~s^!hc9uyej5EPG$y@y;Al zgAjxb#B524HOR$IMPPmxYh}KaM%CQElzE=nahE0%Upixm`Lev`UtR(5K0*H)TNug6^XuM@x&L)_Yw+i-e34n)_eCt**cLGaQ^j;78X% zGkoCvkuI$fr19?)j}$`8gFXl1(T}#aP!jGfP~<^t z!$L#b-`#x-dbs1JmWIY?!H(=?Q5m(-aon~_P0}2;@bK`kv$QcQQLcRQub!Ubl9I6C zU})n98T;o;fRb^$-^^C#i0)A+a+XQW9y(1&>gi#gVogHoK)w^eS^i;$~#hdB^Z!$y|$<@{6;ko~=I>=Di#1aiS>0582s2VxT)(Pb>q3{So-_BRe#h z`%OXE2@VYW&Wi3u*KTxqvEm8$ihBG4ASR?TXhVk*`uqAq+oJR5&#qL#Ypd_gJm-Pe z;9v%!ZeU;lrWNEN=uzAA@UyU3gDMCDvI@P!4dB;9sW67%*HuXT(68`1Wg zu6@vgsDys&Ss}jtT{unAEG`>t@S1b-m)TRNQd_#*&Sq|n6X3>^lYcPD>oPMlS=}n{ z^v|It4lJIkHxkPI&VD``^MHq-kBJJVj*bTz;R@}n)j%9#nb^>;UrCr~X>E_J_DUMX zC+ibm>dkyEC=kv5h(q?uDTJ&*M`;%b|JjQiqDKrzo#9_d@-@PomNCg`Xr@hEofy43 z0|h?C+B8Ut>j)cW1m8-Y<$c%ICXN~K#FBWj#0dvnutd!Q)ACR~01)`y`=OCfwAV>< zlHe7opD-ro^mv$+0^9%3_}&!~G-clTLi8sWWlumLFJ?57W9svG-ZcAj3KS_!^q0a< zG+aDAhbOCZB|--3Y+uWH<>~G3**8si+ma~os}2g-wD_h=9)*p+SmPO7`>c04bi)!r zmNzT98k`Z>SUpY*3d$}hVCpY(*AcgA{VI~0LpC&$_)x)~QRpWaI%lmfJWBV#Axpyb za(~B0quTane_1)*mCI&}<(T1UL9kYlEPVACzM7VO$*XZvW_Z+_>gB%B<`hYbLBkWn zwZwP+@;txzqM_DR@?_#PES%Fg(J$-%omEs|E#-OOfVHt12q9q+^eiOeQ5oy+hlapQ zsXVMY5i=xz{X}lPu;8w5ZbxU7B2j^uxmb^7iWF*8k|?wbjAXw)E1{zu4l5XXFAtF8 z`)GF7A__9?<>6=n5Wzcm2c)F3D?Mam+y(4hTwJ_QlS)1x;}X|c_C0u<(L$-aTTsI- zKy#bL93?C(M6)2nic-X0G)?__B$>daGBdBXSY?%!?ME05B_zH|MIM}KP59*JpStY# zpp!G=VV6Fa4L<&BBKp{?)A=oXBS*FF>%yT`&R=E=59%>Q;Uv&%`M|(;}I6pb}+>87?iI{h;Bbr(c+`X4xF)G#Sjf4;u-g4`-12bVxD% zvDC;3Vg@F=)_8rQ&yM-*>}oG2tQl5%DdbepU6eS3rAJuL1nd*hknh0?pmxQw$hw#A z#l>NH7?tj&dY%r>2r@r19gJhss&72{@1)4hlrW^C+ZyQ?h?x$?f4>&%TFhPs#)~=FPy3>>dhqnn}kMstlw)krXYou9yM& z_4)!>PNjRkzAs#KVAkR3`T3dKHC|f2N3ZANolhIVZT2;P>jSg#i>*p`}T06SOtgO3(xzcqlr8F{aj~^XapwKvN zH)u9quFtjnm6ykJvtnUHKAS$p%G6OQXVh2W65@kt!S;uz@JAj2NsK{F(U9z)=^6W#g6F2$ehwb+}E*>wdU9Ki-aVRjLZu%I|jzo$RL&^ZvkI&xNAKJcZQbo z^C6@70aldTA8*yUAWZ=l^ltbpfx^)4W}~JYQSDHma4;MER#B-rmgDM+La!MzMl^@5 z%1|mD3l;Jj1}Xw(^0YXGr0~2YKv{d@D~NBp-%2BPlvJMYi1~=mR=2XM~}xr#Si-r zSrMj4*SElH!c^N@IkIgJ)n4f>(I|Z-J6ie4KJWN28#i(0Kt*m26a7F8HYs);oRxtW z`IMMkh=%6kCu=FC6fvtQWsaudo*NuTZwELPBwVj#{K!&%@14n9AwAGs|Y!W-<9qNqT*|n0BQr zez334+Y2ZJ7?;m3&$fYs;0Oa2Rxf@Dc8iO>r62(Ra7GDGQHPN&*i^vD0j4k>a$PYo zzs$@9z<(W!TwWN^oz;P-2e(pLnG&3r8_rjKC>|_?Iy^E0=M=AC2Eb>VEWnc7AO4_8 z2qXps6`0q5jf@ab9sq~}TiLhTTEIE@+a{f@t*^mtMT&WCCjc8*dyZTpoK<=p)!6tI z@P}brFr57Yw;pu<8f@m8!I_OC4A2A}c>xZ9L2nQ~0)K~u$ zQB+!t&Ckx3!kHo54+r3{1KY~w-wA8rHSecz5IV?>9*76HA>xt$yatDdr@-j;{P}aB zBin`GLji-rDYTHmkT5qlH;Mn+$Y`e;@Fp19+N{suXcf3ztKr)G{QNx0*ZzeH^U((9 z-J6uuj~_p?p5|*p_WJur69ol@kT8}~#D8^t9sB~|)}L(f&@Oemk;XeK4?D*X{94S= z5=~|^6nA%b4-)m$*SNNG*k3;|jxZG!6|8JiQxjOr?0Lv2IbQz)5SR177bs)H$#P;~ zU?4zL>xPqSC^`OtfXJu7 ztAYPL^p&K(c8kDLu7KCpzyQoTpFiNyVcuuYYR!q0H3oY_Rh1L?WUvI!cfh}$_ab)- zMEDke3^1`>w=0TYLg+0p&rD9%8Mb3Wo&x#^AqnnRMS!W|;{MXvaK2#QDqbAi`5aq| zFtVN$er+9{daw#!Pe&Y^Asl)DgdY#E98NBPmzYjI>2pTL01r91A4dFOnXSm$;NG>K zf141X=pd+EfR(tpJ@f_d6S(N%`N#8x`VE9g&yz`oKc}ZR&CGap#xTKgvU_)5cg3;6 zL%LjDdVmi=R<;X#OW@Tkf89wi?ZAevU1ddG7XtKs6JFLuV@S`YyfSSjMTEXUQ`S2b%Li{OMVyvoYn%E^U*_Y#i44h;|E2m{B% z#l;0Z3&NvlVUC1)h85(lzmV3wC82FySyi?DGXhMy;A)zbx_)d)&`Q7p173BPqpf7< zj_c~C0H%L;{b~a98u&A=O}HRXNlTuaJRkwv`8ksASy_2`RP9^b4;;=rucrNiAeo_| zxh%jzRygAYY^NkYf4)B6ZFgSG#%8BKQ({+Y%WlKbt>F zDQT69d;cCRptw$73JZgsitFm?A|eLB+EHx>X9U3I07rJf)H_t=lzRM-LV;DTLO81+6e@pTr3yP{)ZnS31s?hfe}95UACEMPE_ zl9be_cddZvg!9b5q8Y--cpc%+m?_u|`fxnN-o}BIwaFQ9=X97!xfUFbTE71O0zew- z?Cd=2SLDUV$A@KhUKd7Xf?>g-@_JTsUF!rcOX6TUZbVZuoICpv7?=d-6X0S%MjJ;VKGBpo+@9ekBBJ9|Wh+4s0?cB&6!(2=4|s`VEyHo9y + + diff --git a/struct_p_d_b_single_channel__inherit__graph.md5 b/struct_p_d_b_single_channel__inherit__graph.md5 new file mode 100644 index 0000000..4c196ef --- /dev/null +++ b/struct_p_d_b_single_channel__inherit__graph.md5 @@ -0,0 +1 @@ +24cc87335015963525227cb21212d99b \ No newline at end of file diff --git a/struct_p_d_b_single_channel__inherit__graph.png b/struct_p_d_b_single_channel__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..d87e19dcb189d01a31ad5778416ad67ea3e110a6 GIT binary patch literal 10400 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 + + + + + +pva2pva: Member List + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ +
+
+
+
PDBSingleMonitor Member List
+
+
+ +

This is the complete list of members for PDBSingleMonitor, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
BaseMonitor(epicsMutex &lock, const requester_t::weak_pointer &requester, const epics::pvData::PVStructure::shared_pointer &pvReq) (defined in BaseMonitor)BaseMonitorinline
connect(guard_t &guard, const epics::pvData::PVStructurePtr &value)BaseMonitorinline
destroy() OVERRIDE FINAL (defined in PDBSingleMonitor)PDBSingleMonitorvirtual
getStats(Stats &s) const (defined in BaseMonitor)BaseMonitorinlinevirtual
getValue() (defined in BaseMonitor)BaseMonitorinline
guard_t typedef (defined in BaseMonitor)BaseMonitor
lock (defined in BaseMonitor)BaseMonitor
num_instances (defined in PDBSingleMonitor)PDBSingleMonitorstatic
onStart() OVERRIDE FINAL (defined in PDBSingleMonitor)PDBSingleMonitorvirtual
onStop() OVERRIDE FINAL (defined in PDBSingleMonitor)PDBSingleMonitorvirtual
PDBSingleMonitor(const PDBSinglePV::shared_pointer &pv, const requester_t::shared_pointer &requester, const epics::pvData::PVStructure::shared_pointer &pvReq) (defined in PDBSingleMonitor)PDBSingleMonitor
POINTER_DEFINITIONS(PDBSingleMonitor) (defined in PDBSingleMonitor)PDBSingleMonitor
POINTER_DEFINITIONS(BaseMonitor) (defined in BaseMonitor)BaseMonitor
post(guard_t &guard, const epics::pvData::BitSet &updated, no_overflow)BaseMonitorinline
post(guard_t &guard)BaseMonitorinline
post(guard_t &guard, const epics::pvData::BitSet &updated, const epics::pvData::BitSet &overflowed)BaseMonitorinline
post(guard_t &guard, const epics::pvData::BitSet &updated)BaseMonitorinline
pv (defined in PDBSingleMonitor)PDBSingleMonitor
requester_t typedef (defined in BaseMonitor)BaseMonitor
requestUpdate() OVERRIDE FINALPDBSingleMonitorvirtual
shared_from_this() (defined in BaseMonitor)BaseMonitorinline
unguard_t typedef (defined in BaseMonitor)BaseMonitor
weakself (defined in BaseMonitor)BaseMonitor
~BaseMonitor() (defined in BaseMonitor)BaseMonitorinlinevirtual
~PDBSingleMonitor() (defined in PDBSingleMonitor)PDBSingleMonitorvirtual
+ + + + diff --git a/struct_p_d_b_single_monitor.html b/struct_p_d_b_single_monitor.html new file mode 100644 index 0000000..0520b3f --- /dev/null +++ b/struct_p_d_b_single_monitor.html @@ -0,0 +1,248 @@ + + + + + + +pva2pva: PDBSingleMonitor Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ +
+ +
+
+Inheritance diagram for PDBSingleMonitor:
+
+
Inheritance graph
+ + +
[legend]
+
+Collaboration diagram for PDBSingleMonitor:
+
+
Collaboration graph
+ + +
[legend]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

POINTER_DEFINITIONS (PDBSingleMonitor)
 
PDBSingleMonitor (const PDBSinglePV::shared_pointer &pv, const requester_t::shared_pointer &requester, const epics::pvData::PVStructure::shared_pointer &pvReq)
 
+virtual void onStart () OVERRIDE FINAL
 
+virtual void onStop () OVERRIDE FINAL
 
virtual void requestUpdate () OVERRIDE FINAL
 
+virtual void destroy () OVERRIDE FINAL
 
- Public Member Functions inherited from BaseMonitor
POINTER_DEFINITIONS (BaseMonitor)
 
+shared_pointer shared_from_this ()
 
BaseMonitor (epicsMutex &lock, const requester_t::weak_pointer &requester, const epics::pvData::PVStructure::shared_pointer &pvReq)
 
+const
+epics::pvData::PVStructurePtr & 
getValue ()
 
void connect (guard_t &guard, const epics::pvData::PVStructurePtr &value)
 
+bool post (guard_t &guard, const epics::pvData::BitSet &updated, no_overflow)
 post update if queue not full, if full return false w/o overflow
 
+bool post (guard_t &guard)
 post update of pending changes. eg. call from requestUpdate()
 
+bool post (guard_t &guard, const epics::pvData::BitSet &updated, const epics::pvData::BitSet &overflowed)
 post update with changed and overflowed masks (eg. when updates were lost in some upstream queue)
 
+bool post (guard_t &guard, const epics::pvData::BitSet &updated)
 post update with changed
 
+virtual void getStats (Stats &s) const
 
+ + + + + + + + +

+Public Attributes

+const PDBSinglePV::shared_pointer pv
 
- Public Attributes inherited from BaseMonitor
+weak_pointer weakself
 
+epicsMutex & lock
 
+ + + +

+Static Public Attributes

+static size_t num_instances
 
+ + + + + + + + +

+Additional Inherited Members

- Public Types inherited from BaseMonitor
+typedef
+epics::pvAccess::MonitorRequester 
requester_t
 
+typedef epicsGuard< epicsMutex > guard_t
 
+typedef epicsGuardRelease
+< epicsMutex > 
unguard_t
 
+

Detailed Description

+
+

Definition at line 138 of file pdbsingle.h.

+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
void PDBSingleMonitor::requestUpdate ()
+
+virtual
+
+

called when within release() when the opportunity exists to end the overflow condition May do nothing, or lock and call post()

+ +

Reimplemented from BaseMonitor.

+ +

Definition at line 485 of file pdbsingle.cpp.

+
486 {
+
487  guard_t G(pv->lock);
+
488  post(G);
+
489 }
+
bool post(guard_t &guard, const epics::pvData::BitSet &updated, no_overflow)
post update if queue not full, if full return false w/o overflow
Definition: pvahelper.h:136
+
+
+
+
The documentation for this struct was generated from the following files: +
+ + + + diff --git a/struct_p_d_b_single_monitor__coll__graph.map b/struct_p_d_b_single_monitor__coll__graph.map new file mode 100644 index 0000000..dd663cc --- /dev/null +++ b/struct_p_d_b_single_monitor__coll__graph.map @@ -0,0 +1,3 @@ + + + diff --git a/struct_p_d_b_single_monitor__coll__graph.md5 b/struct_p_d_b_single_monitor__coll__graph.md5 new file mode 100644 index 0000000..8fc8933 --- /dev/null +++ b/struct_p_d_b_single_monitor__coll__graph.md5 @@ -0,0 +1 @@ +608c19aec9d7f9916c0838a011ba2168 \ No newline at end of file diff --git a/struct_p_d_b_single_monitor__coll__graph.png b/struct_p_d_b_single_monitor__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..6a73b46232283846e3732caa6f38378dacf4c061 GIT binary patch literal 5864 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 a)83XZYAl#cXVAK)(0HJ$Ql#`G?7sl1tf + + diff --git a/struct_p_d_b_single_monitor__inherit__graph.md5 b/struct_p_d_b_single_monitor__inherit__graph.md5 new file mode 100644 index 0000000..8fc8933 --- /dev/null +++ b/struct_p_d_b_single_monitor__inherit__graph.md5 @@ -0,0 +1 @@ +608c19aec9d7f9916c0838a011ba2168 \ No newline at end of file diff --git a/struct_p_d_b_single_monitor__inherit__graph.png b/struct_p_d_b_single_monitor__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..6a73b46232283846e3732caa6f38378dacf4c061 GIT binary patch literal 5864 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 a)83XZYAl#cXVAK)(0HJ$Ql#`G?7sl1tf + + + + + +pva2pva: Member List + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ +
+
+
+
PDBSinglePV Member List
+
+
+ +

This is the complete list of members for PDBSinglePV, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
activate() (defined in PDBSinglePV)PDBSinglePV
addMonitor(PDBSingleMonitor *) (defined in PDBSinglePV)PDBSinglePV
builder (defined in PDBSinglePV)PDBSinglePV
chan (defined in PDBSinglePV)PDBSinglePV
chan2 (defined in PDBSinglePV)PDBSinglePV
complete (defined in PDBSinglePV)PDBSinglePV
connect(const std::tr1::shared_ptr< PDBProvider > &prov, const epics::pvAccess::ChannelRequester::shared_pointer &req) OVERRIDE FINAL (defined in PDBSinglePV)PDBSinglePVvirtual
evt_PROPERTY (defined in PDBSinglePV)PDBSinglePV
evt_VALUE (defined in PDBSinglePV)PDBSinglePV
fielddesc (defined in PDBPV)PDBPV
finalizeMonitor() (defined in PDBSinglePV)PDBSinglePV
hadevent_PROPERTY (defined in PDBSinglePV)PDBSinglePV
hadevent_VALUE (defined in PDBSinglePV)PDBSinglePV
interested (defined in PDBSinglePV)PDBSinglePV
interested_add (defined in PDBSinglePV)PDBSinglePV
interested_iterating (defined in PDBSinglePV)PDBSinglePV
interested_remove (defined in PDBSinglePV)PDBSinglePV
interested_remove_t typedef (defined in PDBSinglePV)PDBSinglePV
interested_t typedef (defined in PDBSinglePV)PDBSinglePV
lock (defined in PDBSinglePV)PDBSinglePV
num_instances (defined in PDBSinglePV)PDBSinglePVstatic
PDBPV() (defined in PDBPV)PDBPVinline
PDBSinglePV(DBCH &chan, const PDBProvider::shared_pointer &prov) (defined in PDBSinglePV)PDBSinglePV
POINTER_DEFINITIONS(PDBSinglePV) (defined in PDBSinglePV)PDBSinglePV
POINTER_DEFINITIONS(PDBPV) (defined in PDBPV)PDBPV
provider (defined in PDBSinglePV)PDBSinglePV
pvif (defined in PDBSinglePV)PDBSinglePV
removeMonitor(PDBSingleMonitor *) (defined in PDBSinglePV)PDBSinglePV
scratch (defined in PDBSinglePV)PDBSinglePV
shared_from_this() (defined in PDBSinglePV)PDBSinglePVinline
show(int lvl) (defined in PDBPV)PDBPVinlinevirtual
weakself (defined in PDBSinglePV)PDBSinglePV
~PDBPV() (defined in PDBPV)PDBPVinlinevirtual
~PDBSinglePV() (defined in PDBSinglePV)PDBSinglePVvirtual
+ + + + diff --git a/struct_p_d_b_single_p_v.html b/struct_p_d_b_single_p_v.html new file mode 100644 index 0000000..5b2e47e --- /dev/null +++ b/struct_p_d_b_single_p_v.html @@ -0,0 +1,236 @@ + + + + + + +pva2pva: PDBSinglePV Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ +
+ +
+
+Inheritance diagram for PDBSinglePV:
+
+
Inheritance graph
+ + +
[legend]
+
+Collaboration diagram for PDBSinglePV:
+
+
Collaboration graph
+ + +
[legend]
+ + + + + + +

+Public Types

+typedef std::set
+< PDBSingleMonitor * > 
interested_t
 
+typedef std::set
+< BaseMonitor::shared_pointer > 
interested_remove_t
 
+ + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

POINTER_DEFINITIONS (PDBSinglePV)
 
+shared_pointer shared_from_this ()
 
PDBSinglePV (DBCH &chan, const PDBProvider::shared_pointer &prov)
 
+void activate ()
 
+virtual
+epics::pvAccess::Channel::shared_pointer 
connect (const std::tr1::shared_ptr< PDBProvider > &prov, const epics::pvAccess::ChannelRequester::shared_pointer &req) OVERRIDE FINAL
 
+void addMonitor (PDBSingleMonitor *)
 
+void removeMonitor (PDBSingleMonitor *)
 
+void finalizeMonitor ()
 
- Public Member Functions inherited from PDBPV
POINTER_DEFINITIONS (PDBPV)
 
+virtual void show (int lvl)
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Attributes

+weak_pointer weakself
 
+DBCH chan
 
+DBCH chan2
 
+PDBProvider::shared_pointer provider
 
+epics::pvData::BitSet scratch
 
+epicsMutex lock
 
+p2p::auto_ptr< ScalarBuilderbuilder
 
+p2p::auto_ptr< PVIFpvif
 
+epics::pvData::PVStructurePtr complete
 
+bool interested_iterating
 
+interested_t interested
 
+interested_t interested_add
 
+interested_remove_t interested_remove
 
+DBEvent evt_VALUE
 
+DBEvent evt_PROPERTY
 
+bool hadevent_VALUE
 
+bool hadevent_PROPERTY
 
- Public Attributes inherited from PDBPV
+epics::pvData::StructureConstPtr fielddesc
 
+ + + +

+Static Public Attributes

+static size_t num_instances
 
+

Detailed Description

+
+

Definition at line 21 of file pdbsingle.h.

+

The documentation for this struct was generated from the following files: +
+ + + + diff --git a/struct_p_d_b_single_p_v__coll__graph.map b/struct_p_d_b_single_p_v__coll__graph.map new file mode 100644 index 0000000..13432ae --- /dev/null +++ b/struct_p_d_b_single_p_v__coll__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/struct_p_d_b_single_p_v__coll__graph.md5 b/struct_p_d_b_single_p_v__coll__graph.md5 new file mode 100644 index 0000000..a4da2b6 --- /dev/null +++ b/struct_p_d_b_single_p_v__coll__graph.md5 @@ -0,0 +1 @@ +cff779a5aa98266fe97b0248a0807ad2 \ No newline at end of file diff --git a/struct_p_d_b_single_p_v__coll__graph.png b/struct_p_d_b_single_p_v__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..60c58936bb84af764f1a2e3b4e513927a015ff78 GIT binary patch literal 9145 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 c8oPailO-9CiZF7q|MhgQ` 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 literal 0 HcmV?d00001 diff --git a/struct_p_d_b_single_p_v__inherit__graph.map b/struct_p_d_b_single_p_v__inherit__graph.map new file mode 100644 index 0000000..699c327 --- /dev/null +++ b/struct_p_d_b_single_p_v__inherit__graph.map @@ -0,0 +1,3 @@ + + + diff --git a/struct_p_d_b_single_p_v__inherit__graph.md5 b/struct_p_d_b_single_p_v__inherit__graph.md5 new file mode 100644 index 0000000..25cbfd3 --- /dev/null +++ b/struct_p_d_b_single_p_v__inherit__graph.md5 @@ -0,0 +1 @@ +88de74815aa0a17d1144d323b11b93e3 \ No newline at end of file diff --git a/struct_p_d_b_single_p_v__inherit__graph.png b/struct_p_d_b_single_p_v__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..bdd20042cebac9a40a59e41af8bdcd1c8bfcf124 GIT binary patch literal 2813 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 + + + + + +pva2pva: Member List + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ +
+
+
+
PDBSinglePut Member List
+
+
+ +

This is the complete list of members for PDBSinglePut, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + +
cancel() OVERRIDE FINAL (defined in PDBSinglePut)PDBSinglePutvirtual
changed (defined in PDBSinglePut)PDBSinglePut
channel (defined in PDBSinglePut)PDBSinglePut
destroy() OVERRIDE FINAL (defined in PDBSinglePut)PDBSinglePutinlinevirtual
doProc (defined in PDBSinglePut)PDBSinglePut
doWait (defined in PDBSinglePut)PDBSinglePut
get() OVERRIDE FINAL (defined in PDBSinglePut)PDBSinglePutvirtual
getChannel() OVERRIDE FINAL (defined in PDBSinglePut)PDBSinglePutinlinevirtual
lastRequest() OVERRIDE FINAL (defined in PDBSinglePut)PDBSinglePutinlinevirtual
notify (defined in PDBSinglePut)PDBSinglePut
notifyBusy (defined in PDBSinglePut)PDBSinglePut
num_instances (defined in PDBSinglePut)PDBSinglePutstatic
PDBSinglePut(const PDBSingleChannel::shared_pointer &channel, const epics::pvAccess::ChannelPutRequester::shared_pointer &requester, const epics::pvData::PVStructure::shared_pointer &pvReq) (defined in PDBSinglePut)PDBSinglePut
POINTER_DEFINITIONS(PDBSinglePut) (defined in PDBSinglePut)PDBSinglePut
put(epics::pvData::PVStructure::shared_pointer const &pvPutStructure, epics::pvData::BitSet::shared_pointer const &putBitSet) OVERRIDE FINAL (defined in PDBSinglePut)PDBSinglePutvirtual
pvf (defined in PDBSinglePut)PDBSinglePut
pvif (defined in PDBSinglePut)PDBSinglePut
requester (defined in PDBSinglePut)PDBSinglePut
requester_t typedef (defined in PDBSinglePut)PDBSinglePut
wait_changed (defined in PDBSinglePut)PDBSinglePut
wait_pvif (defined in PDBSinglePut)PDBSinglePut
~PDBSinglePut() (defined in PDBSinglePut)PDBSinglePutvirtual
+ + + + diff --git a/struct_p_d_b_single_put.html b/struct_p_d_b_single_put.html new file mode 100644 index 0000000..95b9ad0 --- /dev/null +++ b/struct_p_d_b_single_put.html @@ -0,0 +1,199 @@ + + + + + + +pva2pva: PDBSinglePut Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ +
+ +
+
+Inheritance diagram for PDBSinglePut:
+
+
Inheritance graph
+
[legend]
+
+Collaboration diagram for PDBSinglePut:
+
+
Collaboration graph
+
[legend]
+ + + + +

+Public Types

+typedef
+epics::pvAccess::ChannelPutRequester 
requester_t
 
+ + + + + + + + + + + + + + + + + +

+Public Member Functions

POINTER_DEFINITIONS (PDBSinglePut)
 
PDBSinglePut (const PDBSingleChannel::shared_pointer &channel, const epics::pvAccess::ChannelPutRequester::shared_pointer &requester, const epics::pvData::PVStructure::shared_pointer &pvReq)
 
+virtual void destroy () OVERRIDE FINAL
 
+virtual std::tr1::shared_ptr
+< epics::pvAccess::Channel > 
getChannel () OVERRIDE FINAL
 
+virtual void cancel () OVERRIDE FINAL
 
+virtual void lastRequest () OVERRIDE FINAL
 
+virtual void put (epics::pvData::PVStructure::shared_pointer const &pvPutStructure, epics::pvData::BitSet::shared_pointer const &putBitSet) OVERRIDE FINAL
 
+virtual void get () OVERRIDE FINAL
 
+ + + + + + + + + + + + + + + + + + + + + + + +

+Public Attributes

+PDBSingleChannel::shared_pointer channel
 
+requester_t::weak_pointer requester
 
+epics::pvData::BitSetPtr changed
 
+epics::pvData::BitSetPtr wait_changed
 
+epics::pvData::PVStructurePtr pvf
 
+p2p::auto_ptr< PVIFpvif
 
+p2p::auto_ptr< PVIFwait_pvif
 
+processNotify notify
 
+int notifyBusy
 
+PVIF::proc_t doProc
 
+bool doWait
 
+ + + +

+Static Public Attributes

+static size_t num_instances
 
+

Detailed Description

+
+

Definition at line 102 of file pdbsingle.h.

+

The documentation for this struct was generated from the following files: +
+ + + + diff --git a/struct_p_d_b_single_put__coll__graph.map b/struct_p_d_b_single_put__coll__graph.map new file mode 100644 index 0000000..57d3aa1 --- /dev/null +++ b/struct_p_d_b_single_put__coll__graph.map @@ -0,0 +1,2 @@ + + diff --git a/struct_p_d_b_single_put__coll__graph.md5 b/struct_p_d_b_single_put__coll__graph.md5 new file mode 100644 index 0000000..71303d0 --- /dev/null +++ b/struct_p_d_b_single_put__coll__graph.md5 @@ -0,0 +1 @@ +05da203783c28c046d28230f5770f6d0 \ No newline at end of file diff --git a/struct_p_d_b_single_put__coll__graph.png b/struct_p_d_b_single_put__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..983624dbdb82b2b9c32b2be195e35cc1d54e7d1a GIT binary patch literal 7372 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 + diff --git a/struct_p_d_b_single_put__inherit__graph.md5 b/struct_p_d_b_single_put__inherit__graph.md5 new file mode 100644 index 0000000..71303d0 --- /dev/null +++ b/struct_p_d_b_single_put__inherit__graph.md5 @@ -0,0 +1 @@ +05da203783c28c046d28230f5770f6d0 \ No newline at end of file diff --git a/struct_p_d_b_single_put__inherit__graph.png b/struct_p_d_b_single_put__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..983624dbdb82b2b9c32b2be195e35cc1d54e7d1a GIT binary patch literal 7372 zcmZ8`bySpJ)b#@b5`subcS`(d5Ro3b8|m&IMU)2VM!FfKq&r0r1nH9QF6ofwyS{(C z>s{Z>S~Jhgdg9)D&OT@FeZy3hWw0?xF(C-TmXn34LlDwyaO{VU3_eMSCHBA z>UYn0=b_65Pn-Y*v!59CY9PTPniw_iiXS3Ktm_H09y)B`{~X44&p~o4$7?+Vn5fRI z)MjBB8S||lPE)9IZDcSogUn1!ataE98)$I3@@i^o>g$vEP{Q5MRJF7w#>RfkVTPu3 zT+yRuj7w0Pp%Jj7&{~O&{_mkzHSWaJl#Z4bsxgg85R5i#b63sMa^n*QKJ2Q0)oz6| zEs9!JN-8Kdb!H^OOzMp6;&WD#BBKBw--=~8dVpu3rk0kion16c8Z(GC%~v`WX=U{! z_4S97?KzsXgruZZdnmBO#?g^tG17utkd>8{jxH}h-_mAM{0M2tRw}f$^)>kO!-p#{ zyTUJDAgHvg3<-Mm>J{ep2EVykUI79AgpO_;s)m>ejXkT z9UW2kKg1k7(@xnn>PFbC%{gqm{QR3+TY0g*9#+A{fmrEgS3W zX6EK(q@+XHq8#k(3kwT|YHA&~(aPB(O0;oqZf?7Kd(QKXx!_S!@7})c>gh4JO_?es zsoK*j(OzhIU(wQ%&KLVeXi7qrK-lN@a<GmijI!n-`_tz zK8E}zC$+g#*;rXy9Ovq1XJ^4oATbRMeC?lG*}g{LWnkc7WmONZoBY`H{6CX^6DzN) zjbsoLAt5qo1msE2lg)j&c3+996pFHz#OR4RuhiV+BqJRi{A9iN;=&y*aCBlqs&M>` z@9O5}rktGIz!?#T(faA!DuJV%97Y9-S7l|Tjg3uv`QdyMkN5T4e*>I8{3M@`46(4V zFcb8Z=v07p*?Id>Tpa27FKuTltAemF4Et{eSVWbUoID3h-(wKWnaV`-Pln`!?50OU zG!k7r*jS26O18GPh=_>Dh>6*ZS}#{RL)6u?y@dGq_{IxWtbJ;$tMR^iVPQpx>z*Gh z2pJk0qKM<7ys3AXnQL&aaw!#xkBjRN>FeuDN=~jYXmXn@eFH{c%AlCS>2E70DH%u| zRMSxi29QE^mD17bJtQA8U70sbEv0X4{N3m7qq(^`K!hNC)8O03M3NwCS@4T9wFiIl z1JRFww6xh|W1rr=JtE7Go}MI6xzR>+2v{AO6hLY;W64GMDB(f)bLGeJ^IL0|CrNNh6xBY8m^rasv~>R%vFL51kG;7*iJjEhs#)a*ilkRU;ei;MU7_f1Vr zR3cuN8_C8vR3ec--QC?8>FHgJcz7_8D*-yQmzPeIV8=*+K7V*b_x&ZDT`BL9xHPD^D9&>Bh~?9T^oR zM?VJU08-ZPUkUh;*1;D3KcJ_5GAxl09j&aU_RL;ZM`!Bh@8N?!Eu^NVR!~p?qdmSk z{N96ndU8^rl3kvYlarSR|1-^H)d#?cg@yI*-T7Ki%qhkf^yeRvM*o=u!jhJb zuEyiojE#t(Y?|g5z4F+yX8wqf4gi_Gy?t_G;@zI{gBh9#z;9191u81)G$ztikjK-f zF$V_+Bs^A?N!^=*%Y>oq<2<5nPP5$0fonzRq7T@n$ln>oi3fI%)A;O_Ghh9jZ7VJ= zzPq~{;1lj3TAg|QxD^@o4BI70Iu8i~kw6)yeU-!9Y}$ziz@%0ZH*VguYe*(v)jIE1 zs@C1zozCxQ=j61RrezqMs;W`@Yg;WYj6iB2Z^?ED;iXc?&{G(q2$ z6M>C|#mdY)-RNo#f&t(yD=Q0w!E|+rE6xJgx=v-pmLM`1?K3DgBSVq#GaW6hZXU|t zpk)PbZ*M(4y*F=Wera*#JdKp4_qo|`kgN!e(Z`AST2`i{s7U|0m&bbO&-V86fXCKQ zCaA53E$*f(E$;gtFaEp%7y)qw?FsZLFx`+*la76B^R9*PTbbcjkG}_*d3kvt=fcDL z=9}OZ#@~k`kptMfPUU;~V&SP-!@FFpxw*M8+R@*?c?ATBTrMThQ2q**sq!3kbZDby zcavlKHRwmPhj*B;>D6u@t#lgjhUE*}(uIhUL@6|xy?nkmRj8cF!o&oYKRzR4psu~3fKfSyb$KOe zEmA`5Y%E`)#%gdit*WvT*He;0N(~H0DV@KrwzhKO=S9fSrnm(sF&7tCQc@D=1N{8_ zA3l6o&hDwNWXrgh61l+I&|aVAeuON=O5PZeG~EBn$;n9}`9JT|O(i+G-h>w#0fB*P z1gKDBb8~#J#h*AvCMG8CRB|Gs$I$YvD_q;(?R1(8|LEgfaPMa(6@KT%()@faW8-0M zEHFUHrmzbDa~N$L&)Smj!#9iGc)%CT)Eb-?#-^r{KY!K-Z6XYxY4Mw9&j%U5&Ol-+ zs)~w=hklOlARbFi@W=Y!$&VK3jKDB+8{u0x7b4X4qLF@LqnIJ+;mt%7XD+;6#a zErv=oI4FpOl$4t|65#*r>@8_juoM?@WKIq>Ku&^WEl6oAc6o8}m47X+IZM=ch*1wb zPdm&^!^Y^M#)^%DgG#lQSd)d1mDRo@02NS&iHQj>b;Qv`D;KocHVG&OF1nVMmhLim zJiv5F38vA|({krI8(UkYG~VK(qN2*m*mu3}M{<}+@$t>=?fXgci;A{aR@5{!0)^EY zeD1CR6O6Du4JTyf{7XsZK-o1cauazjoCP{?RX)`xUp3tZz{JdLZEYPL_XkpW2nh&K z27aQ1YqQ10#ksn>gW&%KRKd8-i-eeXdvlXN0U7n!-_?80YPQz)>go!_7EF^LD_q6vylWkZAS&BZ>r%Z!<**QKhVq4({jtE8kPJ3Bk5ZU72^V=Xnh z=6(J8wW#RV@bK`&#Jl!p(ElDGBReg%EzHh-JY4*?ylhf0`Xcu>LZXQf@QD4n27uVI zvNAOS(DW2lRH!21p}sO~E1}CrDI^nS)Lu4?1+ zpM=Ure@cXX?DRts<3-TY-zN(1lZve5%V z@7>8Dh&y$44X&V~GBY$ZKdYB5M*L!jl$bbDwb$Y3`mea)JSD;)Xd53FcVv9r+}e6- ze*QJ!+<;4iWL|MhaG_qk32JKYeooLTjr$3vetd4&?DMS-fnZydK8Cpk_r$IQ!9CcT zJ5!JZUD}_E;}S@bk+n!jxRsR#1O$}x^SiG)5}|NchgR8?l|CV2=T1&aLWc6kNrZ)e zudn|QgtyJrv7Qf-dC)$y7@+M&phDy?O%w_roIRG7R0>D8o0^7+*so33x-UiVJ!0}4 zaetxHEF$WvxeZ#U4Wu_ex8#g&GlxGXxc&C=oaAxHF9hP*(kBvR5~VKvTFB4OkK_7= z1ghjH9JP4@jjXN;h={x}-~l2qJoIBbs`d3-Ix@0|kf*FRysz{L0%UuC;jXUoub2^& zp$8-+CPr;j61tgE;D+8*O(7><0zG^2c<_lqVsJ*Xm zq`P~yBhbytI)WM!kNx#4iWZ^U?)X^FwJ<+li0jzY>o#!Fh$YY;8M?juJ~9~`z5UFZ z?F`KA`~6qLrW0Ow4s_%%U%qt5OsQ)nswkYQYY|>gFroW?Ezuv&^o&i@>oVcA;YEWW zaa>_xGqq6~5)$Oa$tdqG9~w;aUCqE@(T0RL8fx^|cnLEzeg?+osj2s`UP;&0d3Vh< zS4rC1E(~QBpKgWZe<4sW=2fhMAQU7YAJ$wmnGmkA@c`df`Y1@&!%meA*%(k!u`S#! zJSj18sBbp6tSr32e|7LPlh(u4@WSn_&e#}AJ)bBF(#MaxF;tJ`6=LE<#JWg?{)Jq~ zy>s5cbANVbAhx;r;@uts1Esh>`Th2GWZj#M?U5ywht-Iqv9VXk;^E5HE{tHT%9(Di z?pZ?D^>U2n^0fxGcDrt_VON)NZdWHbbadFQgU=KU49x*IN(nU8HW3iIj=T$IjMJ>H zc4ubouP`J#KQP2v+ze$13p;>srpPM5Q>$swR}a5qvbgich1O60)*R|RW{A`L^M}^x z`@LU-;A%)~tD@c4t$|c&hgBGEPKm->mz1Dn)A%r0=yM3z5Gh#)<~Btu>jZbZT93f3 zsW36C>+8ouVN#R#&&6Z?py|PAe!SoFU%#HDri$P*?Y?{o6Y({QY7jJ&He1bGUN#^i zvWLSd6dQB}?46&s%#2D0z_1`y&4h0rt~a%|!TJWgYyz@uwhOzIWc| z6TYgTxW0x_i;YI}$203eV!omaJxqe44~Jjq{{~?V9`nn*y*lp6rlUQ`c)jyy^~ASy zB{Ngl+xu>IcH}(j5gv;k1Z56gZl<5Lwr*_=IU2QjVS-7MGl!!+-ZE-DI{N*Bh^bJ} zBmL18RXpqeoP2cJKhS$c$M1gnRZ9ar;FFjdFDEAxL;m(a>iI|>otLLp3hSTI zLEoh;C+9Srbq0W!#D02Qk1mk12Y>N`(#2cZ!XI(RfrM0&kYMqYqOV|lM{y|_)^YZU zfyq-$C58Es)QzZ@cQP`BL)9jo$JN@JwCp%kG&ZNO(0u;mbZdfyM5M;bJGem**GFvB zC!pd`oq^#>GNiht<;BfKS^Hdu8lo_y*;3($vG0VXg@;PE)29Z(SR_A$rFDPO6$-N3 za(iN1+r4B+Ti0C1vk=7tI6R`H+-b0P#@4nt0-WmakJ$Lp9rd8D9)EMar|<-gj??8l zl+r(f1FZVqRL{gjowenD%1gD!&TwjEB&mLi$02V}0)Cep7E_6;w>>PnDjsaijg9U9 zA(v$QYt&LdH?4~gP7Oeo>i=BPmX=$@ytfhu%j5F79kq?zNovAUaj)l?50Yt(J!3+k ztsg9KKaJ_qDk-I1)t{^);_2Q=JUvTvz{Yw2NFdDh zI9(}y6$pj3wT8alu;UEG*RLNInr*PL^CO>RyRIc1@jvD!&apw=*copi=C%rJZVR&#v(TNq5Lb}7D*Fg`wp{4XAWM65aDSR6&hB_@t`^!0JF_7}Fcjt=evQc1PAi7qZD7xh^qvZ={k zFO5mFwDFOrUT$%zgI>dbdiwf&!V3z9hEEED%uP(5nxbCRN|;+o_YGY*Ivu#VM?brx zy9$q3YHa%XMnB!CaT$kDh~E!E@no&Xeq;0CV0X8sL3D0fnDulcYTD$q){u|#CI!!%)1u{3)PNuLlp*seB5qp#4a3?DPp5Il-}Ow zB|7gxpJ}^hS-rc_ZXLY(1Q2v^Kr~sNNkP(NI`H}zYKNckR;&qS@76Z6gv`mt=KaoI z`s(hrulZq|Ejk$0D}+0}vHQiL(EEaq9&Gn3A@5YH%<-6KP5nO5FEzhYyQJ(*j#ocB zpGt21<`@t#xom@G0rN*tP*&1iv9Y~%eI3uibv$~1rvr2x4F;K$Ecek$_{ygyVLiRH zDQ4%GV2aQ0E{{m%=Hiu+{e|~k5INN88Li%nuQiC0Q-1vDQ!7dSP)VU#N)LI?u2?6; ztgpSRq_8MOmJ*^J*@+bP9IG&X`I)QiI5zc2uvh^8Xb?+4!DJUtuiP7&LwA_jkBDNSA*Y!95xu6?Bw(mRlvEO&FfD{ zBvOt|6Fvz^aY;!8!Uh;+5)u-+y1Et?^!5aS9Yw{(y+cD6XJ@T0D*?a)((eY+vc`H? z8U`a5@gjzBpFJC$p7uD~R%2)XXZwVPhL)F?14|V+B`wX((FJ!7yu7>~o}OEqn>a1l zvCoikVwxoB@qigrn44>AWd&Sa9X-9-@$pX5{NiFk^X|yQwi{&~oxi|7%OGJ=&e-1B zxmxeVXS)UNGbJS@KBFQvUYPEbj;<~`q^hBDdUi&xbTb3!F0h`avHc>+Rcjy7F)*M) zIpaGSYUlx_Z)yq}8&mA1k^OVZ%cBihSy+r(+@oGRWo0cH7*K@73=JvZy!PhiaImU_ z=>ipRYJd^@2=YU012x{@Fk@zK-vUD46GK&lV#3Lyx>!NHNJ$3zhTOFBL^H8nRkH$JXmZ0x%^kP4J9kR&cjwk9U3Kr*LR0cB4^ zV>(l9soVJd`vX{0ataDS$$|eyMn=|@bg?~}S5(Bz!BNrJ*a+4XNVbA6UoNk&jhf%~ z4i2)ju!OVU0l5H-w$;^D-~*ilL$j+3X1X5}9gPM7j}v|THSTMFxZZ)oQX54JP`FvI zKez$fUP*!kg@=d#Gsga110ML#dp+A3*Kcsj6ncNK+z|*&0n2_TYwN<&(pIyd;Xv%i z_pbl>^Urz&<}3tR4W`w-+XDuN>g1W|!!6vy$_AU0@99={e0easjykR#l@G zSho;lyYt|~aejWz$jCUL3uI;e8Bl_{E$-~6dB7O;yHNNYL2Lemd6ve1P!PyB!8|Z) z2S-PIJUpL zKzspoD`tbu1F)a*XjZXs90Nr{A)+WF1bX)TWg%f2*a4^q8$L-%z>7ygMFqz1OF_Y^ zpTHdk_IQ3_;b&QT+PI>eoJy~&li1i;5S8HI;IXl>loaA2rzCtKp%xHH;EZG{GCo{w zWdnRVd^KuxG4=BD0&@epTuiLJ&VK4LA^0l)pH>B!;12`ZlCYeR`Vt8=mYF6vle;)= z9MF?PnL<6}3Dw=S=w@bSc;w`fy=>If)Ig(&h_scLD+82wcU$!*u|Jx$w6>Nh9PjMx z6cQ3*Qpx(WzwZsUdL~hT#{eWbKooia@VkEX_eZFJ%_TeV_vq*-FcjO`+MZI0pg`N( z+lra5-tEuU2{9AtWfsCm=v2=!W7fiLwDUl<4t#fBz=9xm@meqY2k0MMnzh!3|A8lEU&2B~h*Y-$T3x zTrE94%)dxMp?vWSdIk+IsIb6t4`d1vIkVDJ^nRqpL?(IEF8KfL$^B1#?S6Pf + + + + + +pva2pva: Member List + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ +
+
+
+
PVIF Member List
+
+
+ +

This is the complete list of members for PVIF, including all inherited members.

+ + + + + + + + + + + +
chan (defined in PVIF)PVIF
dbe(const epics::pvData::BitSet &mask)=0PVIFpure virtual
get(const epics::pvData::BitSet &mask, proc_t proc=ProcInhibit, bool permit=true)=0PVIFpure virtual
proc_t enum name (defined in PVIF)PVIF
ProcForce enum value (defined in PVIF)PVIF
ProcInhibit enum value (defined in PVIF)PVIF
ProcPassive enum value (defined in PVIF)PVIF
put(epics::pvData::BitSet &mask, unsigned dbe, db_field_log *pfl)=0PVIFpure virtual
PVIF(dbChannel *ch) (defined in PVIF)PVIF
~PVIF() (defined in PVIF)PVIFinlinevirtual
+ + + + diff --git a/struct_p_v_i_f.html b/struct_p_v_i_f.html new file mode 100644 index 0000000..7bc2b16 --- /dev/null +++ b/struct_p_v_i_f.html @@ -0,0 +1,259 @@ + + + + + + +pva2pva: PVIF Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ +
+
+ +
+
PVIF Struct Referenceabstract
+
+
+ + + + +

+Public Types

enum  proc_t { ProcPassive, +ProcInhibit, +ProcForce + }
 
+ + + + + + + + + + +

+Public Member Functions

PVIF (dbChannel *ch)
 
virtual void put (epics::pvData::BitSet &mask, unsigned dbe, db_field_log *pfl)=0
 
virtual epics::pvData::Status get (const epics::pvData::BitSet &mask, proc_t proc=ProcInhibit, bool permit=true)=0
 
+virtual unsigned dbe (const epics::pvData::BitSet &mask)=0
 Calculate DBE mask from changed bitset.
 
+ + + +

+Public Attributes

+dbChannel *const chan
 
+

Detailed Description

+
+

Definition at line 365 of file pvif.h.

+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
pvd::Status PVIF::get (const epics::pvData::BitSet & mask,
proc_t proc = ProcInhibit,
bool permit = true 
)
+
+pure virtual
+
+

May copy from pvalue to PDB record (call dbChannelPut()) caller must lock record

+ +

Definition at line 1262 of file pvif.cpp.

+
1263 {
+
1264  dbCommon *precord = dbChannelRecord(chan);
+
1265 
+
1266  bool tryproc = proc!=ProcPassive ? proc==ProcForce :
+
1267  dbChannelField(chan) == &precord->proc ||
+
1268  (dbChannelFldDes(chan)->process_passive &&
+
1269  precord->scan == 0);
+
1270 
+
1271  pvd::Status ret;
+
1272 
+
1273  if (tryproc) {
+
1274  if (!permit) {
+
1275  return pvd::Status::error("Process not permitted");
+
1276 
+
1277  } else if (precord->pact) {
+
1278  if (precord->tpro)
+
1279  printf("%s: Active %s\n",
+
1280  epicsThreadGetNameSelf(), precord->name);
+
1281  precord->rpro = TRUE;
+
1282  } else {
+
1283  /* indicate that dbPutField called dbProcess */
+
1284  precord->putf = TRUE;
+
1285  long err = dbProcess(precord);
+
1286  if(err) {
+
1287  char buf[32];
+
1288  errSymLookup(err, buf, sizeof(buf));
+
1289  std::ostringstream msg;
+
1290  msg<<"process error : "<<buf;
+
1291  ret = pvd::Status::error(msg.str());
+
1292  }
+
1293  }
+
1294  }
+
1295 
+
1296  return ret;
+
1297 }
+
+
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
virtual void PVIF::put (epics::pvData::BitSet & mask,
unsigned dbe,
db_field_log * pfl 
)
+
+pure virtual
+
+

Copy from PDB record to pvalue (call dbChannelGet()) caller must lock record

+ +
+
+
The documentation for this struct was generated from the following files: +
+ + + + diff --git a/struct_p_v_i_f_builder-members.html b/struct_p_v_i_f_builder-members.html new file mode 100644 index 0000000..0761e55 --- /dev/null +++ b/struct_p_v_i_f_builder-members.html @@ -0,0 +1,108 @@ + + + + + + +pva2pva: Member List + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ +
+
+
+
PVIFBuilder Member List
+
+
+ +

This is the complete list of members for PVIFBuilder, including all inherited members.

+ + + + + + + + +
attach(const epics::pvData::PVStructurePtr &root, const FieldName &fld)=0 (defined in PVIFBuilder)PVIFBuilderpure virtual
channel (defined in PVIFBuilder)PVIFBuilder
create(const std::string &mapname, dbChannel *chan) (defined in PVIFBuilder)PVIFBuilderstatic
dtype()=0 (defined in PVIFBuilder)PVIFBuilderpure virtual
dtype(epics::pvData::FieldBuilderPtr &builder, const std::string &fld) (defined in PVIFBuilder)PVIFBuildervirtual
PVIFBuilder(dbChannel *chan) (defined in PVIFBuilder)PVIFBuilderinlineexplicitprotected
~PVIFBuilder() (defined in PVIFBuilder)PVIFBuilderinlinevirtual
+ + + + diff --git a/struct_p_v_i_f_builder.html b/struct_p_v_i_f_builder.html new file mode 100644 index 0000000..f818473 --- /dev/null +++ b/struct_p_v_i_f_builder.html @@ -0,0 +1,157 @@ + + + + + + +pva2pva: PVIFBuilder Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ +
+ +
+ +

#include <pvif.h>

+
+Inheritance diagram for PVIFBuilder:
+
+
Inheritance graph
+ + +
[legend]
+ + + + + + + + +

+Public Member Functions

+virtual
+epics::pvData::FieldConstPtr 
dtype ()=0
 
+virtual
+epics::pvData::FieldBuilderPtr 
dtype (epics::pvData::FieldBuilderPtr &builder, const std::string &fld)
 
+virtual PVIFattach (const epics::pvData::PVStructurePtr &root, const FieldName &fld)=0
 
+ + + +

+Static Public Member Functions

+static PVIFBuildercreate (const std::string &mapname, dbChannel *chan)
 
+ + + +

+Public Attributes

+dbChannel *const channel
 
+ + + +

+Protected Member Functions

PVIFBuilder (dbChannel *chan)
 
+

Detailed Description

+

Factory for PVIF instances.

+

Caller first passes a mapping type (eg. "scalar") to PVIFBuilder::create() to obtain a PVIFBuilder which may then by used to create PVIF instances for specific dbChannel.

+

Caller than uses PVIFBuilder::dtype() to obtain (sub)Field descriptions. eg. more than one of these may be composed into an overall Structure description.

+

Caller than creates a PVStructure and uses PVIFBuilder::attach() to build mappings for each dbChannel in the composed locations.

+ +

Definition at line 403 of file pvif.h.

+

The documentation for this struct was generated from the following files: +
+ + + + diff --git a/struct_p_v_i_f_builder__inherit__graph.map b/struct_p_v_i_f_builder__inherit__graph.map new file mode 100644 index 0000000..1b9953b --- /dev/null +++ b/struct_p_v_i_f_builder__inherit__graph.map @@ -0,0 +1,3 @@ + + + diff --git a/struct_p_v_i_f_builder__inherit__graph.md5 b/struct_p_v_i_f_builder__inherit__graph.md5 new file mode 100644 index 0000000..4c4cacc --- /dev/null +++ b/struct_p_v_i_f_builder__inherit__graph.md5 @@ -0,0 +1 @@ +eb0bd51a49052b6f6ea2f55e318c1ee7 \ No newline at end of file diff --git a/struct_p_v_i_f_builder__inherit__graph.png b/struct_p_v_i_f_builder__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..d3a91c4f00551d5e7400e33bd8017ad54aa64fd5 GIT binary patch literal 2945 zcmbtWc{o)49zVU*c4+`4JQJ_wsz{B>%>bZ zLUFOKvL0itmn}3kH8nII<3u8G+<*-n4u`>Rxx27#k2XdQNR)1g2zIH;-G-YgWkva$ z)AwlADv08X)C~5Ps8ynGXyK8h+|2CLuvADq3W* zf=+SS#>G+M3OlBHi>+}ROXHRbk*^H%3krs7{ru2qWJJHbe_zg-PVFop8IR|`a`dRM zO=xJSySqCAfq=na!NH$r2g-?vFAIzp-5qY)rxOx>PE#{x!~LIZjW=Vfg!9{&C%D4nDq3wg-$wQt{YO(O4aoxbX*A;z16 zMx$ema)VCAL`6NbQ;XmHrtB-|qwAq2>bYh6l$*Wt_0uN+(38molGPpVxw*OJI%+(B z^8ERQSIU+)D4lz$sSu!qLdmO4Wf}`*=Q=*_$vI4;(P~k3D$2^G4Gs73EK^+~!lM@b zGJZY0!Y!R;y5&jnQIM7Oc6BwF=C58K85k%Vp2wK`Iym&ut@q^QXGuQqtgWTb?krX@op)~Zgv-52NK~*$ucV~^hxp}F=4bi!_ zw&v~aO}}sTbHK^E`^)NN($7r%44bWB8l|MA74}BqX^~>%ImT**ig5zFH_zVQ{ zlP1^l!+S)DWX)*uKx$rvgtirT0_C~a=E zUyEx%1`97-PSVlNCg5cFVcs*Zulpt#O5xSjod7@)`rXaFwH{;cI6|VWt}>UF(4bB( zI=g)z8Jg7#7*^opRd~S=1OPdcT~6ci+T|A*Sp7&Xyr^b*8>4;;moJ%+u<~60=S#sC zep!zm8L?+1`8#-d6&QMoAq&Gn$J$jP5IoaJ=49jf!HbyLbGf2i7w77#95e|p-$WDQ zZYv%AYqm>qFiRU;efTi`)g|=(BEblY_1xmUuHfg1QNj9om6dZJ=Y)*y)1(u=Z~jglzMkjP~#m)SP=YTi1GisJ~2tdIq2HqHyyWBm^ zz&ytgj_g1QYeDW!AcbMh=kQ~J5md8eaJIU-+VmF4b*46D<+ztuK6P4*>w7B*sP?S+i{Cc{VzQ41cfu*Ho zU|=9~bQDsZSCbZCWEBgWK62#9Dczid;^KyehJ_Z`8ZsHBa_1<$w=iL2iPX^0P+xzS zNHj7sQrFP>Z|A$5Z+yPR9}Sj1=gVs z9!9J2sF<3PpFO*6`3a=?=Zle%kr5Hq?o~!InGzBb06;|8UbesCl5%|I4=Ozxi`7is z61GAXLpiTg_}tiSd%G6Wd#gQ%K^N)v_w@9%v%6{ATsD8IY7pHN`#UZA!f>#@y1M$- z=B66dpqAzV-10B zO|+kRPo+L;YRX5jy9t`XV+;mkXJ+aGMRHNFhxKd*epRV;Z#N-4O@zOrb&D-42l~sz z#KcG0&8n&@R~N7ui+>5#(15Aj>H4zT+v}LYltO4a=JvN?JUoW0y&H{l_XT%xkhr>b_M1?7U;XVcK?_xrGIYJt?OA-GGG8QKlelZf0hJ{yaB7T)RBp ztSOn%{pIE~i-p^qf;@7maMKnO740H8fmQVLD+aNMu605p4*;=PtSjkAj!S)GW7S|d z$!om7KWg=}y`SGCm>1!!zz*n9GMO4yRz z#;w6hoprn$7IOTOq-)aYddr0;3KgT}tP?k%Icvp6N3U#bfPGsVx>l3tL3ue`2h_@h z7|Ix#On&zcxw=_jZ|LOY1fJR3+Y2^6(Bep_TAo81eFhGJKuVqMd@=G?@poyg{oLH* z2M==PM`yAwg@=dx`+ovW^~8x2-AQoa>##BgIl2t&Whl?yfrVyllA^FU61zlMt*$I=GXB*G)(FfWj=XcL%ElN+k;ZNRH&hx==Q7o=ZC6gNAGs3 umzI`FI&IO~6Q(=&hb8^9L;YJCclnZ>Nd-QnV9-VYz}^;VQ*+$^>OTObbEZK6 literal 0 HcmV?d00001 diff --git a/struct_s_b-members.html b/struct_s_b-members.html new file mode 100644 index 0000000..cc9933c --- /dev/null +++ b/struct_s_b-members.html @@ -0,0 +1,105 @@ + + + + + + +pva2pva: Member List + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ +
+
+
+
SB Member List
+
+
+ +

This is the complete list of members for SB, including all inherited members.

+ + + + + +
operator std::string() const (defined in SB)SBinline
operator<<(T i) (defined in SB)SBinline
SB() (defined in SB)SBinline
strm (defined in SB)SB
+ + + + diff --git a/struct_s_b.html b/struct_s_b.html new file mode 100644 index 0000000..ac41d0e --- /dev/null +++ b/struct_s_b.html @@ -0,0 +1,125 @@ + + + + + + +pva2pva: SB Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ +
+ +
+ + + + + + + +

+Public Member Functions

operator std::string () const
 
+template<typename T >
SBoperator<< (T i)
 
+ + + +

+Public Attributes

+std::ostringstream strm
 
+

Detailed Description

+
+

Definition at line 8 of file sb.h.

+

The documentation for this struct was generated from the following file: +
+ + + + diff --git a/struct_scalar_accessor-members.html b/struct_scalar_accessor-members.html new file mode 100644 index 0000000..51d7a23 --- /dev/null +++ b/struct_scalar_accessor-members.html @@ -0,0 +1,107 @@ + + + + + + +pva2pva: Member List + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ +
+
+
+
ScalarAccessor< T > Member List
+
+
+ +

This is the complete list of members for ScalarAccessor< T >, including all inherited members.

+ + + + + + + +
field (defined in ScalarAccessor< T >)ScalarAccessor< T >
operator value_type() (defined in ScalarAccessor< T >)ScalarAccessor< T >inline
operator+=(T v) (defined in ScalarAccessor< T >)ScalarAccessor< T >inline
operator=(T v) (defined in ScalarAccessor< T >)ScalarAccessor< T >inline
ScalarAccessor(const epics::pvData::PVStructurePtr &s, const char *name) (defined in ScalarAccessor< T >)ScalarAccessor< T >inline
value_type typedef (defined in ScalarAccessor< T >)ScalarAccessor< T >
+ + + + diff --git a/struct_scalar_accessor.html b/struct_scalar_accessor.html new file mode 100644 index 0000000..af18cf0 --- /dev/null +++ b/struct_scalar_accessor.html @@ -0,0 +1,140 @@ + + + + + + +pva2pva: ScalarAccessor< T > Struct Template Reference + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ +
+
+ +
+
ScalarAccessor< T > Struct Template Reference
+
+
+ + + + +

+Public Types

+typedef T value_type
 
+ + + + + + + + + +

+Public Member Functions

ScalarAccessor (const epics::pvData::PVStructurePtr &s, const char *name)
 
operator value_type ()
 
+ScalarAccessoroperator= (T v)
 
+ScalarAccessoroperator+= (T v)
 
+ + + +

+Public Attributes

+epics::pvData::PVScalar::shared_pointer field
 
+

Detailed Description

+

template<typename T>
+struct ScalarAccessor< T >

+ + +

Definition at line 38 of file utilities.h.

+

The documentation for this struct was generated from the following file: +
+ + + + diff --git a/struct_scalar_builder-members.html b/struct_scalar_builder-members.html new file mode 100644 index 0000000..c80540c --- /dev/null +++ b/struct_scalar_builder-members.html @@ -0,0 +1,110 @@ + + + + + + +pva2pva: Member List + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ +
+
+
+
ScalarBuilder Member List
+
+
+ +

This is the complete list of members for ScalarBuilder, including all inherited members.

+ + + + + + + + + + +
attach(const epics::pvData::PVStructurePtr &root, const FieldName &fld) OVERRIDE FINAL (defined in ScalarBuilder)ScalarBuildervirtual
channel (defined in PVIFBuilder)PVIFBuilder
create(const std::string &mapname, dbChannel *chan) (defined in PVIFBuilder)PVIFBuilderstatic
dtype() OVERRIDE FINAL (defined in ScalarBuilder)ScalarBuildervirtual
dtype(epics::pvData::FieldBuilderPtr &builder, const std::string &fld) (defined in PVIFBuilder)PVIFBuildervirtual
PVIFBuilder(dbChannel *chan) (defined in PVIFBuilder)PVIFBuilderinlineexplicitprotected
ScalarBuilder(dbChannel *chan) (defined in ScalarBuilder)ScalarBuilderinlineexplicit
~PVIFBuilder() (defined in PVIFBuilder)PVIFBuilderinlinevirtual
~ScalarBuilder() (defined in ScalarBuilder)ScalarBuilderinlinevirtual
+ + + + diff --git a/struct_scalar_builder.html b/struct_scalar_builder.html new file mode 100644 index 0000000..c4a4fb3 --- /dev/null +++ b/struct_scalar_builder.html @@ -0,0 +1,156 @@ + + + + + + +pva2pva: ScalarBuilder Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ +
+
+ +
+
ScalarBuilder Struct Reference
+
+
+
+Inheritance diagram for ScalarBuilder:
+
+
Inheritance graph
+ + +
[legend]
+
+Collaboration diagram for ScalarBuilder:
+
+
Collaboration graph
+ + +
[legend]
+ + + + + + + + + + + +

+Public Member Functions

ScalarBuilder (dbChannel *chan)
 
+virtual
+epics::pvData::FieldConstPtr 
dtype () OVERRIDE FINAL
 
+virtual PVIFattach (const epics::pvData::PVStructurePtr &root, const FieldName &fld) OVERRIDE FINAL
 
- Public Member Functions inherited from PVIFBuilder
+virtual
+epics::pvData::FieldBuilderPtr 
dtype (epics::pvData::FieldBuilderPtr &builder, const std::string &fld)
 
+ + + + + + + + + + +

+Additional Inherited Members

- Static Public Member Functions inherited from PVIFBuilder
+static PVIFBuildercreate (const std::string &mapname, dbChannel *chan)
 
- Public Attributes inherited from PVIFBuilder
+dbChannel *const channel
 
- Protected Member Functions inherited from PVIFBuilder
PVIFBuilder (dbChannel *chan)
 
+

Detailed Description

+
+

Definition at line 429 of file pvif.h.

+

The documentation for this struct was generated from the following files: +
+ + + + diff --git a/struct_scalar_builder__coll__graph.map b/struct_scalar_builder__coll__graph.map new file mode 100644 index 0000000..b3f4cd2 --- /dev/null +++ b/struct_scalar_builder__coll__graph.map @@ -0,0 +1,3 @@ + + + diff --git a/struct_scalar_builder__coll__graph.md5 b/struct_scalar_builder__coll__graph.md5 new file mode 100644 index 0000000..f33dba6 --- /dev/null +++ b/struct_scalar_builder__coll__graph.md5 @@ -0,0 +1 @@ +5bc6dc15778ea4680c1b63fa7c2c7177 \ No newline at end of file diff --git a/struct_scalar_builder__coll__graph.png b/struct_scalar_builder__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..45c8237a38aead4efae26bc9435f6f016879d3a8 GIT binary patch literal 2927 zcmbW3c{E$w9>)(#wWbC|#ZX)|G~$}I7ilAEoQe-~N1es)L=m&~fSG z000PCTA-Z3J{Y`j@^gc2(fa@t*zx&To1=hl->>o)PjUf3;0H_8MRZj0YDs{Nm?!j( zeZa|!&AgTO13UU5a=b`GWTwHK)Fyf3J zU}8!m<5C>|Oo_%CJ1P(O$A za^LkJpII`A`uZD{x=77cxpZy(&qFsSr}vYSlkeXsMCl<<9}QSMX^@`pec`0J&mr37KwSGU*P=R{4F;N2M zR{oRJ!NEam2<<+7Z?=aZ3HPe;wEpw4Ty%6ajow2LQ6X)O(80CAul{PWw*J1#8Ws2U zftq&VFZ>eX;xvRH2QDH8TPe}W`aRPqpdT{XS!a{4@w^m8}{9p5~q1TRJGSc@@CGg&c%@9+Vb_1#(^ z{nGwdjG1%p`+I7m-qmtNj~@7}#|r+w#D|laUwEnIVzpK9w0~+!G;w{)GtMtbroi98qHi(~)=`zr7?D!u%*QuRSU_yGD z3kx;zSg;z_;&q&fu7NVLgxp#y|NJWDG%9ELfrwmC#yK59VfiMXEhazlE8?uHjm|B_ z@B(_9T*`k+{x|CWM=t*V7Z%LJ6gQYeliSa`3}w00cW}%HiA+Ee4a1pP ziHWARwzfzlGB9vCL-wa~74w{e0w$B0Lf>lzVOw%OFDvW9^oFYl6k3#(m3269@3=3U zo~vRXWmH;J1SRy~A|q#>`I5r9^GfL`uh4P6bb}t6wiLpPiO7z9XWEu zt24s3fwETBJCbWv)!p5Voo3Decc^|KRTIk0RfleVxItN5T*P27*7w>@=E;SAb2?2mStFh5hB3d1Ul(UnQgoei-n?X%Y zP2f_>hF^w$wsLbTa8UiBDUa$0I)pKv(}q?D^A+_X4-e7dN7u1fm7)r@&zmfi zGjJyzYLMenMr;Pvr*SXx*W(fR7>x`t+>8mR%ZC)W!QEd*Y zULE02r}43N4aOuiX>QKP-hTKg=+q_W^;6=z#vtVYd^Bn7Q86dG$pL zc>d8NN3zz5ri6$Y?C>JRT&CaG*SDm&IAvZ+@O7Pg)5gXI0DzSe+8)Q*TLvkjxy3v3u*f!2u1>D~B) zAR-SkH+9Uu%mgA3r2mtNNvWYRNZ9oBblv>}6;6~nqF-edKZR@@{5b>98^v4 z9I2BhZ*4M$rb#1xQoG==%k^HCc6Rj*4d5YZdt<|+HAEKhUY(?<=UJUTQG+I(3uD|P z5O{!~pdfwhvj#bB zWDFKIH#dW>27Y$jy9JNO-=LgVQ(N5M{Ze0F54JPU{RIH;o@Ala)Knw6%x>?&G6cfN zsJPnsTTap|FS2LMtt=>AZPHm<#^IS zkA7kQ + + diff --git a/struct_scalar_builder__inherit__graph.md5 b/struct_scalar_builder__inherit__graph.md5 new file mode 100644 index 0000000..f33dba6 --- /dev/null +++ b/struct_scalar_builder__inherit__graph.md5 @@ -0,0 +1 @@ +5bc6dc15778ea4680c1b63fa7c2c7177 \ No newline at end of file diff --git a/struct_scalar_builder__inherit__graph.png b/struct_scalar_builder__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..45c8237a38aead4efae26bc9435f6f016879d3a8 GIT binary patch literal 2927 zcmbW3c{E$w9>)(#wWbC|#ZX)|G~$}I7ilAEoQe-~N1es)L=m&~fSG z000PCTA-Z3J{Y`j@^gc2(fa@t*zx&To1=hl->>o)PjUf3;0H_8MRZj0YDs{Nm?!j( zeZa|!&AgTO13UU5a=b`GWTwHK)Fyf3J zU}8!m<5C>|Oo_%CJ1P(O$A za^LkJpII`A`uZD{x=77cxpZy(&qFsSr}vYSlkeXsMCl<<9}QSMX^@`pec`0J&mr37KwSGU*P=R{4F;N2M zR{oRJ!NEam2<<+7Z?=aZ3HPe;wEpw4Ty%6ajow2LQ6X)O(80CAul{PWw*J1#8Ws2U zftq&VFZ>eX;xvRH2QDH8TPe}W`aRPqpdT{XS!a{4@w^m8}{9p5~q1TRJGSc@@CGg&c%@9+Vb_1#(^ z{nGwdjG1%p`+I7m-qmtNj~@7}#|r+w#D|laUwEnIVzpK9w0~+!G;w{)GtMtbroi98qHi(~)=`zr7?D!u%*QuRSU_yGD z3kx;zSg;z_;&q&fu7NVLgxp#y|NJWDG%9ELfrwmC#yK59VfiMXEhazlE8?uHjm|B_ z@B(_9T*`k+{x|CWM=t*V7Z%LJ6gQYeliSa`3}w00cW}%HiA+Ee4a1pP ziHWARwzfzlGB9vCL-wa~74w{e0w$B0Lf>lzVOw%OFDvW9^oFYl6k3#(m3269@3=3U zo~vRXWmH;J1SRy~A|q#>`I5r9^GfL`uh4P6bb}t6wiLpPiO7z9XWEu zt24s3fwETBJCbWv)!p5Voo3Decc^|KRTIk0RfleVxItN5T*P27*7w>@=E;SAb2?2mStFh5hB3d1Ul(UnQgoei-n?X%Y zP2f_>hF^w$wsLbTa8UiBDUa$0I)pKv(}q?D^A+_X4-e7dN7u1fm7)r@&zmfi zGjJyzYLMenMr;Pvr*SXx*W(fR7>x`t+>8mR%ZC)W!QEd*Y zULE02r}43N4aOuiX>QKP-hTKg=+q_W^;6=z#vtVYd^Bn7Q86dG$pL zc>d8NN3zz5ri6$Y?C>JRT&CaG*SDm&IAvZ+@O7Pg)5gXI0DzSe+8)Q*TLvkjxy3v3u*f!2u1>D~B) zAR-SkH+9Uu%mgA3r2mtNNvWYRNZ9oBblv>}6;6~nqF-edKZR@@{5b>98^v4 z9I2BhZ*4M$rb#1xQoG==%k^HCc6Rj*4d5YZdt<|+HAEKhUY(?<=UJUTQG+I(3uD|P z5O{!~pdfwhvj#bB zWDFKIH#dW>27Y$jy9JNO-=LgVQ(N5M{Ze0F54JPU{RIH;o@Ala)Knw6%x>?&G6cfN zsJPnsTTap|FS2LMtt=>AZPHm<#^IS zkA7kQ + + + + + +pva2pva: Member List + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ +
+
+
+
ServerConfig Member List
+
+
+ +

This is the complete list of members for ServerConfig, including all inherited members.

+ + + + + + + + + + + + +
clients (defined in ServerConfig)ServerConfig
clients_t typedef (defined in ServerConfig)ServerConfig
conf (defined in ServerConfig)ServerConfig
debug (defined in ServerConfig)ServerConfig
drop(const char *client, const char *channel) (defined in ServerConfig)ServerConfig
interactive (defined in ServerConfig)ServerConfig
ServerConfig() (defined in ServerConfig)ServerConfiginline
servers (defined in ServerConfig)ServerConfig
servers_t typedef (defined in ServerConfig)ServerConfig
status_client(int lvl, const char *client, const char *channel) (defined in ServerConfig)ServerConfig
status_server(int lvl, const char *server) (defined in ServerConfig)ServerConfig
+ + + + diff --git a/struct_server_config.html b/struct_server_config.html new file mode 100644 index 0000000..2e7938e --- /dev/null +++ b/struct_server_config.html @@ -0,0 +1,152 @@ + + + + + + +pva2pva: ServerConfig Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ +
+
+ +
+
ServerConfig Struct Reference
+
+
+ + + + + + +

+Public Types

+typedef std::map< std::string,
+GWServerChannelProvider::shared_pointer > 
clients_t
 
+typedef std::map< std::string,
+epics::pvAccess::ServerContext::shared_pointer > 
servers_t
 
+ + + + + + + +

+Public Member Functions

+void drop (const char *client, const char *channel)
 
+void status_server (int lvl, const char *server)
 
+void status_client (int lvl, const char *client, const char *channel)
 
+ + + + + + + + + + + +

+Public Attributes

+int debug
 
+bool interactive
 
+epics::pvData::PVStructure::shared_pointer conf
 
+clients_t clients
 
+servers_t servers
 
+

Detailed Description

+
+

Definition at line 38 of file server.h.

+

The documentation for this struct was generated from the following files: +
+ + + + diff --git a/struct_test_channel_field_requester-members.html b/struct_test_channel_field_requester-members.html new file mode 100644 index 0000000..f98ea15 --- /dev/null +++ b/struct_test_channel_field_requester-members.html @@ -0,0 +1,108 @@ + + + + + + +pva2pva: Member List + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ +
+
+
+
TestChannelFieldRequester Member List
+
+
+ +

This is the complete list of members for TestChannelFieldRequester, including all inherited members.

+ + + + + + + + +
done (defined in TestChannelFieldRequester)TestChannelFieldRequester
fielddesc (defined in TestChannelFieldRequester)TestChannelFieldRequester
getDone(const epics::pvData::Status &status, epics::pvData::FieldConstPtr const &field) (defined in TestChannelFieldRequester)TestChannelFieldRequesterinlinevirtual
POINTER_DEFINITIONS(TestChannelFieldRequester) (defined in TestChannelFieldRequester)TestChannelFieldRequester
status (defined in TestChannelFieldRequester)TestChannelFieldRequester
TestChannelFieldRequester() (defined in TestChannelFieldRequester)TestChannelFieldRequesterinline
~TestChannelFieldRequester() (defined in TestChannelFieldRequester)TestChannelFieldRequesterinlinevirtual
+ + + + diff --git a/struct_test_channel_field_requester.html b/struct_test_channel_field_requester.html new file mode 100644 index 0000000..53eeaec --- /dev/null +++ b/struct_test_channel_field_requester.html @@ -0,0 +1,140 @@ + + + + + + +pva2pva: TestChannelFieldRequester Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ +
+
+ +
+
TestChannelFieldRequester Struct Reference
+
+
+
+Inheritance diagram for TestChannelFieldRequester:
+
+
Inheritance graph
+
[legend]
+
+Collaboration diagram for TestChannelFieldRequester:
+
+
Collaboration graph
+
[legend]
+ + + + + + +

+Public Member Functions

POINTER_DEFINITIONS (TestChannelFieldRequester)
 
+virtual void getDone (const epics::pvData::Status &status, epics::pvData::FieldConstPtr const &field)
 
+ + + + + + + +

+Public Attributes

+bool done
 
+epics::pvData::Status status
 
+epics::pvData::FieldConstPtr fielddesc
 
+

Detailed Description

+
+

Definition at line 75 of file utilities.h.

+

The documentation for this struct was generated from the following file: +
+ + + + diff --git a/struct_test_channel_field_requester__coll__graph.map b/struct_test_channel_field_requester__coll__graph.map new file mode 100644 index 0000000..28bb8fe --- /dev/null +++ b/struct_test_channel_field_requester__coll__graph.map @@ -0,0 +1,2 @@ + + diff --git a/struct_test_channel_field_requester__coll__graph.md5 b/struct_test_channel_field_requester__coll__graph.md5 new file mode 100644 index 0000000..c8ea5bd --- /dev/null +++ b/struct_test_channel_field_requester__coll__graph.md5 @@ -0,0 +1 @@ +6e6db236b6a355b9a100c9ec6abf8357 \ No newline at end of file diff --git a/struct_test_channel_field_requester__coll__graph.png b/struct_test_channel_field_requester__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..1c258a1333ca93fe47f25a30c1a8dcdd22f99d32 GIT binary patch literal 4607 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 literal 0 HcmV?d00001 diff --git a/struct_test_channel_field_requester__inherit__graph.map b/struct_test_channel_field_requester__inherit__graph.map new file mode 100644 index 0000000..28bb8fe --- /dev/null +++ b/struct_test_channel_field_requester__inherit__graph.map @@ -0,0 +1,2 @@ + + diff --git a/struct_test_channel_field_requester__inherit__graph.md5 b/struct_test_channel_field_requester__inherit__graph.md5 new file mode 100644 index 0000000..c8ea5bd --- /dev/null +++ b/struct_test_channel_field_requester__inherit__graph.md5 @@ -0,0 +1 @@ +6e6db236b6a355b9a100c9ec6abf8357 \ No newline at end of file diff --git a/struct_test_channel_field_requester__inherit__graph.png b/struct_test_channel_field_requester__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..1c258a1333ca93fe47f25a30c1a8dcdd22f99d32 GIT binary patch literal 4607 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 literal 0 HcmV?d00001 diff --git a/struct_test_channel_get_requester-members.html b/struct_test_channel_get_requester-members.html new file mode 100644 index 0000000..d374d52 --- /dev/null +++ b/struct_test_channel_get_requester-members.html @@ -0,0 +1,114 @@ + + + + + + +pva2pva: Member List + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ +
+
+
+
TestChannelGetRequester Member List
+
+
+ +

This is the complete list of members for TestChannelGetRequester, including all inherited members.

+ + + + + + + + + + + + + + +
changed (defined in TestChannelGetRequester)TestChannelGetRequester
channelGet (defined in TestChannelGetRequester)TestChannelGetRequester
channelGetConnect(const epics::pvData::Status &status, epics::pvAccess::ChannelGet::shared_pointer const &channelGet, epics::pvData::Structure::const_shared_pointer const &structure) (defined in TestChannelGetRequester)TestChannelGetRequestervirtual
connected (defined in TestChannelGetRequester)TestChannelGetRequester
done (defined in TestChannelGetRequester)TestChannelGetRequester
fielddesc (defined in TestChannelGetRequester)TestChannelGetRequester
getDone(const epics::pvData::Status &status, epics::pvAccess::ChannelGet::shared_pointer const &channelGet, epics::pvData::PVStructure::shared_pointer const &pvStructure, epics::pvData::BitSet::shared_pointer const &bitSet) (defined in TestChannelGetRequester)TestChannelGetRequestervirtual
POINTER_DEFINITIONS(TestChannelGetRequester) (defined in TestChannelGetRequester)TestChannelGetRequester
statusConnect (defined in TestChannelGetRequester)TestChannelGetRequester
statusDone (defined in TestChannelGetRequester)TestChannelGetRequester
TestChannelGetRequester() (defined in TestChannelGetRequester)TestChannelGetRequester
value (defined in TestChannelGetRequester)TestChannelGetRequester
~TestChannelGetRequester() (defined in TestChannelGetRequester)TestChannelGetRequestervirtual
+ + + + diff --git a/struct_test_channel_get_requester.html b/struct_test_channel_get_requester.html new file mode 100644 index 0000000..ad629fe --- /dev/null +++ b/struct_test_channel_get_requester.html @@ -0,0 +1,159 @@ + + + + + + +pva2pva: TestChannelGetRequester Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ +
+
+ +
+
TestChannelGetRequester Struct Reference
+
+
+
+Inheritance diagram for TestChannelGetRequester:
+
+
Inheritance graph
+
[legend]
+
+Collaboration diagram for TestChannelGetRequester:
+
+
Collaboration graph
+
[legend]
+ + + + + + + + +

+Public Member Functions

POINTER_DEFINITIONS (TestChannelGetRequester)
 
+virtual void channelGetConnect (const epics::pvData::Status &status, epics::pvAccess::ChannelGet::shared_pointer const &channelGet, epics::pvData::Structure::const_shared_pointer const &structure)
 
+virtual void getDone (const epics::pvData::Status &status, epics::pvAccess::ChannelGet::shared_pointer const &channelGet, epics::pvData::PVStructure::shared_pointer const &pvStructure, epics::pvData::BitSet::shared_pointer const &bitSet)
 
+ + + + + + + + + + + + + + + + + +

+Public Attributes

+bool connected
 
+bool done
 
+epics::pvData::Status statusConnect
 
+epics::pvData::Status statusDone
 
+epics::pvAccess::ChannelGet::shared_pointer channelGet
 
+epics::pvData::Structure::const_shared_pointer fielddesc
 
+epics::pvData::PVStructure::shared_pointer value
 
+epics::pvData::BitSet::shared_pointer changed
 
+

Detailed Description

+
+

Definition at line 97 of file utilities.h.

+

The documentation for this struct was generated from the following files: +
+ + + + diff --git a/struct_test_channel_get_requester__coll__graph.map b/struct_test_channel_get_requester__coll__graph.map new file mode 100644 index 0000000..b790be9 --- /dev/null +++ b/struct_test_channel_get_requester__coll__graph.map @@ -0,0 +1,2 @@ + + diff --git a/struct_test_channel_get_requester__coll__graph.md5 b/struct_test_channel_get_requester__coll__graph.md5 new file mode 100644 index 0000000..007be94 --- /dev/null +++ b/struct_test_channel_get_requester__coll__graph.md5 @@ -0,0 +1 @@ +516ab33126719ac946571ff8639bb9c1 \ No newline at end of file diff --git a/struct_test_channel_get_requester__coll__graph.png b/struct_test_channel_get_requester__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..1ab12d9089b60554ab041ec7b5ceb70fab0f9bd9 GIT binary patch literal 4998 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 I + diff --git a/struct_test_channel_get_requester__inherit__graph.md5 b/struct_test_channel_get_requester__inherit__graph.md5 new file mode 100644 index 0000000..007be94 --- /dev/null +++ b/struct_test_channel_get_requester__inherit__graph.md5 @@ -0,0 +1 @@ +516ab33126719ac946571ff8639bb9c1 \ No newline at end of file diff --git a/struct_test_channel_get_requester__inherit__graph.png b/struct_test_channel_get_requester__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..1ab12d9089b60554ab041ec7b5ceb70fab0f9bd9 GIT binary patch literal 4998 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 I + + + + + +pva2pva: Member List + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ +
+
+
+
TestChannelMonitorRequester Member List
+
+
+ +

This is the complete list of members for TestChannelMonitorRequester, including all inherited members.

+ + + + + + + + + + + + + + + + + +
connected (defined in TestChannelMonitorRequester)TestChannelMonitorRequester
connectStatus (defined in TestChannelMonitorRequester)TestChannelMonitorRequester
dtype (defined in TestChannelMonitorRequester)TestChannelMonitorRequester
eventCnt (defined in TestChannelMonitorRequester)TestChannelMonitorRequester
lock (defined in TestChannelMonitorRequester)TestChannelMonitorRequester
mon (defined in TestChannelMonitorRequester)TestChannelMonitorRequester
monitorConnect(epics::pvData::Status const &status, epics::pvData::MonitorPtr const &monitor, epics::pvData::StructureConstPtr const &structure) (defined in TestChannelMonitorRequester)TestChannelMonitorRequestervirtual
monitorEvent(epics::pvData::MonitorPtr const &monitor) (defined in TestChannelMonitorRequester)TestChannelMonitorRequestervirtual
POINTER_DEFINITIONS(TestChannelMonitorRequester) (defined in TestChannelMonitorRequester)TestChannelMonitorRequester
TestChannelMonitorRequester() (defined in TestChannelMonitorRequester)TestChannelMonitorRequester
unlisten(epics::pvData::MonitorPtr const &monitor) (defined in TestChannelMonitorRequester)TestChannelMonitorRequestervirtual
unlistend (defined in TestChannelMonitorRequester)TestChannelMonitorRequester
wait (defined in TestChannelMonitorRequester)TestChannelMonitorRequester
waitForConnect() (defined in TestChannelMonitorRequester)TestChannelMonitorRequester
waitForEvent() (defined in TestChannelMonitorRequester)TestChannelMonitorRequester
~TestChannelMonitorRequester() (defined in TestChannelMonitorRequester)TestChannelMonitorRequestervirtual
+ + + + diff --git a/struct_test_channel_monitor_requester.html b/struct_test_channel_monitor_requester.html new file mode 100644 index 0000000..c34035d --- /dev/null +++ b/struct_test_channel_monitor_requester.html @@ -0,0 +1,168 @@ + + + + + + +pva2pva: TestChannelMonitorRequester Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ +
+
+ +
+
TestChannelMonitorRequester Struct Reference
+
+
+
+Inheritance diagram for TestChannelMonitorRequester:
+
+
Inheritance graph
+
[legend]
+
+Collaboration diagram for TestChannelMonitorRequester:
+
+
Collaboration graph
+
[legend]
+ + + + + + + + + + + + + + +

+Public Member Functions

POINTER_DEFINITIONS (TestChannelMonitorRequester)
 
+virtual void monitorConnect (epics::pvData::Status const &status, epics::pvData::MonitorPtr const &monitor, epics::pvData::StructureConstPtr const &structure)
 
+virtual void monitorEvent (epics::pvData::MonitorPtr const &monitor)
 
+virtual void unlisten (epics::pvData::MonitorPtr const &monitor)
 
+bool waitForConnect ()
 
+bool waitForEvent ()
 
+ + + + + + + + + + + + + + + + + +

+Public Attributes

+epicsMutex lock
 
+epicsEvent wait
 
+bool connected
 
+bool unlistend
 
+size_t eventCnt
 
+epics::pvData::Status connectStatus
 
+epics::pvData::MonitorPtr mon
 
+epics::pvData::StructureConstPtr dtype
 
+

Detailed Description

+
+

Definition at line 155 of file utilities.h.

+

The documentation for this struct was generated from the following files: +
+ + + + diff --git a/struct_test_channel_monitor_requester__coll__graph.map b/struct_test_channel_monitor_requester__coll__graph.map new file mode 100644 index 0000000..b73fc4a --- /dev/null +++ b/struct_test_channel_monitor_requester__coll__graph.map @@ -0,0 +1,2 @@ + + diff --git a/struct_test_channel_monitor_requester__coll__graph.md5 b/struct_test_channel_monitor_requester__coll__graph.md5 new file mode 100644 index 0000000..e1e7b20 --- /dev/null +++ b/struct_test_channel_monitor_requester__coll__graph.md5 @@ -0,0 +1 @@ +c37fad6c8c0f404a2834bdb047e86f27 \ No newline at end of file diff --git a/struct_test_channel_monitor_requester__coll__graph.png b/struct_test_channel_monitor_requester__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..636a9a671fddb0ecbea7522a2b4666c3aa35b12a GIT binary patch literal 4810 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 + diff --git a/struct_test_channel_monitor_requester__inherit__graph.md5 b/struct_test_channel_monitor_requester__inherit__graph.md5 new file mode 100644 index 0000000..e1e7b20 --- /dev/null +++ b/struct_test_channel_monitor_requester__inherit__graph.md5 @@ -0,0 +1 @@ +c37fad6c8c0f404a2834bdb047e86f27 \ No newline at end of file diff --git a/struct_test_channel_monitor_requester__inherit__graph.png b/struct_test_channel_monitor_requester__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..636a9a671fddb0ecbea7522a2b4666c3aa35b12a GIT binary patch literal 4810 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 + + + + + +pva2pva: Member List + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ +
+
+
+
TestChannelPutRequester Member List
+
+
+ +

This is the complete list of members for TestChannelPutRequester, including all inherited members.

+ + + + + + + + + + + + + + + + + +
changed (defined in TestChannelPutRequester)TestChannelPutRequester
channelPutConnect(const epics::pvData::Status &status, epics::pvAccess::ChannelPut::shared_pointer const &channelPut, epics::pvData::Structure::const_shared_pointer const &structure) (defined in TestChannelPutRequester)TestChannelPutRequestervirtual
connected (defined in TestChannelPutRequester)TestChannelPutRequester
doneGet (defined in TestChannelPutRequester)TestChannelPutRequester
donePut (defined in TestChannelPutRequester)TestChannelPutRequester
fielddesc (defined in TestChannelPutRequester)TestChannelPutRequester
getDone(const epics::pvData::Status &status, epics::pvAccess::ChannelPut::shared_pointer const &channelPut, epics::pvData::PVStructure::shared_pointer const &pvStructure, epics::pvData::BitSet::shared_pointer const &bitSet) (defined in TestChannelPutRequester)TestChannelPutRequestervirtual
POINTER_DEFINITIONS(TestChannelPutRequester) (defined in TestChannelPutRequester)TestChannelPutRequester
put (defined in TestChannelPutRequester)TestChannelPutRequester
putDone(const epics::pvData::Status &status, epics::pvAccess::ChannelPut::shared_pointer const &channelPut) (defined in TestChannelPutRequester)TestChannelPutRequestervirtual
statusConnect (defined in TestChannelPutRequester)TestChannelPutRequester
statusGet (defined in TestChannelPutRequester)TestChannelPutRequester
statusPut (defined in TestChannelPutRequester)TestChannelPutRequester
TestChannelPutRequester() (defined in TestChannelPutRequester)TestChannelPutRequester
value (defined in TestChannelPutRequester)TestChannelPutRequester
~TestChannelPutRequester() (defined in TestChannelPutRequester)TestChannelPutRequestervirtual
+ + + + diff --git a/struct_test_channel_put_requester.html b/struct_test_channel_put_requester.html new file mode 100644 index 0000000..10a1400 --- /dev/null +++ b/struct_test_channel_put_requester.html @@ -0,0 +1,168 @@ + + + + + + +pva2pva: TestChannelPutRequester Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ +
+
+ +
+
TestChannelPutRequester Struct Reference
+
+
+
+Inheritance diagram for TestChannelPutRequester:
+
+
Inheritance graph
+
[legend]
+
+Collaboration diagram for TestChannelPutRequester:
+
+
Collaboration graph
+
[legend]
+ + + + + + + + + + +

+Public Member Functions

POINTER_DEFINITIONS (TestChannelPutRequester)
 
+virtual void channelPutConnect (const epics::pvData::Status &status, epics::pvAccess::ChannelPut::shared_pointer const &channelPut, epics::pvData::Structure::const_shared_pointer const &structure)
 
+virtual void putDone (const epics::pvData::Status &status, epics::pvAccess::ChannelPut::shared_pointer const &channelPut)
 
+virtual void getDone (const epics::pvData::Status &status, epics::pvAccess::ChannelPut::shared_pointer const &channelPut, epics::pvData::PVStructure::shared_pointer const &pvStructure, epics::pvData::BitSet::shared_pointer const &bitSet)
 
+ + + + + + + + + + + + + + + + + + + + + +

+Public Attributes

+bool connected
 
+bool doneGet
 
+bool donePut
 
+epics::pvData::Status statusConnect
 
+epics::pvData::Status statusPut
 
+epics::pvData::Status statusGet
 
+epics::pvAccess::ChannelPut::shared_pointer put
 
+epics::pvData::Structure::const_shared_pointer fielddesc
 
+epics::pvData::PVStructure::shared_pointer value
 
+epics::pvData::BitSet::shared_pointer changed
 
+

Detailed Description

+
+

Definition at line 124 of file utilities.h.

+

The documentation for this struct was generated from the following files: +
+ + + + diff --git a/struct_test_channel_put_requester__coll__graph.map b/struct_test_channel_put_requester__coll__graph.map new file mode 100644 index 0000000..5a9f787 --- /dev/null +++ b/struct_test_channel_put_requester__coll__graph.map @@ -0,0 +1,2 @@ + + diff --git a/struct_test_channel_put_requester__coll__graph.md5 b/struct_test_channel_put_requester__coll__graph.md5 new file mode 100644 index 0000000..7011943 --- /dev/null +++ b/struct_test_channel_put_requester__coll__graph.md5 @@ -0,0 +1 @@ +a4ab2eb7acb7c2c7e3ce9df957b896a6 \ No newline at end of file diff --git a/struct_test_channel_put_requester__coll__graph.png b/struct_test_channel_put_requester__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..fe70cafc4292fe3c939b6e00aa4bab0a8a728029 GIT binary patch literal 4790 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 literal 0 HcmV?d00001 diff --git a/struct_test_channel_put_requester__inherit__graph.map b/struct_test_channel_put_requester__inherit__graph.map new file mode 100644 index 0000000..5a9f787 --- /dev/null +++ b/struct_test_channel_put_requester__inherit__graph.map @@ -0,0 +1,2 @@ + + diff --git a/struct_test_channel_put_requester__inherit__graph.md5 b/struct_test_channel_put_requester__inherit__graph.md5 new file mode 100644 index 0000000..7011943 --- /dev/null +++ b/struct_test_channel_put_requester__inherit__graph.md5 @@ -0,0 +1 @@ +a4ab2eb7acb7c2c7e3ce9df957b896a6 \ No newline at end of file diff --git a/struct_test_channel_put_requester__inherit__graph.png b/struct_test_channel_put_requester__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..fe70cafc4292fe3c939b6e00aa4bab0a8a728029 GIT binary patch literal 4790 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 literal 0 HcmV?d00001 diff --git a/struct_test_channel_requester-members.html b/struct_test_channel_requester-members.html new file mode 100644 index 0000000..f90b639 --- /dev/null +++ b/struct_test_channel_requester-members.html @@ -0,0 +1,112 @@ + + + + + + +pva2pva: Member List + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ +
+
+
+
TestChannelRequester Member List
+
+
+ +

This is the complete list of members for TestChannelRequester, including all inherited members.

+ + + + + + + + + + + + +
chan (defined in TestChannelRequester)TestChannelRequester
channelCreated(const epics::pvData::Status &status, epics::pvAccess::Channel::shared_pointer const &channel) (defined in TestChannelRequester)TestChannelRequestervirtual
channelStateChange(epics::pvAccess::Channel::shared_pointer const &channel, epics::pvAccess::Channel::ConnectionState connectionState) (defined in TestChannelRequester)TestChannelRequestervirtual
laststate (defined in TestChannelRequester)TestChannelRequester
lock (defined in TestChannelRequester)TestChannelRequester
POINTER_DEFINITIONS(TestChannelRequester) (defined in TestChannelRequester)TestChannelRequester
status (defined in TestChannelRequester)TestChannelRequester
TestChannelRequester() (defined in TestChannelRequester)TestChannelRequester
wait (defined in TestChannelRequester)TestChannelRequester
waitForConnect() (defined in TestChannelRequester)TestChannelRequester
~TestChannelRequester() (defined in TestChannelRequester)TestChannelRequestervirtual
+ + + + diff --git a/struct_test_channel_requester.html b/struct_test_channel_requester.html new file mode 100644 index 0000000..133beae --- /dev/null +++ b/struct_test_channel_requester.html @@ -0,0 +1,153 @@ + + + + + + +pva2pva: TestChannelRequester Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ +
+
+ +
+
TestChannelRequester Struct Reference
+
+
+
+Inheritance diagram for TestChannelRequester:
+
+
Inheritance graph
+
[legend]
+
+Collaboration diagram for TestChannelRequester:
+
+
Collaboration graph
+
[legend]
+ + + + + + + + + + +

+Public Member Functions

POINTER_DEFINITIONS (TestChannelRequester)
 
+virtual void channelCreated (const epics::pvData::Status &status, epics::pvAccess::Channel::shared_pointer const &channel)
 
+virtual void channelStateChange (epics::pvAccess::Channel::shared_pointer const &channel, epics::pvAccess::Channel::ConnectionState connectionState)
 
+bool waitForConnect ()
 
+ + + + + + + + + + + +

+Public Attributes

+epicsMutex lock
 
+epicsEvent wait
 
+epics::pvAccess::Channel::shared_pointer chan
 
+epics::pvData::Status status
 
+epics::pvAccess::Channel::ConnectionState laststate
 
+

Detailed Description

+
+

Definition at line 57 of file utilities.h.

+

The documentation for this struct was generated from the following files: +
+ + + + diff --git a/struct_test_channel_requester__coll__graph.map b/struct_test_channel_requester__coll__graph.map new file mode 100644 index 0000000..e0cc3f9 --- /dev/null +++ b/struct_test_channel_requester__coll__graph.map @@ -0,0 +1,2 @@ + + diff --git a/struct_test_channel_requester__coll__graph.md5 b/struct_test_channel_requester__coll__graph.md5 new file mode 100644 index 0000000..dd56f67 --- /dev/null +++ b/struct_test_channel_requester__coll__graph.md5 @@ -0,0 +1 @@ +a4f0c8ebc92b47720771fccc0a637d58 \ No newline at end of file diff --git a/struct_test_channel_requester__coll__graph.png b/struct_test_channel_requester__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..a1669677998e427086dce17935b29168110a6c3a GIT binary patch literal 3660 zcmb_f`8$;R|9&WxEjw8=B$RC=LS)O%9Go+@A|aWvmt|xSDLbJsNkX=)*~NscV_%YW z>?F&`GIpQ$=bUqWzW>1YHP_7Z!*e~?Gw;`ZzwY~fg(Hl#8ECm_AqZm7)zLHo*KF{0 zKSv3ENwrs)!G+pRUt1G8{qN^}eNF-dF;eJis+sw|T}wkDSdlz!y?Q#rp-Q2se$P#< zWW@nSaV_VRmbO_=;d!GKwbjFUfXEl&@jp;*{Rk zVBTLLy&z%X`4jAqo(37g;4HzJowr09k);m5p8bvejduy?*LMx_%qY)Z?~<*8LUq-! z%~Zd6B;$zgY6J53Jw3~+syG8Waddq@A9HeY)|+grH25h`kw_&C7Uwb_Br{_Khze?I zYGIdQQCdjk8wv}j<1o5;dFxB~8OnVI&dOGoEVnr=kXC5LpqCJG4&H8wVyiC5(3=NA^b41P4k$-A8_ zys>f2t4rw{7-*VtSKu|$)_#G<2db+-3-5((@9rupDdEbr4e5_mZb%r2$iiT=dz*8< zGSbrS?(Wj6s)1``6`zOZ%Bw-u)KEYZ6BECG|F*t+*QVjAZqA^g$n6Y7R8&;*r#i8e z!Z}>G&KLYgx)UXa?e_1}=h8Yd@@$KCKPAzWc;Dgl_y z*_N1?7(YKh#b+jYiH)|^wY393A5(`2Ch0wC|6E=!oY3Lz?LFqnPOGJ+);QY|>4HY9 zYiRIrbCcv=nqM-rF&^D%iR659%>o{H@>D<|-89FD0{ZKdIR*5UTqE|Gbi-|;dS-1c z;MaGF5NfPqA_ji_`cPlr`?{XxWl<=Iu;5$(L3?|1v3|<@xNd6b3uY&xZ7#lJ9@NPR zmLrl1;^OCTMYXoI#m2ZEbd1s`TDBph;L1 z>qLKlhQF@|{g(e~tmSA*ZCZ?vQ z08v=jUthEM@I7@!B`alpdb$tP*x1U#LWT2i{^Fveoqi5GFB8*ynGbg!RDR!BUS4i~ zaiM^bHnQcFUbdMyyA(^LK#Y#?Sha^xNTZXRo0PaX#_&U{j^V|}-rgd-e0+Q^E-u3# zqxG_}yQ2^9-n|>D+-+@a-238!0E<}ul>!I&Mab6H_O|v2EM6xAVTMF{)l4KNCW7|O zc}*FdEm#|Eb*Mb*>Fx%6oTzlM0*3?b^7h{C&(!wv@~Rl-jBH^E4>b^p)P#v7oQI~j z_Axuv_nX6x56P;5Ctor%h2ZeAk`jcrgO!z)O1c!&x$*^(D_3N>qH1ev!5E`PiX0pr zDWTQ1H3}#xDM^`sW4S+5v9?tj-JL3jzJY6-(-md`ueH-2>Cd}2j=FRp3CUXEJq`{I zX6NQ^DJ!GV=+_cf-ZM>9vl8#&bu7hztNz;BZBdem z@n3yxcdNdQZGIk%55zy+AE;JjI)HIRim^pBSYQqfGZ51Bva7R8H=n6zTobS5WZe>w zlH&0~?IWl011ry`u;Zhng_ae1#7{T1^!1JP3D316Il!1rO;{Q*ME&w{aZx%!iYMW$ zBJ+ZK-15w@Gfe@|*S$S^uPs(Df{a|>{$w91xtH?{q?6@WQ9Jf$E)z*_Ki}R`=*1eDFzwbX5x(%sMxN{9ox6( z$ zfJXNo&-rWEk)d)_9lx%KsTq7gT8HdGTPCnv|uf%hi90upPivM($x-Df?^bmt0iv*sBlt)0W6v((g0yXZc7 z-0CWN7-sp8xBkl=ESdd_-_~Md2#wsFgM$MWiwzUwx_D7cQgVHDl~+K(ro^@p%uZ8t z^JWzc1~b3*9UZ98%fL=H>>caMrN5j;h2G z?8{!gdiCS)di9DW#ef=edh|$FSJ&dRqoJK0uPUJXz1bLk-sK< z`Lct(JyT1a&xY%0nZxnHPL6SUt5D$4W?KxO5==;FZg#fk?adGxAs7sMyfc!Ol?8

J;1OzS>X%Q{b}H^`WTiZ> z8l9SY7Z*obj>lejD4j}N>Pee(SIExJ1_}+%QkFf5KDl5 zMn*(H5FiHx1>gR<;8|Z^|L1sVS=oodpPHMyYvTayix)4p#R@EK`l@G;3W^(klgSTD z&Fj3^#IIiE;o)gUP1Qar0ANZ;6qc7K_Aa65oL9`o<2pKY<8_2t!h!d95(voRdoGV2 z<+<=k*)&*NSfr$;VpfLoj8%`f`!Y0I`Cxp{0#Ejry1EPk0|V>P@Khpr00aT4G$Zon zrmns|3WZA0%ht;_5oQ5N1K1=8eEGL}Iq-6y*Ry2=1%vgni>zx{ps!0?9rm7ne*2s@ zPiN-mLpL~BSy_F%lasl)qbt4FEFnlnz?oX^N&Zf9YAQGT-v!ufW0M{i_x=ITDB2qg zkFRfaLc-wh1%j!mX|$52;@ORf8d(Je-;<+#Ma*lilHi1LEv>Dsjg2$=TT39fYLa?YPmg9^2w;ykwVx8w-o6d$R8fP)9~>Tn z(4Ym2A1hj0U5!Ha@eK{-RSJHSrz|x;8Z=e~$%dVS!<$ZuY&u@kzd89l9CdTZox=5 z_5T_vCfLL6u!W?}=NXjtJA7N{J5$(fIgyka|qSlYEs@ zYiJmGeGj(tii@S*4UCLvXAu@W>F6Q>LdOKb0TFYT-gkm`aJ|5u2%Vi_VPP15e_1%Z zCtWr6J{QOm&d#aH$#HtwfD7)-r@j{;9bH|&J<^Ok@#*03@bLJ!|L^$@00!UZ4`$-v zs36S2;-{~sAaaR=&DWo-aHeNs8s+MbcFu9&FkkJ1M;VfO`|lGH3Mxl;_L@PUDk9{mK1#fuj- z2^}CRySln=eAzOxww_43iiDuu-CZ!5;2n@DI+opYPHW-Ey`U~oNazLb=>qtWy>HeQ~dtE;Of zCMJL)Kp5ZM@=wL#PP>_YUiP)T=l_l>?7o2r>oLExbbijt;yGq!=0E@ZlSkh5TjcW5 z&3{%L7X#&6x0Z(Ni_ZVEHT`QGx#@0sMMbV?^z}%#(DT0C8v%#AJ7h9WpVscikMc)@ rWe$Xwu&mz5=N#q#Te!fZk*Ac4s + diff --git a/struct_test_channel_requester__inherit__graph.md5 b/struct_test_channel_requester__inherit__graph.md5 new file mode 100644 index 0000000..dd56f67 --- /dev/null +++ b/struct_test_channel_requester__inherit__graph.md5 @@ -0,0 +1 @@ +a4f0c8ebc92b47720771fccc0a637d58 \ No newline at end of file diff --git a/struct_test_channel_requester__inherit__graph.png b/struct_test_channel_requester__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..a1669677998e427086dce17935b29168110a6c3a GIT binary patch literal 3660 zcmb_f`8$;R|9&WxEjw8=B$RC=LS)O%9Go+@A|aWvmt|xSDLbJsNkX=)*~NscV_%YW z>?F&`GIpQ$=bUqWzW>1YHP_7Z!*e~?Gw;`ZzwY~fg(Hl#8ECm_AqZm7)zLHo*KF{0 zKSv3ENwrs)!G+pRUt1G8{qN^}eNF-dF;eJis+sw|T}wkDSdlz!y?Q#rp-Q2se$P#< zWW@nSaV_VRmbO_=;d!GKwbjFUfXEl&@jp;*{Rk zVBTLLy&z%X`4jAqo(37g;4HzJowr09k);m5p8bvejduy?*LMx_%qY)Z?~<*8LUq-! z%~Zd6B;$zgY6J53Jw3~+syG8Waddq@A9HeY)|+grH25h`kw_&C7Uwb_Br{_Khze?I zYGIdQQCdjk8wv}j<1o5;dFxB~8OnVI&dOGoEVnr=kXC5LpqCJG4&H8wVyiC5(3=NA^b41P4k$-A8_ zys>f2t4rw{7-*VtSKu|$)_#G<2db+-3-5((@9rupDdEbr4e5_mZb%r2$iiT=dz*8< zGSbrS?(Wj6s)1``6`zOZ%Bw-u)KEYZ6BECG|F*t+*QVjAZqA^g$n6Y7R8&;*r#i8e z!Z}>G&KLYgx)UXa?e_1}=h8Yd@@$KCKPAzWc;Dgl_y z*_N1?7(YKh#b+jYiH)|^wY393A5(`2Ch0wC|6E=!oY3Lz?LFqnPOGJ+);QY|>4HY9 zYiRIrbCcv=nqM-rF&^D%iR659%>o{H@>D<|-89FD0{ZKdIR*5UTqE|Gbi-|;dS-1c z;MaGF5NfPqA_ji_`cPlr`?{XxWl<=Iu;5$(L3?|1v3|<@xNd6b3uY&xZ7#lJ9@NPR zmLrl1;^OCTMYXoI#m2ZEbd1s`TDBph;L1 z>qLKlhQF@|{g(e~tmSA*ZCZ?vQ z08v=jUthEM@I7@!B`alpdb$tP*x1U#LWT2i{^Fveoqi5GFB8*ynGbg!RDR!BUS4i~ zaiM^bHnQcFUbdMyyA(^LK#Y#?Sha^xNTZXRo0PaX#_&U{j^V|}-rgd-e0+Q^E-u3# zqxG_}yQ2^9-n|>D+-+@a-238!0E<}ul>!I&Mab6H_O|v2EM6xAVTMF{)l4KNCW7|O zc}*FdEm#|Eb*Mb*>Fx%6oTzlM0*3?b^7h{C&(!wv@~Rl-jBH^E4>b^p)P#v7oQI~j z_Axuv_nX6x56P;5Ctor%h2ZeAk`jcrgO!z)O1c!&x$*^(D_3N>qH1ev!5E`PiX0pr zDWTQ1H3}#xDM^`sW4S+5v9?tj-JL3jzJY6-(-md`ueH-2>Cd}2j=FRp3CUXEJq`{I zX6NQ^DJ!GV=+_cf-ZM>9vl8#&bu7hztNz;BZBdem z@n3yxcdNdQZGIk%55zy+AE;JjI)HIRim^pBSYQqfGZ51Bva7R8H=n6zTobS5WZe>w zlH&0~?IWl011ry`u;Zhng_ae1#7{T1^!1JP3D316Il!1rO;{Q*ME&w{aZx%!iYMW$ zBJ+ZK-15w@Gfe@|*S$S^uPs(Df{a|>{$w91xtH?{q?6@WQ9Jf$E)z*_Ki}R`=*1eDFzwbX5x(%sMxN{9ox6( z$ zfJXNo&-rWEk)d)_9lx%KsTq7gT8HdGTPCnv|uf%hi90upPivM($x-Df?^bmt0iv*sBlt)0W6v((g0yXZc7 z-0CWN7-sp8xBkl=ESdd_-_~Md2#wsFgM$MWiwzUwx_D7cQgVHDl~+K(ro^@p%uZ8t z^JWzc1~b3*9UZ98%fL=H>>caMrN5j;h2G z?8{!gdiCS)di9DW#ef=edh|$FSJ&dRqoJK0uPUJXz1bLk-sK< z`Lct(JyT1a&xY%0nZxnHPL6SUt5D$4W?KxO5==;FZg#fk?adGxAs7sMyfc!Ol?8

J;1OzS>X%Q{b}H^`WTiZ> z8l9SY7Z*obj>lejD4j}N>Pee(SIExJ1_}+%QkFf5KDl5 zMn*(H5FiHx1>gR<;8|Z^|L1sVS=oodpPHMyYvTayix)4p#R@EK`l@G;3W^(klgSTD z&Fj3^#IIiE;o)gUP1Qar0ANZ;6qc7K_Aa65oL9`o<2pKY<8_2t!h!d95(voRdoGV2 z<+<=k*)&*NSfr$;VpfLoj8%`f`!Y0I`Cxp{0#Ejry1EPk0|V>P@Khpr00aT4G$Zon zrmns|3WZA0%ht;_5oQ5N1K1=8eEGL}Iq-6y*Ry2=1%vgni>zx{ps!0?9rm7ne*2s@ zPiN-mLpL~BSy_F%lasl)qbt4FEFnlnz?oX^N&Zf9YAQGT-v!ufW0M{i_x=ITDB2qg zkFRfaLc-wh1%j!mX|$52;@ORf8d(Je-;<+#Ma*lilHi1LEv>Dsjg2$=TT39fYLa?YPmg9^2w;ykwVx8w-o6d$R8fP)9~>Tn z(4Ym2A1hj0U5!Ha@eK{-RSJHSrz|x;8Z=e~$%dVS!<$ZuY&u@kzd89l9CdTZox=5 z_5T_vCfLL6u!W?}=NXjtJA7N{J5$(fIgyka|qSlYEs@ zYiJmGeGj(tii@S*4UCLvXAu@W>F6Q>LdOKb0TFYT-gkm`aJ|5u2%Vi_VPP15e_1%Z zCtWr6J{QOm&d#aH$#HtwfD7)-r@j{;9bH|&J<^Ok@#*03@bLJ!|L^$@00!UZ4`$-v zs36S2;-{~sAaaR=&DWo-aHeNs8s+MbcFu9&FkkJ1M;VfO`|lGH3Mxl;_L@PUDk9{mK1#fuj- z2^}CRySln=eAzOxww_43iiDuu-CZ!5;2n@DI+opYPHW-Ey`U~oNazLb=>qtWy>HeQ~dtE;Of zCMJL)Kp5ZM@=wL#PP>_YUiP)T=l_l>?7o2r>oLExbbijt;yGq!=0E@ZlSkh5TjcW5 z&3{%L7X#&6x0Z(Ni_ZVEHT`QGx#@0sMMbV?^z}%#(DT0C8v%#AJ7h9WpVscikMc)@ rWe$Xwu&mz5=N#q#Te!fZk*Ac4s + + + + + +pva2pva: Member List + + + + + + + + + +

+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ +
+
+
+
TestIOC Member List
+
+
+ +

This is the complete list of members for TestIOC, including all inherited members.

+ + + + + + +
hasInit (defined in TestIOC)TestIOC
init() (defined in TestIOC)TestIOCinline
shutdown() (defined in TestIOC)TestIOCinline
TestIOC() (defined in TestIOC)TestIOCinline
~TestIOC() (defined in TestIOC)TestIOCinline
+ + + + diff --git a/struct_test_i_o_c.html b/struct_test_i_o_c.html new file mode 100644 index 0000000..437fe25 --- /dev/null +++ b/struct_test_i_o_c.html @@ -0,0 +1,124 @@ + + + + + + +pva2pva: TestIOC Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ +
+
+ +
+
TestIOC Struct Reference
+
+
+ + + + + + +

+Public Member Functions

+void init ()
 
+void shutdown ()
 
+ + + +

+Public Attributes

+bool hasInit
 
+

Detailed Description

+
+

Definition at line 297 of file utilities.h.

+

The documentation for this struct was generated from the following file: +
+ + + + diff --git a/struct_test_p_v-members.html b/struct_test_p_v-members.html new file mode 100644 index 0000000..4da123e --- /dev/null +++ b/struct_test_p_v-members.html @@ -0,0 +1,117 @@ + + + + + + +pva2pva: Member List + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ +
+
+
+
TestPV Member List
+
+
+ +

This is the complete list of members for TestPV, including all inherited members.

+ + + + + + + + + + + + + + + + + +
channels (defined in TestPV)TestPV
channels_t typedef (defined in TestPV)TestPV
disconnect() (defined in TestPV)TestPV
dtype (defined in TestPV)TestPV
factory (defined in TestPV)TestPV
lock (defined in TestPV)TestPVmutable
name (defined in TestPV)TestPV
POINTER_DEFINITIONS(TestPV) (defined in TestPV)TestPV
post(bool notify=true) (defined in TestPV)TestPV
post(const epics::pvData::BitSet &changed, bool notify=true) (defined in TestPV)TestPV
provider (defined in TestPV)TestPV
TestProvider (defined in TestPV)TestPVfriend
TestPV(const std::string &name, const std::tr1::shared_ptr< TestProvider > &provider, const epics::pvData::StructureConstPtr &dtype) (defined in TestPV)TestPV
value (defined in TestPV)TestPV
weakself (defined in TestPV)TestPV
~TestPV() (defined in TestPV)TestPV
+ + + + diff --git a/struct_test_p_v.html b/struct_test_p_v.html new file mode 100644 index 0000000..5588a33 --- /dev/null +++ b/struct_test_p_v.html @@ -0,0 +1,178 @@ + + + + + + +pva2pva: TestPV Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ +
+ +
+
+Collaboration diagram for TestPV:
+
+
Collaboration graph
+ + +
[legend]
+ + + + +

+Public Types

+typedef weak_set< TestPVChannelchannels_t
 
+ + + + + + + + + + + +

+Public Member Functions

POINTER_DEFINITIONS (TestPV)
 
TestPV (const std::string &name, const std::tr1::shared_ptr< TestProvider > &provider, const epics::pvData::StructureConstPtr &dtype)
 
+void post (bool notify=true)
 
+void post (const epics::pvData::BitSet &changed, bool notify=true)
 
+void disconnect ()
 
+ + + + + + + + + + + + + + + + + +

+Public Attributes

+std::tr1::weak_ptr< TestPVweakself
 
+const std::string name
 
+std::tr1::weak_ptr
+< TestProvider > const 
provider
 
+epics::pvData::PVDataCreatePtr factory
 
+const
+epics::pvData::StructureConstPtr 
dtype
 
+epics::pvData::PVStructurePtr value
 
+epicsMutex lock
 
+channels_t channels
 
+ + + +

+Friends

+struct TestProvider
 
+

Detailed Description

+
+

Definition at line 237 of file utilities.h.

+

The documentation for this struct was generated from the following files: +
+ + + + diff --git a/struct_test_p_v__coll__graph.map b/struct_test_p_v__coll__graph.map new file mode 100644 index 0000000..29c65ca --- /dev/null +++ b/struct_test_p_v__coll__graph.map @@ -0,0 +1,3 @@ + + + diff --git a/struct_test_p_v__coll__graph.md5 b/struct_test_p_v__coll__graph.md5 new file mode 100644 index 0000000..6e69d2b --- /dev/null +++ b/struct_test_p_v__coll__graph.md5 @@ -0,0 +1 @@ +dd8e0f92f6f9803a32bb71e95049f3b6 \ No newline at end of file diff --git a/struct_test_p_v__coll__graph.png b/struct_test_p_v__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..06bf6659f8634cc87745d7b4304b968494dbe1ab GIT binary patch literal 4070 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 literal 0 HcmV?d00001 diff --git a/struct_test_p_v_channel-members.html b/struct_test_p_v_channel-members.html new file mode 100644 index 0000000..330db53 --- /dev/null +++ b/struct_test_p_v_channel-members.html @@ -0,0 +1,127 @@ + + + + + + +pva2pva: Member List + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ +
+
+
+
TestPVChannel Member List
+
+
+ +

This is the complete list of members for TestPVChannel, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
BaseChannel(const std::string &name, const std::tr1::weak_ptr< epics::pvAccess::ChannelProvider > &prov, const epics::pvAccess::ChannelRequester::shared_pointer &req, const epics::pvData::StructureConstPtr &dtype) (defined in BaseChannel)BaseChannelinline
createMonitor(epics::pvData::MonitorRequester::shared_pointer const &monitorRequester, epics::pvData::PVStructure::shared_pointer const &pvRequest) (defined in TestPVChannel)TestPVChannelvirtual
destroy() OVERRIDE FINAL (defined in BaseChannel)BaseChannelinlinevirtual
fielddesc (defined in BaseChannel)BaseChannel
getChannelName() OVERRIDE FINAL (defined in BaseChannel)BaseChannelinlinevirtual
getChannelRequester() OVERRIDE FINAL (defined in BaseChannel)BaseChannelinlinevirtual
getConnectionState() (defined in TestPVChannel)TestPVChannelvirtual
getField(epics::pvAccess::GetFieldRequester::shared_pointer const &requester, std::string const &subField) (defined in TestPVChannel)TestPVChannelvirtual
getProvider() OVERRIDE FINAL (defined in BaseChannel)BaseChannelinlinevirtual
getRemoteAddress() (defined in TestPVChannel)TestPVChannelinlinevirtual
getRequesterName() OVERRIDE (defined in BaseChannel)BaseChannelinlinevirtual
guard_t typedef (defined in BaseChannel)BaseChannel
lock (defined in BaseChannel)BaseChannelmutable
monitors (defined in TestPVChannel)TestPVChannel
monitors_t typedef (defined in TestPVChannel)TestPVChannel
POINTER_DEFINITIONS(TestPVChannel) (defined in TestPVChannel)TestPVChannel
printInfo(std::ostream &out) OVERRIDE (defined in BaseChannel)BaseChannelinlinevirtual
provider (defined in BaseChannel)BaseChannel
pv (defined in TestPVChannel)TestPVChannel
pvname (defined in BaseChannel)BaseChannel
requester (defined in BaseChannel)BaseChannel
state (defined in TestPVChannel)TestPVChannel
TestPVChannel(const std::tr1::shared_ptr< TestPV > &pv, const std::tr1::shared_ptr< epics::pvAccess::ChannelRequester > &req) (defined in TestPVChannel)TestPVChannel
weakself (defined in TestPVChannel)TestPVChannel
~BaseChannel() (defined in BaseChannel)BaseChannelinlinevirtual
~TestPVChannel() (defined in TestPVChannel)TestPVChannelvirtual
+ + + + diff --git a/struct_test_p_v_channel.html b/struct_test_p_v_channel.html new file mode 100644 index 0000000..f2a9604 --- /dev/null +++ b/struct_test_p_v_channel.html @@ -0,0 +1,215 @@ + + + + + + +pva2pva: TestPVChannel Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ +
+
+ +
+
TestPVChannel Struct Reference
+
+
+
+Inheritance diagram for TestPVChannel:
+
+
Inheritance graph
+ + +
[legend]
+
+Collaboration diagram for TestPVChannel:
+
+
Collaboration graph
+ + +
[legend]
+ + + + + + + +

+Public Types

+typedef weak_set< TestPVMonitormonitors_t
 
- Public Types inherited from BaseChannel
+typedef epicsGuard< epicsMutex > guard_t
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

POINTER_DEFINITIONS (TestPVChannel)
 
TestPVChannel (const std::tr1::shared_ptr< TestPV > &pv, const std::tr1::shared_ptr< epics::pvAccess::ChannelRequester > &req)
 
+virtual std::string getRemoteAddress ()
 
+virtual ConnectionState getConnectionState ()
 
+virtual void getField (epics::pvAccess::GetFieldRequester::shared_pointer const &requester, std::string const &subField)
 
+virtual
+epics::pvData::Monitor::shared_pointer 
createMonitor (epics::pvData::MonitorRequester::shared_pointer const &monitorRequester, epics::pvData::PVStructure::shared_pointer const &pvRequest)
 
- Public Member Functions inherited from BaseChannel
BaseChannel (const std::string &name, const std::tr1::weak_ptr< epics::pvAccess::ChannelProvider > &prov, const epics::pvAccess::ChannelRequester::shared_pointer &req, const epics::pvData::StructureConstPtr &dtype)
 
+virtual std::string getRequesterName () OVERRIDE
 
+virtual void destroy () OVERRIDE FINAL
 
+virtual std::tr1::shared_ptr
+< epics::pvAccess::ChannelProvider > 
getProvider () OVERRIDE FINAL
 
+virtual std::string getChannelName () OVERRIDE FINAL
 
+virtual std::tr1::shared_ptr
+< epics::pvAccess::ChannelRequester > 
getChannelRequester () OVERRIDE FINAL
 
+virtual void printInfo (std::ostream &out) OVERRIDE
 
+ + + + + + + + + + + + + + + + + + + + +

+Public Attributes

+std::tr1::weak_ptr< TestPVChannelweakself
 
+const std::tr1::shared_ptr
+< TestPV
pv
 
+ConnectionState state
 
+monitors_t monitors
 
- Public Attributes inherited from BaseChannel
+epicsMutex lock
 
+const std::string pvname
 
+const
+epics::pvAccess::ChannelProvider::weak_pointer 
provider
 
+const requester_type::weak_pointer requester
 
+const
+epics::pvData::StructureConstPtr 
fielddesc
 
+

Detailed Description

+
+

Definition at line 182 of file utilities.h.

+

The documentation for this struct was generated from the following files: +
+ + + + diff --git a/struct_test_p_v_channel__coll__graph.map b/struct_test_p_v_channel__coll__graph.map new file mode 100644 index 0000000..3024682 --- /dev/null +++ b/struct_test_p_v_channel__coll__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/struct_test_p_v_channel__coll__graph.md5 b/struct_test_p_v_channel__coll__graph.md5 new file mode 100644 index 0000000..31001e8 --- /dev/null +++ b/struct_test_p_v_channel__coll__graph.md5 @@ -0,0 +1 @@ +023832ddea6da119b61bb5c01d131b33 \ No newline at end of file diff --git a/struct_test_p_v_channel__coll__graph.png b/struct_test_p_v_channel__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..8f01d5a39dc846280a56fd572902dc3c2780221a GIT binary patch literal 9805 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 literal 0 HcmV?d00001 diff --git a/struct_test_p_v_channel__inherit__graph.map b/struct_test_p_v_channel__inherit__graph.map new file mode 100644 index 0000000..d4896fc --- /dev/null +++ b/struct_test_p_v_channel__inherit__graph.map @@ -0,0 +1,3 @@ + + + diff --git a/struct_test_p_v_channel__inherit__graph.md5 b/struct_test_p_v_channel__inherit__graph.md5 new file mode 100644 index 0000000..c56c596 --- /dev/null +++ b/struct_test_p_v_channel__inherit__graph.md5 @@ -0,0 +1 @@ +9fd41e3145f8acc656677f3ec72fa43a \ No newline at end of file diff --git a/struct_test_p_v_channel__inherit__graph.png b/struct_test_p_v_channel__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..9d49cbdf480efe08ea54b6b021be21a3f32e25c5 GIT binary patch literal 5451 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 literal 0 HcmV?d00001 diff --git a/struct_test_p_v_monitor-members.html b/struct_test_p_v_monitor-members.html new file mode 100644 index 0000000..bb4cb7d --- /dev/null +++ b/struct_test_p_v_monitor-members.html @@ -0,0 +1,119 @@ + + + + + + +pva2pva: Member List + + + + + + + + + +

+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ +
+
+
+
TestPVMonitor Member List
+
+
+ +

This is the complete list of members for TestPVMonitor, including all inherited members.

+ + + + + + + + + + + + + + + + + + + +
buffer (defined in TestPVMonitor)TestPVMonitor
channel (defined in TestPVMonitor)TestPVMonitor
destroy() (defined in TestPVMonitor)TestPVMonitorvirtual
finalize (defined in TestPVMonitor)TestPVMonitor
free (defined in TestPVMonitor)TestPVMonitor
inoverflow (defined in TestPVMonitor)TestPVMonitor
needWakeup (defined in TestPVMonitor)TestPVMonitor
overflow (defined in TestPVMonitor)TestPVMonitor
POINTER_DEFINITIONS(TestPVMonitor) (defined in TestPVMonitor)TestPVMonitor
poll() (defined in TestPVMonitor)TestPVMonitorvirtual
release(epics::pvData::MonitorElementPtr const &monitorElement) (defined in TestPVMonitor)TestPVMonitorvirtual
requester (defined in TestPVMonitor)TestPVMonitor
running (defined in TestPVMonitor)TestPVMonitor
start() (defined in TestPVMonitor)TestPVMonitorvirtual
stop() (defined in TestPVMonitor)TestPVMonitorvirtual
TestPVMonitor(const TestPVChannel::shared_pointer &ch, const epics::pvData::MonitorRequester::shared_pointer &req, size_t bsize) (defined in TestPVMonitor)TestPVMonitor
weakself (defined in TestPVMonitor)TestPVMonitor
~TestPVMonitor() (defined in TestPVMonitor)TestPVMonitorvirtual
+ + + + diff --git a/struct_test_p_v_monitor.html b/struct_test_p_v_monitor.html new file mode 100644 index 0000000..9db0e60 --- /dev/null +++ b/struct_test_p_v_monitor.html @@ -0,0 +1,181 @@ + + + + + + +pva2pva: TestPVMonitor Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ +
+
+ +
+
TestPVMonitor Struct Reference
+
+
+
+Inheritance diagram for TestPVMonitor:
+
+
Inheritance graph
+
[legend]
+
+Collaboration diagram for TestPVMonitor:
+
+
Collaboration graph
+
[legend]
+ + + + + + + + + + + + + + + + +

+Public Member Functions

POINTER_DEFINITIONS (TestPVMonitor)
 
TestPVMonitor (const TestPVChannel::shared_pointer &ch, const epics::pvData::MonitorRequester::shared_pointer &req, size_t bsize)
 
+virtual void destroy ()
 
+virtual epics::pvData::Status start ()
 
+virtual epics::pvData::Status stop ()
 
+virtual
+epics::pvData::MonitorElementPtr 
poll ()
 
+virtual void release (epics::pvData::MonitorElementPtr const &monitorElement)
 
+ + + + + + + + + + + + + + + + + + + + + +

+Public Attributes

+std::tr1::weak_ptr< TestPVMonitorweakself
 
+const TestPVChannel::shared_pointer channel
 
+const
+epics::pvData::MonitorRequester::weak_pointer 
requester
 
+bool running
 
+bool finalize
 
+bool inoverflow
 
+bool needWakeup
 
+std::deque
+< epics::pvData::MonitorElementPtr > 
buffer
 
+std::deque
+< epics::pvData::MonitorElementPtr > 
free
 
+epics::pvData::MonitorElementPtr overflow
 
+

Detailed Description

+
+

Definition at line 208 of file utilities.h.

+

The documentation for this struct was generated from the following files: +
+ + + + diff --git a/struct_test_p_v_monitor__coll__graph.map b/struct_test_p_v_monitor__coll__graph.map new file mode 100644 index 0000000..10b1779 --- /dev/null +++ b/struct_test_p_v_monitor__coll__graph.map @@ -0,0 +1,2 @@ + + diff --git a/struct_test_p_v_monitor__coll__graph.md5 b/struct_test_p_v_monitor__coll__graph.md5 new file mode 100644 index 0000000..0e75833 --- /dev/null +++ b/struct_test_p_v_monitor__coll__graph.md5 @@ -0,0 +1 @@ +3bbcf8b1e7f71583f3accc6e509eb2ee \ No newline at end of file diff --git a/struct_test_p_v_monitor__coll__graph.png b/struct_test_p_v_monitor__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..30de0d628908d6aca11e7c93d9d99b141fa47934 GIT binary patch literal 3743 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 G=>G<7XG!M( literal 0 HcmV?d00001 diff --git a/struct_test_p_v_monitor__inherit__graph.map b/struct_test_p_v_monitor__inherit__graph.map new file mode 100644 index 0000000..10b1779 --- /dev/null +++ b/struct_test_p_v_monitor__inherit__graph.map @@ -0,0 +1,2 @@ + + diff --git a/struct_test_p_v_monitor__inherit__graph.md5 b/struct_test_p_v_monitor__inherit__graph.md5 new file mode 100644 index 0000000..0e75833 --- /dev/null +++ b/struct_test_p_v_monitor__inherit__graph.md5 @@ -0,0 +1 @@ +3bbcf8b1e7f71583f3accc6e509eb2ee \ No newline at end of file diff --git a/struct_test_p_v_monitor__inherit__graph.png b/struct_test_p_v_monitor__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..30de0d628908d6aca11e7c93d9d99b141fa47934 GIT binary patch literal 3743 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 G=>G<7XG!M( literal 0 HcmV?d00001 diff --git a/struct_test_provider-members.html b/struct_test_provider-members.html new file mode 100644 index 0000000..73e2e5f --- /dev/null +++ b/struct_test_provider-members.html @@ -0,0 +1,116 @@ + + + + + + +pva2pva: Member List + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ +
+
+
+
TestProvider Member List
+
+
+ +

This is the complete list of members for TestProvider, including all inherited members.

+ + + + + + + + + + + + + + + + +
addPV(const std::string &name, const epics::pvData::StructureConstPtr &tdef) (defined in TestProvider)TestProvider
channelFind(std::string const &channelName, epics::pvAccess::ChannelFindRequester::shared_pointer const &channelFindRequester) (defined in TestProvider)TestProvidervirtual
channelList(epics::pvAccess::ChannelListRequester::shared_pointer const &channelListRequester) (defined in TestProvider)TestProvidervirtual
createChannel(std::string const &channelName, epics::pvAccess::ChannelRequester::shared_pointer const &channelRequester, short priority=PRIORITY_DEFAULT) (defined in TestProvider)TestProvidervirtual
createChannel(std::string const &channelName, epics::pvAccess::ChannelRequester::shared_pointer const &channelRequester, short priority, std::string const &address) (defined in TestProvider)TestProvidervirtual
destroy() (defined in TestProvider)TestProvidervirtual
dispatch() (defined in TestProvider)TestProvider
getProviderName() (defined in TestProvider)TestProviderinlinevirtual
lock (defined in TestProvider)TestProvidermutable
POINTER_DEFINITIONS(TestProvider) (defined in TestProvider)TestProvider
pvs (defined in TestProvider)TestProvider
pvs_t typedef (defined in TestProvider)TestProvider
testCounts() (defined in TestProvider)TestProviderstatic
TestProvider() (defined in TestProvider)TestProvider
~TestProvider() (defined in TestProvider)TestProvidervirtual
+ + + + diff --git a/struct_test_provider.html b/struct_test_provider.html new file mode 100644 index 0000000..b7a4a76 --- /dev/null +++ b/struct_test_provider.html @@ -0,0 +1,180 @@ + + + + + + +pva2pva: TestProvider Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ +
+ +
+
+Inheritance diagram for TestProvider:
+
+
Inheritance graph
+
[legend]
+
+Collaboration diagram for TestProvider:
+
+
Collaboration graph
+ + +
[legend]
+ + + + +

+Public Types

+typedef weak_value_map
+< std::string, TestPV
pvs_t
 
+ + + + + + + + + + + + + + + + + + + +

+Public Member Functions

POINTER_DEFINITIONS (TestProvider)
 
+virtual std::string getProviderName ()
 
+virtual void destroy ()
 
+virtual
+epics::pvAccess::ChannelFind::shared_pointer 
channelFind (std::string const &channelName, epics::pvAccess::ChannelFindRequester::shared_pointer const &channelFindRequester)
 
+virtual
+epics::pvAccess::ChannelFind::shared_pointer 
channelList (epics::pvAccess::ChannelListRequester::shared_pointer const &channelListRequester)
 
+virtual
+epics::pvAccess::Channel::shared_pointer 
createChannel (std::string const &channelName, epics::pvAccess::ChannelRequester::shared_pointer const &channelRequester, short priority=PRIORITY_DEFAULT)
 
+virtual
+epics::pvAccess::Channel::shared_pointer 
createChannel (std::string const &channelName, epics::pvAccess::ChannelRequester::shared_pointer const &channelRequester, short priority, std::string const &address)
 
+TestPV::shared_pointer addPV (const std::string &name, const epics::pvData::StructureConstPtr &tdef)
 
+void dispatch ()
 
+ + + +

+Static Public Member Functions

+static void testCounts ()
 
+ + + + + +

+Public Attributes

+epicsMutex lock
 
+pvs_t pvs
 
+

Detailed Description

+
+

Definition at line 267 of file utilities.h.

+

The documentation for this struct was generated from the following files: +
+ + + + diff --git a/struct_test_provider__coll__graph.map b/struct_test_provider__coll__graph.map new file mode 100644 index 0000000..506f9c9 --- /dev/null +++ b/struct_test_provider__coll__graph.map @@ -0,0 +1,3 @@ + + + diff --git a/struct_test_provider__coll__graph.md5 b/struct_test_provider__coll__graph.md5 new file mode 100644 index 0000000..4913165 --- /dev/null +++ b/struct_test_provider__coll__graph.md5 @@ -0,0 +1 @@ +56f9733b227604e4e9f312e6b2222634 \ No newline at end of file diff --git a/struct_test_provider__coll__graph.png b/struct_test_provider__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..5bdf1ac8060792ef8b42c4d04dcfb28b3b108531 GIT binary patch literal 11219 zcma)?by!txx9*pSfV7IzozmUiU7|Ed2uL^5ASECmB_fj2h)6d`2?$6ljndtnd-#6m zT>IPme1DuJmvOn~eCB*&jQjqL5w5N(hlNgrjzA!=6y&8f5r`W$@b`Q)B>266O(zik zKrvO4lSW+s{gu&}7mq+tAQYq}v|fDJoc0vIr+tOk;R{4YZq1ycpg>;OX+38MLroa< zij?m-v>q+Cn@+!vr!S*#_ZY8Qk%iT|axU=Y{SJ(UxWud%nuF+F8nKS@NR*TdA7;tR zQ&lK$QA8KY&57g&B0!JfJvIU{5GH|g1CfuziG~pOeItQD ztPOAWeOFXcx`ia+@N*1jb#;}408>To##yA1U69t}#}X*38c2Z|g@ua48UcRU+LIJ$ zl-}OnN=iLOpDV8Oi;BFjE^2c>A}-Mmf)I!iR6=A#hG-WB0&)1yKx)KX@@{U2VdQ=* z3k&Av=G^vEHO79YAwC#wUxtQ;(y%isD)8Fa%Vgui!@E(*ebkMNW>{#8%E%Ecd2WQ+ znVBt5UBC#>?mSVOd#OxvHsN8)F=EIeB@ODk^<&ms$U7UzHGZ6B83VyC~eU($esl znCj~4Wk>#R-@aMnJ+rrOvg}XW!p22J4c76>J3H@%ViB7kOUuZRiurx;Nq+nG+f(-5 z-rlD3Eg@4iYiq_q+tSif%4<;$Od*%0*I{9uUjuI*Z%*c!=gHHcug|e+On1X+1O+Gh`l3|x)RH+DXBxdDUOs=M@oS3}F^#n?qpPc1Sy`!w z{j_`>jq*Wc&I%%U0Os`TAIG@(_&bsgvrUVR{MhNaTO!a)9 zy!v{f_->l-YHDiaJl0w%n37qV1%7^h?Yiw8At52s&jkeq`_n|IRcl>W?*_H}-hB}o z8hX4v+v()f9Y-4*8@r&(A6;Ktn=0%X*YNpKp6Z?R`?sXDMku=|GLoKai@i!tPEJf5 z-CypfS4&ggVrF1CS%_D2c6P?Z#Ke_sZ?-{SZ0rCYulAXM@MIu#rW`{2Df(K^fW1@mcBkyth|AN!K+kEl#hjl-@kr+x;0g+ zprDYJmZn`|ax)EMt+)Tz}jd$wY{_4*6AWB9g@kuK~v91pSF4!de0X-M{YVz{9 z;nLD);%JqpBk}#qY(@?I!onAWALZntNn(8?dpW;*yiZBF*N0BhId1Fj=hw70csIH0 z`*%e-xx7!GUXPuwjWP)d2?eWLSy^dn4ka>ae|t?hzqZEcofRKHJe;T2og^b8^F8Q! zJnD^syLw3y?%Ok|@$u!h<7EvE4Xv%MsX`uPg05D_ThkHI_-M$InQvr2?w(%c=Q9MW zySTXISsQ$LDgn{p*|TSG3f0vIaKtVK#@`iaSUYF1%kVOrXp+}x$5zLd#ohwaZ#5i5@yPrF7;#LzOcvP=iF zWU8vFTm@mucC|knP|iyFyBl@cceb}8+yX16(`Fb)GL1^Yf{Jv8 zQS2RY193q4PY4deL_(;Oo8uw^&M5vph;HM>%D4VO`~H1RmpLuh?8c>}Lx1ESNB%Da zNnT?cZ(CdWNK|cHTx=daVoGBA?RXLuRU8$?qM~xKWN{;g9v7`0jWXC?HLX`(QLp6B zD+#fIB0_03wUWX@^rpKCBFp_^&CWTLii?!<(}{h&RqNn!wh~SPov?SElst199G+q!FRBh?>^v$L;mDyo;=Um zMnEwREh<;v;DR(N*HDQsz~k;g_7R8KH+~BXdu(j7Fx)Klg#!i+hIhrq3Vv5bV&~F` z6^Q|q)gn$VW1p*2LhLZM2TIS5*Vi;ru(>}K*^sdZ@IH@=Y;HauDcE9VWlyfFVJw&ugF#b?X& z^GoaNywC4SY2%ZbNhFD*c;ahmHC!&lr(<9g;YuncsZP}M>1>(6yw}!tz>ltObF*g~ zFBg~3wum-4dG+eBh^?)%H=p@VbO7dFG;U;07|yKdi=CfpV#R5q)8%dROiaYiE|J5- zky}%q4{=|SlA`v#`*WXQg~#M2m(Q!4TBw8zsjYu@;N@J`5`I3>kdQb{75Y0=NJt4P zW=0h0`ojA9()>KHDKe(gP0|2Nq^rEop9Scbk0-0smlqlq98aR7gM56Z;OF9EDk|!b zhm>?c_KidUiTSmSp59;CX{h&5g2&_H zG-6MV3PK@NN$cI&bxPrA8=k1!tab^!Lg7SP3I6^)^xz;1e!P#r2TPWwr0{TjGoO>j zXM8L-Ja_{Oo@u0I8G~FnpW@sY3)2dA!|7SwEfj1Qx5^<`*NkIvlpBUJKI|V-^gqP! z3xy3U9yOnx*AK4_T%Se5>8QgRyndf%l#q6HF<#Dyerx~89TW3lZ`X-fbc*cBTQ7Rh z8X{SlfhkGa@8K3{R}EEF-BVLmLo}f=G5W9p5)(^vKi-`F`>alE#y_W;45gKOW975k zLdWmjbIG_qBt;M+AEdo~@CPQtV+$`YM}+BN0qvRbO{9jGFGD9MQy^nxV0Tf7b9G() z+Sr&)NxA-YE$CJl78{!ecP@O1iNvkU{8rRUD>m&)7&cM$Y@ro*>h64Mc(}m8b>Sr( zY?i$vmg8T>;a9)1CiJ31Zu!nhClPW9!w||UCMGm?$b`sN)CG9{N1qh8TIJ!Q$8eFI z+(C10&i(1SL;c71CkNCW_RM9)1Af6-aCe8VnD}>7XckmtW=aGNA~yM~1}M;F%xtLR zE=zQE*=h`K3|?|vb3QP88MS4~?$S=OO)`Ry* zSYiXqx;g`v{bW4eM-1a3t74bjfgAo9Q6@SH3b%t=R=hOIDz3j-Q~LTca-5@dGb{U_IDXrjF8IRU=v7A_l#rMh zMJ{%=IaxjJmnBZ|rMkMLq-0w!08#PmxdIM089s?{^oGBR;u#MmWl6!q`kcjr+>gVW z?(XiOjmo^?4*4Q@D&65E*vqXU7|Z?X+SD93G6YFUzrVT@B=?%Y)?^Tu=xlST?+*8b zunKBURGOH--|k!ouh3{W1tjasy&ks6$VgB!9+1N!HHP1#rwaa5Tx?@)O>xKlgu}F*KHW$11MTD*UG+0H8uytdUvEf8AVDjus{D3-OQf_YIb(okl+G&FufDq2 z@8^$ZGj6(=bZE}eEFcJ_rJ>oFs4S|ga_@P|a_7z+w9Ju_5xdE%MxWE6_IC5OP%Ql_ zTS`Sym!;mL%}D{0A6YVypcE+d3#M8hH*mFIRa8`DWMqH7i$Ei5RI zKqH03e|>cc8j^*T^$I2-yjef^O-P80kB?7^-T1xRs4%$OT0(U-Ur@`d$jI}h6bEyg zBz-i=mESEvi;IgmWWrtW>Fu3r@)at*-dpTxzB*fP@;&EunCUew1?7UzYVcQ;#>K^5 zo*&D}%EtA}(W`!_@!YqtwqAn;pVTVMcYM5sx%(3oG?|#64~PJmI$myWhTB067e|SV zb)^U^^*pXu>I?~rIiMenjs0QDZF#-F1~mI<*cceV*yl_A=?-RQTrh9jP3O^L4yLAi zgL34Rv-W1&GmW4LdAPX~&Oc{K`kk%jjg5`91fk-Pi~7L-fd`>E0+}{5GU9r=xA>11 z&&xYLSRIxM!yX?S!z2?XpoB$|COIwfzw8+ub!!d2UGK52s;rz)tfld%a5h;bg?DiE zz;l0zGI-3kDvrIY$HBNDix?vS#Z55iU2-xgr^V%E@J8pSr;AHVRmqlzXNT(=A7x|N zU~di<>`hNk3lZOy%+Jbd{q_x|jUBTM2?+^2Q}`w5A~edq%plp1_wn&jZ{3O_U90QmEetAZ zY9=No3=E8*moNQJ{-D<8VIU)As>^>IJn`|<(!!I>udPjfu^!3R#K6MB!oVp_&$eA7(R zCB91M5OuC{a@>c%9};5XNLA#j~sPZ6}i1M(^s0 zKZJyYA)%p#zI8-TjWAb`W%f;H8cg!Cg_|5RGiqu=6-V!c({Ncv3%lEf(3xt@hG5`J zN=kz3)e<=AOW^~F&q(%Zp&h1*j)rDzeEbgEY?CiB35n0<1dj}s&S5@j@u!WA4R8%r zgeb+O9l2kHG71V7=Q>`7V3>8rTwC;~t<%z0qEW`mXRX$7OEEv_?C9uA7xTZmICXMz zGA$*bOh`(q_Bveq`t>VV33e71EJ|t21>G-C1E(Zkr3r;gOA31kdmS*)&@5EX`prAn zdLL~h3whW(I_|`XT`}OHH=nIBmEBXJx!ac}A|xi3?xPp0m;*uIxXO0CHZLOhqQO(fXZk9=43J#DJPbK}A)>&~PNH0Ylf1D^f~n*W-weOKzt(5S!j9FM;I> zZ$3)*J9|D}_Dslq<7A_}AEw_KVubJc(dpS4nSe75GxNq!j?zMSadEMaD0$~DK!}=} znoOy%p;cGxuprzz$3LxaS@aDI4RJ{LznYfL&CQ+oT){2@ubHcsPKJ+v9OHj+v+c{v zmq;QajZX95Vx@|}@ZY<4kI#N;Wp!0oPmhR{w3wkQnalF~lacYFP|U1ozqp4J-bbIV z7P^hg%9T1yZ-<)P4c8is6;AuTHcH<}sQ*jEb12}=SrP7Zjnh0t=9{S4kSGl5-R&Sc z#?dM{k}U6^audO^>6)E2R#W?t^gOohy{nsBV?#rg-K1<&B{(EYOUqK756Q`%7bi|x zosJM=8{X$j%KBrlKe+4lrE z6mVc08ibvFcr%-tjNAqJlSwB~AL_>vfgt$J-voKQCyA}-s@4|2GM#hwaC{3kNz!D@ z<;kwuc&0%rdfXH*FYnRru7JUmbGgA^#vn7B1o3j5vC+}su|@r7P6V@@095{Gz;qLCZ?uHD7k&l4%)(Sz=!hj@d2V6zXv`J{I2dlNC`rfy1WQoTTy4g z!+c92gLZmy(%#wm>*vq6iHS1O(gsaFgl%6S01A0*?Ys~M^<7k?B-*ia>NBeJb96LS z&}|Ji{X1m~PtVic`A*B;cY(M>eD)+sJtCfaG`loZHa|WHh+Un`PuF{ZC5P0n_JKc> zp^MeX?YKhX)nul-l>B{CR*I+p;&-35IG%n*n9^Yk#+6l7ZQ0)54669@h2lG)y8prZ zf`1)iY{-85cGf;e1TLB*OdAJb2$)qh5E^}M|sZlWUd^nfIunrHLcG3Fs za#C#UpXKFWODB-sLDNC-F9pom(eZ4u%C6l~d^2ccZjEqy7=@C4l{y&6EC*&!SC^xs z<4M2&)$rI@jcEruFcfd^b4Vnh5UGOMF@>Dwg2TeXLP9#yM7&kgMMccJaN+omi_*|O z#s$nufEk*cOgJbbJ)+d$cDOcrhgx=JeH{=_x~Q+7eITSD$bXDR8UGKibhdd;p3R)~ z5fF#Ri%3X!a?#fJ(2xO?{Q7K2&8AKjD=jAnoNRE_H7nj&>?LU5e?%P4Xc{2#4CX@E(?Cflx-41+dm$up2YY4O8J@Qmj z-wS(kO3KU0Ee~W$nV$idikrMWlv7eZY#_^cvsT$LaFS&3S{$ z^FfFt5KRSnc?egswzi+b!ca?_ecx=dWj}(W%aELXy_%Q)*(m2N}HstP}y_F3FTz^W2WS1Y77hvI;Ex|NlEwu)KyZO z%M%_o-)|6NCiU3a+xx+U!kTvi=yd%37281rsF|}f=U}DN`cD>k)#F+Jbmm8c-2O5} zxNq*q(hB>Yxpuvw1f?Efal5dk#bjVPy}zq3s<-PE% zhb*_BF$JqbUO;QrcN&LkN{#4cL^V#cY+=;Sh7^$kpwa&DXulg*CbYxN< z?l1VslyB(k>#MI&h^5NjY|9O6sk$eqT!D-m0ZEYVjGyhE0x)e@j zjh9>UadQj5*g;Ubf^k{wN$PQTefWN<#OnUbBMiFUcO3I@I#EzinwpwG8Y?I%#Vg+T zW1Z9`Bjb&YEnn*0-8xYpI6l-up|mJ~!>>qlw@m6?%hNZJ%#hFymbJ9T?M5q;Io0BX zdal5bL`O%1ya>Y~_k*{4&tvoY^=qw?qDzBwY;6IGH~Tgrk|qGqHp1i-?PCK2Ti_uf zuD=kT87vU1}z$s|%^Nr|EQw7zZcjSBY_vpA>@P03K#2 zFflPPI$Bj%m#}mnE{+gAeiD=wnCWaeuCJr>!pm!Ead8^d4#bCYx5{*z**}b^q?&$_ zl2TGI;AewcPK(}mywtbutL$r6pa;f{7{KgmX+epE$LqkV){X&@us-g|p~c7pB4fW_ zjE#-W|7c?z9FoidWsyqaE**>%Ln6S*#Iz3i9vqyji_7`S#~3nEpM0;zf2~Pi1m1Mk z|D>G^F!ghc$Y_)WTJPV!IOv4;NW20a*Ky&icwo-@KReWJEMlx??{U6#*_spX=x zb92jdK7IM}MIs0V1gWgFG{9U$8@sbQCI{y7`F3+URDRdh(dmj-I%6}C{ink406PHbUqzE?Bj(axHxm=eT}}>;*p{b|pn&F{ zA8*g|H<@?Gfi3>afgdC)LiiBlFs!Vtg@*^aSWk1)VH z2w=)F;H7~qg?$6yWkLGJeV)fvPt5rqFLD38{5G7axj{EXZ%4GTVmWjV|L_Npv5F3; zOD0Ndz9!^)A#7x2mA{ekuH3ReF37aYgdaRC@Q^2ai9``&su}(} z4tzEaQkXxvSFxSH1?4woV6QktL_~O*3d>ismDBx}pP8EH?`K~}?ZLDfGoGOE^70}G zZTa;ONroLWzW&LVx4$_(_&8W%6G zQN4TdL|(b^ZjU|RlO=AR2HQ-+)iE{Rqw8I-c~0hHknZ|mk6BOd-PhV-XxgPMi9dMNr-Ii*uAgcIVPYr@=5v-4N4w>@yRO2hF2fG%Z zyvIiUTXJ0yaqxF2=(R8GeQwLJG`u1hlt++K?_qC5GQhiochgJCOlCdmFlUM=GxL7m zV1Ik}Y`XnQ(Wj_mJzdfEzd?vh!C`zRTsz~N=9!n{1j$ z5c-{KY!m0V)@?jrtk!@)EqQXp1jS`SzKrv7irDv|@s<9(vG?@CH{`M`KLt5zU1#NR z)|XP%hhIjNIApCaI1~yYuEr4p8RXewUgue~A`P##*;+d|#eC8CjGnXnmWP+#vzC$N z<(3n>CnxqOg+msP^u+Z+7b;zS}A4>{B!aTL05QGrZof9~8N=_)p&RpS;tF z;eMHEoFVl_;_MEkc3gRR7H8zgm9Wo6VV5G_+1OZQIst{hJ#w1!+2&|j{I2BeBa6LK$p=MkzfyD#IVD1gpALHc6d< zikvUsr{RLR0WQP#Fvi27z{Odl$qG95;bV`PK!^} ze=DQf&=(Md-B`_dRL4z5!_Qw+KZhWyxafL)x*d~RH)cE>7|?`z_2)lS>`QRW-vH{s zTwhYd_s&vg8Bt@sXQfUK=)1P8j1!dS-{ydaP)149Vzjfe8gRwSNMCEg)o*^Y3_!%wzU<1`ozq_($>}{Lv=@zfrn@GpW6P{Z{NV+ ziSV==i=l){rm$AQy%}-{M&PSS> zucM;C#zxJbzzYNQ@f0SDp8roZb4Pv>qNpmUS;8kc7&%zo(9jUrwWK^_V%(~fMif{_ z4@bv0iaF9b0OhD+Bny^yOwQ%tqCX4Tc{xr-(Bj6z8%G7@?uI%CLxjgBrl*Or+; z{ZmIzB7Oyk)^r40;Qc=76vWO#TuDH)2mx5zsQGT|3b&CO}>&;cIQxUD~7O#E(9 z{_*2S%O4*UNPcf^{V?YY-#j=tfOWc!{1TvuW355BH1LKX+`mZgN|K6-3Re;yMN5-9 zrjv`CyTSijGS?NR(G5kt&!>#4C8dMxDX7+)z_9EBmOmRdUaQ zlK_*X^VH`G)=t>(;)R35HdrlQaPb9^9j4%>!1$Gq+ZJen>1B?UH*a%yaS;N8=y?Hr z32Ihkqd{sMP;CdEee2dOVDCUZqJgFXT>>Iy(f3}4L|sF}#LO(ngdo)9#*G_*oc}4* z^D{75fx3l)egaEzM#fjLB!Ji-YkvG+suRk|;kcTb7Q{8ZG;K$v4+UaX^QeRKwX9R@ z7Ax!P>h2N)qJtU&tdqN|Yj0NG6)PfZ!1 zFS3cXfLM(o;)(DPFl|Spg{_A*q9j~cA>l{@!v2}GbT9~0b%rSrw|VJ)*5>9~8X6J} zHVzKPnwpZfko{pLfX@K#$;r-^&(Rc3k1@Y8bE%zzZWlu}H8w7;M+#9;mT+@-7X|K9 zQo>d$r;vP-zKIbN>arBNs&`v{AeH{tEu2Y7e@P1n)k4=>6juEJ>ND$ivP~F*D~}iU%cx_6HY3?hIja-e?P+#?WWkNla_`#oG- zA|oO+H6IRMEj!mPkS#vjnyBo7u{t`S$0cOyAs=t;n<3s;aT775LQ5+vR`&K+K*W{t9XiJEW!X>e$W z6TC;g;!W|OnOIq8K2=E(|0`j-e%LxAOzKsDDdKTNPXY)G?-CQ+SX$C2Dt1#lk$AYe z3j3TmRvVxp8Z%;^;mYi*tNg3Ci{<|lP!UKnK-SC64b2bPfv^dOiw*3JJ}Yv7(LiUK zDPErx4`xJAF2T1r%!(gPpguP-kw`EzGrLDl?%?3i|HlzdD}YwN zKdm8v@?-e_;#$Zj!1<;f2@wbA#a2NK?Wo1Kyg4(*{>ATAT%lvycSQu`r zlQ1jmkKti}I4>qDo3$cq>cmn_LwFxLUfEk%{Ti{7fNI%PY2SKg%p?G4u_`}5zp&66>RQsqYzU&f`-IsA1>rismE7yw zJo5|np;9U>Ev=`gCnY6iVX*|5=vCT?S!Xm44^M%S>iO+@L!2RK^qOh#yuMf#%Tr0Q zFfkdtLi|U&-!k-FTtEMKXSnf_BH{u1BT<~kgSz?C$hzUu&QK}F$H#~B1jSr9{umgM zymE{&5fmP+pZ6$)KHcivg(;v8hVki+r-8hI@JSPJk)^<8c$m!u?Meu@!^qlN*p;Aa z{?;XSIRykf0rSO>i+yANl$mMr`)lBPEH!~xd75K|V&ax5gACr{7ZIz^A$UWH2e`iV z^XJ|D{j;FMAgBi8?j0VE?i~c;xgH=gXwSypX&u5mK#uB7;VWrs`pdJR5wU$l$8^;U z5ioHkgF^XJVG__=?#&y&4Tss%Oc4kX#% z1n8jm@oy1yVTeCN4Z19o1zd9Bn8MwBW8OnsD&p@uBI=O-`;O=SN3T)4_la9;pi38_ NAfqb%S@P-2{{q*L4X^+J literal 0 HcmV?d00001 diff --git a/struct_test_provider__inherit__graph.map b/struct_test_provider__inherit__graph.map new file mode 100644 index 0000000..e2900e6 --- /dev/null +++ b/struct_test_provider__inherit__graph.map @@ -0,0 +1,2 @@ + + diff --git a/struct_test_provider__inherit__graph.md5 b/struct_test_provider__inherit__graph.md5 new file mode 100644 index 0000000..c9fc31a --- /dev/null +++ b/struct_test_provider__inherit__graph.md5 @@ -0,0 +1 @@ +f077aff3d034cbb605b0b165883eb426 \ No newline at end of file diff --git a/struct_test_provider__inherit__graph.png b/struct_test_provider__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..3b2b6100d2a30be3a9a962f28b5cc07d29c37270 GIT binary patch literal 6600 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 + + + + + +pva2pva: Member List + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ +
+
+
+
WorkQueue Member List
+
+
+ +

This is the complete list of members for WorkQueue, including all inherited members.

+ + + + + + + +
add(const value_type &work) (defined in WorkQueue)WorkQueue
close() (defined in WorkQueue)WorkQueue
start(unsigned nworkers=1, unsigned prio=epicsThreadPriorityLow) (defined in WorkQueue)WorkQueue
value_type typedef (defined in WorkQueue)WorkQueue
WorkQueue(const std::string &name) (defined in WorkQueue)WorkQueue
~WorkQueue() (defined in WorkQueue)WorkQueuevirtual
+ + + + diff --git a/struct_work_queue.html b/struct_work_queue.html new file mode 100644 index 0000000..df0d93a --- /dev/null +++ b/struct_work_queue.html @@ -0,0 +1,146 @@ + + + + + + +pva2pva: WorkQueue Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ +
+
+ +
+
WorkQueue Struct Reference
+
+
+
+Inheritance diagram for WorkQueue:
+
+
Inheritance graph
+ + +
[legend]
+
+Collaboration diagram for WorkQueue:
+
+
Collaboration graph
+ + +
[legend]
+ + + + +

+Public Types

+typedef std::tr1::weak_ptr
+< epicsThreadRunable > 
value_type
 
+ + + + + + + + + +

+Public Member Functions

WorkQueue (const std::string &name)
 
+void start (unsigned nworkers=1, unsigned prio=epicsThreadPriorityLow)
 
+void close ()
 
+void add (const value_type &work)
 
+

Detailed Description

+
+

Definition at line 16 of file tpool.h.

+

The documentation for this struct was generated from the following files: +
+ + + + diff --git a/struct_work_queue__coll__graph.map b/struct_work_queue__coll__graph.map new file mode 100644 index 0000000..bee9fc7 --- /dev/null +++ b/struct_work_queue__coll__graph.map @@ -0,0 +1,2 @@ + + diff --git a/struct_work_queue__coll__graph.md5 b/struct_work_queue__coll__graph.md5 new file mode 100644 index 0000000..fdf1cb4 --- /dev/null +++ b/struct_work_queue__coll__graph.md5 @@ -0,0 +1 @@ +c93efeff2239dc9c7b464404e397f796 \ No newline at end of file diff --git a/struct_work_queue__coll__graph.png b/struct_work_queue__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..ed5a333d8fa8b5409018b99693e62e2c4a17c886 GIT binary patch literal 3709 zcmb_fi9eKG-@nM#B0`8r_K?K=&}N%Pb|(8Wm82PalC4|FT0@Pd35_MDv5c9N!C1<^ zq$ydlk3FGbED=I@PWSt~%OCKbYdN3mT<2PT+xPoD7=)EE|2~O*5Crj?n!s&9{~R0v ze4OCySD{V-9gn-YF&x_cv*pwj;34RsrYYReE-Z6CE8N1i|5&}X>XiLQDksd9gO?yu zd|yzE*Xptd;n7|$=RtAtJ$m^l|Jy=OG@6N*4aJxC`?_1OwYBcTl@OyIs&PvX4Rc~R zm%aD<9s1_X3|w4HmXv(+-d#;GnO6o7m3=bikC?8QYToXIE3*O?h(C$88AaVaSU zLB2b8?og#YV6et6k}(IQr>94e#=vD`8y+Slxu&SnN=h_CL)X(Zxj8wa4W4IbM{TX0 z?rC#z+^>?7o|RSeN+oK0H4UlG3uWp@)s~jxn%d2APT3S>xd7#WoIJwpJ=wT@5?OW!jPe~SvLjwcy^73wkmX;RRa$hiQ z|G|UOl9H~0o)6&?k9nZ)EY@ia4a5{LH}}-^G!~1sQGQlkeZj}aM@~*oEjRCP_~oCC z@%s<(#99@!wzQl``RJHDV`dyQ=up?#*fm#Ib5d7HNl8LNLQqgpG0M`yB64e9hlmK9XygWwtU~T|=PX4IrZ<~=NA?68+9!#_(w!U*lTR9FLp2(II}!1&f~x-YNGmKOZUz4rl+SV^SDn_ zLYQVUnH(J*ot`cs@i=5-d5TCp4&ApYw3FPR9?nsAv9;CG)GX0J56Ui%yqjUOUokCA zO*b~@-c%u9M@KjG^oXPqGBV~^tU@6I4o3@L_xBZxkvV(ztPm!*x_Y>?bE!S+ye7ed zh-hnTt9JO-^gw`Sshtt=<7*4B+CHC2{uX!_jaG`0;fpDw)4{v$R1KG+J9v0_C}x`* z8-?)NpQ6dh$*mvN6aufC0GG^kWIGPYrF~MsGrGIGofyC;qDgr|h1$!Gss_CnRZ)=dfxs~y=-0-^mAXh> zUEQqDsKo)AoVNBF-dgW&aDRDuxs&_I+h9uDV@VzL!zoy-m6sO_RL>!cyQ&E}(7;%X{S%pkJ8Q7G-e}HH5$7Jik^!RuVQhjk@K@FMdkq4#5B_dxfp3M%OILdyF3`l%NdhcM0aL%>JxD$2{e+DLdd3k|gfY@G(ShY7bWvtHiD+n<@XXu!lnWcK)+1^|Q znGHdp&f;OXv@|6=!+*H4Yha+#?l4`K69UCz_2R+_A`b6@xrwka zetCKM=~JQb@U5k#rNz2kJy}^!sNO@974-JOgVyLhys~m~$;b3xQySeg7DnEs;c(Z{ z=+Mdck6*r&RY{RJa^#4JNEy201;__cQPI(=JI2Q7DKWY?X&*oT>iT+UaB%SL+n1F^ zz!cq}?}G6#Mn^~8->a0^*o%gS(cbP=;)-}@JG(fUhXjJNi;D{qd6ZzWGnIBNCMG78 z^0M5Ri1Pi78^Mqrk)Y6)TTpVljA>4y{)W#l_T5!(doiq!y+Bl zIQtM_b3;P|^@|7?l)?e>F*P;)=c-D+-hf&KgYS>FXsa~~KPF|kIa^=dX}b^7g*7v9*(?lYRH2{$8H3?1?k zd~USn;Glv+)5-!v)=Y!xA(LIo8cFw@>~hn`1u^i*>%>1Jor%w^t-!>W9d%(3+d9@A z9NI0dymeGQa}<4OMXE1( z`bnpD;5nA|dGJW(>YFrpB8SnSPBc^{rk+4IXQy<>m~cIJnCq}yE};s<152RKi-$lG8f8rbQ+BQFZ2Ib6gb58?yWR2ssI1J)j57D z6=bo2OebRU7PjcMI+PP-r23#p{VxfAS3iWXCqh2jfRCU5rY1qcdv`mgV`i*2!u1ZR zXiz`aO_Kn4yT?=PjQFp!|D#mE|9aYbxVSJY#v-ZA-`neBq4P`y(Inbu0K!+^h0x2( zYs<6N)=X0^5tW1zE zZh9K!i|?4ho8-o;K0B2L_{rGVSW;3FF!4Pb?jAe2RCR7Da2Ultb^FV=3g16|P9r!6BRqoq|^ zS@~;cdyBf`Qijzw0<6Xp+ci3R5c2f#DJ?5Iz{lt5<<;;yedAtjMuwzA36(n6j1kU` zSOYa`clYjD$j#T6z0#q7%isT?fPmvk<763=z`*5X{T(tw`P{j4xi&2G2g3jifMjy8 zv*U}0MMXu~M*=0(h=spm4cqQu|9+I7kb++F8w{Oi80q!?$oIPq~WYprC ziqslCj+2&_hRb#}HIef2xX+KeSFDF!ctNKJJ2^csEMyrUizvG_Rtx0j9}(bDItYZq zc$JZKa@zCfCbBpPQce`&i@V9)Jv?k7ivwtBX=&-K<`582JbR|@>rKOg#Ter|f%tX>MWR{TCoRonUIBBxP?e zFJ}Z|>9ful1hLs{pa8xFZkVG7fs_G&oz_@?a2iHL$Oy*8#gUhFZjDxh?>$O2axXAF z_+X`h_n5e({39Yjt(iSxwXd1-JqF&duLn`q;7E@rGC} zbo;N(%`dDVG#agv^7mZd$+kH*+xOnRdjSCfz}?>7DiCBS*jo@16eQx){N>BjrU^H{ z#1{8Fo2pk&UEo_fT*Je|fMv@4M-u&9TwPsVT(q^dDX4SDqJGm1WIl9sWM^jj`unS^ zt6x2{Ro~g$t005{!LO~Yb$oM`8+u}rdo1$T1dxhtA3x5r+0RVmfzdz!zj*NiC|e>z zd1YlqK|vv~D)ZA+NJt3hAM5f93T}cx33W)2FL~ST=rseojtKDAY6quOucKi2?Pv_VcHk*bc~rx}8m`or+4fgP^fv+Avb0SmI|QJrCMf5 z+ZR>aDgV31`VT60vV-OEjIy$_9>mt7m^&vhhb?m&FnwsdCGty}M m+Bdd7XC(H&muP<;-{svqT5jTUzMKZulaQ&A75p{KE#}|OA|o6C literal 0 HcmV?d00001 diff --git a/struct_work_queue__inherit__graph.map b/struct_work_queue__inherit__graph.map new file mode 100644 index 0000000..bee9fc7 --- /dev/null +++ b/struct_work_queue__inherit__graph.map @@ -0,0 +1,2 @@ + + diff --git a/struct_work_queue__inherit__graph.md5 b/struct_work_queue__inherit__graph.md5 new file mode 100644 index 0000000..fdf1cb4 --- /dev/null +++ b/struct_work_queue__inherit__graph.md5 @@ -0,0 +1 @@ +c93efeff2239dc9c7b464404e397f796 \ No newline at end of file diff --git a/struct_work_queue__inherit__graph.png b/struct_work_queue__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..ed5a333d8fa8b5409018b99693e62e2c4a17c886 GIT binary patch literal 3709 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 literal 0 HcmV?d00001 diff --git a/structjlif.html b/structjlif.html new file mode 100644 index 0000000..91062a5 --- /dev/null +++ b/structjlif.html @@ -0,0 +1,104 @@ + + + + + + +pva2pva: jlif Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ +
+
+
+
jlif Struct Reference
+
+
+

Detailed Description

+
+

Definition at line 6 of file pvalink_null.cpp.

+

The documentation for this struct was generated from the following file: +
+ + + + diff --git a/structpdb_info_iterator-members.html b/structpdb_info_iterator-members.html new file mode 100644 index 0000000..5e8ffb8 --- /dev/null +++ b/structpdb_info_iterator-members.html @@ -0,0 +1,109 @@ + + + + + + +pva2pva: Member List + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ +
+
+
+
pdbInfoIterator Member List
+
+
+ +

This is the complete list of members for pdbInfoIterator, including all inherited members.

+ + + + + + + + + +
done() const (defined in pdbInfoIterator)pdbInfoIteratorinline
ent (defined in pdbInfoIterator)pdbInfoIterator
m_done (defined in pdbInfoIterator)pdbInfoIterator
name() (defined in pdbInfoIterator)pdbInfoIteratorinline
next() (defined in pdbInfoIterator)pdbInfoIteratorinline
pdbInfoIterator(const pdbRecordIterator &I) (defined in pdbInfoIterator)pdbInfoIteratorinline
value() (defined in pdbInfoIterator)pdbInfoIteratorinline
~pdbInfoIterator() (defined in pdbInfoIterator)pdbInfoIteratorinline
+ + + + diff --git a/structpdb_info_iterator.html b/structpdb_info_iterator.html new file mode 100644 index 0000000..01aad00 --- /dev/null +++ b/structpdb_info_iterator.html @@ -0,0 +1,136 @@ + + + + + + +pva2pva: pdbInfoIterator Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ +
+
+ +
+
pdbInfoIterator Struct Reference
+
+
+ + + + + + + + + + + + +

+Public Member Functions

pdbInfoIterator (const pdbRecordIterator &I)
 
+bool done () const
 
+bool next ()
 
+const char * name ()
 
+const char * value ()
 
+ + + + + +

+Public Attributes

+DBENTRY ent
 
+bool m_done
 
+

Detailed Description

+
+

Definition at line 202 of file pvif.h.

+

The documentation for this struct was generated from the following file: +
+ + + + diff --git a/structpdb_record_info-members.html b/structpdb_record_info-members.html new file mode 100644 index 0000000..b7a6114 --- /dev/null +++ b/structpdb_record_info-members.html @@ -0,0 +1,105 @@ + + + + + + +pva2pva: Member List + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ +
+
+
+
pdbRecordInfo Member List
+
+
+ +

This is the complete list of members for pdbRecordInfo, including all inherited members.

+ + + + + +
ent (defined in pdbRecordInfo)pdbRecordInfo
info(const char *key, const char *def=0) (defined in pdbRecordInfo)pdbRecordInfoinline
pdbRecordInfo(const char *name) (defined in pdbRecordInfo)pdbRecordInfoinline
~pdbRecordInfo() (defined in pdbRecordInfo)pdbRecordInfoinline
+ + + + diff --git a/structpdb_record_info.html b/structpdb_record_info.html new file mode 100644 index 0000000..4116f0f --- /dev/null +++ b/structpdb_record_info.html @@ -0,0 +1,124 @@ + + + + + + +pva2pva: pdbRecordInfo Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ +
+
+ +
+
pdbRecordInfo Struct Reference
+
+
+ + + + + + +

+Public Member Functions

pdbRecordInfo (const char *name)
 
+const char * info (const char *key, const char *def=0)
 
+ + + +

+Public Attributes

+DBENTRY ent
 
+

Detailed Description

+
+

Definition at line 117 of file pvif.h.

+

The documentation for this struct was generated from the following file: +
+ + + + diff --git a/structpdb_record_iterator-members.html b/structpdb_record_iterator-members.html new file mode 100644 index 0000000..0c72a68 --- /dev/null +++ b/structpdb_record_iterator-members.html @@ -0,0 +1,111 @@ + + + + + + +pva2pva: Member List + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ +
+
+
+
pdbRecordIterator Member List
+
+
+ +

This is the complete list of members for pdbRecordIterator, including all inherited members.

+ + + + + + + + + + + +
done() const (defined in pdbRecordIterator)pdbRecordIteratorinline
ent (defined in pdbRecordIterator)pdbRecordIterator
info(const char *key, const char *def=0) (defined in pdbRecordIterator)pdbRecordIteratorinline
m_done (defined in pdbRecordIterator)pdbRecordIterator
name() const (defined in pdbRecordIterator)pdbRecordIteratorinline
next() (defined in pdbRecordIterator)pdbRecordIteratorinline
pdbRecordIterator() (defined in pdbRecordIterator)pdbRecordIteratorinline
pdbRecordIterator(const dbChannel *chan) (defined in pdbRecordIterator)pdbRecordIteratorinline
record() const (defined in pdbRecordIterator)pdbRecordIteratorinline
~pdbRecordIterator() (defined in pdbRecordIterator)pdbRecordIteratorinline
+ + + + diff --git a/structpdb_record_iterator.html b/structpdb_record_iterator.html new file mode 100644 index 0000000..503aae8 --- /dev/null +++ b/structpdb_record_iterator.html @@ -0,0 +1,139 @@ + + + + + + +pva2pva: pdbRecordIterator Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ +
+
+ +
+
pdbRecordIterator Struct Reference
+
+
+ + + + + + + + + + + + + + +

+Public Member Functions

pdbRecordIterator (const dbChannel *chan)
 
+bool done () const
 
+bool next ()
 
+dbCommon * record () const
 
+const char * name () const
 
+const char * info (const char *key, const char *def=0)
 
+ + + + + +

+Public Attributes

+DBENTRY ent
 
+bool m_done
 
+

Detailed Description

+
+

Definition at line 137 of file pvif.h.

+

The documentation for this struct was generated from the following file: +
+ + + + diff --git a/structpvalink_1_1pva_global__t-members.html b/structpvalink_1_1pva_global__t-members.html new file mode 100644 index 0000000..117e3a0 --- /dev/null +++ b/structpvalink_1_1pva_global__t-members.html @@ -0,0 +1,116 @@ + + + + + + +pva2pva: Member List + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
pvalink::pvaGlobal_t Member List
+
+
+ +

This is the complete list of members for pvalink::pvaGlobal_t, including all inherited members.

+ + + + + + + + + + + + +
channels (defined in pvalink::pvaGlobal_t)pvalink::pvaGlobal_t
channels_key_t typedef (defined in pvalink::pvaGlobal_t)pvalink::pvaGlobal_t
channels_t typedef (defined in pvalink::pvaGlobal_t)pvalink::pvaGlobal_t
create (defined in pvalink::pvaGlobal_t)pvalink::pvaGlobal_t
lock (defined in pvalink::pvaGlobal_t)pvalink::pvaGlobal_t
provider_local (defined in pvalink::pvaGlobal_t)pvalink::pvaGlobal_t
provider_remote (defined in pvalink::pvaGlobal_t)pvalink::pvaGlobal_t
pvaGlobal_t() (defined in pvalink::pvaGlobal_t)pvalink::pvaGlobal_t
queue (defined in pvalink::pvaGlobal_t)pvalink::pvaGlobal_t
running (defined in pvalink::pvaGlobal_t)pvalink::pvaGlobal_t
~pvaGlobal_t() (defined in pvalink::pvaGlobal_t)pvalink::pvaGlobal_t
+ + + + diff --git a/structpvalink_1_1pva_global__t.html b/structpvalink_1_1pva_global__t.html new file mode 100644 index 0000000..df8db6a --- /dev/null +++ b/structpvalink_1_1pva_global__t.html @@ -0,0 +1,158 @@ + + + + + + +pva2pva: pvalink::pvaGlobal_t Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
pvalink::pvaGlobal_t Struct Reference
+
+
+
+Collaboration diagram for pvalink::pvaGlobal_t:
+
+
Collaboration graph
+ + +
[legend]
+ + + + + + +

+Public Types

+typedef std::pair< std::string,
+std::string > 
channels_key_t
 
+typedef std::map
+< channels_key_t,
+std::tr1::weak_ptr
+< pvaLinkChannel > > 
channels_t
 
+ + + + + + + + + + + + + + + +

+Public Attributes

+pvac::ClientProvider provider_local
 
+pvac::ClientProvider provider_remote
 
+const pvd::PVDataCreatePtr create
 
+WorkQueue queue
 
+pvd::Mutex lock
 
+bool running
 
+channels_t channels
 
+

Detailed Description

+
+

Definition at line 108 of file pvalink.h.

+

The documentation for this struct was generated from the following files: +
+ + + + diff --git a/structpvalink_1_1pva_global__t_1_1_scan-members.html b/structpvalink_1_1pva_global__t_1_1_scan-members.html new file mode 100644 index 0000000..05dfe5e --- /dev/null +++ b/structpvalink_1_1pva_global__t_1_1_scan-members.html @@ -0,0 +1,108 @@ + + + + + + +pva2pva: Member List + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  0 +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
pvalink::pvaGlobal_t::Scan Member List
+
+
+ +

This is the complete list of members for pvalink::pvaGlobal_t::Scan, including all inherited members.

+ + + + +
chan (defined in pvalink::pvaGlobal_t::Scan)pvalink::pvaGlobal_t::Scan
Scan() (defined in pvalink::pvaGlobal_t::Scan)pvalink::pvaGlobal_t::Scaninline
usecached (defined in pvalink::pvaGlobal_t::Scan)pvalink::pvaGlobal_t::Scan
+ + + + diff --git a/structpvalink_1_1pva_global__t_1_1_scan.html b/structpvalink_1_1pva_global__t_1_1_scan.html new file mode 100644 index 0000000..01a0b92 --- /dev/null +++ b/structpvalink_1_1pva_global__t_1_1_scan.html @@ -0,0 +1,122 @@ + + + + + + +pva2pva: pvalink::pvaGlobal_t::Scan Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  0 +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
pvalink::pvaGlobal_t::Scan Struct Reference
+
+
+ + + + + + +

+Public Attributes

+std::tr1::weak_ptr
+< pvaLinkChannel
chan
 
+bool usecached
 
+

Detailed Description

+
+

Definition at line 52 of file pvalink.h.

+

The documentation for this struct was generated from the following file: +
+ + + + diff --git a/structpvalink_1_1pva_global__t__coll__graph.map b/structpvalink_1_1pva_global__t__coll__graph.map new file mode 100644 index 0000000..495620c --- /dev/null +++ b/structpvalink_1_1pva_global__t__coll__graph.map @@ -0,0 +1,3 @@ + + + diff --git a/structpvalink_1_1pva_global__t__coll__graph.md5 b/structpvalink_1_1pva_global__t__coll__graph.md5 new file mode 100644 index 0000000..fab8e3e --- /dev/null +++ b/structpvalink_1_1pva_global__t__coll__graph.md5 @@ -0,0 +1 @@ +20081f2739515c354ded7567ffbdb073 \ No newline at end of file diff --git a/structpvalink_1_1pva_global__t__coll__graph.png b/structpvalink_1_1pva_global__t__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..a9c932d977c71fff050701eea3964ac6bdfe619a GIT binary patch literal 6154 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 Ab^rhX literal 0 HcmV?d00001 diff --git a/structpvalink_1_1pva_link-members.html b/structpvalink_1_1pva_link-members.html new file mode 100644 index 0000000..ddb6995 --- /dev/null +++ b/structpvalink_1_1pva_link-members.html @@ -0,0 +1,156 @@ + + + + + + +pva2pva: Member List + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
pvalink::pvaLink Member List
+
+
+ +

This is the complete list of members for pvalink::pvaLink, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
alive (defined in pvalink::pvaLink)pvalink::pvaLink
always (defined in pvalink::pvaLinkConfig)pvalink::pvaLinkConfig
channelNamepvalink::pvaLinkConfig
CP enum value (defined in pvalink::pvaLinkConfig)pvalink::pvaLinkConfig
CPP enum value (defined in pvalink::pvaLinkConfig)pvalink::pvaLinkConfig
Default enum value (defined in pvalink::pvaLinkConfig)pvalink::pvaLinkConfig
defer (defined in pvalink::pvaLinkConfig)pvalink::pvaLinkConfig
fieldNamepvalink::pvaLinkConfig
fld_control (defined in pvalink::pvaLink)pvalink::pvaLink
fld_display (defined in pvalink::pvaLink)pvalink::pvaLink
fld_nanoseconds (defined in pvalink::pvaLink)pvalink::pvaLink
fld_seconds (defined in pvalink::pvaLink)pvalink::pvaLink
fld_severity (defined in pvalink::pvaLink)pvalink::pvaLink
fld_value (defined in pvalink::pvaLink)pvalink::pvaLink
fld_valueAlarm (defined in pvalink::pvaLink)pvalink::pvaLink
getSubField(const char *name) (defined in pvalink::pvaLink)pvalink::pvaLink
jkey (defined in pvalink::pvaLinkConfig)pvalink::pvaLinkConfig
lchan (defined in pvalink::pvaLink)pvalink::pvaLink
local (defined in pvalink::pvaLinkConfig)pvalink::pvaLinkConfig
makeRequest() (defined in pvalink::pvaLink)pvalink::pvaLink
monorder (defined in pvalink::pvaLinkConfig)pvalink::pvaLinkConfig
ms (defined in pvalink::pvaLinkConfig)pvalink::pvaLinkConfig
MS enum value (defined in pvalink::pvaLinkConfig)pvalink::pvaLinkConfig
ms_t enum name (defined in pvalink::pvaLinkConfig)pvalink::pvaLinkConfig
MSI enum value (defined in pvalink::pvaLinkConfig)pvalink::pvaLinkConfig
NMS enum value (defined in pvalink::pvaLinkConfig)pvalink::pvaLinkConfig
NPP enum value (defined in pvalink::pvaLinkConfig)pvalink::pvaLinkConfig
num_instances (defined in pvalink::pvaLink)pvalink::pvaLinkstatic
onDisconnect() (defined in pvalink::pvaLink)pvalink::pvaLink
onTypeChange() (defined in pvalink::pvaLink)pvalink::pvaLink
pipeline (defined in pvalink::pvaLinkConfig)pvalink::pvaLinkConfig
plink (defined in pvalink::pvaLink)pvalink::pvaLink
pp (defined in pvalink::pvaLinkConfig)pvalink::pvaLinkConfig
PP enum value (defined in pvalink::pvaLinkConfig)pvalink::pvaLinkConfig
pp_t enum name (defined in pvalink::pvaLinkConfig)pvalink::pvaLinkConfig
proc_changed (defined in pvalink::pvaLink)pvalink::pvaLink
put_queue (defined in pvalink::pvaLink)pvalink::pvaLink
put_scratch (defined in pvalink::pvaLink)pvalink::pvaLink
pvaLink() (defined in pvalink::pvaLink)pvalink::pvaLink
pvaLinkConfig() (defined in pvalink::pvaLinkConfig)pvalink::pvaLinkConfig
queueSize (defined in pvalink::pvaLinkConfig)pvalink::pvaLinkConfig
retry (defined in pvalink::pvaLinkConfig)pvalink::pvaLinkConfig
snap_severity (defined in pvalink::pvaLink)pvalink::pvaLink
snap_time (defined in pvalink::pvaLink)pvalink::pvaLink
time (defined in pvalink::pvaLinkConfig)pvalink::pvaLinkConfig
type (defined in pvalink::pvaLink)pvalink::pvaLink
used_queue (defined in pvalink::pvaLink)pvalink::pvaLink
used_scratch (defined in pvalink::pvaLink)pvalink::pvaLink
valid() const (defined in pvalink::pvaLink)pvalink::pvaLink
~pvaLink() (defined in pvalink::pvaLink)pvalink::pvaLinkvirtual
~pvaLinkConfig() (defined in pvalink::pvaLinkConfig)pvalink::pvaLinkConfigvirtual
+ + + + diff --git a/structpvalink_1_1pva_link.html b/structpvalink_1_1pva_link.html new file mode 100644 index 0000000..9025e18 --- /dev/null +++ b/structpvalink_1_1pva_link.html @@ -0,0 +1,273 @@ + + + + + + +pva2pva: pvalink::pvaLink Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ + +
+ +
+
+Inheritance diagram for pvalink::pvaLink:
+
+
Inheritance graph
+ + +
[legend]
+
+Collaboration diagram for pvalink::pvaLink:
+
+
Collaboration graph
+ + +
[legend]
+ + + + + + + + + + + + +

+Public Member Functions

+pvd::PVStructurePtr makeRequest ()
 
+bool valid () const
 
+pvd::PVField::const_shared_pointer getSubField (const char *name)
 
+void onDisconnect ()
 
+void onTypeChange ()
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Attributes

+bool alive
 
+dbfType type
 
+DBLINK * plink
 
+std::tr1::shared_ptr
+< pvaLinkChannel
lchan
 
+bool used_scratch
 
+bool used_queue
 
+pvd::shared_vector< const void > put_scratch
 
+pvd::shared_vector< const void > put_queue
 
+epics::pvData::PVField::const_shared_pointer fld_value
 
+epics::pvData::PVScalar::const_shared_pointer fld_severity
 
+epics::pvData::PVScalar::const_shared_pointer fld_seconds
 
+epics::pvData::PVScalar::const_shared_pointer fld_nanoseconds
 
+epics::pvData::PVStructure::const_shared_pointer fld_display
 
+epics::pvData::PVStructure::const_shared_pointer fld_control
 
+epics::pvData::PVStructure::const_shared_pointer fld_valueAlarm
 
+epics::pvData::BitSet proc_changed
 
+epicsTimeStamp snap_time
 
+short snap_severity
 
+ + + +

+Static Public Attributes

+static size_t num_instances
 
+ + + + + + +

+Additional Inherited Members

+

Detailed Description

+
+

Definition at line 204 of file pvalink.h.

+

The documentation for this struct was generated from the following files: +
+ + + + diff --git a/structpvalink_1_1pva_link_1_1_value-members.html b/structpvalink_1_1pva_link_1_1_value-members.html new file mode 100644 index 0000000..54b27c9 --- /dev/null +++ b/structpvalink_1_1pva_link_1_1_value-members.html @@ -0,0 +1,114 @@ + + + + + + +pva2pva: Member List + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  0 +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
pvalink::pvaLink::Value Member List
+
+ + + + + diff --git a/structpvalink_1_1pva_link_1_1_value.html b/structpvalink_1_1pva_link_1_1_value.html new file mode 100644 index 0000000..1aaca4f --- /dev/null +++ b/structpvalink_1_1pva_link_1_1_value.html @@ -0,0 +1,150 @@ + + + + + + +pva2pva: pvalink::pvaLink::Value Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  0 +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
pvalink::pvaLink::Value Struct Reference
+
+
+
+Collaboration diagram for pvalink::pvaLink::Value:
+
+
Collaboration graph
+ + +
[legend]
+ + + + +

+Public Member Functions

+void clear ()
 
+ + + + + + + + + + + + + + + +

+Public Attributes

+bool valid
 
+bool scalar
 
+pvd::ScalarType etype
 
+pvd::shared_vector< const void > valueA
 
+dbrbuf valueS
 
+epicsUInt16 sevr
 
+epicsTimeStamp time
 
+

Detailed Description

+
+

Definition at line 191 of file pvalink.h.

+

The documentation for this struct was generated from the following file: +
+ + + + diff --git a/structpvalink_1_1pva_link_1_1_value__coll__graph.map b/structpvalink_1_1pva_link_1_1_value__coll__graph.map new file mode 100644 index 0000000..8bf86fa --- /dev/null +++ b/structpvalink_1_1pva_link_1_1_value__coll__graph.map @@ -0,0 +1,3 @@ + + + diff --git a/structpvalink_1_1pva_link_1_1_value__coll__graph.md5 b/structpvalink_1_1pva_link_1_1_value__coll__graph.md5 new file mode 100644 index 0000000..507f185 --- /dev/null +++ b/structpvalink_1_1pva_link_1_1_value__coll__graph.md5 @@ -0,0 +1 @@ +f2ac7df2b6e892ed54894d5808686f98 \ No newline at end of file diff --git a/structpvalink_1_1pva_link_1_1_value__coll__graph.png b/structpvalink_1_1pva_link_1_1_value__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..c304dcab8026190b720fc0e4e958d92595040b6f GIT binary patch literal 3326 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 literal 0 HcmV?d00001 diff --git a/structpvalink_1_1pva_link__coll__graph.map b/structpvalink_1_1pva_link__coll__graph.map new file mode 100644 index 0000000..0d24d34 --- /dev/null +++ b/structpvalink_1_1pva_link__coll__graph.map @@ -0,0 +1,3 @@ + + + diff --git a/structpvalink_1_1pva_link__coll__graph.md5 b/structpvalink_1_1pva_link__coll__graph.md5 new file mode 100644 index 0000000..46f766c --- /dev/null +++ b/structpvalink_1_1pva_link__coll__graph.md5 @@ -0,0 +1 @@ +8127be780995731714c6ecf25a9ffb41 \ No newline at end of file diff --git a/structpvalink_1_1pva_link__coll__graph.png b/structpvalink_1_1pva_link__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..1034a12acf922edd57d824f6b15af2749a7b3934 GIT binary patch literal 4282 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 CxRCMy literal 0 HcmV?d00001 diff --git a/structpvalink_1_1pva_link__inherit__graph.map b/structpvalink_1_1pva_link__inherit__graph.map new file mode 100644 index 0000000..0d24d34 --- /dev/null +++ b/structpvalink_1_1pva_link__inherit__graph.map @@ -0,0 +1,3 @@ + + + diff --git a/structpvalink_1_1pva_link__inherit__graph.md5 b/structpvalink_1_1pva_link__inherit__graph.md5 new file mode 100644 index 0000000..46f766c --- /dev/null +++ b/structpvalink_1_1pva_link__inherit__graph.md5 @@ -0,0 +1 @@ +8127be780995731714c6ecf25a9ffb41 \ No newline at end of file diff --git a/structpvalink_1_1pva_link__inherit__graph.png b/structpvalink_1_1pva_link__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..1034a12acf922edd57d824f6b15af2749a7b3934 GIT binary patch literal 4282 zcmcJThdW$ryT%t1LqC|<&MoIKf4Vw{y2uTJpL}w6^=)G(S#zgeqdyG!h z(V}h!6GrcC)U)>f&e`Yt1I}4<&8+LaW>$Nj_r8DkGokvr>U1>hGynk5X=e4HhzG zvPW?4Ty0Tu@&L*A->u6Vj-nf(+221hxc^2(5u{)14WymdVP0EKu3Iyyl3kH>nz-@a zis=`JNDQ)82|FLy>;B$gWNJz1)7J4-_5svT7MPOyGYL^Zw39prH$Q*WWD|aYJL~*6o6{`k?3V-u64#6)Ih=JWj#Jy)1A!_AvF zwX(z^kYF6Kg5zE4!+{Obwmy^F@%9U!zc)q2rm-<&08nN~k$T%RFyLrsCvH3m4D8SW z452EnE$!_eMMlTR<9S!s*HdF+nk|Z*sXDgxKMU)fn%L!X*1PQpbdrly9~ozy~|qqbI8?QR5rAV^Ou-@l`_+)!H! z7h>sZZ(p|1QypZTXE!ag?x=W;o6r?g7Hb8oL-|k5t)Ft0BT}?VcXshNvJ*2 z+1S|F>Cx8O429-Xh@P?Uc1x4Wy>PMnY`yD+;16(LBwj}}Ez~&^Rw6m-T!{5&r+9nX zM7wf;aB(_ri5&4S_<3d8^fRR_-tJLsiVqbqI5cEpe)f4oTAKpBWk1e^^-L!Roa$07 z{fn&SZj2}qO$Zruv#AzUffbt0H(9OjOkJ!Z3q`cQnfyHm?&W`4MDT z=60X!JLw&<(zTTq7HYBVJ)}3sR+J0Mq?&jX-@IZ9KQ3)-4DQgNrHI`+JWN{~=eC#3 zbmUVF2n_UbP_^a?K@pc`IV&yh1-yyB5xdpbrxmw;`A{>Cx3||mB}EP%+Ad#u?1)&& z%|F3?rKj(3))q_@;|^uE+VS04*huGMDj14k)Vx~Z41c-nYx#}a?$P|5RUUeM#jBg> z;(X?RIisU(WlGPQic@!YjnLI%q`E3>D@Q%jTnu=^Cmye zI1l%0SBj+-vV&*zSiWUsxG`V0IT{+qt7UZm_+jeHn#4uVass89ryK#o1C1!bIoMl?{*eC^e_tN;4S$d&j%YEj7(3jt*+7l zPR@UAY;Pl8upS&=oFCyE8ylg>S$VfrBM2m?wpKchcf8QF!hT$&zNI%w^sR$Kv3VUi zz%L{O+6GiY!o}6~Y$06K^%UXYkO}=v^9l5pdwhHyEiEmeD@jX(N;a8}xEoSh`q1Cs zKT+!{aJ*iDTf$-V{4<3)1czA(FrUN1!ou}ET93Z(?F1c(t0+Qh2S? z{A9)J;8j#d7&CbG@o^{wqVD12x3{DNg+e(vQbIyPKxg~)>z6@31#q_Kz540;?USFh znP0zx47qs|tjtjtw?Fl#)-CMmCK2PG2J?}cxeJAkcXx;04cXk>6fn$2oga+%_xGEW zSS;?5Ko8tsn#EitChvV z!t&|Urw{JB1_@~N%uIuaKp5zvV8t`|wepOfnVIEeXIEENqDYHL!28V1%y}IHCT7OJ zwr^$`(MUtXk>X+zZ*du!$^QPLf`Z<@zQX+cuy48B+uIWp@UU+dSQKe_h$oI$Gw!>` zR$64FjkAAF6qk_j@%9E!B!!%%1?Jw>C5b!-N4xv`^4|OWQG~XA0mjhfz|hcZ&vQ#k zAezIIlQO^k7Lcfs5n1Cj-x?JawY2nVhArzULP-e#zNV)uA3drmE-uEU!8r2w0!DxS zM0osS4eC#oarxMNnvUCfW@u=rr-w@rFa&^TZpCauP;juiy1J-od3#&i2L+Ql*OlRx z4^$5X1(%)LnnrK8mHIuBc-1HEv1tw}KuJjn4rlc}YqiN7>U42-Hm!F>pipPAJnEJG zPYn&Pl9K^S{7g%Wi-$fa{1s@pH+|cN#E1@&e z_w+Ed!y0&x!Qk=!myI47ire|hgyIIs%$nSLhB|L|T zQr}be`ttH}aXC33E3frfSy@>oS^W|py5?q2)*wCzgj>-MMI1nje_7w0X)rJ_c$z0E zCB*`4Uz~0!`kw3`?+~=Ic6S$hbM!FTPoiQ#X(T5n@9(>2J@q=?o?lv8iair$3sJz{ z7J}bp44w5}D;gZsFN1%7*>wY)x325gt|9E~o;A1&&j|7Iw&QR}&^f|cgr64t#Q0y3 z)VY24!72}lY)+KD6#pUwgK+|2wXSZEavj0Dm2&*^P0j~%k#U|haPqyp>a_3s5YZke zU*Cd)f|BPAhf66)a$tRZorZ=+TwFXAjaCHX#x02M@ySUPif>|aQZs8fLp>VI21gy? zw?T1ANlEcw&YA1w_HJ^O2tTV_u2QGb7ANCjOAQJN0?BO$QN3q?K&;pk**(8gcFYK= z0ZF})5fPGNV%MmtrCpY2gWJ4LH);-+Uyn|^#A;MJ&d9?4ko41T)}VZSvcK}>%NO;i zJEo;p%6@)+j*cS1893}Q_ZFn*$B*OfHhKYmJlrPXV^9z|;EL3Lf)8%}Un+_HAh9;a zLmjEf+nfoCLc$Lo?CtN57LmG+4?zi*zM!axg)3#WIL;&wjlJq|k8$oA8L7aRT(d%1 zI;g3s8ja!#jQbTm92aJ-By^i=FR`9wjDWt8QHD{}!YKyA&YxdiUYwVQ-cX4kPul8K%hER1i{pib65#HK zobEhgwB}e*i^5jth}kp>fI2WiV{R(5ZPDyr-rW!rB8KTI7tGH4tk&zZX#{NuO3`b0 zcR%kt{(zE;9@pE@Ys|Y8@WaE{m@j(#lG3IsS=#@C<$)KROc4LO-6OG5Y?*=S^CIF# zWBd&`%H;R+oH7HMWp#P3G_-HZyu1Th_}2ID4S?1C`+o-bQwR3-1a?4$j&h1E8sB&M z97Okb*AbSa{>5MU4U(htVZqb^7})9pfT*Y;P0fX`U$Y#jUa-TfiPY@>K$o2K9|Zot z9kg2EJorUKHjna0ujzuTSL@*81``i?*G_Y@(g`f{Wrx0KGvVC}FG=bLHnz5GYVqmh z2+3p+l1L=-iCf6v0)db*^oDkrdCI@-Kh_BXRZ~?(IzEo!og5x6_dZxnPd+CRF)v=c zh{$?Y@k$50l4JkJFldY>!7My0%ht$ux-3BJ*Iy4jGPo{m5um{dF3+j$|75jshB9esU$TU$P04pb1g|5;g6)8)y*8t9B} zrwDud4CrSx8XXW2Kq8SqK$DS?m6eqVCTdMb@OGDAPwYTnv8!SSViFQ~S;AMMD{Y^s zvirz)TDhWnZN$UA4G#|=u205eFc>hitgV?D8L9Ytg9!vg5eNyejR7HcdUA5H+bb$2 zCPu_zO7im9D%-GFEO;bHlJ<6$FWT;lJ+k%re{|IKkhW{bFh{q@ zvS}71?$p$?y9}=G?l-1>Q#F{bep^vqo(%J;ZfF4e6}jWfDIo!Y(D3k);(o8ar6TjX zcUF^gvHRg&tPvLbVDS2BvG3vT?ubC#q`qQdVWFz3IxsL`YikP{DJ3u`4F-<>wqSa& zo%!|aBjMcgae8=TBkcKLv0Ri`T>3e z!}RBTUhb9a5P`s<8%O6$2VR2axSCy z-w?!tT4s^&UrcP{gN==hP?zUNZK>T4aaSTF`4totZi|>x)6sGIn8a^+U$+)|NSvOX z^#c=Ngs>woXx#)l7wmI$^J<65)`1W8sIY=Veun8aX3S)L7E{7-)mx=8pXx#(r~(_qQrQ}E9SKvPv$rTDQ`;C}%S CxRCMy literal 0 HcmV?d00001 diff --git a/structpvalink_1_1pva_link_channel-members.html b/structpvalink_1_1pva_link_channel-members.html new file mode 100644 index 0000000..a70c5fb --- /dev/null +++ b/structpvalink_1_1pva_link_channel-members.html @@ -0,0 +1,135 @@ + + + + + + +pva2pva: Member List + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
pvalink::pvaLinkChannel Member List
+
+
+ +

This is the complete list of members for pvalink::pvaLinkChannel, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
after_put (defined in pvalink::pvaLinkChannel)pvalink::pvaLinkChannel
after_put_t typedef (defined in pvalink::pvaLinkChannel)pvalink::pvaLinkChannel
AP (defined in pvalink::pvaLinkChannel)pvalink::pvaLinkChannel
chan (defined in pvalink::pvaLinkChannel)pvalink::pvaLinkChannel
connected (defined in pvalink::pvaLinkChannel)pvalink::pvaLinkChannel
connected_latched (defined in pvalink::pvaLinkChannel)pvalink::pvaLinkChannel
debug (defined in pvalink::pvaLinkChannel)pvalink::pvaLinkChannel
isatomic (defined in pvalink::pvaLinkChannel)pvalink::pvaLinkChannel
key (defined in pvalink::pvaLinkChannel)pvalink::pvaLinkChannel
links (defined in pvalink::pvaLinkChannel)pvalink::pvaLinkChannel
links_changed (defined in pvalink::pvaLinkChannel)pvalink::pvaLinkChannel
links_t typedef (defined in pvalink::pvaLinkChannel)pvalink::pvaLinkChannel
lock (defined in pvalink::pvaLinkChannel)pvalink::pvaLinkChannel
monitorEvent(const pvac::MonitorEvent &evt) OVERRIDE FINAL (defined in pvalink::pvaLinkChannel)pvalink::pvaLinkChannelvirtual
num_disconnect (defined in pvalink::pvaLinkChannel)pvalink::pvaLinkChannel
num_instances (defined in pvalink::pvaLinkChannel)pvalink::pvaLinkChannelstatic
num_type_change (defined in pvalink::pvaLinkChannel)pvalink::pvaLinkChannel
op_mon (defined in pvalink::pvaLinkChannel)pvalink::pvaLinkChannel
op_put (defined in pvalink::pvaLinkChannel)pvalink::pvaLinkChannel
open() (defined in pvalink::pvaLinkChannel)pvalink::pvaLinkChannel
previous_root (defined in pvalink::pvaLinkChannel)pvalink::pvaLinkChannel
providerName (defined in pvalink::pvaLinkChannel)pvalink::pvaLinkChannel
put(bool force=false) (defined in pvalink::pvaLinkChannel)pvalink::pvaLinkChannel
putBuild(const epics::pvData::StructureConstPtr &build, pvac::ClientChannel::PutCallback::Args &args) OVERRIDE FINAL (defined in pvalink::pvaLinkChannel)pvalink::pvaLinkChannelvirtual
putDone(const pvac::PutEvent &evt) OVERRIDE FINAL (defined in pvalink::pvaLinkChannel)pvalink::pvaLinkChannelvirtual
pvaLinkChannel(const pvaGlobal_t::channels_key_t &key, const epics::pvData::PVStructure::const_shared_pointer &pvRequest) (defined in pvalink::pvaLinkChannel)pvalink::pvaLinkChannel
pvRequest (defined in pvalink::pvaLinkChannel)pvalink::pvaLinkChannel
queued (defined in pvalink::pvaLinkChannel)pvalink::pvaLinkChannel
run_done (defined in pvalink::pvaLinkChannel)pvalink::pvaLinkChannel
~pvaLinkChannel() (defined in pvalink::pvaLinkChannel)pvalink::pvaLinkChannelvirtual
+ + + + diff --git a/structpvalink_1_1pva_link_channel.html b/structpvalink_1_1pva_link_channel.html new file mode 100644 index 0000000..ab17e46 --- /dev/null +++ b/structpvalink_1_1pva_link_channel.html @@ -0,0 +1,239 @@ + + + + + + +pva2pva: pvalink::pvaLinkChannel Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
pvalink::pvaLinkChannel Struct Reference
+
+
+
+Inheritance diagram for pvalink::pvaLinkChannel:
+
+
Inheritance graph
+ + +
[legend]
+
+Collaboration diagram for pvalink::pvaLinkChannel:
+
+
Collaboration graph
+ + +
[legend]
+ + + + + + +

+Classes

struct  AfterPut
 
struct  LinkSort
 
+ + + + + +

+Public Types

+typedef std::set< dbCommon * > after_put_t
 
+typedef std::set< pvaLink
+*, LinkSort
links_t
 
+ + + + + + + + + + + + + +

+Public Member Functions

pvaLinkChannel (const pvaGlobal_t::channels_key_t &key, const epics::pvData::PVStructure::const_shared_pointer &pvRequest)
 
+void open ()
 
+void put (bool force=false)
 
+virtual void monitorEvent (const pvac::MonitorEvent &evt) OVERRIDE FINAL
 
+virtual void putBuild (const epics::pvData::StructureConstPtr &build, pvac::ClientChannel::PutCallback::Args &args) OVERRIDE FINAL
 
+virtual void putDone (const pvac::PutEvent &evt) OVERRIDE FINAL
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Attributes

+const pvaGlobal_t::channels_key_t key
 
+const
+pvd::PVStructure::const_shared_pointer 
pvRequest
 
+pvd::Mutex lock
 
+epicsEvent run_done
 
+pvac::ClientChannel chan
 
+pvac::Monitor op_mon
 
+pvac::Operation op_put
 
+std::string providerName
 
+size_t num_disconnect
 
+size_t num_type_change
 
+bool connected
 
+bool connected_latched
 
+bool isatomic
 
+bool queued
 
+bool debug
 
+std::tr1::shared_ptr< const void > previous_root
 
+after_put_t after_put
 
+links_t links
 
+bool links_changed
 
+std::tr1::shared_ptr< AfterPutAP
 
+ + + +

+Static Public Attributes

+static size_t num_instances
 
+

Detailed Description

+
+

Definition at line 132 of file pvalink.h.

+

The documentation for this struct was generated from the following files: +
+ + + + diff --git a/structpvalink_1_1pva_link_channel_1_1_after_put-members.html b/structpvalink_1_1pva_link_channel_1_1_after_put-members.html new file mode 100644 index 0000000..5d4bba8 --- /dev/null +++ b/structpvalink_1_1pva_link_channel_1_1_after_put-members.html @@ -0,0 +1,108 @@ + + + + + + +pva2pva: Member List + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
pvalink::pvaLinkChannel::AfterPut Member List
+
+
+ +

This is the complete list of members for pvalink::pvaLinkChannel::AfterPut, including all inherited members.

+ + + + +
lc (defined in pvalink::pvaLinkChannel::AfterPut)pvalink::pvaLinkChannel::AfterPut
run() OVERRIDE FINAL (defined in pvalink::pvaLinkChannel::AfterPut)pvalink::pvaLinkChannel::AfterPutvirtual
~AfterPut() (defined in pvalink::pvaLinkChannel::AfterPut)pvalink::pvaLinkChannel::AfterPutinlinevirtual
+ + + + diff --git a/structpvalink_1_1pva_link_channel_1_1_after_put.html b/structpvalink_1_1pva_link_channel_1_1_after_put.html new file mode 100644 index 0000000..e1765b1 --- /dev/null +++ b/structpvalink_1_1pva_link_channel_1_1_after_put.html @@ -0,0 +1,141 @@ + + + + + + +pva2pva: pvalink::pvaLinkChannel::AfterPut Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
pvalink::pvaLinkChannel::AfterPut Struct Reference
+
+
+
+Inheritance diagram for pvalink::pvaLinkChannel::AfterPut:
+
+
Inheritance graph
+ + +
[legend]
+
+Collaboration diagram for pvalink::pvaLinkChannel::AfterPut:
+
+
Collaboration graph
+ + +
[legend]
+ + + + +

+Public Member Functions

+virtual void run () OVERRIDE FINAL
 
+ + + +

+Public Attributes

+std::tr1::weak_ptr
+< pvaLinkChannel
lc
 
+

Detailed Description

+
+

Definition at line 185 of file pvalink.h.

+

The documentation for this struct was generated from the following files: +
+ + + + diff --git a/structpvalink_1_1pva_link_channel_1_1_after_put__coll__graph.map b/structpvalink_1_1pva_link_channel_1_1_after_put__coll__graph.map new file mode 100644 index 0000000..a4480b8 --- /dev/null +++ b/structpvalink_1_1pva_link_channel_1_1_after_put__coll__graph.map @@ -0,0 +1,2 @@ + + diff --git a/structpvalink_1_1pva_link_channel_1_1_after_put__coll__graph.md5 b/structpvalink_1_1pva_link_channel_1_1_after_put__coll__graph.md5 new file mode 100644 index 0000000..d22526c --- /dev/null +++ b/structpvalink_1_1pva_link_channel_1_1_after_put__coll__graph.md5 @@ -0,0 +1 @@ +320e78fefe30c4627c559218d10aca7c \ No newline at end of file diff --git a/structpvalink_1_1pva_link_channel_1_1_after_put__coll__graph.png b/structpvalink_1_1pva_link_channel_1_1_after_put__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..d767974a805039edaa9c450a5ff46b672ae87773 GIT binary patch literal 4698 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 i + diff --git a/structpvalink_1_1pva_link_channel_1_1_after_put__inherit__graph.md5 b/structpvalink_1_1pva_link_channel_1_1_after_put__inherit__graph.md5 new file mode 100644 index 0000000..d22526c --- /dev/null +++ b/structpvalink_1_1pva_link_channel_1_1_after_put__inherit__graph.md5 @@ -0,0 +1 @@ +320e78fefe30c4627c559218d10aca7c \ No newline at end of file diff --git a/structpvalink_1_1pva_link_channel_1_1_after_put__inherit__graph.png b/structpvalink_1_1pva_link_channel_1_1_after_put__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..d767974a805039edaa9c450a5ff46b672ae87773 GIT binary patch literal 4698 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 i + + + + + +pva2pva: Member List + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
pvalink::pvaLinkChannel::LinkSort Member List
+
+
+ +

This is the complete list of members for pvalink::pvaLinkChannel::LinkSort, including all inherited members.

+ + +
operator()(const pvaLink *L, const pvaLink *R) const (defined in pvalink::pvaLinkChannel::LinkSort)pvalink::pvaLinkChannel::LinkSort
+ + + + diff --git a/structpvalink_1_1pva_link_channel_1_1_link_sort.html b/structpvalink_1_1pva_link_channel_1_1_link_sort.html new file mode 100644 index 0000000..9e8430b --- /dev/null +++ b/structpvalink_1_1pva_link_channel_1_1_link_sort.html @@ -0,0 +1,119 @@ + + + + + + +pva2pva: pvalink::pvaLinkChannel::LinkSort Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
pvalink::pvaLinkChannel::LinkSort Struct Reference
+
+
+ + + + +

+Public Member Functions

+bool operator() (const pvaLink *L, const pvaLink *R) const
 
+

Detailed Description

+
+

Definition at line 160 of file pvalink.h.

+

The documentation for this struct was generated from the following files: +
+ + + + diff --git a/structpvalink_1_1pva_link_channel__coll__graph.map b/structpvalink_1_1pva_link_channel__coll__graph.map new file mode 100644 index 0000000..6d93e77 --- /dev/null +++ b/structpvalink_1_1pva_link_channel__coll__graph.map @@ -0,0 +1,2 @@ + + diff --git a/structpvalink_1_1pva_link_channel__coll__graph.md5 b/structpvalink_1_1pva_link_channel__coll__graph.md5 new file mode 100644 index 0000000..6bb6b4b --- /dev/null +++ b/structpvalink_1_1pva_link_channel__coll__graph.md5 @@ -0,0 +1 @@ +2bb7ade2926d671545bc1a71eab3737f \ No newline at end of file diff --git a/structpvalink_1_1pva_link_channel__coll__graph.png b/structpvalink_1_1pva_link_channel__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..23b765b0ff295070680d14ca0e95e255c13d7b8f GIT binary patch literal 16822 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 W20gzJ4*dKBgshaJWS+RutN#n&z?0$t literal 0 HcmV?d00001 diff --git a/structpvalink_1_1pva_link_channel__inherit__graph.map b/structpvalink_1_1pva_link_channel__inherit__graph.map new file mode 100644 index 0000000..6d93e77 --- /dev/null +++ b/structpvalink_1_1pva_link_channel__inherit__graph.map @@ -0,0 +1,2 @@ + + diff --git a/structpvalink_1_1pva_link_channel__inherit__graph.md5 b/structpvalink_1_1pva_link_channel__inherit__graph.md5 new file mode 100644 index 0000000..6bb6b4b --- /dev/null +++ b/structpvalink_1_1pva_link_channel__inherit__graph.md5 @@ -0,0 +1 @@ +2bb7ade2926d671545bc1a71eab3737f \ No newline at end of file diff --git a/structpvalink_1_1pva_link_channel__inherit__graph.png b/structpvalink_1_1pva_link_channel__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..23b765b0ff295070680d14ca0e95e255c13d7b8f GIT binary patch literal 16822 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 W20gzJ4*dKBgshaJWS+RutN#n&z?0$t literal 0 HcmV?d00001 diff --git a/structpvalink_1_1pva_link_config-members.html b/structpvalink_1_1pva_link_config-members.html new file mode 100644 index 0000000..e9b47ee --- /dev/null +++ b/structpvalink_1_1pva_link_config-members.html @@ -0,0 +1,130 @@ + + + + + + +pva2pva: Member List + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
pvalink::pvaLinkConfig Member List
+
+
+ +

This is the complete list of members for pvalink::pvaLinkConfig, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
always (defined in pvalink::pvaLinkConfig)pvalink::pvaLinkConfig
channelNamepvalink::pvaLinkConfig
CP enum value (defined in pvalink::pvaLinkConfig)pvalink::pvaLinkConfig
CPP enum value (defined in pvalink::pvaLinkConfig)pvalink::pvaLinkConfig
Default enum value (defined in pvalink::pvaLinkConfig)pvalink::pvaLinkConfig
defer (defined in pvalink::pvaLinkConfig)pvalink::pvaLinkConfig
fieldNamepvalink::pvaLinkConfig
jkey (defined in pvalink::pvaLinkConfig)pvalink::pvaLinkConfig
local (defined in pvalink::pvaLinkConfig)pvalink::pvaLinkConfig
monorder (defined in pvalink::pvaLinkConfig)pvalink::pvaLinkConfig
MS enum value (defined in pvalink::pvaLinkConfig)pvalink::pvaLinkConfig
ms (defined in pvalink::pvaLinkConfig)pvalink::pvaLinkConfig
ms_t enum name (defined in pvalink::pvaLinkConfig)pvalink::pvaLinkConfig
MSI enum value (defined in pvalink::pvaLinkConfig)pvalink::pvaLinkConfig
NMS enum value (defined in pvalink::pvaLinkConfig)pvalink::pvaLinkConfig
NPP enum value (defined in pvalink::pvaLinkConfig)pvalink::pvaLinkConfig
pipeline (defined in pvalink::pvaLinkConfig)pvalink::pvaLinkConfig
pp (defined in pvalink::pvaLinkConfig)pvalink::pvaLinkConfig
PP enum value (defined in pvalink::pvaLinkConfig)pvalink::pvaLinkConfig
pp_t enum name (defined in pvalink::pvaLinkConfig)pvalink::pvaLinkConfig
pvaLinkConfig() (defined in pvalink::pvaLinkConfig)pvalink::pvaLinkConfig
queueSize (defined in pvalink::pvaLinkConfig)pvalink::pvaLinkConfig
retry (defined in pvalink::pvaLinkConfig)pvalink::pvaLinkConfig
time (defined in pvalink::pvaLinkConfig)pvalink::pvaLinkConfig
~pvaLinkConfig() (defined in pvalink::pvaLinkConfig)pvalink::pvaLinkConfigvirtual
+ + + + diff --git a/structpvalink_1_1pva_link_config.html b/structpvalink_1_1pva_link_config.html new file mode 100644 index 0000000..4bfc062 --- /dev/null +++ b/structpvalink_1_1pva_link_config.html @@ -0,0 +1,190 @@ + + + + + + +pva2pva: pvalink::pvaLinkConfig Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
pvalink::pvaLinkConfig Struct Reference
+
+
+
+Inheritance diagram for pvalink::pvaLinkConfig:
+
+
Inheritance graph
+ + +
[legend]
+
+Collaboration diagram for pvalink::pvaLinkConfig:
+
+
Collaboration graph
+ + +
[legend]
+ + + + + + +

+Public Types

enum  pp_t {
+  NPP, +Default, +PP, +CP, +
+  CPP +
+ }
 
enum  ms_t { NMS, +MS, +MSI + }
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Attributes

+std::string channelName
 Channel (aka PV) name string.
 
+std::string fieldName
 sub-field within addressed PVStructure
 
+size_t queueSize
 
+enum pvalink::pvaLinkConfig::pp_t pp
 
+enum pvalink::pvaLinkConfig::ms_t ms
 
+bool defer
 
+bool pipeline
 
+bool time
 
+bool retry
 
+bool local
 
+bool always
 
+int monorder
 
+std::string jkey
 
+

Detailed Description

+
+

Definition at line 75 of file pvalink.h.

+

The documentation for this struct was generated from the following files: +
+ + + + diff --git a/structpvalink_1_1pva_link_config__coll__graph.map b/structpvalink_1_1pva_link_config__coll__graph.map new file mode 100644 index 0000000..91537e6 --- /dev/null +++ b/structpvalink_1_1pva_link_config__coll__graph.map @@ -0,0 +1,2 @@ + + diff --git a/structpvalink_1_1pva_link_config__coll__graph.md5 b/structpvalink_1_1pva_link_config__coll__graph.md5 new file mode 100644 index 0000000..3f1fe7d --- /dev/null +++ b/structpvalink_1_1pva_link_config__coll__graph.md5 @@ -0,0 +1 @@ +951ccaaf89a00315512a56268d283296 \ No newline at end of file diff --git a/structpvalink_1_1pva_link_config__coll__graph.png b/structpvalink_1_1pva_link_config__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..0ac7261b84be63830f6a71b06a8cf87500f00dc5 GIT binary patch literal 2843 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 Ar~m)} literal 0 HcmV?d00001 diff --git a/structpvalink_1_1pva_link_config__inherit__graph.map b/structpvalink_1_1pva_link_config__inherit__graph.map new file mode 100644 index 0000000..365d3ad --- /dev/null +++ b/structpvalink_1_1pva_link_config__inherit__graph.map @@ -0,0 +1,3 @@ + + + diff --git a/structpvalink_1_1pva_link_config__inherit__graph.md5 b/structpvalink_1_1pva_link_config__inherit__graph.md5 new file mode 100644 index 0000000..87f7415 --- /dev/null +++ b/structpvalink_1_1pva_link_config__inherit__graph.md5 @@ -0,0 +1 @@ +5607291d593384d1a88364135901944a \ No newline at end of file diff --git a/structpvalink_1_1pva_link_config__inherit__graph.png b/structpvalink_1_1pva_link_config__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..201a5a4d1895b10a480560796cb54e00c131055a GIT binary patch literal 4314 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 + + + + + +pva2pva: Member List + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
weak_set< T >::XIterator Member List
+
+
+ +

This is the complete list of members for weak_set< T >::XIterator, including all inherited members.

+ + + + + + + +
end (defined in weak_set< T >::XIterator)weak_set< T >::XIterator
guard (defined in weak_set< T >::XIterator)weak_set< T >::XIterator
it (defined in weak_set< T >::XIterator)weak_set< T >::XIterator
next()weak_set< T >::XIteratorinline
set (defined in weak_set< T >::XIterator)weak_set< T >::XIterator
XIterator(weak_set &S) (defined in weak_set< T >::XIterator)weak_set< T >::XIteratorinline
+ + + + diff --git a/structweak__set_1_1_x_iterator.html b/structweak__set_1_1_x_iterator.html new file mode 100644 index 0000000..cbd4de4 --- /dev/null +++ b/structweak__set_1_1_x_iterator.html @@ -0,0 +1,154 @@ + + + + + + +pva2pva: weak_set< T >::XIterator Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
weak_set< T >::XIterator Struct Reference
+
+
+ +

an iterator-ish object which also locks the set during iteration + More...

+ +

#include <weakset.h>

+
+Collaboration diagram for weak_set< T >::XIterator:
+
+
Collaboration graph
+ + +
[legend]
+ + + + + + + +

+Public Member Functions

XIterator (weak_set &S)
 
+value_pointer next ()
 yield the next live entry
 
+ + + + + + + + + +

+Public Attributes

+weak_setset
 
+epicsGuard< epicsMutex > guard
 
+store_t::iterator it
 
+store_t::iterator end
 
+

Detailed Description

+

template<typename T>
+struct weak_set< T >::XIterator

+ +

an iterator-ish object which also locks the set during iteration

+ +

Definition at line 204 of file weakset.h.

+

The documentation for this struct was generated from the following file: +
+ + + + diff --git a/structweak__set_1_1_x_iterator__coll__graph.map b/structweak__set_1_1_x_iterator__coll__graph.map new file mode 100644 index 0000000..cc30700 --- /dev/null +++ b/structweak__set_1_1_x_iterator__coll__graph.map @@ -0,0 +1,3 @@ + + + diff --git a/structweak__set_1_1_x_iterator__coll__graph.md5 b/structweak__set_1_1_x_iterator__coll__graph.md5 new file mode 100644 index 0000000..0455dfd --- /dev/null +++ b/structweak__set_1_1_x_iterator__coll__graph.md5 @@ -0,0 +1 @@ +fba55dd87ae6671818448fc0df51ca5e \ No newline at end of file diff --git a/structweak__set_1_1_x_iterator__coll__graph.png b/structweak__set_1_1_x_iterator__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..bc4d27cd41e29f23f5df7ccef91c766a87f9a995 GIT binary patch literal 4163 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 literal 0 HcmV?d00001 diff --git a/sync_on.png b/sync_on.png new file mode 100644 index 0000000000000000000000000000000000000000..e08320fb64e6fa33b573005ed6d8fe294e19db76 GIT binary patch literal 845 zcmV-T1G4;yP)Y;xxyHF2B5Wzm| zOOGupOTn@c(JmBOl)e;XMNnZuiTJP>rM8<|Q`7I_))aP?*T)ow&n59{}X4$3Goat zgjs?*aasfbrokzG5cT4K=uG`E14xZl@z)F={P0Y^?$4t z>v!teRnNZym<6h{7sLyF1V0HsfEl+l6TrZpsfr1}luH~F7L}ktXu|*uVX^RG$L0`K zWs3j|0tIvVe(N%_?2{(iCPFGf#B6Hjy6o&}D$A%W%jfO8_W%ZO#-mh}EM$LMn7joJ z05dHr!5Y92g+31l<%i1(=L1a1pXX+OYnalY>31V4K}BjyRe3)9n#;-cCVRD_IG1fT zOKGeNY8q;TL@K{dj@D^scf&VCs*-Jb>8b>|`b*osv52-!A?BpbYtTQBns5EAU**$m zSnVSm(teh>tQi*S*A>#ySc=n;`BHz`DuG4&g4Kf8lLhca+zvZ7t7RflD6-i-mcK=M z!=^P$*u2)bkY5asG4gsss!Hn%u~>}kIW`vMs%lJLH+u*9<4PaV_c6U`KqWXQH%+Nu zTv41O(^ZVi@qhjQdG!fbZw&y+2o!iYymO^?ud3{P*HdoX83YV*Uu_HB=?U&W9%AU# z80}k1SS-CXTU7dcQlsm<^oYLxVSseqY6NO}dc`Nj?8vrhNuCdm@^{a3AQ_>6myOj+ z`1RsLUXF|dm|3k7s2jD(B{rzE>WI2scH8i1;=O5Cc9xB3^aJk%fQjqsu+kH#0=_5a z0nCE8@dbQa-|YIuUVvG0L_IwHMEhOj$Mj4Uq05 X8=0q~qBNan00000NkvXXu0mjfptF>5 literal 0 HcmV?d00001 diff --git a/tab_a.png b/tab_a.png new file mode 100644 index 0000000000000000000000000000000000000000..3b725c41c5a527a3a3e40097077d0e206a681247 GIT binary patch literal 142 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!QlXwMjv*C{Z|8b*H5dputLHD# z=<0|*y7z(Vor?d;H&?EG&cXR}?!j-Lm&u1OOI7AIF5&c)RFE;&p0MYK>*Kl@eiymD r@|NpwKX@^z+;{u_Z~trSBfrMKa%3`zocFjEXaR$#tDnm{r-UW|TZ1%4 literal 0 HcmV?d00001 diff --git a/tab_b.png b/tab_b.png new file mode 100644 index 0000000000000000000000000000000000000000..e2b4a8638cb3496a016eaed9e16ffc12846dea18 GIT binary patch literal 169 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!QU#tajv*C{Z}0l@H7kg?K0Lnr z!j&C6_(~HV9oQ0Pa6x{-v0AGV_E?vLn=ZI-;YrdjIl`U`uzuDWSP?o#Dmo{%SgM#oan kX~E1%D-|#H#QbHoIja2U-MgvsK&LQxy85}Sb4q9e0Efg%P5=M^ literal 0 HcmV?d00001 diff --git a/tabs.css b/tabs.css new file mode 100644 index 0000000..9cf578f --- /dev/null +++ b/tabs.css @@ -0,0 +1,60 @@ +.tabs, .tabs2, .tabs3 { + background-image: url('tab_b.png'); + width: 100%; + z-index: 101; + font-size: 13px; + font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; +} + +.tabs2 { + font-size: 10px; +} +.tabs3 { + font-size: 9px; +} + +.tablist { + margin: 0; + padding: 0; + display: table; +} + +.tablist li { + float: left; + display: table-cell; + background-image: url('tab_b.png'); + line-height: 36px; + list-style: none; +} + +.tablist a { + display: block; + padding: 0 20px; + font-weight: bold; + background-image:url('tab_s.png'); + background-repeat:no-repeat; + background-position:right; + color: #283A5D; + text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); + text-decoration: none; + outline: none; +} + +.tabs3 .tablist a { + padding: 0 10px; +} + +.tablist a:hover { + background-image: url('tab_h.png'); + background-repeat:repeat-x; + color: #fff; + text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); + text-decoration: none; +} + +.tablist li.current a { + background-image: url('tab_a.png'); + background-repeat:repeat-x; + color: #fff; + text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +} diff --git a/testmon_8cpp_source.html b/testmon_8cpp_source.html new file mode 100644 index 0000000..6536e8a --- /dev/null +++ b/testmon_8cpp_source.html @@ -0,0 +1,474 @@ + + + + + + +pva2pva: p2pApp/testmon.cpp Source File + + + + + + + + + + +
+
+
testmon.cpp
+
+
+
1 
+
2 #include <epicsAtomic.h>
+
3 #include <epicsGuard.h>
+
4 #include <epicsUnitTest.h>
+
5 #include <testMain.h>
+
6 
+
7 #include <pv/epicsException.h>
+
8 #include <pv/monitor.h>
+
9 #include <pv/thread.h>
+
10 #include <pv/serverContext.h>
+
11 
+
12 #include "server.h"
+
13 
+
14 #include "utilities.h"
+
15 
+
16 namespace pvd = epics::pvData;
+
17 namespace pva = epics::pvAccess;
+
18 
+
19 typedef epicsGuard<epicsMutex> Guard;
+
20 
+
21 namespace {
+
22 
+
23 pvd::PVStructurePtr makeRequest(size_t bsize)
+
24 {
+
25  pvd::StructureConstPtr dtype(pvd::getFieldCreate()->createFieldBuilder()
+
26  ->addNestedStructure("record")
+
27  ->addNestedStructure("_options")
+
28  ->add("queueSize", pvd::pvString) // yes, really. PVA wants a string
+
29  ->endNested()
+
30  ->endNested()
+
31  ->createStructure());
+
32 
+
33  pvd::PVStructurePtr ret(pvd::getPVDataCreate()->createPVStructure(dtype));
+
34  ret->getSubFieldT<pvd::PVScalar>("record._options.queueSize")->putFrom<pvd::int32>(bsize);
+
35 
+
36  return ret;
+
37 }
+
38 
+
39 struct TestMonitor {
+
40  TestProvider::shared_pointer upstream;
+
41  TestPV::shared_pointer test1;
+
42  ScalarAccessor<pvd::int32> test1_x, test1_y;
+
43 
+
44  GWServerChannelProvider::shared_pointer gateway;
+
45 
+
46  TestChannelRequester::shared_pointer client_req;
+
47  pva::Channel::shared_pointer client;
+
48 
+
49  // prepare providers and connect the client channel, don't setup monitor
+
50  TestMonitor()
+
51  :upstream(new TestProvider())
+
52  ,test1(upstream->addPV("test1", pvd::getFieldCreate()->createFieldBuilder()
+
53  ->add("x", pvd::pvInt)
+
54  ->add("y", pvd::pvInt)
+
55  ->createStructure()))
+
56  ,test1_x(test1->value, "x")
+
57  ,test1_y(test1->value, "y")
+
58  ,gateway(new GWServerChannelProvider(upstream))
+
59  ,client_req(new TestChannelRequester)
+
60  ,client(gateway->createChannel("test1", client_req))
+
61  {
+
62  testDiag("pre-test setup");
+
63  if(!client)
+
64  testAbort("channel \"test1\" not connected");
+
65  test1_x = 1;
+
66  test1_y = 2;
+
67  }
+
68 
+
69  ~TestMonitor()
+
70  {
+
71  client->destroy();
+
72  gateway->destroy(); // noop atm.
+
73  }
+
74 
+
75  void test_event()
+
76  {
+
77  testDiag("Push the initial event through from upstream to downstream");
+
78 
+
79  TestChannelMonitorRequester::shared_pointer mreq(new TestChannelMonitorRequester);
+
80  pvd::Monitor::shared_pointer mon(client->createMonitor(mreq, makeRequest(2)));
+
81  if(!mon) testAbort("Failed to create monitor");
+
82 
+
83  testEqual(mreq->eventCnt, 0u);
+
84  testOk1(mon->start().isSuccess());
+
85  upstream->dispatch(); // trigger monitorEvent() from upstream to gateway
+
86 
+
87  testEqual(mreq->eventCnt, 1u);
+
88  pva::MonitorElementPtr elem(mon->poll());
+
89  testOk1(!!elem.get());
+
90  if(!!elem.get()) testEqual(toString(*elem->changedBitSet), "{0}");
+
91  else testFail("oops");
+
92  testOk1(elem && elem->pvStructurePtr->getSubFieldT<pvd::PVInt>("x")->get()==1);
+
93 
+
94  if(elem) mon->release(elem);
+
95 
+
96  testOk1(!mon->poll());
+
97 
+
98  mon->destroy();
+
99  }
+
100 
+
101  void test_share()
+
102  {
+
103  // here both downstream monitors are on the same Channel,
+
104  // which would be inefficient, and slightly unrealistic, w/ real PVA,
+
105  // but w/ TestProvider makes no difference
+
106  testDiag("Test two downstream monitors sharing the same upstream");
+
107 
+
108  TestChannelMonitorRequester::shared_pointer mreq(new TestChannelMonitorRequester);
+
109  pvd::Monitor::shared_pointer mon(client->createMonitor(mreq, makeRequest(2)));
+
110  if(!mon) testAbort("Failed to create monitor");
+
111 
+
112 
+
113  TestChannelMonitorRequester::shared_pointer mreq2(new TestChannelMonitorRequester);
+
114  pvd::Monitor::shared_pointer mon2(client->createMonitor(mreq2, makeRequest(2)));
+
115  if(!mon2) testAbort("Failed to create monitor2");
+
116 
+
117  testOk1(mreq->eventCnt==0);
+
118  testOk1(mreq2->eventCnt==0);
+
119  testOk1(mon->start().isSuccess());
+
120  testOk1(mon2->start().isSuccess());
+
121  upstream->dispatch(); // trigger monitorEvent() from upstream to gateway
+
122 
+
123  testOk1(mreq->eventCnt==1);
+
124  testOk1(mreq2->eventCnt==1);
+
125 
+
126  pva::MonitorElementPtr elem(mon->poll());
+
127  pva::MonitorElementPtr elem2(mon2->poll());
+
128  testOk1(!!elem.get());
+
129  testOk1(!!elem2.get());
+
130  testOk1(elem!=elem2);
+
131  testOk1(elem && elem->pvStructurePtr->getSubFieldT<pvd::PVInt>("x")->get()==1);
+
132  testOk1(elem && elem->pvStructurePtr->getSubFieldT<pvd::PVInt>("y")->get()==2);
+
133  testOk1(elem2 && elem2->pvStructurePtr->getSubFieldT<pvd::PVInt>("x")->get()==1);
+
134  testOk1(elem2 && elem2->pvStructurePtr->getSubFieldT<pvd::PVInt>("y")->get()==2);
+
135 
+
136  if(elem) mon->release(elem);
+
137  if(elem2) mon2->release(elem2);
+
138 
+
139  testOk1(!mon->poll());
+
140  testOk1(!mon2->poll());
+
141 
+
142  testDiag("explicitly push an update");
+
143  test1_x = 42;
+
144  test1_y = 43;
+
145  pvd::BitSet changed;
+
146  changed.set(1); // only indicate that 'x' changed
+
147  test1->post(changed);
+
148 
+
149  elem = mon->poll();
+
150  elem2 = mon2->poll();
+
151  testOk1(!!elem.get());
+
152  testOk1(!!elem2.get());
+
153  testOk1(elem!=elem2);
+
154  if(elem) testDiag("elem changed '%s' overflow '%s'", toString(*elem->changedBitSet).c_str(), toString(*elem->overrunBitSet).c_str());
+
155  testOk1(elem && elem->pvStructurePtr->getSubFieldT<pvd::PVInt>("x")->get()==42);
+
156  testOk1(elem && elem->pvStructurePtr->getSubFieldT<pvd::PVInt>("y")->get()==2);
+
157  if(elem2) testDiag("elem2 changed '%s' overflow '%s'", toString(*elem2->changedBitSet).c_str(), toString(*elem2->overrunBitSet).c_str());
+
158  testOk1(elem2 && elem2->pvStructurePtr->getSubFieldT<pvd::PVInt>("x")->get()==42);
+
159  testOk1(elem2 && elem2->pvStructurePtr->getSubFieldT<pvd::PVInt>("y")->get()==2);
+
160 
+
161  if(elem) mon->release(elem);
+
162  if(elem2) mon2->release(elem2);
+
163 
+
164  testOk1(!mon->poll());
+
165  testOk1(!mon2->poll());
+
166 
+
167  mon->destroy();
+
168  mon2->destroy();
+
169  }
+
170 
+
171  void test_ds_no_start()
+
172  {
+
173  testDiag("Test downstream monitor never start()s");
+
174 
+
175  TestChannelMonitorRequester::shared_pointer mreq(new TestChannelMonitorRequester);
+
176  pvd::Monitor::shared_pointer mon(client->createMonitor(mreq, makeRequest(2)));
+
177  if(!mon) testAbort("Failed to create monitor");
+
178 
+
179  upstream->dispatch(); // trigger monitorEvent() from upstream to gateway
+
180 
+
181  testOk1(mreq->eventCnt==0);
+
182  testOk1(!mon->poll());
+
183 
+
184  pvd::BitSet changed;
+
185  changed.set(1);
+
186  test1_x=50;
+
187  test1->post(changed, false);
+
188  test1_x=51;
+
189  test1->post(changed, false);
+
190  test1_x=52;
+
191  test1->post(changed, false);
+
192  test1_x=53;
+
193  test1->post(changed);
+
194 
+
195  testOk1(!mon->poll());
+
196 
+
197  mon->destroy();
+
198  }
+
199 
+
200  void test_overflow_upstream()
+
201  {
+
202  testDiag("Check behavour when upstream monitor overflows (mostly transparent)");
+
203 
+
204  TestChannelMonitorRequester::shared_pointer mreq(new TestChannelMonitorRequester);
+
205  pvd::Monitor::shared_pointer mon(client->createMonitor(mreq, makeRequest(2)));
+
206  if(!mon) testAbort("Failed to create monitor");
+
207 
+
208  testOk1(mreq->eventCnt==0);
+
209  testOk1(mon->start().isSuccess());
+
210  upstream->dispatch(); // trigger monitorEvent() from upstream to gateway
+
211  testOk1(mreq->eventCnt==1);
+
212 
+
213  testDiag("poll initial update");
+
214  pva::MonitorElementPtr elem(mon->poll());
+
215  testOk1(!!elem.get());
+
216  if(elem) mon->release(elem);
+
217 
+
218  testOk1(!mon->poll());
+
219 
+
220  // queue 4 events input buffer of size 2
+
221  // don't notify downstream until after overflow has occurred
+
222  pvd::BitSet changed;
+
223  changed.set(1);
+
224  test1_x=50;
+
225  testDiag("post 50");
+
226  test1->post(changed, false);
+
227  test1_x=51;
+
228  testDiag("post 51");
+
229  test1->post(changed, false);
+
230  test1_x=52;
+
231  testDiag("post 52");
+
232  test1->post(changed, false);
+
233  test1_x=53;
+
234  testDiag("post 53");
+
235  test1->post(changed);
+
236 
+
237  elem = mon->poll();
+
238  testOk1(!!elem.get());
+
239 
+
240  testDiag("XX %d", elem ? elem->pvStructurePtr->getSubFieldT<pvd::PVInt>("x")->get() : -42);
+
241  testOk1(elem && elem->pvStructurePtr->getSubFieldT<pvd::PVInt>("x")->get()==50);
+
242  testOk1(elem && elem->changedBitSet->nextSetBit(0)==1);
+
243  testOk1(elem && elem->changedBitSet->nextSetBit(2)==-1);
+
244  testOk1(elem && elem->overrunBitSet->nextSetBit(0)==-1);
+
245 
+
246  if(elem) mon->release(elem);
+
247 
+
248  elem = mon->poll();
+
249  testOk1(!!elem.get());
+
250 
+
251  testOk1(elem && elem->pvStructurePtr->getSubFieldT<pvd::PVInt>("x")->get()==51);
+
252  testOk1(elem && elem->changedBitSet->nextSetBit(0)==1);
+
253  testOk1(elem && elem->changedBitSet->nextSetBit(2)==-1);
+
254  testOk1(elem && elem->overrunBitSet->nextSetBit(0)==-1);
+
255 
+
256  if(elem) mon->release(elem);
+
257 
+
258  elem = mon->poll();
+
259  testOk1(!!elem.get());
+
260 
+
261  testOk1(elem && elem->pvStructurePtr->getSubFieldT<pvd::PVInt>("x")->get()==53);
+
262  testOk1(elem && elem->changedBitSet->nextSetBit(0)==1);
+
263  testOk1(elem && elem->changedBitSet->nextSetBit(2)==-1);
+
264  testOk1(elem && elem->overrunBitSet->nextSetBit(0)==1);
+
265  testOk1(elem && elem->overrunBitSet->nextSetBit(2)==-1);
+
266 
+
267  if(elem) mon->release(elem);
+
268 
+
269  testOk1(!mon->poll());
+
270 
+
271  mon->destroy();
+
272  }
+
273 
+
274  void test_overflow_downstream()
+
275  {
+
276  testDiag("Check behavour when downstream monitor overflows");
+
277 
+
278  TestChannelMonitorRequester::shared_pointer mreq(new TestChannelMonitorRequester);
+
279  pvd::Monitor::shared_pointer mon(client->createMonitor(mreq, makeRequest(2)));
+
280  if(!mon) testAbort("Failed to create monitor");
+
281 
+
282  testOk1(mreq->eventCnt==0);
+
283  testOk1(mon->start().isSuccess());
+
284  upstream->dispatch(); // trigger monitorEvent() from upstream to gateway
+
285  testOk1(mreq->eventCnt==1);
+
286 
+
287  testDiag("poll initial update");
+
288  pva::MonitorElementPtr elem(mon->poll());
+
289  testOk1(!!elem.get());
+
290  if(elem) mon->release(elem);
+
291 
+
292  // queue 4 events into buffer of size 2 (plus the overflow element)
+
293  // notify downstream after each update
+
294  // so the upstream queue never overflows
+
295  pvd::BitSet changed;
+
296  changed.set(1);
+
297  test1_x=50;
+
298  test1->post(changed);
+
299  test1_x=51;
+
300  test1->post(changed);
+
301  test1_x=52;
+
302  test1->post(changed);
+
303  test1_x=53;
+
304  test1->post(changed);
+
305 
+
306  elem = mon->poll();
+
307  testOk1(!!elem.get());
+
308 
+
309  testOk1(elem && elem->pvStructurePtr->getSubFieldT<pvd::PVInt>("x")->get()==50);
+
310  testOk1(elem && elem->changedBitSet->nextSetBit(0)==1);
+
311  testOk1(elem && elem->changedBitSet->nextSetBit(2)==-1);
+
312  testOk1(elem && elem->overrunBitSet->nextSetBit(0)==-1);
+
313 
+
314  if(elem) mon->release(elem);
+
315 
+
316  elem = mon->poll();
+
317  testOk1(!!elem.get());
+
318 
+
319  testOk1(elem && elem->pvStructurePtr->getSubFieldT<pvd::PVInt>("x")->get()==51);
+
320  testOk1(elem && elem->changedBitSet->nextSetBit(0)==1);
+
321  testOk1(elem && elem->changedBitSet->nextSetBit(2)==-1);
+
322  testOk1(elem && elem->overrunBitSet->nextSetBit(0)==-1);
+
323 
+
324  if(elem) mon->release(elem);
+
325 
+
326  elem = mon->poll();
+
327  testOk1(!!elem.get());
+
328 
+
329  testOk1(elem && elem->pvStructurePtr->getSubFieldT<pvd::PVInt>("x")->get()==53);
+
330  testOk1(elem && elem->changedBitSet->nextSetBit(0)==1);
+
331  testOk1(elem && elem->changedBitSet->nextSetBit(2)==-1);
+
332  testOk1(elem && elem->overrunBitSet->nextSetBit(0)==1);
+
333  testOk1(elem && elem->overrunBitSet->nextSetBit(2)==-1);
+
334 
+
335  if(elem) mon->release(elem);
+
336 
+
337  testOk1(!mon->poll());
+
338 
+
339  mon->destroy();
+
340  }
+
341 };
+
342 
+
343 } // namespace
+
344 
+
345 MAIN(testmon)
+
346 {
+
347  testPlan(79);
+
348  TEST_METHOD(TestMonitor, test_event);
+
349  TEST_METHOD(TestMonitor, test_share);
+
350  TEST_METHOD(TestMonitor, test_ds_no_start);
+
351  TEST_METHOD(TestMonitor, test_overflow_upstream);
+
352  TEST_METHOD(TestMonitor, test_overflow_downstream);
+
353  TestProvider::testCounts();
+
354  int ok = 1;
+
355  size_t temp;
+
356 #define TESTC(name) temp=epicsAtomicGetSizeT(&name::num_instances); ok &= temp==0; testDiag("num. live " #name " %u", (unsigned)temp)
+
357  TESTC(GWChannel);
+ +
359  TESTC(ChannelCacheEntry);
+
360  TESTC(MonitorCacheEntry);
+
361  TESTC(MonitorUser);
+
362 #undef TESTC
+
363  testOk(ok, "All instances free'd");
+
364  return testDone();
+
365 }
+ +
Definition: chancache.h:132
+ +
Definition: chancache.h:103
+ + +
Definition: chancache.h:22
+ + + +
+ + + + diff --git a/todo.html b/todo.html new file mode 100644 index 0000000..9e60f3e --- /dev/null +++ b/todo.html @@ -0,0 +1,94 @@ + + + + + + +pva2pva: Todo List + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + +
+ +
+ +
+
+
+
Todo List
+
+
+
+
Page QSRV
+
Ability to traverse through unions and into structure arrays (as with group mappings).
+
+
+ + + + diff --git a/tpool_8cpp_source.html b/tpool_8cpp_source.html new file mode 100644 index 0000000..20c00c0 --- /dev/null +++ b/tpool_8cpp_source.html @@ -0,0 +1,234 @@ + + + + + + +pva2pva: pdbApp/tpool.cpp Source File + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
tpool.cpp
+
+
+
1 
+
2 #include <typeinfo>
+
3 #include <stdexcept>
+
4 
+
5 #include <epicsEvent.h>
+
6 #include <epicsGuard.h>
+
7 #include <epicsThread.h>
+
8 #include <errlog.h>
+
9 
+
10 #include <pv/sharedPtr.h>
+
11 
+
12 #include "helper.h"
+
13 #include "tpool.h"
+
14 
+
15 typedef epicsGuard<epicsMutex> Guard;
+
16 typedef epicsGuardRelease<epicsMutex> UnGuard;
+
17 
+
18 WorkQueue::WorkQueue(const std::string& name)
+
19  :name(name)
+
20  ,state(Idle)
+
21 {}
+
22 
+
23 WorkQueue::~WorkQueue() { close(); }
+
24 
+
25 void WorkQueue::start(unsigned nworkers, unsigned prio)
+
26 {
+
27  Guard G(mutex);
+
28 
+
29  if(state!=Idle)
+
30  throw std::logic_error("Already started");
+
31 
+
32  try {
+
33  state = Active;
+
34 
+
35  for(unsigned i=0; i<nworkers; i++) {
+
36  p2p::auto_ptr<epicsThread> worker(new epicsThread(*this, name.c_str(),
+
37  epicsThreadGetStackSize(epicsThreadStackSmall),
+
38  prio));
+
39 
+
40  worker->start();
+
41 
+
42  workers.push_back(worker.get());
+
43  worker.release();
+
44  }
+
45  }catch(...){
+
46  UnGuard U(G); // unlock as close() blocks to join any workers which were started
+
47  close();
+
48  throw;
+
49  }
+
50 }
+
51 
+
52 void WorkQueue::close()
+
53 {
+
54  workers_t temp;
+
55 
+
56  {
+
57  Guard G(mutex);
+
58  if(state!=Active)
+
59  return;
+
60 
+
61  temp.swap(workers);
+
62  state = Stopping;
+
63  }
+
64 
+
65  wakeup.signal();
+
66 
+
67  for(workers_t::iterator it(temp.begin()), end(temp.end()); it!=end; ++it)
+
68  {
+
69  (*it)->exitWait();
+
70  delete *it;
+
71  }
+
72 
+
73  {
+
74  Guard G(mutex);
+
75  state = Idle;
+
76  }
+
77 }
+
78 
+
79 void WorkQueue::add(const value_type& work)
+
80 {
+
81  bool empty;
+
82 
+
83  {
+
84  Guard G(mutex);
+
85  if(state!=Active)
+
86  return;
+
87 
+
88  empty = queue.empty();
+
89 
+
90  queue.push_back(work);
+
91  }
+
92 
+
93  if(empty) {
+
94  wakeup.signal();
+
95  }
+
96 }
+
97 
+
98 void WorkQueue::run()
+
99 {
+
100  Guard G(mutex);
+
101 
+
102  std::tr1::shared_ptr<epicsThreadRunable> work;
+
103 
+
104  while(state==Active) {
+
105 
+
106  if(!queue.empty()) {
+
107  work = queue.front().lock();
+
108  queue.pop_front();
+
109  }
+
110 
+
111  bool last = queue.empty();
+
112 
+
113  {
+
114  UnGuard U(G);
+
115 
+
116  if(work) {
+
117  try {
+
118  work->run();
+
119  work.reset();
+
120  }catch(std::exception& e){
+
121  errlogPrintf("%s Unhandled exception from %s: %s\n",
+
122  name.c_str(), typeid(work.get()).name(), e.what());
+
123  work.reset();
+
124  }
+
125  }
+
126 
+
127  if(last) {
+
128  wakeup.wait();
+
129  }
+
130  }
+
131  }
+
132 
+
133  // pass along the close() signal to next worker
+
134  wakeup.signal();
+
135 }
+
+ + + + diff --git a/tpool_8h_source.html b/tpool_8h_source.html new file mode 100644 index 0000000..861337a --- /dev/null +++ b/tpool_8h_source.html @@ -0,0 +1,152 @@ + + + + + + +pva2pva: pdbApp/tpool.h Source File + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
tpool.h
+
+
+
1 #ifndef TPOOL_H
+
2 #define TPOOL_H
+
3 
+
4 #include <stdexcept>
+
5 #include <deque>
+
6 #include <vector>
+
7 #include <string>
+
8 
+
9 #include <errlog.h>
+
10 #include <epicsThread.h>
+
11 #include <epicsMutex.h>
+
12 #include <epicsEvent.h>
+
13 
+
14 #include <pv/sharedPtr.h>
+
15 
+
16 struct WorkQueue : private epicsThreadRunable
+
17 {
+
18  typedef std::tr1::weak_ptr<epicsThreadRunable> value_type;
+
19 
+
20 private:
+
21  const std::string name;
+
22 
+
23  epicsMutex mutex;
+
24 
+
25  enum state_t {
+
26  Idle,
+
27  Active,
+
28  Stopping,
+
29  } state;
+
30 
+
31  typedef std::deque<value_type> queue_t;
+
32  queue_t queue;
+
33 
+
34  epicsEvent wakeup;
+
35 
+
36  typedef std::vector<epicsThread*> workers_t;
+
37  workers_t workers;
+
38 
+
39 public:
+
40  WorkQueue(const std::string& name);
+
41  virtual ~WorkQueue();
+
42 
+
43  void start(unsigned nworkers=1, unsigned prio = epicsThreadPriorityLow);
+
44  void close();
+
45 
+
46  void add(const value_type& work);
+
47 
+
48 private:
+
49  virtual void run();
+
50 };
+
51 
+
52 #endif // TPOOL_H
+ +
+ + + + diff --git a/uniondbrbuf-members.html b/uniondbrbuf-members.html new file mode 100644 index 0000000..d0ad3d6 --- /dev/null +++ b/uniondbrbuf-members.html @@ -0,0 +1,111 @@ + + + + + + +pva2pva: Member List + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ +
+
+
+
dbrbuf Member List
+
+
+ +

This is the complete list of members for dbrbuf, including all inherited members.

+ + + + + + + + + + + +
dbf_CHAR (defined in dbrbuf)dbrbuf
dbf_DOUBLE (defined in dbrbuf)dbrbuf
dbf_ENUM (defined in dbrbuf)dbrbuf
dbf_FLOAT (defined in dbrbuf)dbrbuf
dbf_LONG (defined in dbrbuf)dbrbuf
dbf_SHORT (defined in dbrbuf)dbrbuf
dbf_STRING (defined in dbrbuf)dbrbuf
dbf_UCHAR (defined in dbrbuf)dbrbuf
dbf_ULONG (defined in dbrbuf)dbrbuf
dbf_USHORT (defined in dbrbuf)dbrbuf
+ + + + diff --git a/uniondbrbuf.html b/uniondbrbuf.html new file mode 100644 index 0000000..0fc56e4 --- /dev/null +++ b/uniondbrbuf.html @@ -0,0 +1,141 @@ + + + + + + +pva2pva: dbrbuf Union Reference + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ +
+
+ +
+
dbrbuf Union Reference
+
+
+ + + + + + + + + + + + + + + + + + + + + + +

+Public Attributes

+epicsInt8 dbf_CHAR
 
+epicsUInt8 dbf_UCHAR
 
+epicsInt16 dbf_SHORT
 
+epicsUInt16 dbf_USHORT
 
+epicsEnum16 dbf_ENUM
 
+epicsInt32 dbf_LONG
 
+epicsUInt32 dbf_ULONG
 
+epicsFloat32 dbf_FLOAT
 
+epicsFloat64 dbf_DOUBLE
 
+char dbf_STRING [MAX_STRING_SIZE]
 
+

Detailed Description

+
+

Definition at line 61 of file pvif.h.

+

The documentation for this union was generated from the following file: +
+ + + + diff --git a/utilities_8cpp_source.html b/utilities_8cpp_source.html new file mode 100644 index 0000000..a2fb5c7 --- /dev/null +++ b/utilities_8cpp_source.html @@ -0,0 +1,744 @@ + + + + + + +pva2pva: common/utilities.cpp Source File + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
utilities.cpp
+
+
+
1 
+
2 #include <epicsAtomic.h>
+
3 #include <errlog.h>
+
4 #include <epicsEvent.h>
+
5 #include <epicsUnitTest.h>
+
6 #include <dbUnitTest.h>
+
7 
+
8 #include <pv/pvUnitTest.h>
+
9 #include <pv/pvAccess.h>
+
10 
+
11 #define epicsExportSharedSymbols
+
12 #include <utilities.h>
+
13 #include <helper.h>
+
14 
+
15 typedef epicsGuard<epicsMutex> Guard;
+
16 typedef epicsGuardRelease<epicsMutex> UnGuard;
+
17 
+
18 namespace pvd = epics::pvData;
+
19 namespace pva = epics::pvAccess;
+
20 
+
21 static size_t countTestChannelRequester;
+
22 
+
23 TestChannelRequester::TestChannelRequester()
+
24  :laststate(pva::Channel::NEVER_CONNECTED)
+
25 {
+
26  epicsAtomicIncrSizeT(&countTestChannelRequester);
+
27 }
+
28 
+
29 
+
30 TestChannelRequester::~TestChannelRequester()
+
31 {
+
32  epicsAtomicDecrSizeT(&countTestChannelRequester);
+
33 }
+
34 
+
35 void TestChannelRequester::channelCreated(const pvd::Status& status, pva::Channel::shared_pointer const & channel)
+
36 {
+
37  testDiag("channelCreated %s", channel ? channel->getChannelName().c_str() : "<fails>");
+
38  Guard G(lock);
+
39  laststate = pva::Channel::CONNECTED;
+
40  this->status = status;
+
41  chan = channel;
+
42  wait.trigger();
+
43 }
+
44 
+
45 void TestChannelRequester::channelStateChange(pva::Channel::shared_pointer const & channel,
+
46  pva::Channel::ConnectionState connectionState)
+
47 {
+
48  testDiag("channelStateChange %s %d", channel->getChannelName().c_str(), (int)connectionState);
+
49  Guard G(lock);
+
50  laststate = connectionState;
+
51  wait.trigger();
+
52 }
+
53 
+
54 bool TestChannelRequester::waitForConnect()
+
55 {
+
56  Guard G(lock);
+
57  assert(chan);
+
58  while(true) {
+
59  pva::Channel::ConnectionState cur = chan->getConnectionState();
+
60  switch(cur) {
+
61  case pva::Channel::NEVER_CONNECTED:
+
62  break;
+
63  case pva::Channel::CONNECTED:
+
64  return true;
+
65  case pva::Channel::DISCONNECTED:
+
66  case pva::Channel::DESTROYED:
+
67  return false;
+
68  }
+
69  UnGuard U(G);
+
70  wait.wait();
+
71  }
+
72 
+
73 }
+
74 
+
75 static size_t countTestChannelGetRequester;
+
76 
+
77 TestChannelGetRequester::TestChannelGetRequester()
+
78  :connected(false)
+
79  ,done(false)
+
80 {
+
81  epicsAtomicIncrSizeT(&countTestChannelGetRequester);
+
82 }
+
83 
+
84 TestChannelGetRequester::~TestChannelGetRequester()
+
85 {
+
86  epicsAtomicDecrSizeT(&countTestChannelGetRequester);
+
87 }
+
88 
+
89 void TestChannelGetRequester::channelGetConnect(const epics::pvData::Status &status,
+
90  const epics::pvAccess::ChannelGet::shared_pointer &get,
+
91  const epics::pvData::Structure::const_shared_pointer &structure)
+
92 {
+
93  if(connected)
+
94  testFail("channelGetConnect() called twice");
+
95  statusConnect = status;
+
96  channelGet = get;
+
97  fielddesc = structure;
+
98  connected = true;
+
99 }
+
100 
+
101 void TestChannelGetRequester::getDone(const epics::pvData::Status &status,
+
102  const epics::pvAccess::ChannelGet::shared_pointer &get,
+
103  const epics::pvData::PVStructure::shared_pointer &pvStructure,
+
104  const epics::pvData::BitSet::shared_pointer &bitSet)
+
105 {
+
106  statusDone = status;
+
107  channelGet = get;
+
108  value = pvStructure;
+
109  changed = bitSet;
+
110  done = true;
+
111 }
+
112 
+
113 TestChannelPutRequester::TestChannelPutRequester()
+
114  :connected(false)
+
115  ,doneGet(false)
+
116  ,donePut(false)
+
117 {}
+
118 TestChannelPutRequester::~TestChannelPutRequester() {}
+
119 
+
120 void TestChannelPutRequester::channelPutConnect(
+
121  const epics::pvData::Status& status,
+
122  epics::pvAccess::ChannelPut::shared_pointer const & channelPut,
+
123  epics::pvData::Structure::const_shared_pointer const & structure)
+
124 {
+
125  statusConnect = status;
+
126  put = channelPut;
+
127  fielddesc = structure;
+
128  connected = true;
+
129 }
+
130 
+
131 void TestChannelPutRequester::putDone(
+
132  const epics::pvData::Status& status,
+
133  epics::pvAccess::ChannelPut::shared_pointer const & channelPut)
+
134 {
+
135  statusPut = status;
+
136  put = channelPut;
+
137  donePut = true;
+
138 }
+
139 
+
140 void TestChannelPutRequester::getDone(
+
141  const epics::pvData::Status& status,
+
142  epics::pvAccess::ChannelPut::shared_pointer const & channelPut,
+
143  epics::pvData::PVStructure::shared_pointer const & pvStructure,
+
144  epics::pvData::BitSet::shared_pointer const & bitSet)
+
145 {
+
146  statusGet = status;
+
147  put = channelPut;
+
148  value = pvStructure;
+
149  changed = bitSet;
+
150  doneGet = true;
+
151 }
+
152 
+
153 
+
154 static size_t countTestChannelMonitorRequester;
+
155 
+
156 TestChannelMonitorRequester::TestChannelMonitorRequester()
+
157  :connected(false)
+
158  ,unlistend(false)
+
159  ,eventCnt(0)
+
160 {
+
161  epicsAtomicIncrSizeT(&countTestChannelMonitorRequester);
+
162 }
+
163 
+
164 TestChannelMonitorRequester::~TestChannelMonitorRequester()
+
165 {
+
166  epicsAtomicDecrSizeT(&countTestChannelMonitorRequester);
+
167 }
+
168 
+
169 void TestChannelMonitorRequester::monitorConnect(pvd::Status const & status,
+
170  pvd::MonitorPtr const & monitor,
+
171  pvd::StructureConstPtr const & structure)
+
172 {
+
173  testDiag("monitorConnect %p %d", monitor.get(), (int)status.isSuccess());
+
174  Guard G(lock);
+
175  connectStatus = status;
+
176  dtype = structure;
+
177  connected = true;
+
178  wait.trigger();
+
179 }
+
180 
+
181 void TestChannelMonitorRequester::monitorEvent(pvd::MonitorPtr const & monitor)
+
182 {
+
183  testDiag("monitorEvent %p", monitor.get());
+
184  mon = monitor;
+
185  eventCnt++;
+
186  wait.trigger();
+
187 }
+
188 
+
189 void TestChannelMonitorRequester::unlisten(pvd::MonitorPtr const & monitor)
+
190 {
+
191  testDiag("unlisten %p", monitor.get());
+
192  Guard G(lock);
+
193  unlistend = true;
+
194  wait.trigger();
+
195 }
+
196 
+
197 bool TestChannelMonitorRequester::waitForConnect()
+
198 {
+
199  Guard G(lock);
+
200  while(!connected) {
+
201  UnGuard U(G);
+
202  wait.wait();
+
203  }
+
204  return true;
+
205 }
+
206 
+
207 bool TestChannelMonitorRequester::waitForEvent()
+
208 {
+
209  Guard G(lock);
+
210  size_t icnt = eventCnt;
+
211  while(!unlistend && eventCnt==icnt) {
+
212  UnGuard U(G);
+
213  wait.wait();
+
214  }
+
215  return !unlistend;
+
216 }
+
217 
+
218 static size_t countTestPVChannel;
+
219 
+
220 TestPVChannel::TestPVChannel(const std::tr1::shared_ptr<TestPV> &pv,
+
221  const std::tr1::shared_ptr<pva::ChannelRequester> &req)
+
222  :BaseChannel(pv->name, pv->provider, req, pv->dtype)
+
223  ,pv(pv)
+
224  ,state(CONNECTED)
+
225 {
+
226  epicsAtomicIncrSizeT(&countTestPVChannel);
+
227 }
+
228 
+
229 TestPVChannel::~TestPVChannel()
+
230 {
+
231  epicsAtomicDecrSizeT(&countTestPVChannel);
+
232 }
+
233 
+
234 TestPVChannel::ConnectionState TestPVChannel::getConnectionState()
+
235 {
+
236  Guard G(pv->lock);
+
237  return state;
+
238 }
+
239 
+
240 void TestPVChannel::getField(pva::GetFieldRequester::shared_pointer const & requester,std::string const & subField)
+
241 {
+
242  Guard G(pv->lock);
+
243 
+
244  //TODO subField?
+
245  requester->getDone(pvd::Status(), pv->dtype);
+
246 }
+
247 
+
248 pvd::Monitor::shared_pointer
+
249 TestPVChannel::createMonitor(
+
250  pvd::MonitorRequester::shared_pointer const & requester,
+
251  pvd::PVStructure::shared_pointer const & pvRequest)
+
252 {
+
253  shared_pointer self(weakself);
+
254  TestPVMonitor::shared_pointer ret(new TestPVMonitor(self, requester, 2));
+
255  {
+
256  Guard G(pv->lock);
+
257  monitors.insert(ret);
+
258  static_cast<TestPVMonitor*>(ret.get())->weakself = ret; // save wrapped weak ref
+
259  }
+
260  testDiag("TestPVChannel::createMonitor %s %p", pv->name.c_str(), ret.get());
+
261  requester->monitorConnect(pvd::Status(), ret, pv->dtype);
+
262  return ret;
+
263 }
+
264 
+
265 static size_t countTestPVMonitor;
+
266 
+
267 TestPVMonitor::TestPVMonitor(const TestPVChannel::shared_pointer& ch,
+
268  const pvd::MonitorRequester::shared_pointer& req,
+
269  size_t bsize)
+
270  :channel(ch)
+
271  ,requester(req)
+
272  ,running(false)
+
273  ,finalize(false)
+
274  ,inoverflow(false)
+
275  ,needWakeup(false)
+
276 {
+
277  pvd::PVDataCreatePtr fact(pvd::PVDataCreate::getPVDataCreate());
+
278  for(size_t i=0; i<bsize; i++) {
+
279  pva::MonitorElementPtr elem(new pvd::MonitorElement(fact->createPVStructure(channel->pv->dtype)));
+
280  free.push_back(elem);
+
281  }
+
282  overflow.reset(new pvd::MonitorElement(fact->createPVStructure(channel->pv->dtype)));
+
283  overflow->changedBitSet->set(0); // initially all changed
+
284  epicsAtomicIncrSizeT(&countTestPVMonitor);
+
285 }
+
286 
+
287 TestPVMonitor::~TestPVMonitor()
+
288 {
+
289  epicsAtomicDecrSizeT(&countTestPVMonitor);
+
290 }
+
291 
+
292 void TestPVMonitor::destroy()
+
293 {
+
294  Guard G(channel->pv->lock);
+
295 
+
296  shared_pointer self(weakself);
+
297  channel->monitors.erase(self); // ensure we don't get more notifications
+
298 }
+
299 
+
300 pvd::Status TestPVMonitor::start()
+
301 {
+
302  testDiag("TestPVMonitor::start %p", this);
+
303 
+
304  Guard G(channel->pv->lock);
+
305  if(finalize && buffer.empty())
+
306  return pvd::Status();
+
307 
+
308  if(running)
+
309  return pvd::Status();
+
310  running = true;
+
311 
+
312  // overflow element does double duty to hold this monitor's copy
+
313  overflow->pvStructurePtr->copyUnchecked(*channel->pv->value);
+
314 
+
315  if(this->buffer.empty()) {
+
316  needWakeup = true;
+
317  testDiag(" need wakeup");
+
318  }
+
319 
+
320  if(!this->free.empty()) {
+
321  pva::MonitorElementPtr monitorElement(this->free.front());
+
322 
+
323  if(overflow->changedBitSet->isEmpty()) {
+
324  overflow->changedBitSet->set(0); // initial update has all changed
+
325  overflow->overrunBitSet->clear();
+
326  }
+
327 
+
328  monitorElement->pvStructurePtr->copyUnchecked(*overflow->pvStructurePtr);
+
329  *monitorElement->changedBitSet = *overflow->changedBitSet;
+
330  *monitorElement->overrunBitSet = *overflow->overrunBitSet;
+
331  overflow->changedBitSet->clear();
+
332  overflow->overrunBitSet->clear();
+
333 
+
334  buffer.push_back(monitorElement);
+
335  this->free.pop_front();
+
336  testDiag(" push current");
+
337 
+
338  } else {
+
339  inoverflow = true;
+
340  overflow->changedBitSet->clear();
+
341  overflow->changedBitSet->set(0);
+
342  testDiag(" push overflow");
+
343  }
+
344 
+
345  return pvd::Status();
+
346 }
+
347 
+
348 pvd::Status TestPVMonitor::stop()
+
349 {
+
350  testDiag("TestPVMonitor::stop %p", this);
+
351  Guard G(channel->pv->lock);
+
352  running = false;
+
353  return pvd::Status();
+
354 }
+
355 
+
356 pva::MonitorElementPtr TestPVMonitor::poll()
+
357 {
+
358  pva::MonitorElementPtr ret;
+
359  Guard G(channel->pv->lock);
+
360  if(!buffer.empty()) {
+
361  ret = buffer.front();
+
362  buffer.pop_front();
+
363  }
+
364  testDiag("TestPVMonitor::poll %p %p", this, ret.get());
+
365  return ret;
+
366 }
+
367 
+
368 void TestPVMonitor::release(pva::MonitorElementPtr const & monitorElement)
+
369 {
+
370  Guard G(channel->pv->lock);
+
371  testDiag("TestPVMonitor::release %p %p", this, monitorElement.get());
+
372 
+
373  if(inoverflow) {
+
374  // buffer.empty() may be true if all elements poll()d by user
+
375  assert(this->free.empty());
+
376 
+
377  monitorElement->pvStructurePtr->copyUnchecked(*overflow->pvStructurePtr);
+
378  *monitorElement->changedBitSet = *overflow->changedBitSet;
+
379  *monitorElement->overrunBitSet = *overflow->overrunBitSet;
+
380 
+
381  overflow->changedBitSet->clear();
+
382  overflow->overrunBitSet->clear();
+
383 
+
384  buffer.push_back(monitorElement);
+
385  testDiag("TestPVMonitor::release overflow resume %p %p", this, monitorElement.get());
+
386  inoverflow = false;
+
387  } else {
+
388  this->free.push_back(monitorElement);
+
389  }
+
390 }
+
391 
+
392 static size_t countTestPV;
+
393 
+
394 TestPV::TestPV(const std::string& name,
+
395  const std::tr1::shared_ptr<TestProvider>& provider,
+
396  const pvd::StructureConstPtr& dtype)
+
397  :name(name)
+
398  ,provider(provider)
+
399  ,factory(pvd::PVDataCreate::getPVDataCreate())
+
400  ,dtype(dtype)
+
401  ,value(factory->createPVStructure(dtype))
+
402 {
+
403  epicsAtomicIncrSizeT(&countTestPV);
+
404 }
+
405 
+
406 TestPV::~TestPV()
+
407 {
+
408  epicsAtomicDecrSizeT(&countTestPV);
+
409 }
+
410 
+
411 void TestPV::post(bool notify)
+
412 {
+
413  pvd::BitSet changed;
+
414  changed.set(0); // all
+
415  post(changed, notify);
+
416 }
+
417 
+
418 void TestPV::post(const pvd::BitSet& changed, bool notify)
+
419 {
+
420  testDiag("post %s %d changed '%s'", name.c_str(), (int)notify, toString(changed).c_str());
+
421  Guard G(lock);
+
422 
+
423  channels_t::vector_type toupdate(channels.lock_vector());
+
424 
+
425  FOREACH(channels_t::vector_type::const_iterator, it, end, toupdate) // channel
+
426  {
+
427  TestPVChannel *chan = it->get();
+
428 
+
429  TestPVChannel::monitors_t::vector_type tomon(chan->monitors.lock_vector());
+
430  FOREACH(TestPVChannel::monitors_t::vector_type::const_iterator, it2, end2, tomon) // monitor/subscription
+
431  {
+
432  TestPVMonitor *mon = it2->get();
+
433 
+
434  if(!mon->running)
+
435  continue;
+
436 
+
437  mon->overflow->pvStructurePtr->copyUnchecked(*value, changed);
+
438 
+
439  if(mon->free.empty()) {
+
440  mon->inoverflow = true;
+
441  mon->overflow->overrunBitSet->or_and(*mon->overflow->changedBitSet, changed); // oflow |= prev_changed & new_changed
+
442  *mon->overflow->changedBitSet |= changed;
+
443  testDiag("overflow changed '%s' overrun '%s'",
+
444  toString(*mon->overflow->changedBitSet).c_str(),
+
445  toString(*mon->overflow->overrunBitSet).c_str());
+
446 
+
447  } else {
+
448  assert(!mon->inoverflow);
+
449 
+
450  if(mon->buffer.empty())
+
451  mon->needWakeup = true;
+
452 
+
453  pvd::MonitorElementPtr& elem(mon->free.front());
+
454  // Note: can't use 'changed' to optimize this copy since we don't know
+
455  // the state of the free element
+
456  elem->pvStructurePtr->copyUnchecked(*mon->overflow->pvStructurePtr);
+
457  *elem->changedBitSet = changed;
+
458  elem->overrunBitSet->clear(); // redundant/paranoia
+
459 
+
460  mon->buffer.push_back(elem);
+
461  mon->free.pop_front();
+
462  testDiag("push %p changed '%s' overflow '%s'", elem.get(),
+
463  toString(*elem->changedBitSet).c_str(),
+
464  toString(*elem->overrunBitSet).c_str());
+
465  }
+
466 
+
467  if(mon->needWakeup && notify) {
+
468  testDiag(" wakeup");
+
469  mon->needWakeup = false;
+
470  pva::MonitorRequester::shared_pointer req(mon->requester.lock());
+
471  UnGuard U(G);
+
472  if(req)
+
473  req->monitorEvent(*it2);
+
474  }
+
475  }
+
476  }
+
477 }
+
478 
+
479 void TestPV::disconnect()
+
480 {
+
481  Guard G(lock);
+
482  channels_t::vector_type toupdate(channels.lock_vector());
+
483 
+
484  FOREACH(channels_t::vector_type::const_iterator, it, end, toupdate) // channel
+
485  {
+
486  TestPVChannel *chan = it->get();
+
487 
+
488  chan->state = TestPVChannel::DISCONNECTED;
+
489  {
+
490  pva::ChannelRequester::shared_pointer req(chan->requester.lock());
+
491  UnGuard U(G);
+
492  if(req)
+
493  req->channelStateChange(*it, TestPVChannel::DISCONNECTED);
+
494  }
+
495  }
+
496 }
+
497 
+
498 static size_t countTestProvider;
+
499 
+
500 TestProvider::TestProvider()
+
501 {
+
502  epicsAtomicIncrSizeT(&countTestProvider);
+
503 }
+
504 
+
505 TestProvider::~TestProvider()
+
506 {
+
507  epicsAtomicDecrSizeT(&countTestProvider);
+
508 }
+
509 
+
510 void TestProvider::destroy()
+
511 {
+
512  // TODO: disconnect all?
+
513 }
+
514 
+
515 pva::ChannelFind::shared_pointer
+
516 TestProvider::channelList(pva::ChannelListRequester::shared_pointer const & requester)
+
517 {
+
518  pva::ChannelFind::shared_pointer ret;
+
519  pvd::PVStringArray::const_svector names;
+
520  requester->channelListResult(pvd::Status(pvd::Status::STATUSTYPE_FATAL, "Not implemented"),
+
521  ret,
+
522  names,
+
523  true);
+
524  return ret;
+
525 }
+
526 
+
527 pva::ChannelFind::shared_pointer
+
528 TestProvider::channelFind(std::string const & channelName,
+
529  pva::ChannelFindRequester::shared_pointer const & requester)
+
530 {
+
531  pva::ChannelFind::shared_pointer ret;
+
532  requester->channelFindResult(pvd::Status(pvd::Status::STATUSTYPE_FATAL, "Not implemented"),
+
533  ret, false);
+
534  return ret;
+
535 }
+
536 
+
537 pva::Channel::shared_pointer
+
538 TestProvider::createChannel(std::string const & channelName,pva::ChannelRequester::shared_pointer const & requester,
+
539  short priority)
+
540 {
+
541  return createChannel(channelName, requester, priority, "<unused>");
+
542 }
+
543 
+
544 pva::Channel::shared_pointer
+
545 TestProvider::createChannel(std::string const & channelName,
+
546  pva::ChannelRequester::shared_pointer const & requester,
+
547  short priority, std::string const & address)
+
548 {
+
549  pva::Channel::shared_pointer ret;
+
550 
+
551  {
+
552  Guard G(lock);
+
553 
+
554  TestPV::shared_pointer pv(pvs.find(channelName));
+
555  if(pv) {
+
556  TestPVChannel::shared_pointer chan(new TestPVChannel(pv, requester));
+
557  pv->channels.insert(chan);
+
558  chan->weakself = chan;
+
559  ret = chan;
+
560  }
+
561  }
+
562 
+
563  if(ret) {
+
564  requester->channelCreated(pvd::Status(), ret);
+
565  } else {
+
566  requester->channelCreated(pvd::Status(pvd::Status::STATUSTYPE_ERROR, "PV not found"), ret);
+
567  }
+
568  testDiag("createChannel %s %p", channelName.c_str(), ret.get());
+
569  return ret;
+
570 }
+
571 
+
572 TestPV::shared_pointer
+
573 TestProvider::addPV(const std::string& name, const pvd::StructureConstPtr& tdef)
+
574 {
+
575  Guard G(lock);
+
576  TestPV::shared_pointer ret(new TestPV(name, shared_from_this(), tdef));
+
577  pvs.insert(name, ret);
+
578  return ret;
+
579 }
+
580 
+
581 void TestProvider::dispatch()
+
582 {
+
583  Guard G(lock);
+
584  testDiag("TestProvider::dispatch");
+
585 
+
586  pvs_t::lock_vector_type allpvs(pvs.lock_vector());
+
587  FOREACH(pvs_t::lock_vector_type::const_iterator, pvit, pvend, allpvs)
+
588  {
+
589  TestPV *pv = pvit->second.get();
+
590  TestPV::channels_t::vector_type channels(pv->channels.lock_vector());
+
591 
+
592  FOREACH(TestPV::channels_t::vector_type::const_iterator, chit, chend, channels)
+
593  {
+
594  TestPVChannel *chan = chit->get();
+
595  TestPVChannel::monitors_t::vector_type monitors(chan->monitors.lock_vector());
+
596 
+
597  if(!chan->isConnected())
+
598  continue;
+
599 
+
600  FOREACH(TestPVChannel::monitors_t::vector_type::const_iterator, monit, monend, monitors)
+
601  {
+
602  TestPVMonitor *mon = monit->get();
+
603 
+
604  if(mon->finalize || !mon->running)
+
605  continue;
+
606 
+
607  if(mon->needWakeup) {
+
608  testDiag(" wakeup monitor %p", mon);
+
609  mon->needWakeup = false;
+
610  pva::MonitorRequester::shared_pointer req(mon->requester.lock());
+
611  UnGuard U(G);
+
612  if(req)
+
613  req->monitorEvent(*monit);
+
614  }
+
615  }
+
616  }
+
617  }
+
618 }
+
619 
+
620 void TestProvider::testCounts()
+
621 {
+
622  int ok = 1;
+
623  size_t temp;
+
624 #define TESTC(name) temp=epicsAtomicGetSizeT(&count##name); ok &= temp==0; testDiag("num. live " #name " %u", (unsigned)temp)
+ +
626  TESTC(TestChannelRequester);
+
627  TESTC(TestProvider);
+
628  TESTC(TestPV);
+
629  TESTC(TestPVChannel);
+
630  TESTC(TestPVMonitor);
+
631 #undef TESTC
+
632  testOk(ok, "All instances free'd");
+
633 }
+ + +
lock_vector_type lock_vector() const
Definition: weakmap.h:259
+ + +
value_pointer find(const K &k) const
Definition: weakmap.h:215
+
vector_type lock_vector() const
Definition: weakset.h:268
+ +
value_pointer insert(const K &k, value_pointer &v)
Definition: weakmap.h:230
+
void insert(value_pointer &)
Definition: weakset.h:227
+ + +
+ + + + diff --git a/utilities_8h_source.html b/utilities_8h_source.html new file mode 100644 index 0000000..649c622 --- /dev/null +++ b/utilities_8h_source.html @@ -0,0 +1,435 @@ + + + + + + +pva2pva: common/utilities.h Source File + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
utilities.h
+
+
+
1 #ifndef UTILITIES_H
+
2 #define UTILITIES_H
+
3 
+
4 #include <deque>
+
5 #include <sstream>
+
6 
+
7 #include <errlog.h>
+
8 #include <epicsEvent.h>
+
9 #include <epicsUnitTest.h>
+
10 #include <dbUnitTest.h>
+
11 
+
12 #include <pv/pvUnitTest.h>
+
13 #include <pv/pvAccess.h>
+
14 
+
15 #include "pvahelper.h"
+
16 #include "weakmap.h"
+
17 #include "weakset.h"
+
18 
+
19 struct TestPV;
+
20 struct TestPVChannel;
+
21 struct TestPVMonitor;
+
22 struct TestProvider;
+
23 
+
24 // minimally useful boilerplate which must appear *everywhere*
+
25 #define DUMBREQUESTER(NAME) \
+
26  virtual std::string getRequesterName() OVERRIDE { return #NAME; }
+
27 
+
28 template<typename T>
+
29 inline std::string toString(const T& tbs)
+
30 {
+
31  std::ostringstream oss;
+
32  oss << tbs;
+
33  return oss.str();
+
34 }
+
35 
+
36 // Boilerplate reduction for accessing a scalar field
+
37 template<typename T>
+ +
39  epics::pvData::PVScalar::shared_pointer field;
+
40  typedef T value_type;
+
41  ScalarAccessor(const epics::pvData::PVStructurePtr& s, const char *name)
+
42  :field(s->getSubFieldT<epics::pvData::PVScalar>(name))
+
43  {}
+
44  operator value_type() {
+
45  return field->getAs<T>();
+
46  }
+
47  ScalarAccessor& operator=(T v) {
+
48  field->putFrom<T>(v);
+
49  return *this;
+
50  }
+
51  ScalarAccessor& operator+=(T v) {
+
52  field->putFrom<T>(field->getAs<T>()+v);
+
53  return *this;
+
54  }
+
55 };
+
56 
+
57 struct TestChannelRequester : public epics::pvAccess::ChannelRequester
+
58 {
+
59  POINTER_DEFINITIONS(TestChannelRequester);
+
60  DUMBREQUESTER(TestChannelRequester)
+
61 
+
62  epicsMutex lock;
+
63  epicsEvent wait;
+
64  epics::pvAccess::Channel::shared_pointer chan;
+
65  epics::pvData::Status status;
+
66  epics::pvAccess::Channel::ConnectionState laststate;
+ +
68  virtual ~TestChannelRequester();
+
69  virtual void channelCreated(const epics::pvData::Status& status, epics::pvAccess::Channel::shared_pointer const & channel);
+
70  virtual void channelStateChange(epics::pvAccess::Channel::shared_pointer const & channel, epics::pvAccess::Channel::ConnectionState connectionState);
+
71 
+
72  bool waitForConnect();
+
73 };
+
74 
+
75 struct TestChannelFieldRequester : public epics::pvAccess::GetFieldRequester
+
76 {
+
77  POINTER_DEFINITIONS(TestChannelFieldRequester);
+
78  DUMBREQUESTER(TestChannelFieldRequester)
+
79 
+
80  bool done;
+
81  epics::pvData::Status status;
+
82  epics::pvData::FieldConstPtr fielddesc;
+
83 
+
84  TestChannelFieldRequester() :done(false) {}
+
85  virtual ~TestChannelFieldRequester() {}
+
86 
+
87  virtual void getDone(
+
88  const epics::pvData::Status& status,
+
89  epics::pvData::FieldConstPtr const & field)
+
90  {
+
91  this->status = status;
+
92  fielddesc = field;
+
93  done = true;
+
94  }
+
95 };
+
96 
+
97 struct TestChannelGetRequester : public epics::pvAccess::ChannelGetRequester
+
98 {
+
99  POINTER_DEFINITIONS(TestChannelGetRequester);
+
100  DUMBREQUESTER(TestChannelGetRequester)
+
101 
+
102  bool connected, done;
+
103  epics::pvData::Status statusConnect, statusDone;
+
104  epics::pvAccess::ChannelGet::shared_pointer channelGet;
+
105  epics::pvData::Structure::const_shared_pointer fielddesc;
+
106  epics::pvData::PVStructure::shared_pointer value;
+
107  epics::pvData::BitSet::shared_pointer changed;
+
108 
+ +
110  virtual ~TestChannelGetRequester();
+
111 
+
112  virtual void channelGetConnect(
+
113  const epics::pvData::Status& status,
+
114  epics::pvAccess::ChannelGet::shared_pointer const & channelGet,
+
115  epics::pvData::Structure::const_shared_pointer const & structure);
+
116 
+
117  virtual void getDone(
+
118  const epics::pvData::Status& status,
+
119  epics::pvAccess::ChannelGet::shared_pointer const & channelGet,
+
120  epics::pvData::PVStructure::shared_pointer const & pvStructure,
+
121  epics::pvData::BitSet::shared_pointer const & bitSet);
+
122 };
+
123 
+
124 struct TestChannelPutRequester : public epics::pvAccess::ChannelPutRequester
+
125 {
+
126  POINTER_DEFINITIONS(TestChannelPutRequester);
+
127  DUMBREQUESTER(TestChannelPutRequester)
+
128 
+
129  bool connected, doneGet, donePut;
+
130  epics::pvData::Status statusConnect, statusPut, statusGet;
+
131  epics::pvAccess::ChannelPut::shared_pointer put;
+
132  epics::pvData::Structure::const_shared_pointer fielddesc;
+
133  epics::pvData::PVStructure::shared_pointer value;
+
134  epics::pvData::BitSet::shared_pointer changed;
+
135 
+ +
137  virtual ~TestChannelPutRequester();
+
138 
+
139  virtual void channelPutConnect(
+
140  const epics::pvData::Status& status,
+
141  epics::pvAccess::ChannelPut::shared_pointer const & channelPut,
+
142  epics::pvData::Structure::const_shared_pointer const & structure);
+
143 
+
144  virtual void putDone(
+
145  const epics::pvData::Status& status,
+
146  epics::pvAccess::ChannelPut::shared_pointer const & channelPut);
+
147 
+
148  virtual void getDone(
+
149  const epics::pvData::Status& status,
+
150  epics::pvAccess::ChannelPut::shared_pointer const & channelPut,
+
151  epics::pvData::PVStructure::shared_pointer const & pvStructure,
+
152  epics::pvData::BitSet::shared_pointer const & bitSet);
+
153 };
+
154 
+
155 struct TestChannelMonitorRequester : public epics::pvData::MonitorRequester
+
156 {
+
157  POINTER_DEFINITIONS(TestChannelMonitorRequester);
+
158  DUMBREQUESTER(TestChannelMonitorRequester)
+
159 
+
160  epicsMutex lock;
+
161  epicsEvent wait;
+
162  bool connected;
+
163  bool unlistend;
+
164  size_t eventCnt;
+
165  epics::pvData::Status connectStatus;
+
166  epics::pvData::MonitorPtr mon;
+
167  epics::pvData::StructureConstPtr dtype;
+
168 
+ +
170  virtual ~TestChannelMonitorRequester();
+
171 
+
172  virtual void monitorConnect(epics::pvData::Status const & status,
+
173  epics::pvData::MonitorPtr const & monitor,
+
174  epics::pvData::StructureConstPtr const & structure);
+
175  virtual void monitorEvent(epics::pvData::MonitorPtr const & monitor);
+
176  virtual void unlisten(epics::pvData::MonitorPtr const & monitor);
+
177 
+
178  bool waitForConnect();
+
179  bool waitForEvent();
+
180 };
+
181 
+
182 struct TestPVChannel : public BaseChannel
+
183 {
+
184  POINTER_DEFINITIONS(TestPVChannel);
+
185  DUMBREQUESTER(TestPVChannel)
+
186  std::tr1::weak_ptr<TestPVChannel> weakself;
+
187 
+
188  const std::tr1::shared_ptr<TestPV> pv;
+
189  ConnectionState state;
+
190 
+ +
192  monitors_t monitors;
+
193 
+
194  TestPVChannel(const std::tr1::shared_ptr<TestPV>& pv,
+
195  const std::tr1::shared_ptr<epics::pvAccess::ChannelRequester>& req);
+
196  virtual ~TestPVChannel();
+
197 
+
198  virtual std::string getRemoteAddress() { return "localhost:1234"; }
+
199  virtual ConnectionState getConnectionState();
+
200 
+
201  virtual void getField(epics::pvAccess::GetFieldRequester::shared_pointer const & requester,std::string const & subField);
+
202 
+
203  virtual epics::pvData::Monitor::shared_pointer createMonitor(
+
204  epics::pvData::MonitorRequester::shared_pointer const & monitorRequester,
+
205  epics::pvData::PVStructure::shared_pointer const & pvRequest);
+
206 };
+
207 
+
208 struct TestPVMonitor : public epics::pvData::Monitor
+
209 {
+
210  POINTER_DEFINITIONS(TestPVMonitor);
+
211  std::tr1::weak_ptr<TestPVMonitor> weakself;
+
212 
+
213  const TestPVChannel::shared_pointer channel;
+
214  const epics::pvData::MonitorRequester::weak_pointer requester;
+
215 
+
216  bool running;
+
217  bool finalize;
+
218  bool inoverflow;
+
219  bool needWakeup;
+
220 
+
221  TestPVMonitor(const TestPVChannel::shared_pointer& ch,
+
222  const epics::pvData::MonitorRequester::shared_pointer& req,
+
223  size_t bsize);
+
224  virtual ~TestPVMonitor();
+
225 
+
226  virtual void destroy();
+
227 
+
228  virtual epics::pvData::Status start();
+
229  virtual epics::pvData::Status stop();
+
230  virtual epics::pvData::MonitorElementPtr poll();
+
231  virtual void release(epics::pvData::MonitorElementPtr const & monitorElement);
+
232 
+
233  std::deque<epics::pvData::MonitorElementPtr> buffer, free;
+
234  epics::pvData::MonitorElementPtr overflow;
+
235 };
+
236 
+
237 struct TestPV
+
238 {
+
239  POINTER_DEFINITIONS(TestPV);
+
240  std::tr1::weak_ptr<TestPV> weakself;
+
241 
+
242  const std::string name;
+
243  std::tr1::weak_ptr<TestProvider> const provider;
+
244 
+
245  epics::pvData::PVDataCreatePtr factory;
+
246 
+
247  const epics::pvData::StructureConstPtr dtype;
+
248  epics::pvData::PVStructurePtr value;
+
249 
+
250  TestPV(const std::string& name,
+
251  const std::tr1::shared_ptr<TestProvider>& provider,
+
252  const epics::pvData::StructureConstPtr& dtype);
+
253  ~TestPV();
+
254 
+
255  void post(bool notify = true);
+
256  void post(const epics::pvData::BitSet& changed, bool notify = true);
+
257 
+
258  void disconnect();
+
259 
+
260  mutable epicsMutex lock;
+
261 
+ +
263  channels_t channels;
+
264  friend struct TestProvider;
+
265 };
+
266 
+
267 struct TestProvider : public epics::pvAccess::ChannelProvider, std::tr1::enable_shared_from_this<TestProvider>
+
268 {
+
269  POINTER_DEFINITIONS(TestProvider);
+
270 
+
271  virtual std::string getProviderName() { return "TestProvider"; }
+
272 
+
273  virtual void destroy();
+
274 
+
275  virtual epics::pvAccess::ChannelFind::shared_pointer channelFind(std::string const & channelName,
+
276  epics::pvAccess::ChannelFindRequester::shared_pointer const & channelFindRequester);
+
277  virtual epics::pvAccess::ChannelFind::shared_pointer channelList(epics::pvAccess::ChannelListRequester::shared_pointer const & channelListRequester);
+
278  virtual epics::pvAccess::Channel::shared_pointer createChannel(std::string const & channelName,epics::pvAccess::ChannelRequester::shared_pointer const & channelRequester,
+
279  short priority = PRIORITY_DEFAULT);
+
280  virtual epics::pvAccess::Channel::shared_pointer createChannel(std::string const & channelName, epics::pvAccess::ChannelRequester::shared_pointer const & channelRequester,
+
281  short priority, std::string const & address);
+
282 
+
283  TestProvider();
+
284  virtual ~TestProvider();
+
285 
+
286  TestPV::shared_pointer addPV(const std::string& name, const epics::pvData::StructureConstPtr& tdef);
+
287 
+
288  void dispatch();
+
289 
+
290  mutable epicsMutex lock;
+ +
292  pvs_t pvs;
+
293 
+
294  static void testCounts();
+
295 };
+
296 
+
297 struct TestIOC {
+
298  bool hasInit;
+
299  TestIOC() : hasInit(false) {
+
300  testdbPrepare();
+
301  }
+
302  ~TestIOC() {
+
303  this->shutdown();
+
304  testdbCleanup();
+
305  }
+
306  void init() {
+
307  if(!hasInit) {
+
308  eltc(0);
+
309  testIocInitOk();
+
310  eltc(1);
+
311  hasInit = true;
+
312  }
+
313  }
+
314  void shutdown() {
+
315  if(hasInit) {
+
316  testIocShutdownOk();
+
317  hasInit = false;
+
318  }
+
319  }
+
320 };
+
321 
+
322 #endif // UTILITIES_H
+ + + + + + + + + + + + + + +
+ + + + diff --git a/utilitiesx_8cpp_source.html b/utilitiesx_8cpp_source.html new file mode 100644 index 0000000..283b12a --- /dev/null +++ b/utilitiesx_8cpp_source.html @@ -0,0 +1,101 @@ + + + + + + +pva2pva: p2pApp/utilitiesx.cpp Source File + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
utilitiesx.cpp
+
+
+
1 // hack to avoid a convienence library
+
2 #include "utilities.cpp"
+
+ + + + diff --git a/weakmap_8h_source.html b/weakmap_8h_source.html new file mode 100644 index 0000000..5767b3f --- /dev/null +++ b/weakmap_8h_source.html @@ -0,0 +1,317 @@ + + + + + + +pva2pva: p2pApp/weakmap.h Source File + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
weakmap.h
+
+
+
1 #ifndef WEAKMAP_H
+
2 #define WEAKMAP_H
+
3 
+
4 #include <map>
+
5 #include <set>
+
6 #include <vector>
+
7 #include <stdexcept>
+
8 
+
9 #include <pv/sharedPtr.h>
+
10 #include <epicsMutex.h>
+
11 #include <epicsGuard.h>
+
12 
+
58 template<typename K, typename V, typename C = std::less<K> >
+ +
60 {
+
61 public:
+
62  typedef K key_type;
+
63  typedef V value_type;
+
64  typedef std::tr1::shared_ptr<V> value_pointer;
+
65  typedef std::tr1::weak_ptr<V> value_weak_pointer;
+
66  typedef std::set<value_pointer> set_type;
+
67 
+
68  typedef epicsMutex mutex_type;
+
69  typedef epicsGuard<epicsMutex> guard_type;
+
70  typedef epicsGuardRelease<epicsMutex> release_type;
+
71 private:
+
72  typedef std::map<K, value_weak_pointer, C> store_t;
+
73 
+
74  struct data {
+
75  mutex_type mutex;
+
76  store_t store;
+
77  };
+
78  std::tr1::shared_ptr<data> _data;
+
79 
+
80  struct dtor {
+
81  std::tr1::weak_ptr<data> container;
+
82  K key;
+
83  value_pointer realself;
+
84  dtor(const std::tr1::weak_ptr<data>& d,
+
85  const K& k,
+
86  const value_pointer& w)
+
87  :container(d), key(k), realself(w)
+
88  {}
+
89  void operator()(value_type *)
+
90  {
+
91  value_pointer R;
+
92  R.swap(realself);
+
93  std::tr1::shared_ptr<data> cont(container.lock());
+
94  if(cont) {
+
95  guard_type G(cont->mutex);
+
96  cont->store.erase(key);
+
97  }
+
98 
+
99  /* A subtle gotcha may exist since this struct
+
100  * may not be destructed until the *weak*
+
101  * count of the enclosing shared_ptr goes
+
102  * to zero. Which won't happen
+
103  * as long as we hold a weak ref to the
+
104  * container holding a weak ref to us.
+
105  * It is *essential* that we break this
+
106  * "weak ref. loop" explicitly
+
107  */
+
108  container.reset();
+
109  }
+
110  };
+
111 public:
+
113  weak_value_map() :_data(new data) {}
+
114 
+
115 private:
+
117  weak_value_map(const weak_value_map& O);
+
119  weak_value_map& operator=(const weak_value_map& O);
+
120 public:
+
121 
+
124  void swap(weak_value_map& O) {
+
125  _data.swap(O._data);
+
126  }
+
127 
+
130  void clear() {
+
131  guard_type G(_data->mutex);
+
132  return _data->store.clear();
+
133  }
+
134 
+
138  bool empty() const {
+
139  guard_type G(_data->mutex);
+
140  return _data->store.empty();
+
141  }
+
142 
+
147  size_t size() const {
+
148  guard_type G(_data->mutex);
+
149  return _data->store.size();
+
150  }
+
151 
+ +
156  weak_value_map& M;
+
157  const key_type& k;
+
158  friend class weak_value_map;
+
159  element_proxy(weak_value_map& m, const key_type& k)
+
160  :M(m), k(k) {}
+
161  public:
+
162  ~element_proxy() {}
+
166  value_pointer& operator=(value_pointer& v)
+
167  {
+
168  if(!v.unique())
+
169  throw std::invalid_argument("Only unique() references may be inserted");
+
170  value_pointer chainptr(v.get(), dtor(M._data, k, v));
+
171  M._data->store[k] = chainptr;
+
172  v.swap(chainptr);
+
173  return v;
+
174  }
+
176  inline V& operator*() const {
+
177  return *value_pointer(*this);
+
178  }
+
180  inline V* operator->() const {
+
181  return value_pointer(*this).get();
+
182  }
+
184  operator value_pointer() const
+
185  {
+
186  value_pointer ret = M.find(k);
+
187  if(!ret)
+
188  throw std::runtime_error("Bad key");
+
189  return ret;
+
190  }
+
191  bool operator==(const value_pointer& v) const
+
192  {
+
193  return M.find(k)==v;
+
194  }
+
195  bool operator!=(const value_pointer& v) const
+
196  {
+
197  return !(*this==v);
+
198  }
+
199  };
+
200 
+
201  inline element_proxy operator[](const K& k)
+
202  {
+
203  return element_proxy(*this, k);
+
204  }
+
205 
+
206  value_pointer operator[](const K& k) const
+
207  {
+
208  value_pointer ret = find(k);
+
209  if(!ret)
+
210  throw std::runtime_error("Bad key");
+
211  }
+
212 
+
215  value_pointer find(const K& k) const
+
216  {
+
217  value_pointer ret;
+
218  guard_type G(_data->mutex);
+
219  typename store_t::const_iterator it(_data->store.find(k));
+
220  if(it!=_data->store.end()) {
+
221  // may be nullptr if we race destruction
+
222  // as ref. count falls to zero before we can remove it
+
223  ret = it->second.lock();
+
224  }
+
225  return ret;
+
226  }
+
227 
+
230  value_pointer insert(const K& k, value_pointer& v)
+
231  {
+
232  value_pointer ret;
+
233  guard_type G(_data->mutex);
+
234  typename store_t::const_iterator it = _data->store.find(k);
+
235  if(it!=_data->store.end())
+
236  ret = it->second.lock();
+
237  (*this)[k] = v;
+
238  return ret;
+
239  }
+
240 
+
241  typedef std::map<K, value_pointer, C> lock_map_type;
+
243  lock_map_type lock_map() const
+
244  {
+
245  lock_map_type ret;
+
246  guard_type G(_data->mutex);
+
247  for(typename store_t::const_iterator it = _data->store.begin(),
+
248  end = _data->store.end(); it!=end; ++it)
+
249  {
+
250  value_pointer P(it->second.lock);
+
251  if(P) ret[it->first] = P;
+
252  }
+
253  return ret;
+
254  }
+
255 
+
256  typedef std::vector<std::pair<K, value_pointer> > lock_vector_type;
+
259  lock_vector_type lock_vector() const
+
260  {
+
261  lock_vector_type ret;
+
262  guard_type G(_data->mutex);
+
263  ret.reserve(_data->store.size());
+
264  for(typename store_t::const_iterator it = _data->store.begin(),
+
265  end = _data->store.end(); it!=end; ++it)
+
266  {
+
267  value_pointer P(it->second.lock());
+
268  if(P) ret.push_back(std::make_pair(it->first, P));
+
269  }
+
270  return ret;
+
271  }
+
272 
+
276  inline epicsMutex& mutex() const {
+
277  return _data->mutex;
+
278  }
+
279 };
+
280 
+
281 #endif // WEAKMAP_H
+
void clear()
Definition: weakmap.h:130
+ +
V * operator->() const
Support: map[k]-&gt;mem.
Definition: weakmap.h:180
+
size_t size() const
Definition: weakmap.h:147
+
lock_vector_type lock_vector() const
Definition: weakmap.h:259
+
void swap(weak_value_map &O)
Definition: weakmap.h:124
+
weak_value_map()
Construct a new empty set.
Definition: weakmap.h:113
+
epicsMutex & mutex() const
Definition: weakmap.h:276
+
value_pointer find(const K &k) const
Definition: weakmap.h:215
+
lock_map_type lock_map() const
Return an equivalent map with strong value references.
Definition: weakmap.h:243
+
V & operator*() const
Support: *map[k].
Definition: weakmap.h:176
+
value_pointer & operator=(value_pointer &v)
Definition: weakmap.h:166
+
value_pointer insert(const K &k, value_pointer &v)
Definition: weakmap.h:230
+
An associative map where a weak_ptr to the value is stored.
Definition: weakmap.h:59
+
bool empty() const
Definition: weakmap.h:138
+
+ + + + diff --git a/weakset_8h_source.html b/weakset_8h_source.html new file mode 100644 index 0000000..2006ab3 --- /dev/null +++ b/weakset_8h_source.html @@ -0,0 +1,324 @@ + + + + + + +pva2pva: p2pApp/weakset.h Source File + + + + + + + + + +
+
+ + + + + + +
+
pva2pva +  1.4.1 +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
weakset.h
+
+
+
1 #ifndef WEAKSET_H
+
2 #define WEAKSET_H
+
3 
+
4 #include <set>
+
5 #include <vector>
+
6 #include <stdexcept>
+
7 
+
8 #include <pv/sharedPtr.h>
+
9 #include <epicsMutex.h>
+
10 #include <epicsGuard.h>
+
11 
+
56 template<typename T>
+
57 class weak_set
+
58 {
+
59 public:
+
60  typedef T value_type;
+
61  typedef std::tr1::shared_ptr<T> value_pointer;
+
62  typedef std::tr1::weak_ptr<T> value_weak_pointer;
+
63  typedef std::set<value_pointer> set_type;
+
64  typedef std::vector<value_pointer> vector_type;
+
65 
+
66  typedef epicsMutex mutex_type;
+
67  typedef epicsGuard<epicsMutex> guard_type;
+
68  typedef epicsGuardRelease<epicsMutex> release_type;
+
69 private:
+
70  struct weak_less {
+
71  bool operator()(const value_weak_pointer& lhs,
+
72  const value_weak_pointer& rhs) const
+
73  {
+
74  value_pointer LHS(lhs.lock()), RHS(rhs.lock());
+
75  return LHS && RHS && LHS.get() < RHS.get();
+
76  }
+
77  bool operator()(const value_pointer& lhs,
+
78  const value_weak_pointer& rhs) const
+
79  {
+
80  value_pointer RHS(rhs.lock());
+
81  return RHS && lhs.get() < RHS.get();
+
82  }
+
83  bool operator()(const value_weak_pointer& lhs,
+
84  const value_pointer& rhs) const
+
85  {
+
86  value_pointer LHS(lhs.lock());
+
87  return LHS && LHS.get() < rhs.get();
+
88  }
+
89  };
+
90 
+
91  typedef std::set<value_weak_pointer, weak_less> store_t;
+
92 
+
93  struct data {
+
94  mutex_type mutex;
+
95  store_t store;
+
96  };
+
97  std::tr1::shared_ptr<data> _data;
+
98 
+
102  struct dtor {
+
103  std::tr1::weak_ptr<data> container;
+
104  value_pointer realself;
+
105  dtor(const std::tr1::weak_ptr<data>& d,
+
106  const value_pointer& w)
+
107  :container(d), realself(w)
+
108  {}
+
109  void operator()(value_type *)
+
110  {
+
111  value_pointer R;
+
112  R.swap(realself);
+
113  assert(R.unique());
+
114  std::tr1::shared_ptr<data> C(container.lock());
+
115  if(C) {
+
116  guard_type G(C->mutex);
+
117  C->store.erase(R);
+
118  }
+
119 
+
120  /* A subtle gotcha may exist since this struct
+
121  * may not be destructed until the *weak*
+
122  * count of the enclosing shared_ptr goes
+
123  * to zero. Which won't happen
+
124  * as long as we hold a weak ref to the
+
125  * container holding a weak ref to us.
+
126  * It is *essential* that we break this
+
127  * "weak ref. loop" explicitly
+
128  */
+
129  container.reset();
+
130  }
+
131  };
+
132 public:
+
134  weak_set() :_data(new data) {}
+
135 
+
136 private:
+
138  weak_set(const weak_set& O);
+
140  weak_set& operator=(const weak_set& O);
+
141 public:
+
142 
+
145  void swap(weak_set& O) {
+
146  _data.swap(O._data);
+
147  }
+
148 
+
151  void clear() {
+
152  guard_type G(_data->mutex);
+
153  return _data->store.clear();
+
154  }
+
155 
+
159  bool empty() const {
+
160  guard_type G(_data->mutex);
+
161  return _data->store.empty();
+
162  }
+
163 
+
168  size_t size() const {
+
169  guard_type G(_data->mutex);
+
170  return _data->store.size();
+
171  }
+
172 
+
176  void insert(value_pointer&);
+
177 
+
180  size_t erase(value_pointer& v) {
+
181  guard_type G(_data->mutex);
+
182  return _data->store.erase(v);
+
183  }
+
184 
+
187  set_type lock_set() const;
+
188 
+
192  vector_type lock_vector() const;
+
193 
+
194  void lock_vector(vector_type&) const;
+
195 
+
199  inline epicsMutex& mutex() const {
+
200  return _data->mutex;
+
201  }
+
202 
+
204  struct XIterator {
+
205  weak_set& set;
+
206  epicsGuard<epicsMutex> guard;
+
207  typename store_t::iterator it, end;
+
208  XIterator(weak_set& S) :set(S), guard(S.mutex()), it(S._data->store.begin()), end(S._data->store.end()) {}
+
210  value_pointer next() {
+
211  value_pointer ret;
+
212  while(it!=end) {
+
213  ret = (it++)->lock();
+
214  if(ret) break;
+
215  }
+
216  return ret;
+
217  }
+
218  private:
+
219  XIterator(const XIterator&);
+
220  XIterator& operator=(const XIterator&);
+
221  };
+
222 
+
223  typedef XIterator iterator;
+
224 };
+
225 
+
226 template<typename T>
+
227 void weak_set<T>::insert(value_pointer &v)
+
228 {
+
229  if(!v.unique())
+
230  throw std::invalid_argument("Only unique() references may be inserted");
+
231 
+
232  guard_type G(_data->mutex);
+
233  typename store_t::const_iterator it = _data->store.find(v);
+
234  if(it==_data->store.end()) { // new object
+
235 
+
236  // wrapped strong ref. which removes from our map
+
237  value_pointer chainptr(v.get(), dtor(_data, v));
+
238 
+
239  _data->store.insert(chainptr);
+
240 
+
241  v.swap(chainptr); // we only keep the chained pointer
+
242  } else {
+
243  // already stored, no-op
+
244 
+
245  // paranoia, if already inserted then this should be a wrapped ref.
+
246  // but not sure how to check this so update arg. with known wrapped ref.
+
247  v = value_pointer(*it); // could throw bad_weak_ptr, but really never should
+
248  }
+
249 }
+
250 
+
251 template<typename T>
+
252 typename weak_set<T>::set_type
+ +
254 {
+
255  set_type ret;
+
256  guard_type G(_data->mutex);
+
257  for(typename store_t::const_iterator it=_data->store.begin(),
+
258  end=_data->store.end(); it!=end; ++it)
+
259  {
+
260  value_pointer P(it->lock());
+
261  if(P) ret.insert(P);
+
262  }
+
263  return ret;
+
264 }
+
265 
+
266 template<typename T>
+
267 typename weak_set<T>::vector_type
+ +
269 {
+
270  vector_type ret;
+
271  lock_vector(ret);
+
272  return ret;
+
273 }
+
274 
+
275 template<typename T>
+
276 void weak_set<T>::lock_vector(vector_type& ret) const
+
277 {
+
278  guard_type G(_data->mutex);
+
279  ret.reserve(_data->store.size());
+
280  for(typename store_t::const_iterator it=_data->store.begin(),
+
281  end=_data->store.end(); it!=end; ++it)
+
282  {
+
283  value_pointer P(it->lock());
+
284  if(P) ret.push_back(P);
+
285  }
+
286 }
+
287 
+
288 #endif // WEAKSET_H
+
set_type lock_set() const
Definition: weakset.h:253
+
size_t erase(value_pointer &v)
Definition: weakset.h:180
+
bool empty() const
Definition: weakset.h:159
+
epicsMutex & mutex() const
Definition: weakset.h:199
+
value_pointer next()
yield the next live entry
Definition: weakset.h:210
+
weak_set()
Construct a new empty set.
Definition: weakset.h:134
+
void swap(weak_set &O)
Definition: weakset.h:145
+
a std::set-ish container where entries are removed when ref. counts fall to zero
Definition: weakset.h:57
+
vector_type lock_vector() const
Definition: weakset.h:268
+
void clear()
Definition: weakset.h:151
+
size_t size() const
Definition: weakset.h:168
+
an iterator-ish object which also locks the set during iteration
Definition: weakset.h:204
+
void insert(value_pointer &)
Definition: weakset.h:227
+
+ + + +