• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

STEllAR-GROUP / hpx / #882

31 Aug 2023 07:44PM UTC coverage: 41.798% (-44.7%) from 86.546%
#882

push

19442 of 46514 relevant lines covered (41.8%)

126375.38 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

53.88
/libs/full/agas/src/detail/interface.cpp
1
//  Copyright (c) 2011 Bryce Adelstein-Lelbach
2
//  Copyright (c) 2007-2025 Hartmut Kaiser
3
//
4
//  SPDX-License-Identifier: BSL-1.0
5
//  Distributed under the Boost Software License, Version 1.0. (See accompanying
6
//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
7

8
#include <hpx/agas/addressing_service.hpp>
9
#include <hpx/assert.hpp>
10
#include <hpx/components_base/agas_interface.hpp>
11
#include <hpx/components_base/detail/agas_interface_functions.hpp>
12
#include <hpx/components_base/pinned_ptr.hpp>
13
#include <hpx/modules/errors.hpp>
14
#include <hpx/modules/functional.hpp>
15
#include <hpx/modules/futures.hpp>
16
#include <hpx/modules/runtime_local.hpp>
17

18
#include <algorithm>
19
#include <cstddef>
20
#include <cstdint>
21
#include <string>
22
#include <system_error>
23
#include <utility>
24
#include <vector>
25

26
namespace hpx::agas::detail::impl {
27

28
    ///////////////////////////////////////////////////////////////////////////
90✔
29
    bool is_console()
30
    {
90✔
31
        return naming::get_agas_client().is_console();
32
    }
33

34
    ///////////////////////////////////////////////////////////////////////////
122✔
35
    bool register_name(
36
        std::string const& name, naming::gid_type const& gid, error_code&)
37
    {
122✔
38
        return naming::get_agas_client().register_name(name, gid);
39
    }
40

105✔
41
    future<bool> register_name_async(
42
        std::string const& name, hpx::id_type const& id)
43
    {
105✔
44
        return naming::get_agas_client().register_name_async(name, id);
45
    }
46

3✔
47
    bool register_name_id(
48
        std::string const& name, hpx::id_type const& id, error_code& ec)
49
    {
3✔
50
        if (&ec == &throws)
51
        {
3✔
52
            return naming::get_agas_client().register_name(name, id);
53
        }
×
54
        return register_name_async(name, id).get(ec);
55
    }
56

57
    ///////////////////////////////////////////////////////////////////////////
109✔
58
    hpx::id_type unregister_name(std::string const& name, error_code&)
59
    {
109✔
60
        if (!hpx::is_stopped())
61
        {
109✔
62
            return naming::get_agas_client().unregister_name(name);
63
        }
64
        return hpx::invalid_id;
65
    }
66

60✔
67
    future<hpx::id_type> unregister_name_async(std::string const& name)
68
    {
60✔
69
        return naming::get_agas_client().unregister_name_async(name);
70
    }
71

72
    ///////////////////////////////////////////////////////////////////////////
×
73
    future<hpx::id_type> resolve_name_async(std::string const& name)
74
    {
×
75
        return naming::get_agas_client().resolve_name_async(name);
76
    }
77

×
78
    hpx::id_type resolve_name(std::string const& name, error_code& ec)
79
    {
×
80
        return naming::get_agas_client().resolve_name(name, ec);
81
    }
82

83
    ///////////////////////////////////////////////////////////////////////////
×
84
    future<std::uint32_t> get_num_localities_async(components::component_type)
85
    {
×
86
        return naming::get_agas_client().get_num_localities_async();
87
    }
88

×
89
    std::uint32_t get_num_localities(
90
        components::component_type type, error_code& ec)
91
    {
×
92
        return naming::get_agas_client().get_num_localities(type, ec);
93
    }
94

×
95
    future<std::vector<std::uint32_t>> get_num_threads_async()
96
    {
×
97
        return naming::get_agas_client().get_num_threads_async();
98
    }
99

×
100
    std::vector<std::uint32_t> get_num_threads(error_code& ec)
101
    {
×
102
        return naming::get_agas_client().get_num_threads(ec);
103
    }
104

×
105
    future<std::uint32_t> get_num_overall_threads_async()
106
    {
×
107
        return naming::get_agas_client().get_num_overall_threads_async();
108
    }
109

×
110
    std::uint32_t get_num_overall_threads(error_code& ec)
111
    {
×
112
        return naming::get_agas_client().get_num_overall_threads(ec);
113
    }
114

×
115
    std::string get_component_type_name(
116
        components::component_type type, error_code& ec)
117
    {
×
118
        return naming::get_agas_client().get_component_type_name(type, ec);
119
    }
120

121
    ///////////////////////////////////////////////////////////////////////////
×
122
    bool is_local_address_cached(naming::gid_type const& gid, error_code& ec)
123
    {
×
124
        return naming::get_agas_client().is_local_address_cached(gid, ec);
125
    }
126

42,347✔
127
    bool is_local_address_cached_addr(
128
        naming::gid_type const& gid, naming::address& addr, error_code& ec)
129
    {
42,347✔
130
        return naming::get_agas_client().is_local_address_cached(gid, addr, ec);
131
    }
132

×
133
    bool is_local_address_cached_addr_pinned_ptr(naming::gid_type const& gid,
134
        naming::address& addr, std::pair<bool, components::pinned_ptr>& r,
135
        hpx::move_only_function<std::pair<bool, components::pinned_ptr>(
136
            naming::address const&)>&& f,
137
        error_code& ec)
138
    {
×
139
        return naming::get_agas_client().is_local_address_cached(
×
140
            gid, addr, r, HPX_MOVE(f), ec);
141
    }
142

×
143
    void update_cache_entry(naming::gid_type const& gid,
144
        naming::address const& addr, std::uint64_t count, std::uint64_t offset,
145
        error_code& ec)
146
    {
×
147
        return naming::get_agas_client().update_cache_entry(
×
148
            gid, addr, count, offset, ec);
149
    }
150

×
151
    bool is_local_lva_encoded_address(naming::gid_type const& gid)
152
    {
×
153
        return naming::get_agas_client().is_local_lva_encoded_address(
×
154
            gid.get_msb());
155
    }
156

157
    ///////////////////////////////////////////////////////////////////////////
×
158
    hpx::future_or_value<naming::address> resolve_async(hpx::id_type const& id)
159
    {
×
160
        return naming::get_agas_client().resolve_async(id);
161
    }
162

×
163
    naming::address resolve(hpx::id_type const& id, error_code& ec)
164
    {
×
165
        auto result = naming::get_agas_client().resolve_async(id);
×
166
        if (result.has_value())
167
        {
168
            return HPX_MOVE(result).get_value();
169
        }
×
170
        return result.get_future().get(ec);
171
    }
172

×
173
    bool resolve_local(
174
        naming::gid_type const& gid, naming::address& addr, error_code& ec)
175
    {
×
176
        agas::addressing_service* agas_ = naming::get_agas_client_ptr();
×
177
        return (agas_ != nullptr) ? agas_->resolve_local(gid, addr, ec) : false;
178
    }
179

×
180
    bool resolve_cached(naming::gid_type const& gid, naming::address& addr)
181
    {
×
182
        agas::addressing_service* agas_ = naming::get_agas_client_ptr();
×
183
        return (agas_ != nullptr) ? agas_->resolve_cached(gid, addr) : false;
184
    }
185

×
186
    hpx::future<bool> bind_async(naming::gid_type const& gid,
187
        naming::address const& addr, std::uint32_t locality_id)
188
    {
×
189
        return naming::get_agas_client().bind_async(gid, addr, locality_id);
190
    }
191

×
192
    bool bind(naming::gid_type const& gid, naming::address const& addr,
193
        std::uint32_t locality_id, error_code& ec)
194
    {
×
195
        return naming::get_agas_client()
×
196
            .bind_async(gid, addr, locality_id)
×
197
            .get(ec);
198
    }
199

×
200
    hpx::future<bool> bind_async_locality(naming::gid_type const& gid,
201
        naming::address const& addr, naming::gid_type const& locality_)
202
    {
×
203
        return naming::get_agas_client().bind_async(gid, addr, locality_);
204
    }
205

×
206
    bool bind_locality(naming::gid_type const& gid, naming::address const& addr,
207
        naming::gid_type const& locality_, error_code& ec)
208
    {
×
209
        return naming::get_agas_client()
×
210
            .bind_async(gid, addr, locality_)
×
211
            .get(ec);
212
    }
213

×
214
    hpx::future<naming::address> unbind_async(
215
        naming::gid_type const& id, std::uint64_t)
216
    {
×
217
        return naming::get_agas_client().unbind_range_async(id);
218
    }
219

1,055✔
220
    naming::address unbind(
221
        naming::gid_type const& id, std::uint64_t, error_code& ec)
222
    {
2,110✔
223
        return naming::get_agas_client().unbind_range_async(id).get(ec);
224
    }
225

226
    ///////////////////////////////////////////////////////////////////////////
227
    // helper functions allowing to bind and unbind a GID to a given address
228
    // without having to directly refer to the agas::addressing_service
122✔
229
    bool bind_gid_local(naming::gid_type const& gid_,
230
        naming::address const& addr, error_code& ec)
231
    {
122✔
232
        auto* client = naming::get_agas_client_ptr();
122✔
233
        if (nullptr == client)
234
        {
×
235
            HPX_THROWS_IF(ec, hpx::error::invalid_status,
236
                "agas::bind_gid_local", "addressing_service is not valid");
×
237
            return false;
238
        }
122✔
239
        return client->bind_local(gid_, addr, ec);
240
    }
241

61✔
242
    void unbind_gid_local(naming::gid_type const& gid, error_code& ec)
243
    {
244
        if (gid)
245
        {
61✔
246
            auto* client = naming::get_agas_client_ptr();
61✔
247
            if (nullptr == client)
248
            {
×
249
                HPX_THROWS_IF(ec, hpx::error::invalid_status,
250
                    "agas::unbind_gid_local",
251
                    "addressing_service is not valid");
252
            }
253
            else
254
            {
255
                client->unbind_local(gid, ec);
256
            }
257
        }
258
        else
259
        {
×
260
            HPX_THROWS_IF(ec, hpx::error::bad_parameter, "agas::unbind_gid",
261
                "cannot dereference invalid GID");
262
        }
61✔
263
    }
264

×
265
    bool bind_range_local(naming::gid_type const& gid, std::size_t count,
266
        naming::address const& addr, std::size_t offset, error_code& ec)
267
    {
×
268
        auto* client = naming::get_agas_client_ptr();
×
269
        if (nullptr == client)
270
        {
×
271
            HPX_THROWS_IF(ec, hpx::error::invalid_status,
272
                "agas::bind_range_local", "addressing_service is not valid");
×
273
            return false;
274
        }
×
275
        return client->bind_range_local(gid, count, addr, offset, ec);
276
    }
277

9✔
278
    void unbind_range_local(
279
        naming::gid_type const& gid, std::size_t count, error_code& ec)
280
    {
9✔
281
        auto* client = naming::get_agas_client_ptr();
9✔
282
        if (nullptr == client)
283
        {
×
284
            HPX_THROWS_IF(ec, hpx::error::invalid_status,
285
                "agas::unbind_range_local", "addressing_service is not valid");
286
        }
287
        else
288
        {
289
            client->unbind_range_local(gid, count, ec);
290
        }
9✔
291
    }
292

293
    ///////////////////////////////////////////////////////////////////////////
686,051✔
294
    void garbage_collect_non_blocking(error_code& ec)
295
    {
686,051✔
296
        naming::get_agas_client().garbage_collect_non_blocking(ec);
686,051✔
297
    }
298

32✔
299
    void garbage_collect(error_code& ec)
300
    {
32✔
301
        naming::get_agas_client().garbage_collect(ec);
32✔
302
    }
303

304
    /// \brief Return an id_type referring to the console locality.
×
305
    hpx::id_type get_console_locality(error_code& ec)
306
    {
×
307
        runtime const* rt = get_runtime_ptr();
×
308
        if (rt == nullptr || rt->get_state() == state::invalid)
309
        {
310
            return hpx::invalid_id;
311
        }
312

×
313
        naming::gid_type console;
×
314
        naming::get_agas_client().get_console_locality(console, ec);
×
315
        if (ec)
316
        {
317
            return hpx::invalid_id;
318
        }
319

×
320
        return hpx::id_type(console, hpx::id_type::management_type::unmanaged);
321
    }
322

129,193✔
323
    std::uint32_t get_locality_id(error_code& ec)
324
    {
129,193✔
325
        runtime const* rt = get_runtime_ptr();
129,193✔
326
        if (rt == nullptr || rt->get_state() == state::invalid)
327
        {
×
328
            return naming::invalid_locality_id;
329
        }
330

331
        naming::gid_type const l =
129,193✔
332
            naming::get_agas_client().get_local_locality(ec);
333
        return l ? naming::get_locality_id_from_gid(l) :
334
                   naming::invalid_locality_id;
335
    }
336

39✔
337
    std::vector<std::uint32_t> get_all_locality_ids(
338
        naming::component_type type, error_code& ec)
339
    {
39✔
340
        std::vector<std::uint32_t> result;
341

39✔
342
        std::vector<naming::gid_type> localities;
39✔
343
        if (!naming::get_agas_client().get_localities(localities, type, ec))
344
        {
345
            return result;
346
        }
347

39✔
348
        result.reserve(localities.size());
84✔
349
        for (auto const& gid : localities)
350
        {
45✔
351
            result.push_back(naming::get_locality_id_from_gid(gid));
352
        }
353
        return result;
354
    }
355

356
    ///////////////////////////////////////////////////////////////////////////
357
#if defined(HPX_HAVE_NETWORKING)
408✔
358
    parcelset::endpoints_type const& resolve_locality(
359
        naming::gid_type const& gid, error_code& ec)
360
    {
408✔
361
        return naming::get_agas_client().resolve_locality(gid, ec);
362
    }
363

×
364
    void remove_resolved_locality(naming::gid_type const& gid)
365
    {
×
366
        naming::get_agas_client().remove_resolved_locality(gid);
×
367
    }
368
#endif
369

370
    ///////////////////////////////////////////////////////////////////////////
×
371
    naming::gid_type get_next_id(std::size_t count, error_code& ec)
372
    {
×
373
        runtime const* rt = get_runtime_ptr();
×
374
        if (rt == nullptr)
375
        {
×
376
            HPX_THROWS_IF(ec, hpx::error::invalid_status, "get_next_id",
377
                "the runtime system has not been started yet.");
378
            return naming::invalid_gid;
379
        }
380

381
        // during bootstrap, we use the id pool
×
382
        if (rt->get_state() == state::invalid)
383
        {
×
384
            return hpx::detail::get_next_id(count);
385
        }
386

×
387
        naming::gid_type lower_bound, upper_bound;
×
388
        naming::get_agas_client().get_id_range(
389
            count, lower_bound, upper_bound, ec);
×
390
        if (ec)
391
        {
392
            return naming::invalid_gid;
393
        }
394
        return lower_bound;
395
    }
396

397
    ///////////////////////////////////////////////////////////////////////////
1,141✔
398
    void decref(
399
        naming::gid_type const& gid, std::int64_t credits, error_code& ec)
400
    {
1,141✔
401
        naming::get_agas_client().decref(gid, credits, ec);
1,141✔
402
    }
403

404
    ///////////////////////////////////////////////////////////////////////////
32✔
405
    hpx::future_or_value<std::int64_t> incref_async(naming::gid_type const& gid,
406
        std::int64_t credits, hpx::id_type const& keep_alive_)
407
    {
408
        HPX_ASSERT(!naming::detail::is_locked(gid));
409

32✔
410
        agas::addressing_service& resolver = naming::get_agas_client();
411
        if (keep_alive_)
×
412
            return resolver.incref_async(gid, credits, keep_alive_);
413

414
        hpx::id_type const keep_alive =
32✔
415
            hpx::id_type(gid, hpx::id_type::management_type::unmanaged);
32✔
416
        return resolver.incref_async(gid, credits, keep_alive);
417
    }
418

419
    ///////////////////////////////////////////////////////////////////////////
×
420
    hpx::future_or_value<id_type> get_colocation_id_async(
421
        hpx::id_type const& id)
422
    {
×
423
        return naming::get_agas_client().get_colocation_id_async(id);
424
    }
425

×
426
    hpx::id_type get_colocation_id(hpx::id_type const& id, error_code& ec)
427
    {
428
        auto result = get_colocation_id_async(id);
×
429
        if (result.has_value())
430
        {
431
            return HPX_MOVE(result).get_value();
432
        }
×
433
        return result.get_future().get(ec);
434
    }
435

436
    ///////////////////////////////////////////////////////////////////////////
8✔
437
    hpx::future<hpx::id_type> on_symbol_namespace_event(
438
        std::string const& name, bool call_for_past_events)
439
    {
8✔
440
        return naming::get_agas_client().on_symbol_namespace_event(
8✔
441
            name, call_for_past_events);
442
    }
443

444
    ///////////////////////////////////////////////////////////////////////////
×
445
    hpx::future<std::pair<hpx::id_type, naming::address>> begin_migration(
446
        hpx::id_type const& id)
447
    {
×
448
        return naming::get_agas_client().begin_migration(id);
449
    }
450

×
451
    bool end_migration(hpx::id_type const& id)
452
    {
×
453
        return naming::get_agas_client().end_migration(id);
454
    }
455

×
456
    hpx::future<void> mark_as_migrated(naming::gid_type const& gid,
457
        hpx::move_only_function<std::pair<bool, hpx::future<void>>()>&& f,
458
        bool expect_to_be_marked_as_migrating)
459
    {
×
460
        return naming::get_agas_client().mark_as_migrated(
×
461
            gid, HPX_MOVE(f), expect_to_be_marked_as_migrating);
462
    }
463

×
464
    std::pair<bool, components::pinned_ptr> was_object_migrated(
465
        naming::gid_type const& gid,
466
        hpx::move_only_function<components::pinned_ptr()>&& f)
467
    {
×
468
        return naming::get_agas_client().was_object_migrated(gid, HPX_MOVE(f));
469
    }
470

×
471
    void unmark_as_migrated(
472
        naming::gid_type const& gid, hpx::move_only_function<void()>&& f)
473
    {
×
474
        return naming::get_agas_client().unmark_as_migrated(gid, HPX_MOVE(f));
475
    }
476

×
477
    hpx::future<symbol_namespace::iterate_names_return_type> find_symbols_async(
478
        std::string const& pattern)
479
    {
×
480
        return naming::get_agas_client().iterate_ids(pattern);
481
    }
482

×
483
    symbol_namespace::iterate_names_return_type find_symbols(
484
        std::string const& pattern)
485
    {
×
486
        return find_symbols_async(pattern).get();
487
    }
488

489
    ///////////////////////////////////////////////////////////////////////////
859✔
490
    naming::component_type register_factory(
491
        std::uint32_t prefix, std::string const& name, error_code& ec)
492
    {
859✔
493
        return naming::get_agas_client().register_factory(prefix, name, ec);
494
    }
495

737✔
496
    naming::component_type get_component_id(
497
        std::string const& name, error_code& ec)
498
    {
737✔
499
        return naming::get_agas_client().get_component_id(name, ec);
500
    }
501

502
#if defined(HPX_HAVE_NETWORKING)
503
    ///////////////////////////////////////////////////////////////////////////
×
504
    void route(parcelset::parcel&& p,
505
        hpx::function<void(std::error_code const&, parcelset::parcel const&)>&&
506
            f,
507
        threads::thread_priority local_priority)
508
    {
×
509
        return naming::get_agas_client().route(
×
510
            HPX_MOVE(p), HPX_MOVE(f), local_priority);
511
    }
512
#endif
513

514
    ///////////////////////////////////////////////////////////////////////////
×
515
    naming::address_type get_primary_ns_lva()
516
    {
×
517
        return naming::get_agas_client().get_primary_ns_lva();
518
    }
519

15✔
520
    naming::address_type get_symbol_ns_lva()
521
    {
15✔
522
        return naming::get_agas_client().get_symbol_ns_lva();
523
    }
524

33✔
525
    naming::address_type get_runtime_support_lva()
526
    {
33✔
527
        return naming::get_agas_client().get_runtime_support_lva();
528
    }
529
}    // namespace hpx::agas::detail::impl
530

531
namespace hpx::agas {
532

533
    // initialize AGAS interface function pointers in components_base module
534
    struct HPX_EXPORT agas_interface_functions
535
    {
32✔
536
        agas_interface_functions()
537
        {
32✔
538
            detail::is_console = &detail::impl::is_console;
539

32✔
540
            detail::register_name = &detail::impl::register_name;
32✔
541
            detail::register_name_async = &detail::impl::register_name_async;
32✔
542
            detail::register_name_id = &detail::impl::register_name_id;
543

32✔
544
            detail::unregister_name_async =
545
                &detail::impl::unregister_name_async;
32✔
546
            detail::unregister_name = &detail::impl::unregister_name;
547

32✔
548
            detail::resolve_name_async = &detail::impl::resolve_name_async;
32✔
549
            detail::resolve_name = &detail::impl::resolve_name;
550

32✔
551
            detail::get_num_localities_async =
552
                &detail::impl::get_num_localities_async;
32✔
553
            detail::get_num_localities = &detail::impl::get_num_localities;
554

32✔
555
            detail::get_num_threads_async =
556
                &detail::impl::get_num_threads_async;
32✔
557
            detail::get_num_threads = &detail::impl::get_num_threads;
558

32✔
559
            detail::get_num_overall_threads_async =
560
                &detail::impl::get_num_overall_threads_async;
32✔
561
            detail::get_num_overall_threads =
562
                &detail::impl::get_num_overall_threads;
563

32✔
564
            detail::get_component_type_name =
565
                &detail::impl::get_component_type_name;
566

32✔
567
            detail::is_local_address_cached =
568
                &detail::impl::is_local_address_cached;
32✔
569
            detail::is_local_address_cached_addr =
570
                &detail::impl::is_local_address_cached_addr;
32✔
571
            detail::is_local_address_cached_addr_pinned_ptr =
572
                &detail::impl::is_local_address_cached_addr_pinned_ptr;
32✔
573
            detail::update_cache_entry = &detail::impl::update_cache_entry;
574

32✔
575
            detail::is_local_lva_encoded_address =
576
                &detail::impl::is_local_lva_encoded_address;
577

32✔
578
            detail::resolve_async = &detail::impl::resolve_async;
32✔
579
            detail::resolve = &detail::impl::resolve;
32✔
580
            detail::resolve_cached = &detail::impl::resolve_cached;
32✔
581
            detail::resolve_local = &detail::impl::resolve_local;
582

32✔
583
            detail::bind_async = &detail::impl::bind_async;
32✔
584
            detail::bind = &detail::impl::bind;
32✔
585
            detail::bind_async_locality = &detail::impl::bind_async_locality;
32✔
586
            detail::bind_locality = &detail::impl::bind_locality;
587

32✔
588
            detail::unbind_async = &detail::impl::unbind_async;
32✔
589
            detail::unbind = &detail::impl::unbind;
590

32✔
591
            detail::bind_gid_local = &detail::impl::bind_gid_local;
32✔
592
            detail::unbind_gid_local = &detail::impl::unbind_gid_local;
32✔
593
            detail::bind_range_local = &detail::impl::bind_range_local;
32✔
594
            detail::unbind_range_local = &detail::impl::unbind_range_local;
595

32✔
596
            detail::garbage_collect_non_blocking =
597
                &detail::impl::garbage_collect_non_blocking;
32✔
598
            detail::garbage_collect = &detail::impl::garbage_collect;
599

32✔
600
            detail::get_console_locality = &detail::impl::get_console_locality;
32✔
601
            detail::get_locality_id = &detail::impl::get_locality_id;
32✔
602
            detail::get_all_locality_ids = &detail::impl::get_all_locality_ids;
603

604
#if defined(HPX_HAVE_NETWORKING)
32✔
605
            detail::resolve_locality = &detail::impl::resolve_locality;
32✔
606
            detail::remove_resolved_locality =
607
                &detail::impl::remove_resolved_locality;
608
#endif
609

32✔
610
            detail::get_next_id = &detail::impl::get_next_id;
611

32✔
612
            detail::decref = &detail::impl::decref;
32✔
613
            detail::incref_async = &detail::impl::incref_async;
614

32✔
615
            detail::get_colocation_id_async =
616
                &detail::impl::get_colocation_id_async;
32✔
617
            detail::get_colocation_id = &detail::impl::get_colocation_id;
618

32✔
619
            detail::on_symbol_namespace_event =
620
                &detail::impl::on_symbol_namespace_event;
621

32✔
622
            detail::begin_migration = &detail::impl::begin_migration;
32✔
623
            detail::end_migration = &detail::impl::end_migration;
32✔
624
            detail::mark_as_migrated = &detail::impl::mark_as_migrated;
32✔
625
            detail::was_object_migrated = &detail::impl::was_object_migrated;
32✔
626
            detail::unmark_as_migrated = &detail::impl::unmark_as_migrated;
627

32✔
628
            detail::find_symbols_async = &detail::impl::find_symbols_async;
32✔
629
            detail::find_symbols = &detail::impl::find_symbols;
630

32✔
631
            detail::register_factory = &detail::impl::register_factory;
32✔
632
            detail::get_component_id = &detail::impl::get_component_id;
633

634
#if defined(HPX_HAVE_NETWORKING)
32✔
635
            detail::route = &detail::impl::route;
636
#endif
637

32✔
638
            detail::get_primary_ns_lva = &detail::impl::get_primary_ns_lva;
32✔
639
            detail::get_symbol_ns_lva = &detail::impl::get_symbol_ns_lva;
32✔
640
            detail::get_runtime_support_lva =
641
                &detail::impl::get_runtime_support_lva;
32✔
642
        }
643
    };
644

32✔
645
    agas_interface_functions& agas_init()
646
    {
32✔
647
        static agas_interface_functions agas_init_;
32✔
648
        return agas_init_;
649
    }
650
}    // namespace hpx::agas
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc