Full Code of JetBrains/UnrealLink for AI

main b562e254780f cached
490 files
2.2 MB
607.1k tokens
1872 symbols
1 requests
Download .txt
Showing preview only (2,428K chars total). Download the full file or copy to clipboard to get everything.
Repository: JetBrains/UnrealLink
Branch: main
Commit: b562e254780f
Files: 490
Total size: 2.2 MB

Directory structure:
gitextract_ql_wvwqe/

├── .editorconfig
├── .gitattributes
├── .github/
│   └── workflows/
│       └── build.yml
├── .gitignore
├── .run/
│   ├── Debug backend.run.xml
│   └── UnrealLink [runIde].run.xml
├── CHANGELOG.md
├── CODE_OF_CONDUCT.md
├── License.txt
├── README.md
├── SETUP.md
├── SdkBasedPluginEmbedding.Root
├── SubplatformsCollection.Root
├── UnrealLink.sln
├── build.gradle.kts
├── gradle/
│   └── wrapper/
│       ├── gradle-wrapper.jar
│       └── gradle-wrapper.properties
├── gradle.properties
├── gradlew
├── gradlew.bat
├── protocol/
│   ├── build.gradle.kts
│   └── src/
│       └── main/
│           └── kotlin/
│               └── model/
│                   ├── editorPlugin/
│                   │   ├── LiveCodingModel.kt
│                   │   └── RdEditorModel.kt
│                   ├── lib/
│                   │   └── ue4/
│                   │       └── UE4Library.kt
│                   └── rider/
│                       └── RdRiderModel.kt
├── settings.gradle.kts
├── setup_unreal_plugin.cmd
├── src/
│   ├── SubplatformsCollection.Root
│   ├── cpp/
│   │   ├── BuildScript/
│   │   │   └── GenerateRiderLinkZip.cs
│   │   ├── RiderLink/
│   │   │   ├── RiderLink.uplugin.template
│   │   │   └── Source/
│   │   │       ├── RD/
│   │   │       │   ├── RD.Build.cs
│   │   │       │   ├── RD.cpp
│   │   │       │   ├── RD.h
│   │   │       │   ├── src/
│   │   │       │   │   ├── rd_core_cpp/
│   │   │       │   │   │   ├── rd_core_export.h
│   │   │       │   │   │   └── src/
│   │   │       │   │   │       └── main/
│   │   │       │   │   │           ├── lifetime/
│   │   │       │   │   │           │   ├── Lifetime.cpp
│   │   │       │   │   │           │   ├── Lifetime.h
│   │   │       │   │   │           │   ├── LifetimeDefinition.cpp
│   │   │       │   │   │           │   ├── LifetimeDefinition.h
│   │   │       │   │   │           │   ├── LifetimeImpl.cpp
│   │   │       │   │   │           │   ├── LifetimeImpl.h
│   │   │       │   │   │           │   ├── SequentialLifetimes.cpp
│   │   │       │   │   │           │   └── SequentialLifetimes.h
│   │   │       │   │   │           ├── reactive/
│   │   │       │   │   │           │   ├── Property.h
│   │   │       │   │   │           │   ├── ViewableList.h
│   │   │       │   │   │           │   ├── ViewableMap.h
│   │   │       │   │   │           │   ├── ViewableSet.h
│   │   │       │   │   │           │   └── base/
│   │   │       │   │   │           │       ├── IProperty.h
│   │   │       │   │   │           │       ├── IPropertyBase.h
│   │   │       │   │   │           │       ├── IViewableList.h
│   │   │       │   │   │           │       ├── IViewableMap.h
│   │   │       │   │   │           │       ├── IViewableSet.h
│   │   │       │   │   │           │       ├── SignalCookie.cpp
│   │   │       │   │   │           │       ├── SignalCookie.h
│   │   │       │   │   │           │       ├── SignalX.h
│   │   │       │   │   │           │       ├── interfaces.h
│   │   │       │   │   │           │       └── viewable_collections.h
│   │   │       │   │   │           ├── std/
│   │   │       │   │   │           │   ├── allocator.h
│   │   │       │   │   │           │   ├── hash.h
│   │   │       │   │   │           │   ├── list.h
│   │   │       │   │   │           │   ├── to_string.h
│   │   │       │   │   │           │   ├── unordered_map.h
│   │   │       │   │   │           │   └── unordered_set.h
│   │   │       │   │   │           ├── types/
│   │   │       │   │   │           │   ├── DateTime.cpp
│   │   │       │   │   │           │   ├── DateTime.h
│   │   │       │   │   │           │   ├── Void.h
│   │   │       │   │   │           │   └── wrapper.h
│   │   │       │   │   │           └── util/
│   │   │       │   │   │               ├── core_traits.h
│   │   │       │   │   │               ├── core_util.h
│   │   │       │   │   │               ├── enum.h
│   │   │       │   │   │               ├── erase_if.h
│   │   │       │   │   │               ├── gen_util.h
│   │   │       │   │   │               ├── overloaded.h
│   │   │       │   │   │               └── shared_function.h
│   │   │       │   │   ├── rd_framework_cpp/
│   │   │       │   │   │   ├── rd_framework_export.h
│   │   │       │   │   │   └── src/
│   │   │       │   │   │       └── main/
│   │   │       │   │   │           ├── base/
│   │   │       │   │   │           │   ├── IProtocol.cpp
│   │   │       │   │   │           │   ├── IProtocol.h
│   │   │       │   │   │           │   ├── IRdBindable.h
│   │   │       │   │   │           │   ├── IRdDynamic.h
│   │   │       │   │   │           │   ├── IRdReactive.h
│   │   │       │   │   │           │   ├── IRdWireable.cpp
│   │   │       │   │   │           │   ├── IRdWireable.h
│   │   │       │   │   │           │   ├── ISerializersOwner.cpp
│   │   │       │   │   │           │   ├── ISerializersOwner.h
│   │   │       │   │   │           │   ├── IUnknownInstance.cpp
│   │   │       │   │   │           │   ├── IUnknownInstance.h
│   │   │       │   │   │           │   ├── IWire.h
│   │   │       │   │   │           │   ├── RdBindableBase.cpp
│   │   │       │   │   │           │   ├── RdBindableBase.h
│   │   │       │   │   │           │   ├── RdPropertyBase.h
│   │   │       │   │   │           │   ├── RdReactiveBase.cpp
│   │   │       │   │   │           │   ├── RdReactiveBase.h
│   │   │       │   │   │           │   ├── WireBase.cpp
│   │   │       │   │   │           │   └── WireBase.h
│   │   │       │   │   │           ├── ext/
│   │   │       │   │   │           │   ├── ExtWire.cpp
│   │   │       │   │   │           │   ├── ExtWire.h
│   │   │       │   │   │           │   ├── RdExtBase.cpp
│   │   │       │   │   │           │   └── RdExtBase.h
│   │   │       │   │   │           ├── impl/
│   │   │       │   │   │           │   ├── RName.cpp
│   │   │       │   │   │           │   ├── RName.h
│   │   │       │   │   │           │   ├── RdList.h
│   │   │       │   │   │           │   ├── RdMap.h
│   │   │       │   │   │           │   ├── RdProperty.h
│   │   │       │   │   │           │   ├── RdSet.h
│   │   │       │   │   │           │   └── RdSignal.h
│   │   │       │   │   │           ├── intern/
│   │   │       │   │   │           │   ├── InternRoot.cpp
│   │   │       │   │   │           │   ├── InternRoot.h
│   │   │       │   │   │           │   ├── InternScheduler.cpp
│   │   │       │   │   │           │   └── InternScheduler.h
│   │   │       │   │   │           ├── protocol/
│   │   │       │   │   │           │   ├── Buffer.cpp
│   │   │       │   │   │           │   ├── Buffer.h
│   │   │       │   │   │           │   ├── Identities.cpp
│   │   │       │   │   │           │   ├── Identities.h
│   │   │       │   │   │           │   ├── MessageBroker.cpp
│   │   │       │   │   │           │   ├── MessageBroker.h
│   │   │       │   │   │           │   ├── Protocol.cpp
│   │   │       │   │   │           │   ├── Protocol.h
│   │   │       │   │   │           │   ├── RdId.cpp
│   │   │       │   │   │           │   └── RdId.h
│   │   │       │   │   │           ├── scheduler/
│   │   │       │   │   │           │   ├── SimpleScheduler.cpp
│   │   │       │   │   │           │   ├── SimpleScheduler.h
│   │   │       │   │   │           │   ├── SingleThreadScheduler.cpp
│   │   │       │   │   │           │   ├── SingleThreadScheduler.h
│   │   │       │   │   │           │   ├── SynchronousScheduler.cpp
│   │   │       │   │   │           │   ├── SynchronousScheduler.h
│   │   │       │   │   │           │   └── base/
│   │   │       │   │   │           │       ├── IScheduler.cpp
│   │   │       │   │   │           │       ├── IScheduler.h
│   │   │       │   │   │           │       ├── SingleThreadSchedulerBase.cpp
│   │   │       │   │   │           │       └── SingleThreadSchedulerBase.h
│   │   │       │   │   │           ├── serialization/
│   │   │       │   │   │           │   ├── AbstractPolymorphic.h
│   │   │       │   │   │           │   ├── ArraySerializer.h
│   │   │       │   │   │           │   ├── DefaultAbstractDeclaration.cpp
│   │   │       │   │   │           │   ├── DefaultAbstractDeclaration.h
│   │   │       │   │   │           │   ├── ISerializable.cpp
│   │   │       │   │   │           │   ├── ISerializable.h
│   │   │       │   │   │           │   ├── InternedAnySerializer.h
│   │   │       │   │   │           │   ├── InternedSerializer.h
│   │   │       │   │   │           │   ├── NullableSerializer.h
│   │   │       │   │   │           │   ├── Polymorphic.cpp
│   │   │       │   │   │           │   ├── Polymorphic.h
│   │   │       │   │   │           │   ├── RdAny.cpp
│   │   │       │   │   │           │   ├── RdAny.h
│   │   │       │   │   │           │   ├── SerializationCtx.cpp
│   │   │       │   │   │           │   ├── SerializationCtx.h
│   │   │       │   │   │           │   ├── Serializers.cpp
│   │   │       │   │   │           │   └── Serializers.h
│   │   │       │   │   │           ├── task/
│   │   │       │   │   │           │   ├── RdCall.h
│   │   │       │   │   │           │   ├── RdEndpoint.h
│   │   │       │   │   │           │   ├── RdSymmetricCall.h
│   │   │       │   │   │           │   ├── RdTask.h
│   │   │       │   │   │           │   ├── RdTaskImpl.h
│   │   │       │   │   │           │   ├── RdTaskResult.h
│   │   │       │   │   │           │   ├── WiredRdTask.h
│   │   │       │   │   │           │   └── WiredRdTaskImpl.h
│   │   │       │   │   │           ├── util/
│   │   │       │   │   │           │   ├── framework_traits.h
│   │   │       │   │   │           │   ├── guards.h
│   │   │       │   │   │           │   ├── hashing.cpp
│   │   │       │   │   │           │   ├── hashing.h
│   │   │       │   │   │           │   ├── thread_util.cpp
│   │   │       │   │   │           │   └── thread_util.h
│   │   │       │   │   │           └── wire/
│   │   │       │   │   │               ├── ByteBufferAsyncProcessor.cpp
│   │   │       │   │   │               ├── ByteBufferAsyncProcessor.h
│   │   │       │   │   │               ├── PkgInputStream.cpp
│   │   │       │   │   │               ├── PkgInputStream.h
│   │   │       │   │   │               ├── PumpScheduler.cpp
│   │   │       │   │   │               ├── PumpScheduler.h
│   │   │       │   │   │               ├── SocketWire.cpp
│   │   │       │   │   │               ├── SocketWire.h
│   │   │       │   │   │               ├── WireUtil.cpp
│   │   │       │   │   │               └── WireUtil.h
│   │   │       │   │   └── rd_gen_cpp/
│   │   │       │   │       └── src/
│   │   │       │   │           ├── RdTextBuffer.cpp
│   │   │       │   │           └── RdTextBuffer.h
│   │   │       │   └── thirdparty/
│   │   │       │       ├── CTPL/
│   │   │       │       │   ├── LICENSE
│   │   │       │       │   ├── README.md
│   │   │       │       │   └── include/
│   │   │       │       │       └── ctpl_stl.h
│   │   │       │       ├── clsocket/
│   │   │       │       │   ├── README
│   │   │       │       │   └── src/
│   │   │       │       │       ├── ActiveSocket.cpp
│   │   │       │       │       ├── ActiveSocket.h
│   │   │       │       │       ├── Host.h
│   │   │       │       │       ├── PassiveSocket.cpp
│   │   │       │       │       ├── PassiveSocket.h
│   │   │       │       │       ├── SimpleSocket.cpp
│   │   │       │       │       ├── SimpleSocket.h
│   │   │       │       │       └── StatTimer.h
│   │   │       │       ├── countdownlatch/
│   │   │       │       │   ├── LICENSE
│   │   │       │       │   ├── README.md
│   │   │       │       │   ├── countdownlatch.cpp
│   │   │       │       │   └── countdownlatch.hpp
│   │   │       │       ├── optional/
│   │   │       │       │   ├── COPYING
│   │   │       │       │   ├── README.md
│   │   │       │       │   └── tl/
│   │   │       │       │       └── optional.hpp
│   │   │       │       ├── ordered-map/
│   │   │       │       │   ├── LICENSE
│   │   │       │       │   ├── README.md
│   │   │       │       │   └── include/
│   │   │       │       │       └── tsl/
│   │   │       │       │           ├── ordered_hash.h
│   │   │       │       │           ├── ordered_map.h
│   │   │       │       │           └── ordered_set.h
│   │   │       │       ├── spdlog/
│   │   │       │       │   ├── LICENSE
│   │   │       │       │   ├── README.md
│   │   │       │       │   ├── cmake/
│   │   │       │       │   │   ├── ide.cmake
│   │   │       │       │   │   ├── spdlog.pc.in
│   │   │       │       │   │   ├── spdlogCPack.cmake
│   │   │       │       │   │   ├── spdlogConfig.cmake.in
│   │   │       │       │   │   ├── utils.cmake
│   │   │       │       │   │   └── version.rc.in
│   │   │       │       │   ├── include/
│   │   │       │       │   │   └── spdlog/
│   │   │       │       │   │       ├── async.h
│   │   │       │       │   │       ├── async_logger-inl.h
│   │   │       │       │   │       ├── async_logger.h
│   │   │       │       │   │       ├── cfg/
│   │   │       │       │   │       │   ├── argv.h
│   │   │       │       │   │       │   ├── env.h
│   │   │       │       │   │       │   ├── helpers-inl.h
│   │   │       │       │   │       │   ├── helpers.h
│   │   │       │       │   │       │   └── log_levels.h
│   │   │       │       │   │       ├── common-inl.h
│   │   │       │       │   │       ├── common.h
│   │   │       │       │   │       ├── details/
│   │   │       │       │   │       │   ├── backtracer-inl.h
│   │   │       │       │   │       │   ├── backtracer.h
│   │   │       │       │   │       │   ├── circular_q.h
│   │   │       │       │   │       │   ├── console_globals.h
│   │   │       │       │   │       │   ├── file_helper-inl.h
│   │   │       │       │   │       │   ├── file_helper.h
│   │   │       │       │   │       │   ├── fmt_helper.h
│   │   │       │       │   │       │   ├── log_msg-inl.h
│   │   │       │       │   │       │   ├── log_msg.h
│   │   │       │       │   │       │   ├── log_msg_buffer-inl.h
│   │   │       │       │   │       │   ├── log_msg_buffer.h
│   │   │       │       │   │       │   ├── mpmc_blocking_q.h
│   │   │       │       │   │       │   ├── null_mutex.h
│   │   │       │       │   │       │   ├── os-inl.h
│   │   │       │       │   │       │   ├── os.h
│   │   │       │       │   │       │   ├── periodic_worker-inl.h
│   │   │       │       │   │       │   ├── periodic_worker.h
│   │   │       │       │   │       │   ├── registry-inl.h
│   │   │       │       │   │       │   ├── registry.h
│   │   │       │       │   │       │   ├── synchronous_factory.h
│   │   │       │       │   │       │   ├── tcp_client-windows.h
│   │   │       │       │   │       │   ├── tcp_client.h
│   │   │       │       │   │       │   ├── thread_pool-inl.h
│   │   │       │       │   │       │   ├── thread_pool.h
│   │   │       │       │   │       │   ├── udp_client-windows.h
│   │   │       │       │   │       │   ├── udp_client.h
│   │   │       │       │   │       │   └── windows_include.h
│   │   │       │       │   │       ├── fmt/
│   │   │       │       │   │       │   ├── bin_to_hex.h
│   │   │       │       │   │       │   ├── bundled/
│   │   │       │       │   │       │   │   ├── LICENSE.rst
│   │   │       │       │   │       │   │   ├── args.h
│   │   │       │       │   │       │   │   ├── chrono.h
│   │   │       │       │   │       │   │   ├── color.h
│   │   │       │       │   │       │   │   ├── compile.h
│   │   │       │       │   │       │   │   ├── core.h
│   │   │       │       │   │       │   │   ├── fmt.license.rst
│   │   │       │       │   │       │   │   ├── format-inl.h
│   │   │       │       │   │       │   │   ├── format.h
│   │   │       │       │   │       │   │   ├── locale.h
│   │   │       │       │   │       │   │   ├── os.h
│   │   │       │       │   │       │   │   ├── ostream.h
│   │   │       │       │   │       │   │   ├── posix.h
│   │   │       │       │   │       │   │   ├── printf.h
│   │   │       │       │   │       │   │   ├── ranges.h
│   │   │       │       │   │       │   │   └── xchar.h
│   │   │       │       │   │       │   ├── chrono.h
│   │   │       │       │   │       │   ├── compile.h
│   │   │       │       │   │       │   ├── fmt.h
│   │   │       │       │   │       │   ├── ostr.h
│   │   │       │       │   │       │   ├── ranges.h
│   │   │       │       │   │       │   └── xchar.h
│   │   │       │       │   │       ├── formatter.h
│   │   │       │       │   │       ├── fwd.h
│   │   │       │       │   │       ├── logger-inl.h
│   │   │       │       │   │       ├── logger.h
│   │   │       │       │   │       ├── pattern_formatter-inl.h
│   │   │       │       │   │       ├── pattern_formatter.h
│   │   │       │       │   │       ├── sinks/
│   │   │       │       │   │       │   ├── android_sink.h
│   │   │       │       │   │       │   ├── ansicolor_sink-inl.h
│   │   │       │       │   │       │   ├── ansicolor_sink.h
│   │   │       │       │   │       │   ├── base_sink-inl.h
│   │   │       │       │   │       │   ├── base_sink.h
│   │   │       │       │   │       │   ├── basic_file_sink-inl.h
│   │   │       │       │   │       │   ├── basic_file_sink.h
│   │   │       │       │   │       │   ├── daily_file_sink.h
│   │   │       │       │   │       │   ├── dist_sink.h
│   │   │       │       │   │       │   ├── dup_filter_sink.h
│   │   │       │       │   │       │   ├── hourly_file_sink.h
│   │   │       │       │   │       │   ├── mongo_sink.h
│   │   │       │       │   │       │   ├── msvc_sink.h
│   │   │       │       │   │       │   ├── null_sink.h
│   │   │       │       │   │       │   ├── ostream_sink.h
│   │   │       │       │   │       │   ├── qt_sinks.h
│   │   │       │       │   │       │   ├── ringbuffer_sink.h
│   │   │       │       │   │       │   ├── rotating_file_sink-inl.h
│   │   │       │       │   │       │   ├── rotating_file_sink.h
│   │   │       │       │   │       │   ├── sink-inl.h
│   │   │       │       │   │       │   ├── sink.h
│   │   │       │       │   │       │   ├── stdout_color_sinks-inl.h
│   │   │       │       │   │       │   ├── stdout_color_sinks.h
│   │   │       │       │   │       │   ├── stdout_sinks-inl.h
│   │   │       │       │   │       │   ├── stdout_sinks.h
│   │   │       │       │   │       │   ├── syslog_sink.h
│   │   │       │       │   │       │   ├── systemd_sink.h
│   │   │       │       │   │       │   ├── tcp_sink.h
│   │   │       │       │   │       │   ├── udp_sink.h
│   │   │       │       │   │       │   ├── win_eventlog_sink.h
│   │   │       │       │   │       │   ├── wincolor_sink-inl.h
│   │   │       │       │   │       │   └── wincolor_sink.h
│   │   │       │       │   │       ├── spdlog-inl.h
│   │   │       │       │   │       ├── spdlog.h
│   │   │       │       │   │       ├── stopwatch.h
│   │   │       │       │   │       ├── tweakme.h
│   │   │       │       │   │       └── version.h
│   │   │       │       │   ├── scripts/
│   │   │       │       │   │   ├── extract_version.py
│   │   │       │       │   │   └── format.sh
│   │   │       │       │   └── src/
│   │   │       │       │       ├── async.cpp
│   │   │       │       │       ├── cfg.cpp
│   │   │       │       │       ├── color_sinks.cpp
│   │   │       │       │       ├── file_sinks.cpp
│   │   │       │       │       ├── fmt.cpp
│   │   │       │       │       ├── spdlog.cpp
│   │   │       │       │       └── stdout_sinks.cpp
│   │   │       │       ├── string-view-lite/
│   │   │       │       │   ├── LICENSE.txt
│   │   │       │       │   ├── README.md
│   │   │       │       │   ├── cmake/
│   │   │       │       │   │   └── string_view-lite-config.cmake.in
│   │   │       │       │   └── include/
│   │   │       │       │       └── nonstd/
│   │   │       │       │           └── string_view.hpp
│   │   │       │       ├── thirdparty.cpp
│   │   │       │       ├── thirdparty.hpp
│   │   │       │       ├── utf-cpp/
│   │   │       │       │   ├── LICENSE.md
│   │   │       │       │   ├── README.md
│   │   │       │       │   └── include/
│   │   │       │       │       └── ww898/
│   │   │       │       │           ├── cp_utf16.hpp
│   │   │       │       │           ├── cp_utf32.hpp
│   │   │       │       │           ├── cp_utf8.hpp
│   │   │       │       │           ├── cp_utfw.hpp
│   │   │       │       │           ├── utf_config.hpp
│   │   │       │       │           ├── utf_converters.hpp
│   │   │       │       │           ├── utf_selector.hpp
│   │   │       │       │           └── utf_sizes.hpp
│   │   │       │       └── variant/
│   │   │       │           ├── LICENSE.md
│   │   │       │           ├── README.md
│   │   │       │           ├── cmake/
│   │   │       │           │   └── mpark_variant-config.cmake.in
│   │   │       │           └── include/
│   │   │       │               └── mpark/
│   │   │       │                   ├── config.hpp
│   │   │       │                   ├── in_place.hpp
│   │   │       │                   ├── lib.hpp
│   │   │       │                   └── variant.hpp
│   │   │       ├── RiderBlueprint/
│   │   │       │   ├── Private/
│   │   │       │   │   ├── BlueprintProvider.cpp
│   │   │       │   │   └── RiderBlueprint.cpp
│   │   │       │   ├── Public/
│   │   │       │   │   ├── BlueprintProvider.hpp
│   │   │       │   │   └── RiderBlueprint.hpp
│   │   │       │   └── RiderBlueprint.Build.cs
│   │   │       ├── RiderDebuggerSupport/
│   │   │       │   ├── Private/
│   │   │       │   │   ├── BlueprintStackGetter.cpp
│   │   │       │   │   ├── DebugLogger.cpp
│   │   │       │   │   ├── DebugLogger.h
│   │   │       │   │   ├── RiderDebuggerSupport.cpp
│   │   │       │   │   ├── RiderDebuggerSupport.h
│   │   │       │   │   ├── UnrealFunctions.cpp
│   │   │       │   │   ├── UnrealFunctions.h
│   │   │       │   │   ├── WideStringWrapper.cpp
│   │   │       │   │   └── WideStringWrapper.h
│   │   │       │   └── RiderDebuggerSupport.Build.cs
│   │   │       ├── RiderGameControl/
│   │   │       │   ├── Private/
│   │   │       │   │   └── RiderGameControl.cpp
│   │   │       │   ├── Public/
│   │   │       │   │   └── RiderGameControl.hpp
│   │   │       │   └── RiderGameControl.Build.cs
│   │   │       ├── RiderLC/
│   │   │       │   ├── Private/
│   │   │       │   │   ├── RiderLC.cpp
│   │   │       │   │   └── RiderLC.hpp
│   │   │       │   └── RiderLC.Build.cs
│   │   │       ├── RiderLink/
│   │   │       │   ├── Private/
│   │   │       │   │   ├── ProtocolFactory.cpp
│   │   │       │   │   ├── ProtocolFactory.h
│   │   │       │   │   ├── RiderLink.cpp
│   │   │       │   │   ├── RiderLink.hpp
│   │   │       │   │   └── UE4TypesMarshallers.cpp
│   │   │       │   ├── Public/
│   │   │       │   │   ├── IRiderLink.hpp
│   │   │       │   │   └── UE4TypesMarshallers.h
│   │   │       │   └── RiderLink.Build.cs
│   │   │       ├── RiderLogging/
│   │   │       │   ├── Private/
│   │   │       │   │   ├── RiderLogging.cpp
│   │   │       │   │   ├── RiderLogging.hpp
│   │   │       │   │   ├── RiderOutputDevice.cpp
│   │   │       │   │   └── RiderOutputDevice.hpp
│   │   │       │   └── RiderLogging.Build.cs
│   │   │       └── RiderShaderInfo/
│   │   │           ├── RiderShaderInfo.Build.cs
│   │   │           ├── RiderShaderInfo.cpp
│   │   │           └── RiderShaderInfo.h
│   │   ├── Subplatform.Root
│   │   └── Subplatform.Snk
│   ├── dotnet/
│   │   ├── BuildScript/
│   │   │   └── DefineUnrealLinkConstants.cs
│   │   ├── Directory.Build.props
│   │   ├── PackagesLock.targets
│   │   ├── Plugin.props
│   │   ├── RiderPlugin.UnrealLink/
│   │   │   ├── BuildScript/
│   │   │   │   └── UnrealLinkInRiderProduct.cs
│   │   │   ├── EditorNavigator.cs
│   │   │   ├── Install/
│   │   │   │   └── AdvertiseRiderBundledPlugin.cs
│   │   │   ├── LinkResolver.cs
│   │   │   ├── PluginInstaller/
│   │   │   │   ├── PluginPathsProvider.cs
│   │   │   │   ├── UnrealPluginDetector.cs
│   │   │   │   ├── UnrealPluginInstallInfo.cs
│   │   │   │   ├── UnrealPluginInstaller.cs
│   │   │   │   └── UnrealProjectsRefresher.cs
│   │   │   ├── Resources/
│   │   │   │   ├── Strings.Designer.cs
│   │   │   │   └── Strings.resx
│   │   │   ├── RiderBackendToUnrealEditor.cs
│   │   │   ├── RiderPlugin.UnrealLink.csproj
│   │   │   ├── Settings/
│   │   │   │   └── UnrealLinkOptionsPage.cs
│   │   │   ├── UnrealEngineAssetsNavigationProvider.cs
│   │   │   ├── UnrealHost.cs
│   │   │   ├── UnrealLiveCodingBuildRunner.cs
│   │   │   ├── Utils/
│   │   │   │   ├── CmdUtils.cs
│   │   │   │   ├── FsUtils.cs
│   │   │   │   └── ModelUtils.cs
│   │   │   └── ZoneMarker.cs
│   │   ├── Subplatform.Root
│   │   ├── Subplatform.Snk
│   │   └── Versions.props
│   └── rider/
│       ├── main/
│       │   ├── kotlin/
│       │   │   ├── com/
│       │   │   │   └── jetbrains/
│       │   │   │       └── rider/
│       │   │   │           ├── UnrealLinkBundle.kt
│       │   │   │           ├── plugins/
│       │   │   │           │   └── unreal/
│       │   │   │           │       ├── RiderLinkInstallService.kt
│       │   │   │           │       ├── UE4LibraryStartUpSerializerRegistrar.kt
│       │   │   │           │       ├── UnrealHost.kt
│       │   │   │           │       ├── UnrealLinkSettings.kt
│       │   │   │           │       ├── UnrealPluginUsagesCollector.kt
│       │   │   │           │       ├── actions/
│       │   │   │           │       │   ├── ActionsUtils.kt
│       │   │   │           │       │   ├── CancelRiderLinkInstallAction.kt
│       │   │   │           │       │   ├── EnableAutoUpdatePlugin.kt
│       │   │   │           │       │   ├── FilterCheckboxAction.kt
│       │   │   │           │       │   ├── HotReloadBuildAction.kt
│       │   │   │           │       │   ├── HotReloadBuildModeProvider.kt
│       │   │   │           │       │   ├── InstallActions.kt
│       │   │   │           │       │   ├── PlayActions.kt
│       │   │   │           │       │   ├── PlaySettingsActions.kt
│       │   │   │           │       │   └── UnrealHostOperations.kt
│       │   │   │           │       ├── debugger/
│       │   │   │           │       │   ├── BlueprintCallstackFrameCompatibilityMatcher.kt
│       │   │   │           │       │   ├── BlueprintCallstackFrameMatchResult.kt
│       │   │   │           │       │   ├── BlueprintExecutionStack.kt
│       │   │   │           │       │   ├── BlueprintStackFrameContainer.kt
│       │   │   │           │       │   ├── BlueprintStackTransformer.kt
│       │   │   │           │       │   ├── UnrealDebugProcessExtension.kt
│       │   │   │           │       │   ├── UnrealDebuggerLogger.kt
│       │   │   │           │       │   ├── actions/
│       │   │   │           │       │   │   ├── FramesPopupGroup.kt
│       │   │   │           │       │   │   ├── ShowBlueprintFunctionsAction.kt
│       │   │   │           │       │   │   ├── ShowLibraryFramesAction.kt
│       │   │   │           │       │   │   ├── ShowUnrealFramesAction.kt
│       │   │   │           │       │   │   └── UnrealToggleBaseAction.kt
│       │   │   │           │       │   └── frames/
│       │   │   │           │       │       ├── BlueprintFrame.kt
│       │   │   │           │       │       ├── BlueprintFrameMessages.kt
│       │   │   │           │       │       ├── StubBlueprintFrame.kt
│       │   │   │           │       │       ├── UnrealExternalCodeFrame.kt
│       │   │   │           │       │       └── UnrealFrameBase.kt
│       │   │   │           │       ├── filters/
│       │   │   │           │       │   └── linkInfo/
│       │   │   │           │       │       ├── BlueprintClassHyperLinkInfo.kt
│       │   │   │           │       │       ├── BlueprintFunctionHyperLinkInfo.kt
│       │   │   │           │       │       ├── MethodReferenceHyperLinkInfo.kt
│       │   │   │           │       │       └── UnrealClassHyperLinkInfo.kt
│       │   │   │           │       ├── notifications/
│       │   │   │           │       │   └── OutOfSyncPluginProtocolListener.kt
│       │   │   │           │       ├── spellchecker/
│       │   │   │           │       │   └── UnrealBundledDictionaryProvider.kt
│       │   │   │           │       └── toolWindow/
│       │   │   │           │           ├── UnrealToolWindowFactory.kt
│       │   │   │           │           └── log/
│       │   │   │           │               ├── UnrealLogCategoryFilterComboBox.kt
│       │   │   │           │               ├── UnrealLogConsoleActionsPostProcessor.kt
│       │   │   │           │               ├── UnrealLogConsoleViewContentType.kt
│       │   │   │           │               ├── UnrealLogFilter.kt
│       │   │   │           │               ├── UnrealLogPanel.kt
│       │   │   │           │               ├── UnrealLogPanelSettings.kt
│       │   │   │           │               ├── UnrealLogSettings.kt
│       │   │   │           │               └── UnrealLogVerbosityFilterComboBox.kt
│       │   │   │           └── settings/
│       │   │   │               ├── UnrealLinkSettingsConfigurable.kt
│       │   │   │               ├── UnrealLogColorSettingsPage.kt
│       │   │   │               └── UnrealLogSettingsConfigurable.kt
│       │   │   └── icons/
│       │   │       └── UnrealIcons.kt
│       │   └── resources/
│       │       ├── META-INF/
│       │       │   └── plugin.xml
│       │       ├── UnrealIconMappings.json
│       │       ├── com/
│       │       │   └── jetbrains/
│       │       │       └── rider/
│       │       │           └── plugins/
│       │       │               └── unreal/
│       │       │                   └── spellchecker/
│       │       │                       └── unreal.dic
│       │       ├── icon-robots.txt
│       │       ├── icons/
│       │       │   └── expui/
│       │       │       └──  icon-robots.txt
│       │       └── messages/
│       │           └── UnrealLinkBundle.properties
│       └── test/
│           ├── kotlin/
│           │   └── com/
│           │       └── jetbrains/
│           │           └── rider/
│           │               └── plugins/
│           │                   └── unreal/
│           │                       └── test/
│           │                           └── cases/
│           │                               ├── RiderTestDataMarker.kt
│           │                               └── integrationTests/
│           │                                   ├── Notification.kt
│           │                                   ├── PlayButtons.kt
│           │                                   ├── UnrealLinkBase.kt
│           │                                   ├── UnrealLinkInstallation.kt
│           │                                   └── projectModel/
│           │                                       └── RefreshSolution.kt
│           ├── resources/
│           │   ├── episodes/
│           │   │   └── Plugins/
│           │   │       ├── UnrealIntegration.xml
│           │   │       └── UnrealLinkSmoke.xml
│           │   └── intellij.rider.plugins.unreal.link.test.cases.xml
│           └── testData/
│               ├── integrationTests/
│               │   └── projectModel/
│               │       └── RefreshSolution/
│               │           └── refreshSolution/
│               │               ├── refreshSolution.gold
│               │               ├── refreshSolution_4_27.gold
│               │               ├── refreshSolution_5_5.gold
│               │               ├── refreshSolution_text.gold
│               │               ├── refreshSolution_text_4_27.gold
│               │               ├── refreshSolution_text_5_5.gold
│               │               └── refreshSolution_text_5_7.gold
│               ├── solutions/
│               │   └── TestSolutions/
│               │       └── Unreal/
│               │           └── EmptyUProject/
│               │               ├── EmptyUProject.uproject
│               │               └── Source/
│               │                   ├── EmptyUProject/
│               │                   │   ├── EmptyUProject.Build.cs
│               │                   │   ├── EmptyUProject.cpp
│               │                   │   └── EmptyUProject.h
│               │                   ├── EmptyUProject.Target.cs
│               │                   └── EmptyUProjectEditor.Target.cs
│               └── unreal/
│                   └── additionalSource/
│                       └── plugins/
│                           └── EmptyTestPlugin/
│                               ├── EmptyTestPlugin.uplugin
│                               └── Source/
│                                   └── EmptyTestPlugin/
│                                       ├── EmptyTestPlugin.Build.cs
│                                       ├── Private/
│                                       │   └── EmptyTestPlugin.cpp
│                                       └── Public/
│                                           └── EmptyTestPlugin.h
└── tools/
    └── dotnet.cmd

================================================
FILE CONTENTS
================================================

================================================
FILE: .editorconfig
================================================
root = true

[*.{csproj,props,targets}]
indent_style = space
indent_size = 2


================================================
FILE: .gitattributes
================================================
# Set the default behavior, in case people don't have core.autocrlf set.
* text=auto

# Keep LF in shell scripts
*.sh text eol=lf

# Preserve line endings in gradle scripts
gradlew* -text diff


================================================
FILE: .github/workflows/build.yml
================================================
name: Build UnrealLink
on:
  push:
    branches: [ 'net212**' ]
    paths-ignore:
      - src/rider/test
      - testData
      - README.md
      - CHANGELOG.md
  pull_request:
    branches: [ 'net212**' ]
    paths-ignore:
      - src/rider/test
      - testData
      - README.md
      - CHANGELOG.md
  workflow_dispatch:
    inputs:
      arguments:
        description: 'Additional attributes to gradle buildPlugin'
        required: false
        default: ''
jobs:
  build:
    name: ${{ matrix.config.name }}
    runs-on: ${{ matrix.config.os }}
    strategy:
      fail-fast: false
      matrix:
        config:
        - { name: "Windows Latest", artifact-prefix: "UnrealLink-",
            os: windows-latest,
            SEP: \ }

    # Steps represent a sequence of tasks that will be executed as part of the job
    steps:
      - uses: actions/checkout@v2 # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
      - uses: actions/cache@v2
        with:
          path: ~/.gradle/caches
          key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*') }}
          restore-keys: ${{ runner.os }}-gradle-

      - name: Build Plugin
        run: gradlew.bat buildPlugin -PbuildCounter=${{ github.run_number }} -PbuildConfiguration=Release ${{ github.event.inputs.arguments }}
        shell: cmd

      - name: Upload artifacts
        if: success()
        uses: actions/upload-artifact@v2
        with:
          name: ${{ matrix.config.artifact-prefix }}artifacts
          path: output/**


================================================
FILE: .gitignore
================================================
# Build artifacts
[Bb]in/
[Oo]bj/
build
output
.gradle
.tmp
out/*
*.generated.*
NuGet.Config

# User-specific files
*.suo
*.user
*.sln.docstates
*.sln.binlog
*.cache

# IDEs
.idea
.vs
_ReSharper*
_dotTrace*

# Unreal Plugin generated files
src/cpp/RiderLink/RiderLink.uplugin
src/cpp/RiderLink/checksum
src/cpp/RiderLink/Binaries
src/cpp/RiderLink/Intermediate
src/cpp/RiderLink/Source/RiderLink/Public/Model
# rd-cpp extra files
CMakeLists.txt
src/cpp/RiderLink/Source/RD/**/.*
src/cpp/RiderLink/Source/RD/**/*.yml
src/cpp/RiderLink/Source/RD/**/test
src/cpp/RiderLink/Source/RD/**/tests
src/cpp/RiderLink/Source/RD/**/bench
src/cpp/RiderLink/Source/RD/**/example
src/cpp/RiderLink/Source/RD/**/pch.*
src/cpp/RiderLink/Source/RD/**/INSTALL
src/cpp/RiderLink/Source/RD/**/doxygen.conf

# Local setup specific files
UnrealEngineProjectPath.txt
dependencies/*
/.intellijPlatform/

# Tmp release files
release_notes.md

# Zipper
tools/Zipper/*
!tools/Zipper/Program.cs
!tools/Zipper/Zipper.csproj
!tools/Zipper/Zipper.sln
/src/cpp/RiderLink/Resources/checksum


================================================
FILE: .run/Debug backend.run.xml
================================================
<component name="ProjectRunConfigurationManager">
  <configuration default="false" name="Debug backend" type="RunNativeExe" factoryName="Native Executable">
    <option name="EXE_PATH" value="$PROJECT_DIR$/gradlew.bat" />
    <option name="PROGRAM_PARAMETERS" value="runIde" />
    <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
    <option name="PASS_PARENT_ENVS" value="1" />
    <envs>
      <env name="RESHARPER_HOST_DEBUG_SELF" value="1" />
    </envs>
    <option name="USE_EXTERNAL_CONSOLE" value="0" />
    <method v="2">
      <option name="Build Solution" enabled="true" />
    </method>
  </configuration>
</component>

================================================
FILE: .run/UnrealLink [runIde].run.xml
================================================
<component name="ProjectRunConfigurationManager">
  <configuration default="false" name="UnrealLink [runIde]" type="GradleRunConfiguration" factoryName="Gradle">
    <ExternalSystemSettings>
      <option name="executionName" />
      <option name="externalProjectPath" value="$PROJECT_DIR$" />
      <option name="externalSystemIdString" value="GRADLE" />
      <option name="scriptParameters" value="" />
      <option name="taskDescriptions">
        <list />
      </option>
      <option name="taskNames">
        <list>
          <option value="runIde" />
        </list>
      </option>
      <option name="vmOptions" />
    </ExternalSystemSettings>
    <ExternalSystemDebugServerProcess>true</ExternalSystemDebugServerProcess>
    <ExternalSystemReattachDebugProcess>true</ExternalSystemReattachDebugProcess>
    <DebugAllEnabled>false</DebugAllEnabled>
    <RunAsTest>false</RunAsTest>
    <method v="2" />
  </configuration>
</component>

================================================
FILE: CHANGELOG.md
================================================
# Changelog

All notable changes to this project will be documented in this file.

The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0). Note that this project does not follow
semantic versioning but uses version numbers based on JetBrains [Rider](https://www.jetbrains.com/rider/) releases.

This plugin contains a plugin for the Unreal Editor (RiderLink) that is used to communicate with Rider. Changes marked
with a "Rider:" prefix are specific to Rider, while changes for the Unreal Editor plugin are marked with a "Unreal
Editor:" prefix. No prefix means that the change is common to both Rider and ReSharper.

The plugin is always bundled with Rider.

## [Unreleased]

## [2023.1.0.282]

### Fixed

- [RIDER-93789](https://youtrack.jetbrains.com/issue/RIDER-93789)

## [2023.1.0.188]

### Fixed

- Navigating from Rider to Unreal Editor for DataAssets

## [2022.3.0.200]

### Changed

- Add option to specify intermediate folder for building RiderLink plugin (File | Settings | Languages & Frameworks | Unreal Engine). 
  - If you have non-ASCII symbols in the path, your RiderLink build might fail.
- Add option to specify behavior of the auto-update
  - Select between automatically building and installing plugin, or simply extracting sources of RiderLink and building them yourselves
  - Extracting plugin might be a better option for RiderLink installed in the Game projects, or Engine project built from the sources

### Fixed

- Support installing RiderLink into the pre-built version of the UE5 (eg installed through Epic Games Launcher) 
  - From now on, RiderLink will be installed in the `Engine/Plugins/Marketplace/Developer/RiderLink` folder, if you chose to install it in the Engine
- Initially, RiderLink will be installed into `Plugins/Developer/RiderLink` for Game project and `Engine/Plugins/Marketplace/Developer/RiderLink` for Engine project, but if you wish to move it to another folder, Rider will take into the account the new location and will be updating the plugin in place.

## [2022.3.0.178]

### Changed

- Disable installation to Engine for UE 5
  - [RIDER-71374](https://youtrack.jetbrains.com/issue/RIDER-71374)

- Unreal log panel was made more consistent with output log window in Unreal Editor
  - Log categories are now sorted in popup ([RIDER-61132](https://youtrack.jetbrains.com/issue/RIDER-61132))
  - Log verbosity and category popups do not hide on item toggling
  - Full log messages are colorized, not only category name

### Fixed

- Fix [RIDER-69165](https://youtrack.jetbrains.com/issue/RIDER-69165)
- Fix [DEXP-642989](https://youtrack.jetbrains.com/issue/DEXP-642989)

## [2021.2.1.4]

### Fixed

- Fix [RIDER-66784](https://youtrack.jetbrains.com/issue/RIDER-66784)
- Possibly fix [RIDER-67192](https://youtrack.jetbrains.com/issue/RIDER-67192)

## [2021.2.1.3]

### Fixed

- [GITHUB-135](https://github.com/JetBrains/UnrealLink/issues/135)

## [2021.2.1.2]

### Fixed

- [GITHUB-135](https://github.com/JetBrains/UnrealLink/issues/135)

## [2021.2.1.1]

### Changed

- Sending logs from Unreal Editor to Rider moved to separate thread, less load on UE UI thread

### Fixed

- [RIDER-68865](https://youtrack.jetbrains.com/issue/RIDER-68865)
- Unreal log messages are not limited anymore with 4KB size

## [2021.2.0.659]

### Fixed

- Finally fix for [GITHUB-99](https://github.com/JetBrains/UnrealLink/issues/99)
- as well as [GITHUB-97](https://github.com/JetBrains/UnrealLink/issues/97)
- Number of fixes for clashing "Project Model Generation" with "Building RiderLink" actions blocking UnrealBuildTool.
  They don't have dedicated issues in YT or GH, but has producing annoying results like:
    - "can't generate project model, because UBT is running" message;
    - Building RiderLink and failing would leave a hanging UBT process.

### Known Issues

## [2021.1.12]

### Added

### Changed

### Deprecated

### Removed

### Fixed

- HOTFIX building RideLink on MacOS

### Known Issues

## [2021.1.11]

### Added

### Changed

### Deprecated

### Removed

### Fixed

- [RIDER-63716](https://youtrack.jetbrains.com/issue/RIDER-63716)
- [RIDER-63584](https://youtrack.jetbrains.com/issue/RIDER-63584)
- [RIDER-64422](https://youtrack.jetbrains.com/issue/RIDER-64422)
- [GITHUB-109](https://github.com/JetBrains/UnrealLink/issues/109)
- [GITHUB-112](https://github.com/JetBrains/UnrealLink/issues/112)
- Possible fix for [GITHUB-99](https://github.com/JetBrains/UnrealLink/issues/99)
- Fix build RiderLink for UE5 main branch

### Known Issues

## [2021.1.10]

### Added

### Changed

### Deprecated

### Removed

### Fixed

- [RIDER-63716](https://youtrack.jetbrains.com/issue/RIDER-63716)
- [RIDER-63584](https://youtrack.jetbrains.com/issue/RIDER-63584)
- [GITHUB-109](https://github.com/JetBrains/UnrealLink/issues/109)
- Possible fix for [GITHUB-99](https://github.com/JetBrains/UnrealLink/issues/99)
- Fix build RiderLink for UE5 main branch

### Known Issues

## [2021.1.9]

### Added

### Changed

### Deprecated

### Removed

### Fixed

- [RIDER-63716](https://youtrack.jetbrains.com/issue/RIDER-63716)
- [RIDER-63584](https://youtrack.jetbrains.com/issue/RIDER-63584)
- [GITHUB-109](https://github.com/JetBrains/UnrealLink/issues/109)
- Possible fix for [GITHUB-99](https://github.com/JetBrains/UnrealLink/issues/99)
- Fix build RiderLink for UE5 main branch

### Known Issues

## [2021.1.8]

### Added

### Changed

### Deprecated

### Removed

### Fixed

- Possible fix for https://youtrack.jetbrains.com/issue/RIDER-62012
    - UE crashing on exit in RiderLink
- Fix building RiderLink on UE5
- Fix https://github.com/JetBrains/UnrealLink/issues/93

### Known Issues

## [2021.1.7]

### Added

- Option to cancell installation of RiderLink

### Changed

### Deprecated

- Dropped support for versions of UE 4.22 and older

### Removed

### Fixed

- Fixed [Rider-51111](https://youtrack.jetbrains.com/issue/RIDER-51111)
- Fixed installation on macOS
- Failing to install RiderLink due to other UBT processes running

### Known Issues

## [2021.1.6]

### Added

### Changed

### Deprecated

### Removed

### Fixed

- Fixed [Rider-51111](https://youtrack.jetbrains.com/issue/RIDER-51111)
- Fixed installation on macOS

### Known Issues

## [2021.1.5]

### Added

### Changed

### Deprecated

### Removed

### Fixed

- Fixed [Rider-51111](https://youtrack.jetbrains.com/issue/RIDER-51111)
- Fixed installation on macOS

### Known Issues

## [2021.1.4]

### Added

### Changed

### Deprecated

### Removed

### Fixed

- Fixed potential issues with inconsistent protocol state on disconnects
    - Reinitialize protocol each time
- Fixed bunch of issues with game control actions
    - Use PIE actions logic from UE4 instead of reimplementing it
    - Actions are no more stuck in disabled state after engine unexpected shutdowns

### Known Issues

- "Compile before play" option is not properly supported
- Actions visibility and availability states are not synchronized with editor

## [2021.1.3]

### Added

- Disabling Play and Play settings button after press
    - Rider should reflect state of Unreal Editor. Play buttons should change only when Unreal Editor notifies that they
      have changed

### Changed

### Deprecated

### Removed

### Fixed

- Fix: sync state of play buttons and play settings buttns between Rider and Unreal Editor
- Fix: don't install RiderLink into `UnrealLaunchDaemon` project

### Known Issues

## [2021.1.2]

### Added

### Changed

### Deprecated

### Removed

### Fixed

- Exception on generitng project files during installation of RiderLink plugin
- Rider not being able to connect to Unreal Editor

### Known Issues

## [2021.1.1]

### Added

- Support MacOS and Linux
- Installing RiderLink plugin logs show in Build panel

### Changed

### Deprecated

### Removed

### Fixed

### Known Issues

## [2020.3.116]

### Added

### Changed

### Deprecated

### Removed

### Fixed

- Fix https://github.com/JetBrains/UnrealLink/issues/62

### Known Issues

## [2020.3.113]

### Added

### Changed

- Build RiderLink plugin from source on user PC instead of bundling dll files.
    - Reason: frequent changes of toolchains and breaking of ABI compatibility in MSVC toolchain render this practice
      impossible.

### Deprecated

- Drop support for UE 4.21 and older
    - Reason: RD framework doesn't use PCH files and doesn't comply with UE rules for include files. It's impossible to
      state that module doesn't use PCH files in UE 4.21 and older.

### Removed

### Fixed

### Known Issues

## [2020.3.104]

### Added

- Proper README for the https://github.com/JetBrains/UnrealLink

### Changed

### Deprecated

### Removed

### Fixed

- Fix memory leak in log panel on exit of Rider
- Fix deprecated code

### Known Issues

## [2020.3.85]

### Added

- Supported Rider 2020.3

### Changed

### Deprecated

### Removed

### Fixed

### Known Issues

## [2020.2.83]

### Added

### Changed

### Deprecated

### Removed

### Fixed

- More fixes to https://youtrack.jetbrains.com/issue/RIDER-50354

### Known Issues

## [2020.2.79]

### Added

- More info and notifications when RiderLink can't be built
- Unable auto-update plugin from JetBrains Marketplace

### Changed

### Deprecated

### Removed

- Removed verbose log messages from RD framework in stdout

### Fixed

- Fix https://youtrack.jetbrains.com/issue/RIDER-50354
- Fix corrupted hyperlinks after toggling timestamps

### Known Issues

## [2020.2.69]

### Added

### Changed

### Deprecated

### Removed

### Fixed

- Fix https://github.com/JetBrains/UnrealLink/issues/46

### Known Issues

## [2020.2.67]

### Added

### Changed

### Deprecated

### Removed

### Fixed

- Fix showing popup "update project file" after installing RiderLink
    - After pressing "update project file", it'd update {GameProject}.uproject file, adding reference to RiderLink. This
      is not necessary for RiderLink to work properly, but it'll break project for people that will sink to
      {GameProject}.uproject, but who doesn't have RiderLink installed

### Known Issues

## [2020.2.66]

### Added

### Changed

### Deprecated

### Removed

### Fixed

- Fix https://github.com/JetBrains/UnrealLink/issues/40
- Fix https://youtrack.jetbrains.com/issue/RIDER-47839

### Known Issues

## [2020.2.62]

### Added

### Changed

### Deprecated

### Removed

### Fixed

- Fixed: https://github.com/JetBrains/UnrealLink/issues/19

### Known Issues

## [2020.2.61]

### Added

- Unreal log filters
    - Verbosity
    - Category
    - Show/hide timestamps

### Changed

- Generated files for RD protocol will have ".Generated.h" suffix

### Deprecated

### Removed

- Packing plugin for ReSharper
    - Not supported yet

### Fixed

- Fixed: building RiderLink with Unity build disabled
- Fixed: Wording in "Install RiderLink" popup
- Fixed: Wording in UnrealEngine settings
    - No more auto-install plugin, only auto-update plugin

### Known Issues

## [2020.2.36]

### Added

### Changed

- rd-cpp updated to 201.1.85

### Deprecated

### Removed

### Fixed

- Fixed stackoverflow crash on exit of Unreal Editor

### Known Issues

## [2020.2.34]

### Added

### Changed

- move plugin installation in backend thread - no more freeze of UI when installing RiderLink

### Deprecated

### Removed

### Fixed

- fix loading RiderLink plugin on cooking
- fix crash on closing UnrealEditor in RiderLoggingExtension
- fixed number of problems discovering Unreal Editor installation, should fix a lot of false failing installations of
  RiderLink
- fix wording in RiderLink settings panel ( auto update and install -> auto update)
- fix UnrealBuildTool removing EnableByDefault: true from RiderLink.uplugin
    - No more modification of {GameName}.uproject file to enable RiderLink

### Known Issues

## [2020.1.10]

### Added

- Add option to install plugin to either Engine or Game
    - Installing to Engine from EGS requires building plugin
    - Old versions of plugins will be backed up
    - New version will be copied to %USER% folder and built
    - Result binaries copyied to Engine or Game
    - Sln will be refreshed
    - In case of errors, all the results will be reverted

### Changed

- Moved thirdparty dependencies of RD to submodules, fixed build.kts for it

### Deprecated

### Removed

### Fixed

- [Extremely long log entry causes RiderLink to lose connection to Unreal Engine](https://github.com/JetBrains/UnrealLink/issues/17)
- Fix looking for Unreal Engine root when Game is placed in the same folder as Engine
- Fix RiderLink for non-Unity builds

### Known Issues

## [2020.1.8]

### Added

- Add progress bar when installing "RiderLink" plugin
- Hide notification suggesting installing RiderLink after selecting "Install plugin"
- [Add option to Compile Game Project before starting PIE](https://github.com/JetBrains/UnrealLink/issues/9)

### Changed

- Installation to Engine instead of game Project
    - [Add option to install RiderLink to Engine instead of Game Project](https://github.com/JetBrains/UnrealLink/issues/7)
    - During installation process, RiderLink will be built and put into correct folder
    - No more gimmicks with "build plugin in Game project, then copy-paste it in Engine project"
- Refactored "RiderLink"
    - Separated "RiderLink" into separate module with different loading steps
    - e.g. For "RiderLink', start as soon as possible, for "RiderLinkGameControlExtension" start after Unreal Editor is
      fully loaded, etc
    - Fixed all warnings (TEXT macro redefined, obsolete API, etc)

### Deprecated

### Removed

### Fixed

- Lower verbosity of RD protocol logger
    - Less noise in debug console
- [Build on non-unity projects](https://github.com/JetBrains/UnrealLink/issues/10)
- [Exception during installation of RiderLink](https://github.com/JetBrains/UnrealLink/issues/5)
- [Multiple popups suggesting installing RiderLink](https://youtrack.jetbrains.com/issue/RIDER-43928)
- Bunch of issues:
    - https://youtrack.jetbrains.com/issue/RIDER-44056
    - https://youtrack.jetbrains.com/issue/RIDER-44027
    - https://youtrack.jetbrains.com/issue/RIDER-43929

### Known Issues

## [2020.1.7]

### Added

### Changed

### Deprecated

### Removed

### Fixed

- [Incorrect time in log](https://github.com/JetBrains/UnrealLink/issues/8)
- [Infinite process: RiderLink Discovering Asset Data](https://youtrack.jetbrains.com/issue/RIDER-43353)
- Spawn of multiple tabs when sending huge log message from Unreal Editor to Rider

### Known Issues

## [2020.1.6]

### Added

- FileWatcher initialization moved to separate thread, speed up startup time for plugin on RIder side
- New icons for Play actions and connection status

### Changed

- Cleaned up severity of internal logs
    - Were polluting package logs

### Deprecated

### Removed

### Fixed

- Connecting to Unreal Editor when plugin is installed in Engine

### Known Issues

## [2020.1.5]

### Added

### Changed

### Deprecated

### Removed

### Fixed

- [Cant close Unreal log window](https://github.com/JetBrains/UnrealLink/issues/2)
    - Disabled spawning multiple tabs for logs. Only one log tab for Unreal Editor log will be available at all times
- [Rider installs plugins to Programs](https://github.com/JetBrains/UnrealLink/issues/6)
- [Exception: The process cannot access the file because it is being used by another process](https://github.com/JetBrains/UnrealLink/issues/5)
- [Crash in RiderLink when packaging project](https://github.com/JetBrains/UnrealLink/issues/4)

### Known Issues

## [2020.1.4]

### Added

- Option to enable auto-update Unreal Editor (RiderLink) plugin
- Notification after plugin installation

### Changed

### Deprecated

### Removed

### Fixed

- Not finding uproject files on loading solution
- [UnrealLink plugin generates wrong sln for Rocket builds of UE](https://github.com/JetBrains/UnrealLink/issues/1)

### Known Issues

## [2020.1.2]

### Added

### Changed

### Deprecated

### Removed

### Fixed

- Fixed: when adding RiderLink plugin to project, Rider would regenerate sln and It would add Programs folder to
  solution tree for Rocket builds (UE from EGS)
- Fixed: building plugin on v4.20+
- Fixed: Use user temp folder instead of the project folder for intermediate file operations to avoid asking for
  elevated options

### Known Issues

## [2020.1.1]

### Added

- Open Blueprints from Rider
- Show logs of Unreal Editor inside Rider with hyperlinks to Blueprints inside Rider
- Toolbar buttons to control playback of the game inside Unreal Editor
    - Play, Pause, Stop, Skip frame;
    - Setup multiplayer: number of players, dedicated server, etc.
- Notification if connection to Unreal Editor is established or not (bottom right corner of status bar);
- Auto-install plugins in project;
    - Setting to enable auto-install (`true` by default).
    - If auto-install is disabled - notification will show up with quick-fix action.

### Changed

### Deprecated

### Removed

### Fixed

### Known Issues

- Service for opening assets in Unreal Editor has changed starting with UE 4.24 - opening same BP multiple times will
  open multiple tabs instead of re-using already opened one;
- Icon for connection status looks weird, waiting for new icons from designers
- Connecting to multiple instances of Unreal Editor is not working correctly
    - Toolbar controls will be affecting only the last connected editor


================================================
FILE: CODE_OF_CONDUCT.md
================================================
## Code of Conduct

This project and the corresponding community is governed by the [JetBrains Open Source and Community Code of Conduct](https://confluence.jetbrains.com/display/ALL/JetBrains+Open+Source+and+Community+Code+of+Conduct). Please make sure you read it. 


================================================
FILE: License.txt
================================================

                                 Apache License
                           Version 2.0, January 2004
                        https://www.apache.org/licenses/

   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

   1. Definitions.

      "License" shall mean the terms and conditions for use, reproduction,
      and distribution as defined by Sections 1 through 9 of this document.

      "Licensor" shall mean the copyright owner or entity authorized by
      the copyright owner that is granting the License.

      "Legal Entity" shall mean the union of the acting entity and all
      other entities that control, are controlled by, or are under common
      control with that entity. For the purposes of this definition,
      "control" means (i) the power, direct or indirect, to cause the
      direction or management of such entity, whether by contract or
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
      outstanding shares, or (iii) beneficial ownership of such entity.

      "You" (or "Your") shall mean an individual or Legal Entity
      exercising permissions granted by this License.

      "Source" form shall mean the preferred form for making modifications,
      including but not limited to software source code, documentation
      source, and configuration files.

      "Object" form shall mean any form resulting from mechanical
      transformation or translation of a Source form, including but
      not limited to compiled object code, generated documentation,
      and conversions to other media types.

      "Work" shall mean the work of authorship, whether in Source or
      Object form, made available under the License, as indicated by a
      copyright notice that is included in or attached to the work
      (an example is provided in the Appendix below).

      "Derivative Works" shall mean any work, whether in Source or Object
      form, that is based on (or derived from) the Work and for which the
      editorial revisions, annotations, elaborations, or other modifications
      represent, as a whole, an original work of authorship. For the purposes
      of this License, Derivative Works shall not include works that remain
      separable from, or merely link (or bind by name) to the interfaces of,
      the Work and Derivative Works thereof.

      "Contribution" shall mean any work of authorship, including
      the original version of the Work and any modifications or additions
      to that Work or Derivative Works thereof, that is intentionally
      submitted to Licensor for inclusion in the Work by the copyright owner
      or by an individual or Legal Entity authorized to submit on behalf of
      the copyright owner. For the purposes of this definition, "submitted"
      means any form of electronic, verbal, or written communication sent
      to the Licensor or its representatives, including but not limited to
      communication on electronic mailing lists, source code control systems,
      and issue tracking systems that are managed by, or on behalf of, the
      Licensor for the purpose of discussing and improving the Work, but
      excluding communication that is conspicuously marked or otherwise
      designated in writing by the copyright owner as "Not a Contribution."

      "Contributor" shall mean Licensor and any individual or Legal Entity
      on behalf of whom a Contribution has been received by Licensor and
      subsequently incorporated within the Work.

   2. Grant of Copyright License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      copyright license to reproduce, prepare Derivative Works of,
      publicly display, publicly perform, sublicense, and distribute the
      Work and such Derivative Works in Source or Object form.

   3. Grant of Patent License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      (except as stated in this section) patent license to make, have made,
      use, offer to sell, sell, import, and otherwise transfer the Work,
      where such license applies only to those patent claims licensable
      by such Contributor that are necessarily infringed by their
      Contribution(s) alone or by combination of their Contribution(s)
      with the Work to which such Contribution(s) was submitted. If You
      institute patent litigation against any entity (including a
      cross-claim or counterclaim in a lawsuit) alleging that the Work
      or a Contribution incorporated within the Work constitutes direct
      or contributory patent infringement, then any patent licenses
      granted to You under this License for that Work shall terminate
      as of the date such litigation is filed.

   4. Redistribution. You may reproduce and distribute copies of the
      Work or Derivative Works thereof in any medium, with or without
      modifications, and in Source or Object form, provided that You
      meet the following conditions:

      (a) You must give any other recipients of the Work or
          Derivative Works a copy of this License; and

      (b) You must cause any modified files to carry prominent notices
          stating that You changed the files; and

      (c) You must retain, in the Source form of any Derivative Works
          that You distribute, all copyright, patent, trademark, and
          attribution notices from the Source form of the Work,
          excluding those notices that do not pertain to any part of
          the Derivative Works; and

      (d) If the Work includes a "NOTICE" text file as part of its
          distribution, then any Derivative Works that You distribute must
          include a readable copy of the attribution notices contained
          within such NOTICE file, excluding those notices that do not
          pertain to any part of the Derivative Works, in at least one
          of the following places: within a NOTICE text file distributed
          as part of the Derivative Works; within the Source form or
          documentation, if provided along with the Derivative Works; or,
          within a display generated by the Derivative Works, if and
          wherever such third-party notices normally appear. The contents
          of the NOTICE file are for informational purposes only and
          do not modify the License. You may add Your own attribution
          notices within Derivative Works that You distribute, alongside
          or as an addendum to the NOTICE text from the Work, provided
          that such additional attribution notices cannot be construed
          as modifying the License.

      You may add Your own copyright statement to Your modifications and
      may provide additional or different license terms and conditions
      for use, reproduction, or distribution of Your modifications, or
      for any such Derivative Works as a whole, provided Your use,
      reproduction, and distribution of the Work otherwise complies with
      the conditions stated in this License.

   5. Submission of Contributions. Unless You explicitly state otherwise,
      any Contribution intentionally submitted for inclusion in the Work
      by You to the Licensor shall be under the terms and conditions of
      this License, without any additional terms or conditions.
      Notwithstanding the above, nothing herein shall supersede or modify
      the terms of any separate license agreement you may have executed
      with Licensor regarding such Contributions.

   6. Trademarks. This License does not grant permission to use the trade
      names, trademarks, service marks, or product names of the Licensor,
      except as required for reasonable and customary use in describing the
      origin of the Work and reproducing the content of the NOTICE file.

   7. Disclaimer of Warranty. Unless required by applicable law or
      agreed to in writing, Licensor provides the Work (and each
      Contributor provides its Contributions) on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
      implied, including, without limitation, any warranties or conditions
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
      PARTICULAR PURPOSE. You are solely responsible for determining the
      appropriateness of using or redistributing the Work and assume any
      risks associated with Your exercise of permissions under this License.

   8. Limitation of Liability. In no event and under no legal theory,
      whether in tort (including negligence), contract, or otherwise,
      unless required by applicable law (such as deliberate and grossly
      negligent acts) or agreed to in writing, shall any Contributor be
      liable to You for damages, including any direct, indirect, special,
      incidental, or consequential damages of any character arising as a
      result of this License or out of the use or inability to use the
      Work (including but not limited to damages for loss of goodwill,
      work stoppage, computer failure or malfunction, or any and all
      other commercial damages or losses), even if such Contributor
      has been advised of the possibility of such damages.

   9. Accepting Warranty or Additional Liability. While redistributing
      the Work or Derivative Works thereof, You may choose to offer,
      and charge a fee for, acceptance of support, warranty, indemnity,
      or other liability obligations and/or rights consistent with this
      License. However, in accepting such obligations, You may act only
      on Your own behalf and on Your sole responsibility, not on behalf
      of any other Contributor, and only if You agree to indemnify,
      defend, and hold each Contributor harmless for any liability
      incurred by, or claims asserted against, such Contributor by reason
      of your accepting any such warranty or additional liability.

   END OF TERMS AND CONDITIONS

   APPENDIX: How to apply the Apache License to your work.

      To apply the Apache License to your work, attach the following
      boilerplate notice, with the fields enclosed by brackets "[]"
      replaced with your own identifying information. (Don't include
      the brackets!)  The text should be enclosed in the appropriate
      comment syntax for the file format. We also recommend that a
      file or class name and description of purpose be included on the
      same "printed page" as the copyright notice for easier
      identification within third-party archives.

   Copyright [yyyy] [name of copyright owner]

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       https://www.apache.org/licenses/LICENSE-2.0.txt

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.

================================================
FILE: README.md
================================================
[![official JetBrains project](https://jb.gg/badges/official-flat-square.svg)](https://confluence.jetbrains.com/display/ALL/JetBrains+on+GitHub)

# UnrealLink for Unreal Engine

<p>The UnrealLink plugin enables advanced integration between JetBrains <a href="https://www.jetbrains.com/lp/rider-unreal/">Rider</a> and Epic Games’ <a href="https://www.unrealengine.com/en-US/">Unreal Editor</a>.</p>

<p>Rider is a fast and powerful IDE for Unreal Engine and C++ development. It provides rich code navigation, inspections, refactorings, understands Blueprints and the Unreal Engine reflection mechanism, and supports HLSL.</p>

<p>The plugin brings Blueprints information to the editor, adds settings to manage game launch, and provides a more convenient version of the Unreal Editor log.</p>

<ul>
    <li>
        <a href="#plugin-structure">Plugin structure</a>
    </li>
    <li>
        <a href="#installation">Installation</a>
    </li>
    <li>
        <a href="#contribution">Contribution</a>
    </li>
    <li>
        <a href="#features">Features</a>
    </li>
    <li>
        <a href="#what-could-possibly-go-wrong">What could possibly go wrong?</a>
    </li>
</ul>
 
<h2 id="plugin-structure">Plugin structure</h2>
<p>There are two plugins under the hood, the <strong>UnrealLink</strong> plugin for Rider and the <strong>RiderLink</strong> plugin for Unreal Editor, packed together.</p>

<h2 id="installation">Installation</h2>
<p><strong>UnrealLink</strong> is bundled with Rider and also distributed via the JetBrains plugin <a href="https://plugins.jetbrains.com/plugin/14989-unreal-link">marketplace</a>.</p>

<p><strong>RiderLink</strong> is installed by Rider itself, there is no need to install it manually. The first time you open an Unreal Engine project in Rider, you'll see a notification that the RiderLink plugin is missing and an invitation to install it. If you skip this popup message, you can install the plugin later by going to the Rider settings on the <em>Languages and Frameworks | Unreal Engine</em> page.</p>

<p>Both the popup message and the settings page offer two installation options:</p>
<ul>
    <li>
        <em>Engine</em>: Select this option to install the plugin in the engine and use it for all game projects based on the current engine version. The plugin will appear in the <code>Engine/Plugins/Developer</code> folder.
    </li>
    <li>
        <em>Game</em>: Select this option to install the plugin in the game project and use it for the current project only. The plugin will appear in the <code>Game/Plugins/Developer</code> folder.
    </li>
</ul>

<h2 id="contribution">Contribute to the plugin</h2>
<p>We love contributions! If you want to contribute to the UnrealLink plugin, fork this repository and follow the instructions on <a href="SETUP.md">how to set up a development environment</a>.</p>

<h2 id="features">Features</h2>
<h3 id="interact_with_blueprints">Interact with blueprints</h3>
<p>Blueprint files are written in binary form and are usually edited visually. However, they contain a whole lot of useful information for the developers of the C++ part of the game.</p>

<p>Rider reads Blueprints and allows you to see the bigger picture behind your code:</p>
<ul>
    <li>
        There may be derived blueprint classes, which you can see by invoking <em>Find Usages</em> on a C++ class or when you're browsing your C++ code in the editor.
    </li>
    <li>
        You can see the values of overridden properties.
    </li>
</ul>

<p>UnrealLink extends this functionality and introduces the ability to navigate to the Blueprint inside the Unreal Editor from your C++ code.</p>
<img alt="Interact with blueprints" width="800" src="https://plugins.jetbrains.com/files/14989/screenshot_23450.png"/>

<h3 id="manage_the_game">Manage the game</h3>
<p>The plugin allows you to manage your game right inside the IDE: select the running mode, run a server for your multiplayer game, specify the number of players, and more.</p>
<img alt="Manage the game" width="800" src="https://plugins.jetbrains.com/files/14989/screenshot_23451.png"/>

<h3 id="browse_the_unreal_editor_log">Browse the Unreal Editor log</h3>
<p>UnrealLink offers you an enhanced version of the Unreal Editor log output panel with colored text for easy reading, as well as verbosity and event category filters. You can also click on any highlighted link to navigate to the related source code line.</p>
<img alt="Browse the Unreal Editor log" width="800" src="https://plugins.jetbrains.com/files/14989/screenshot_23452.png"/>

<a href="https://www.jetbrains.com/help/rider/Working_with_Unreal_Engine.html">Learn more about Rider for Unreal Engine >></a>

<h2 id="what-could-possibly-go-wrong">What could possibly go wrong?</h2>
<p>The plugin and Rider for Unreal Engine itself are in active development now, so there could be some issues. Please share your feedback and report any bugs you encounter:</p>
<ul>
    <li>
        Submit plugin-specific issues to the <a href="https://github.com/JetBrains/UnrealLink/issues">GitHub Issues page</a>.
    </li>
    <li>
        Rider-specific issues should be directed to the <a href="https://youtrack.jetbrains.com/issues/RIDER">Rider tracker</a>.
    </li>
    <li>
        Send a message with any questions and feature suggestions to our support engineers and the Rider for Unreal Engine developers at <a href="mailto:rider-cpp-support@jetbrains.com">rider-cpp-support@jetbrains.com</a>. We really love hearing from you!
    </li>
</ul>

<p>A few typical issues, and what to do in such cases:</p>

<h5 id=failed_build>Failed to build RiderLink plugin</h5>

```
Failed to build RiderLink plugin
Check build logs for more info
Help > Diagnostic Tools > Show Log in Explorer
And contact dev team for help at GitHub Issues page
```

<p>There are several reasons you might get this message:</p>
<ul>
    <li>
        There’s a problem with your current Game or Unreal Engine code. Please make sure that you can build them correctly.
    </li>
    <li>
        You have an instance of Unreal Editor with the RiderLink plugin running. Please close Unreal Editor and try installing RiderLink again.
    </li>
    <li>
        Finally, if Unreal Editor is closed and your project builds fine, and you have an old version of RiderLink installed, please move the old version of RiderLink to a temp folder manually and try reinstalling RiderLink.
    </li>
</ul>

<h5 id=failed_backup>Failed to backup old plugin</h5>

```
Failed to backup old plugin
Close all running instances of Unreal Editor and try again
Path to old plugin:
```

<p>You tried to install a new version of RiderLink while you have a running instance of Unreal Editor with the plugin installed. Please close Unreal Editor and try again to install the plugin.</p>

<h5 id=failed_refresh>Failed to refresh project files</h5>

<p>This warning message means that installation was successful, but updating the project files in Rider failed. Everything should work fine, except the plugin will not appear in the <code>/Plugins/Developer</code> folder in the Explorer view.</p>

<p>If you have any issues with the plugin that you can’t resolve, please contact the developers via <a href="https://github.com/JetBrains/UnrealLink/issues">GitHub Issues</a>.</p>


================================================
FILE: SETUP.md
================================================
<h1>Setting up development environment</h1>

<p>After cloning the repository, you need to perform some actions to set up the environment.</p>

<h2>[TBD] Setting up UnrealLink frontend</h2>

<h2>Setting up UnrealLink backend</h2>
<ul>
    <li>    
        Run the console under the folder where you have cloned the repository.
        <p><strong>NOTE:</strong> Make sure that you have Java installed on your machine and you have environmental variable JAVA_HOME set to the value of the path to your JDK folder. Otherwise, it won't work.</p>
    </li>
    <li>
        Use the following command <code>gradlew buildResharperHost</code> to install all the requirements for proper work
    </li>
</ul>
<p>Here you go! Now you can open UnrealLink.sln and work on backend code.</p>

<h2>Setting up RiderLink, Unreal Editor plugin</h2>
<p>Code for the Unreal Editor part is stored inside UnrealLink repository, but in order to work with cpp code, it should be a part of Unreal Engine project.
As a workaround, we provide an option to create a junction from RiderLink source folder to Unreal Engine game project.
That way, when you make changes to RiderLink plugin inside Unreal Engine project, they will be picked up automatically in git.</p>
<ul>
    <li>Run the console under the folder where you have cloned the repository</li>
    <li>Use the following command <code>gradlew symlinkPluginToUnrealProject</code>
        <ul>
            <li>It will fail the first time with the message "Add path to a valid UnrealEngine project folder to: {UnrealLinkRoot}\UnrealEngineProjectPath.txt"</li>
            <li>and will create "UnrealEngineProjectPath.txt" for you.</li>
        </ul>
    </li>
    <li>Add path to the root folder of your game project into "UnrealEngineProjectPath.txt" eg "D:/PROJECTS/UE/basic_4_26"</li>
    <li>Run <code>gradlew symlinkPluginToUnrealProject</code> again.</li>
    <li>Refresh project files for your Game project</li>
</ul>
<p>RiderLink plugin will be available under <code>{GameProjectRoot}/Plugins/Development/RiderLink</code></p>





================================================
FILE: SdkBasedPluginEmbedding.Root
================================================


================================================
FILE: SubplatformsCollection.Root
================================================


================================================
FILE: UnrealLink.sln
================================================

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 16
VisualStudioVersion = 16.0.29123.88
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RiderPlugin.UnrealLink", "src\dotnet\RiderPlugin.UnrealLink\RiderPlugin.UnrealLink.csproj", "{084172D1-A9C6-46D0-96AD-05C5B09A5E5D}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "misc", "misc", "{4A9ABB95-3762-448B-B5BF-099E46DB22DE}"
	ProjectSection(SolutionItems) = preProject
		CHANGELOG.md = CHANGELOG.md
		src\dotnet\Plugin.props = src\dotnet\Plugin.props
		src\rider\main\resources\META-INF\plugin.xml = src\rider\main\resources\META-INF\plugin.xml
		README.md = README.md
	EndProjectSection
EndProject
Global
	GlobalSection(SolutionConfigurationPlatforms) = preSolution
		Debug|Any CPU = Debug|Any CPU
		Release|Any CPU = Release|Any CPU
	EndGlobalSection
	GlobalSection(ProjectConfigurationPlatforms) = postSolution
		{084172D1-A9C6-46D0-96AD-05C5B09A5E5D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{084172D1-A9C6-46D0-96AD-05C5B09A5E5D}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{084172D1-A9C6-46D0-96AD-05C5B09A5E5D}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{084172D1-A9C6-46D0-96AD-05C5B09A5E5D}.Release|Any CPU.Build.0 = Release|Any CPU
	EndGlobalSection
	GlobalSection(SolutionProperties) = preSolution
		HideSolutionNode = FALSE
	EndGlobalSection
	GlobalSection(ExtensibilityGlobals) = postSolution
		SolutionGuid = {AE34A340-CA1E-400F-9367-864EEF8033C7}
	EndGlobalSection
EndGlobal


================================================
FILE: build.gradle.kts
================================================
import com.jetbrains.plugin.structure.base.utils.isFile
import org.apache.tools.ant.taskdefs.condition.Os
import org.gradle.api.tasks.testing.logging.TestExceptionFormat
import org.jetbrains.changelog.Changelog
import org.jetbrains.intellij.platform.gradle.tasks.PrepareSandboxTask
import org.jetbrains.intellij.platform.gradle.tasks.RunIdeTask
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
import java.io.ByteArrayOutputStream
import java.security.MessageDigest
import javax.inject.Inject
import org.gradle.process.ExecOperations
import kotlin.io.path.absolute
import kotlin.io.path.isDirectory
import org.jetbrains.intellij.platform.gradle.Constants
import org.jetbrains.intellij.platform.gradle.TestFrameworkType
import kotlin.io.path.pathString

plugins {
    id("me.filippov.gradle.jvm.wrapper") version "0.16.0"
    id("org.jetbrains.changelog") version "2.0.0"
    id("org.jetbrains.intellij.platform")
    kotlin("jvm")
}

interface Injected {
    @get:Inject val exec: ExecOperations
}
val injected = objects.newInstance<Injected>()

java {
    sourceCompatibility = JavaVersion.VERSION_25
    targetCompatibility = JavaVersion.VERSION_25
}

repositories {
    maven("https://cache-redirector.jetbrains.com/intellij-dependencies")
    maven("https://cache-redirector.jetbrains.com/intellij-repository/releases")
    maven("https://cache-redirector.jetbrains.com/intellij-repository/snapshots")
    maven("https://cache-redirector.jetbrains.com/maven-central")
    intellijPlatform {
        defaultRepositories()
        jetbrainsRuntime()
    }
}

dependencies {
    testImplementation("com.fasterxml.jackson.core:jackson-databind:2.14.0")
}

apply {
    plugin("kotlin")
}

kotlin {
    sourceSets {
        main {
            kotlin.srcDir("src/rider/main/kotlin")
        }
        test {
            kotlin.srcDir("src/rider/test/kotlin")
        }
    }
}

sourceSets {
    main {
        kotlin.srcDir("src/rider/generated/kotlin")
        resources.srcDir("src/rider/main/resources")
    }
}

project.version = "${property("majorVersion")}." +
                  "${property("minorVersion")}." +
                  "${property("buildCounter")}"

if (System.getenv("TEAMCITY_VERSION") != null) {
    logger.lifecycle("##teamcity[buildNumber '${project.version}']")
} else {
    logger.lifecycle("Plugin version: ${project.version}")
}

val buildConfigurationProp = project.property("buildConfiguration").toString()

val repoRoot by extra { project.rootDir }
val isWindows by extra { Os.isFamily(Os.FAMILY_WINDOWS) }
val idePluginId by extra { "RiderPlugin" }
val dotNetSolutionId by extra { "UnrealLink" }
val dotNetDir by extra { File(repoRoot, "src/dotnet") }
val dotNetBinDir by extra { dotNetDir.resolve("$idePluginId.$dotNetSolutionId").resolve("bin") }
val dotNetPluginId by extra { "$idePluginId.${project.name}" }
val dotNetSolution by extra { File(repoRoot, "$dotNetSolutionId.sln") }
val modelDir = File(repoRoot, "protocol/src/main/kotlin/model")
val hashBaseDir = File(repoRoot, "build/rdgen")
val ktOutputRelativePath = "src/rider/main/kotlin/com/jetbrains/rider/model"
val cppOutputRoot = File(repoRoot, "src/cpp/RiderLink/Source/RiderLink/Public/Model")
val csOutputRoot = File(repoRoot, "src/dotnet/RiderPlugin.UnrealLink/obj/model")
val ktOutputRoot = File(repoRoot, ktOutputRelativePath)
val riderLinkDir = File("$rootDir/src/cpp/RiderLink")

val currentBranchName = getBranchName()

fun TaskContainerScope.setupCleanup(task: Task) {
    withType<Delete> {
        delete(task.outputs.files)
    }
}

fun getBranchName(): String {
    val execResult = providers.exec {
        executable = "git"
        args("rev-parse", "--abbrev-ref", "HEAD")
        workingDir = projectDir
        isIgnoreExitValue = true
    }
    if (execResult.result.get().exitValue == 0) {
        val output = execResult.standardOutput.asText.get().trim()
        if (output.isNotEmpty())
            return output
    }
    return "net222"
}

fun getProductMonorepoRoot(): File? {
    var currentDir = repoRoot

    while (currentDir.parent != null) {
        if (currentDir.resolve(".ultimate.root.marker").exists()) {
            return currentDir
        }
        currentDir = currentDir.parentFile
    }

    return null
}

changelog {
    version.set(project.version.toString())
    // https://github.com/JetBrains/gradle-changelog-plugin/blob/main/src/main/kotlin/org/jetbrains/changelog/Changelog.kt#L23
    // This is just common semVerRegex with the addition of a forth optional group (number) ( x.x.x[.x][-alpha43] )
    headerParserRegex.set(
        """^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)\.?(0|[1-9]\d*)?(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)
            (?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?${'$'}"""
            .trimMargin().toRegex())
    groups.set(listOf("Added", "Changed", "Deprecated", "Removed", "Fixed", "Known Issues"))
    keepUnreleasedSection.set(true)
    itemPrefix.set("-")
}

dependencies {
    intellijPlatform {
        val dependencyPath = File(projectDir, "dependencies")
        if (dependencyPath.exists()) {
            val localPath = dependencyPath.canonicalPath
            local(localPath)
            logger.lifecycle("Will use ${File(localPath, "build.txt").readText()} from $localPath as RiderSDK")
        } else {
            val version = "${project.property("majorVersion")}-SNAPSHOT"
            logger.lifecycle("*** Using Rider SDK $version from intellij-snapshots repository")
            rider(version, useInstaller = false)
        }

        jetbrainsRuntime()

        // Workaround for https://youtrack.jetbrains.com/issue/IDEA-179607
        bundledPlugin("rider.intellij.plugin.appender")

        bundledPlugin("com.intellij.cidr.debugger")
        bundledPlugin("com.jetbrains.rider-cpp")

        // TODO: Temporary I hope hope hope
        bundledLibrary(provider {
            project.intellijPlatform.platformPath.resolve("lib/testFramework.jar").pathString
        })
    }
}

intellijPlatform {
    tasks {
        val currentReleaseNotesAsHtml = """
            <body>
            <p><b>New in "${project.version}"</b></p>
            <p>${changelog.renderItem(changelog.getLatest(), Changelog.OutputType.HTML)}</p>
            <p>See the <a href="https://github.com/JetBrains/UnrealLink/blob/$currentBranchName/CHANGELOG.md">CHANGELOG</a> for more details and history.</p>
            </body>
        """.trimIndent()

        val currentReleaseNotesAsMarkdown = """
            ## New in ${project.version}
            ${changelog.renderItem(changelog.getLatest())}
            See the [CHANGELOG](https://github.com/JetBrains/UnrealLink/blob/$currentBranchName/CHANGELOG.md) for more details and history.
        """.trimIndent()
        val dumpCurrentChangelog by registering {
            val outputFile = layout.buildDirectory.file("release_notes.md")
            outputs.file(outputFile)
            doLast { file(outputFile).writeText(currentReleaseNotesAsMarkdown) }
        }

        // PatchPluginXml gets the latest (always Unreleased) section from the current changelog and writes it into plugin.xml
        // dumpCurrentChangelog dumps the same section to file (for Marketplace changelog)
        // After, patchChangelog rename [Unreleased] to [202x.x.x.x] and create new empty Unreleased.
        // So order is important!
        patchPluginXml { changeNotes.set( provider { currentReleaseNotesAsHtml }) }
        patchChangelog { mustRunAfter(patchPluginXml, dumpCurrentChangelog) }

        publishPlugin {
            dependsOn(patchPluginXml, dumpCurrentChangelog, patchChangelog)
            token.set(System.getenv("UNREALLINK_intellijPublishToken"))

            val pubChannels = project.findProperty("publishChannels")
            if ( pubChannels != null) {
                val chan = pubChannels.toString().split(',')
                println("Channels for publish $chan")
                channels.set(chan)
            } else {
                channels.set(listOf("alpha"))
            }
        }
    }
}

val riderModel: Configuration by configurations.creating {
    isCanBeConsumed = true
    isCanBeResolved = false
}

artifacts {
    add(riderModel.name, provider {
        intellijPlatform.platformPath.resolve("lib/rd/rider-model.jar").also {
            check(it.isFile) {
                "rider-model.jar is not found at $riderModel"
            }
        }
    }) {
        builtBy(Constants.Tasks.INITIALIZE_INTELLIJ_PLATFORM_PLUGIN)
    }
}

tasks {
    val dotNetSdkPath by lazy {
        val sdkPath = intellijPlatform.platformPath.resolve("lib/DotNetSdkForRdPlugins").absolute()
        assert(sdkPath.isDirectory())
        println(".NET SDK path: $sdkPath")

        return@lazy sdkPath.toRealPath()
    }

    instrumentCode {
        enabled = false
    }

    withType<RunIdeTask>().configureEach {
        maxHeapSize = "4096m"
    }

    withType<Test>().configureEach {
        maxHeapSize = "4096m"
        if (project.hasProperty("ignoreFailures")) { ignoreFailures = true }
        useTestNG {
        }
        testLogging {
            showStandardStreams = true
            showExceptions = true
            exceptionFormat = TestExceptionFormat.FULL
        }
    }

    withType<KotlinCompile>().configureEach {
        dependsOn("generateModels")
        compilerOptions {
            jvmTarget.set(JvmTarget.JVM_25)
        }
    }

    val prepareRiderBuildProps by registering {
        group = "RiderBackend"
        val generatedFile = layout.buildDirectory.file("DotNetSdkPath.generated.props")

        inputs.property("dotNetSdkFile", { dotNetSdkPath.toString() })
        outputs.file(generatedFile)

        doLast {
            project.file(generatedFile).writeText(
                """<Project>
            |  <PropertyGroup>
            |    <DotNetSdkPath>$dotNetSdkPath</DotNetSdkPath>
            |  </PropertyGroup>
            |</Project>""".trimMargin()
            )
        }
    }

    val prepareNuGetConfig by registering {
        group = "RiderBackend"
        dependsOn(prepareRiderBuildProps)

        val generatedFile = project.projectDir.resolve("NuGet.Config")
        inputs.property("dotNetSdkFile", { dotNetSdkPath.toString() })
        outputs.file(generatedFile)
        doLast {
            val dotNetSdkFile = dotNetSdkPath
            logger.info("dotNetSdk location: '$dotNetSdkFile'")

            val nugetConfigText = """<?xml version="1.0" encoding="utf-8"?>
        |<configuration>
        |  <packageSources>
        |    <clear />
        |    <add key="local-dotnet-sdk" value="$dotNetSdkFile" />
        |    <add key="nuget.org" value="https://api.nuget.org/v3/index.json" />
        |  </packageSources>
        |</configuration>
        """.trimMargin()
            generatedFile.writeText(nugetConfigText)

            logger.info("Generated content:\n$nugetConfigText")
        }
    }

    val buildResharperHost by registering {
        group = "RiderBackend"
        description = "Build backend for Rider"
        dependsOn(":generateModels", prepareNuGetConfig)

        inputs.file(file(dotNetSolution))
        inputs.dir(file("$repoRoot/src/dotnet"))
        outputs.dir(file("$repoRoot/src/dotnet/RiderPlugin.UnrealLink/bin/RiderPlugin.UnrealLink/$buildConfigurationProp"))

        doLast {
            val warningsAsErrors: String by project.extra
            val buildArguments = listOf(
                "build",
                dotNetSolution.canonicalPath,
                "-consoleLoggerParameters:ErrorsOnly",
                "/p:Configuration=$buildConfigurationProp",
                "/p:Version=${project.version}",
                "/p:TreatWarningsAsErrors=$warningsAsErrors",
                "/bl:${dotNetSolution.name}.binlog",
                "/nologo"
            )
            logger.info("call dotnet.cmd with '{}'", buildArguments)
            injected.exec.exec {
                executable = "$rootDir/tools/dotnet.cmd"
                args = buildArguments
                workingDir = dotNetSolution.parentFile
            }
        }
    }

    val patchUpluginVersion by register("patchUpluginVersion") {
        val pathToUpluginTemplate = File("${project.rootDir}/src/cpp/RiderLink/RiderLink.uplugin.template")
        val filePathToUplugin = File("${project.rootDir}/src/cpp/RiderLink/RiderLink.uplugin")
        inputs.file(pathToUpluginTemplate)
        inputs.property("version", project.version)
        outputs.file(filePathToUplugin)
        doLast {
            if(filePathToUplugin.exists())
                filePathToUplugin.delete()

            pathToUpluginTemplate.copyTo(filePathToUplugin)

            val text = filePathToUplugin.readLines().map {
                it.replace("%PLUGIN_VERSION%", "${project.version}")
            }
            filePathToUplugin.writeText(text.joinToString(System.lineSeparator()))
        }
    }
    withType<Delete> {
        delete(patchUpluginVersion.outputs.files)
    }

    val generateChecksum by register("generateChecksum") {
        dependsOn(":generateModels")
        val upluginFile = riderLinkDir.resolve("RiderLink.uplugin.template")
        val resourcesDir = riderLinkDir.resolve("Resources")
        val sourceDir = riderLinkDir.resolve("Source")
        val checksumFile = riderLinkDir.resolve("Resources/checksum")
        inputs.file(upluginFile)
        inputs.dir(resourcesDir)
        inputs.dir(sourceDir)
        outputs.file(checksumFile)
        doLast {
            checksumFile.delete()
            val inputFiles = sequence{
                yield(upluginFile)
                resourcesDir.walkTopDown().forEach { if(it.isFile && (it.nameWithoutExtension != "checksum")) yield(it) }
                sourceDir.walkTopDown().forEach { if(it.isFile) yield(it) }
            }
            val instance = MessageDigest.getInstance("MD5")
            inputFiles.forEach { instance.update(it.readBytes()) }
            checksumFile.writeBytes(instance.digest())
        }
    }
    withType<Delete> {
        delete(generateChecksum.outputs.files)
    }

    val packCppSide by registering(Zip::class) {
        dependsOn(patchUpluginVersion)
        dependsOn(":generateModels")
        dependsOn(generateChecksum)

        archiveFileName.set("RiderLink.zip")
        excludes.addAll(arrayOf("RiderLink.uplugin.template", "Intermediate", "Binaries"))
        destinationDirectory.set(File("$rootDir/build/distributions"))
        from("$rootDir/src/cpp/RiderLink")
    }

    withType<PrepareSandboxTask> {
        dependsOn(buildResharperHost, packCppSide)

        outputs.upToDateWhen { false } //need to dotnet artifacts be included when only dotnet sources were changed

        val outputFolder = dotNetBinDir
            .resolve(dotNetPluginId)
            .resolve(buildConfigurationProp)

        val dllFiles = listOf(
            File(outputFolder, "$dotNetPluginId.dll"),
            File(outputFolder, "$dotNetPluginId.pdb")
        )

        dllFiles.forEach {
            from(it) { into("${intellijPlatform.projectName.get()}/dotnet") }
        }


        from(packCppSide.get().archiveFile) {
            into("${intellijPlatform.projectName.get()}/EditorPlugin")
        }

        doLast {
            dllFiles.forEach { file ->
                if (!file.exists()) throw RuntimeException("File $file does not exist")
            }
        }
    }

    val generateModels by registering {
        group = "protocol"
        description = "Generates protocol models."
        dependsOn(":protocol:rdgen")
    }

    withType<Delete> {
        delete(csOutputRoot, cppOutputRoot, ktOutputRoot)
    }

    buildSearchableOptions { }

    val getUnrealEngineProject by register("getUnrealEngineProject") {
        doLast {
            val ueProjectPathTxt = rootDir.resolve("UnrealEngineProjectPath.txt")
            if (ueProjectPathTxt.exists()) {
                val ueProjectPath = ueProjectPathTxt.readText()
                val ueProjectPathDir = File(ueProjectPath)
                if (!ueProjectPathDir.exists()) throw AssertionError("$ueProjectPathDir doesn't exist")
                if (!ueProjectPathDir.isDirectory) throw AssertionError("$ueProjectPathDir is not directory")

                val isUEProject = ueProjectPathDir.listFiles()?.any {
                    it.extension == "uproject"
                }
                if (isUEProject == true) {
                    extra["UnrealProjectPath"] = ueProjectPathDir
                } else {
                    throw AssertionError("Add path to a valid UnrealEngine project folder to: $ueProjectPathTxt")
                }
            } else {
                ueProjectPathTxt.createNewFile()
                throw AssertionError("Add path to a valid UnrealEngine project folder to: $ueProjectPathTxt")
            }
        }
    }

    val symlinkPluginToUnrealProject by registering {
        dependsOn(getUnrealEngineProject)
        dependsOn(patchUpluginVersion)
        doLast {
            val unrealProjectPath = getUnrealEngineProject.extra["UnrealProjectPath"] as File
            val targetDir = File("$unrealProjectPath/Plugins/Developer/RiderLink")

            if(targetDir.exists()) {
                val stdOut = ByteArrayOutputStream()
                // Check if it's Junction
                val result = injected.exec.exec {
                    commandLine = if(isWindows)
                        listOf("cmd.exe", "/c", "fsutil", "reparsepoint", "query", targetDir.absolutePath, "|", "find", "Print Name:")
                    else
                        listOf("find", targetDir.absolutePath, "-maxdepth", "1", "-type", "l", "-ls")

                    isIgnoreExitValue = true
                    standardOutput = stdOut
                }

                // Check if it's Junction to local RiderLink
                if(result.exitValue == 0) {
                    val output = stdOut.toString().trim()
                    if (output.isNotEmpty()) {
                        val pathToJunction = if (isWindows)
                            output.substringAfter("Print Name:").trim()
                        else
                            output.substringAfter("->").trim()
                        if (File(pathToJunction) == riderLinkDir) {
                            println("Junction is already correct")
                            throw StopExecutionException()
                        }
                    }
                }

                // If it's not Junction or if it's a Junction but doesn't point to local RiderLink - delete it
                targetDir.delete()
            }

            targetDir.parentFile.mkdirs()
            val stdOut = ByteArrayOutputStream()
            val result = injected.exec.exec {
                commandLine = if(isWindows)
                    listOf("cmd.exe", "/c", "mklink", "/J", targetDir.absolutePath, riderLinkDir.absolutePath)
                else
                    listOf("ln", "-s", riderLinkDir.absolutePath, targetDir.absolutePath)
                errorOutput = stdOut
                isIgnoreExitValue = true
            }
            if (result.exitValue != 0) {
                println(stdOut.toString().trim())
            }
        }
    }

    wrapper {
        gradleVersion = "9.4.1"
        distributionUrl = "https://cache-redirector.jetbrains.com/services.gradle.org/distributions/gradle-${gradleVersion}-bin.zip"
    }
}


================================================
FILE: gradle/wrapper/gradle-wrapper.properties
================================================
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://cache-redirector.jetbrains.com/services.gradle.org/distributions/gradle-9.4.1-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists


================================================
FILE: gradle.properties
================================================
# Properties for the build. Override on the command line with -Pprop=value
# E.g. -PBuildConfiguration=Release
# Note that these values are strings!
# Local builds and installs will have this ridiculours number 20xx.x.x.9999
# Teamcity overrides buildCounter to %build.counter% (Teamcity counter)
# majorVersion is used as SDK version when no SDK in UnrealLink/dependencies
# Downloads "majorVersion-SNAPSHOT" from https://cache-redirector.jetbrains.com/intellij-repository/snapshots
majorVersion=2026.3
minorVersion=0
buildCounter=9999
# Overrides on Teamcity to Release
buildConfiguration=Debug
warningsAsErrors=false
# List of channels to publish. Defined as comma-separated string (publishChannels="alpha,beta,eap")
# Alpha channel uses by default =)
#publishChannels=alpha
# We need it to avoid bundle Kotlin jars into plugin
kotlin.stdlib.default.dependency=false
# Updated automatically on idea sync
rdVersion=2026.1.3
rdKotlinVersion=2.3.0
intellijPlatformGradlePluginVersion=2.11.0
gradleJvmWrapperVersion=0.15.0

org.gradle.jvmargs=-Xmx4g


================================================
FILE: gradlew
================================================
#!/bin/sh

#
# Copyright © 2015 the original authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# SPDX-License-Identifier: Apache-2.0
#

##############################################################################
#
#   Gradle start up script for POSIX generated by Gradle.
#
#   Important for running:
#
#   (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is
#       noncompliant, but you have some other compliant shell such as ksh or
#       bash, then to run this script, type that shell name before the whole
#       command line, like:
#
#           ksh Gradle
#
#       Busybox and similar reduced shells will NOT work, because this script
#       requires all of these POSIX shell features:
#         * functions;
#         * expansions «$var», «${var}», «${var:-default}», «${var+SET}»,
#           «${var#prefix}», «${var%suffix}», and «$( cmd )»;
#         * compound commands having a testable exit status, especially «case»;
#         * various built-in commands including «command», «set», and «ulimit».
#
#   Important for patching:
#
#   (2) This script targets any POSIX shell, so it avoids extensions provided
#       by Bash, Ksh, etc; in particular arrays are avoided.
#
#       The "traditional" practice of packing multiple parameters into a
#       space-separated string is a well documented source of bugs and security
#       problems, so this is (mostly) avoided, by progressively accumulating
#       options in "$@", and eventually passing that to Java.
#
#       Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS,
#       and GRADLE_OPTS) rely on word-splitting, this is performed explicitly;
#       see the in-line comments for details.
#
#       There are tweaks for specific operating systems such as AIX, CygWin,
#       Darwin, MinGW, and NonStop.
#
#   (3) This script is generated from the Groovy template
#       https://github.com/gradle/gradle/blob/2d6327017519d23b96af35865dc997fcb544fb40/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
#       within the Gradle project.
#
#       You can find Gradle at https://github.com/gradle/gradle/.
#
##############################################################################

# Attempt to set APP_HOME

# Resolve links: $0 may be a link
app_path=$0

# Need this for daisy-chained symlinks.
while
    APP_HOME=${app_path%"${app_path##*/}"}  # leaves a trailing /; empty if no leading path
    [ -h "$app_path" ]
do
    ls=$( ls -ld "$app_path" )
    link=${ls#*' -> '}
    case $link in             #(
      /*)   app_path=$link ;; #(
      *)    app_path=$APP_HOME$link ;;
    esac
done

# This is normally unused
# shellcheck disable=SC2034
APP_BASE_NAME=${0##*/}
# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)
APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s\n' "$PWD" ) || exit

# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD=maximum

warn () {
    echo "$*"
} >&2

die () {
    echo
    echo "$*"
    echo
    exit 1
} >&2

# OS specific support (must be 'true' or 'false').
cygwin=false
msys=false
darwin=false
nonstop=false
case "$( uname )" in                #(
  CYGWIN* )         cygwin=true  ;; #(
  Darwin* )         darwin=true  ;; #(
  MSYS* | MINGW* )  msys=true    ;; #(
  NONSTOP* )        nonstop=true ;;
esac



# GRADLE JVM WRAPPER START MARKER
BUILD_DIR="${HOME}/.local/share/gradle-jvm"
JVM_ARCH=$(uname -m)
JVM_TEMP_FILE=$BUILD_DIR/gradle-jvm-temp.tar.gz
if [ "$darwin" = "true" ]; then
    case $JVM_ARCH in
    x86_64)
        JVM_URL=https://download.oracle.com/java/25/archive/jdk-25.0.2_macos-x64_bin.tar.gz
        JVM_TARGET_DIR=$BUILD_DIR/jdk-25.0.2_macos-x64_bin-99fbca
        ;;
    arm64)
        JVM_URL=https://download.oracle.com/java/25/archive/jdk-25.0.2_macos-aarch64_bin.tar.gz
        JVM_TARGET_DIR=$BUILD_DIR/jdk-25.0.2_macos-aarch64_bin-d7817e
        ;;
    *) 
        die "Unknown architecture $JVM_ARCH"
        ;;
    esac
elif [ "$cygwin" = "true" ] || [ "$msys" = "true" ]; then
    JVM_URL=https://download.oracle.com/java/25/archive/jdk-25.0.2_windows-x64_bin.zip
    JVM_TARGET_DIR=$BUILD_DIR/jdk-25.0.2_windows-x64_bin-96701c
else
    JVM_ARCH=$(linux$(getconf LONG_BIT) uname -m)
     case $JVM_ARCH in
        x86_64)
            JVM_URL=https://download.oracle.com/java/25/archive/jdk-25.0.2_linux-x64_bin.tar.gz
            JVM_TARGET_DIR=$BUILD_DIR/jdk-25.0.2_linux-x64_bin-3c4431
            ;;
        aarch64)
            JVM_URL=https://download.oracle.com/java/25/archive/jdk-25.0.2_linux-aarch64_bin.tar.gz
            JVM_TARGET_DIR=$BUILD_DIR/jdk-25.0.2_linux-aarch64_bin-a88282
            ;;
        *) 
            die "Unknown architecture $JVM_ARCH"
            ;;
        esac
fi

set -e

if [ -e "$JVM_TARGET_DIR/.flag" ] && [ -n "$(ls "$JVM_TARGET_DIR")" ] && [ "x$(cat "$JVM_TARGET_DIR/.flag")" = "x${JVM_URL}" ]; then
    # Everything is up-to-date in $JVM_TARGET_DIR, do nothing
    true
else
  echo "Downloading $JVM_URL to $JVM_TEMP_FILE"

  rm -f "$JVM_TEMP_FILE"
  mkdir -p "$BUILD_DIR"
  if command -v curl >/dev/null 2>&1; then
      if [ -t 1 ]; then CURL_PROGRESS="--progress-bar"; else CURL_PROGRESS="--silent --show-error"; fi
      # shellcheck disable=SC2086
      curl $CURL_PROGRESS -L --output "${JVM_TEMP_FILE}" "$JVM_URL" 2>&1
  elif command -v wget >/dev/null 2>&1; then
      if [ -t 1 ]; then WGET_PROGRESS=""; else WGET_PROGRESS="-nv"; fi
      wget $WGET_PROGRESS -O "${JVM_TEMP_FILE}" "$JVM_URL" 2>&1
  else
      die "ERROR: Please install wget or curl"
  fi

  echo "Extracting $JVM_TEMP_FILE to $JVM_TARGET_DIR"
  rm -rf "$JVM_TARGET_DIR"
  mkdir -p "$JVM_TARGET_DIR"

  case "$JVM_URL" in
    *".zip") unzip "$JVM_TEMP_FILE" -d "$JVM_TARGET_DIR" ;;
    *) tar -x -f "$JVM_TEMP_FILE" -C "$JVM_TARGET_DIR" ;;
  esac
  
  rm -f "$JVM_TEMP_FILE"

  echo "$JVM_URL" >"$JVM_TARGET_DIR/.flag"
fi

JAVA_HOME=
for d in "$JVM_TARGET_DIR" "$JVM_TARGET_DIR"/* "$JVM_TARGET_DIR"/Contents/Home "$JVM_TARGET_DIR"/*/Contents/Home; do
  if [ -e "$d/bin/java" ]; then
    JAVA_HOME="$d"
  fi
done

if [ '!' -e "$JAVA_HOME/bin/java" ]; then
  die "Unable to find bin/java under $JVM_TARGET_DIR"
fi

# Make it available for child processes
export JAVA_HOME

set +e

# GRADLE JVM WRAPPER END MARKER

# Determine the Java command to use to start the JVM.
if [ -n "$JAVA_HOME" ] ; then
    if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
        # IBM's JDK on AIX uses strange locations for the executables
        JAVACMD=$JAVA_HOME/jre/sh/java
    else
        JAVACMD=$JAVA_HOME/bin/java
    fi
    if [ ! -x "$JAVACMD" ] ; then
        die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME

Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
    fi
else
    JAVACMD=java
    if ! command -v java >/dev/null 2>&1
    then
        die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.

Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
    fi
fi

# Increase the maximum file descriptors if we can.
if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
    case $MAX_FD in #(
      max*)
        # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked.
        # shellcheck disable=SC2039,SC3045
        MAX_FD=$( ulimit -H -n ) ||
            warn "Could not query maximum file descriptor limit"
    esac
    case $MAX_FD in  #(
      '' | soft) :;; #(
      *)
        # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked.
        # shellcheck disable=SC2039,SC3045
        ulimit -n "$MAX_FD" ||
            warn "Could not set maximum file descriptor limit to $MAX_FD"
    esac
fi

# Collect all arguments for the java command, stacking in reverse order:
#   * args from the command line
#   * the main class name
#   * -classpath
#   * -D...appname settings
#   * --module-path (only if needed)
#   * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables.

# For Cygwin or MSYS, switch paths to Windows format before running java
if "$cygwin" || "$msys" ; then
    APP_HOME=$( cygpath --path --mixed "$APP_HOME" )

    JAVACMD=$( cygpath --unix "$JAVACMD" )

    # Now convert the arguments - kludge to limit ourselves to /bin/sh
    for arg do
        if
            case $arg in                                #(
              -*)   false ;;                            # don't mess with options #(
              /?*)  t=${arg#/} t=/${t%%/*}              # looks like a POSIX filepath
                    [ -e "$t" ] ;;                      #(
              *)    false ;;
            esac
        then
            arg=$( cygpath --path --ignore --mixed "$arg" )
        fi
        # Roll the args list around exactly as many times as the number of
        # args, so each arg winds up back in the position where it started, but
        # possibly modified.
        #
        # NB: a `for` loop captures its iteration list before it begins, so
        # changing the positional parameters here affects neither the number of
        # iterations, nor the values presented in `arg`.
        shift                   # remove old arg
        set -- "$@" "$arg"      # push replacement arg
    done
fi


# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'

# Collect all arguments for the java command:
#   * DEFAULT_JVM_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,
#     and any embedded shellness will be escaped.
#   * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be
#     treated as '${Hostname}' itself on the command line.

set -- \
        "-Dorg.gradle.appname=$APP_BASE_NAME" \
        -jar "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" \
        "$@"

# Stop when "xargs" is not available.
if ! command -v xargs >/dev/null 2>&1
then
    die "xargs is not available"
fi

# Use "xargs" to parse quoted args.
#
# With -n1 it outputs one arg per line, with the quotes and backslashes removed.
#
# In Bash we could simply go:
#
#   readarray ARGS < <( xargs -n1 <<<"$var" ) &&
#   set -- "${ARGS[@]}" "$@"
#
# but POSIX shell has neither arrays nor command substitution, so instead we
# post-process each arg (as a line of input to sed) to backslash-escape any
# character that might be a shell metacharacter, then use eval to reverse
# that process (while maintaining the separation between arguments), and wrap
# the whole thing up as a single "set" statement.
#
# This will of course break if any of these variables contains a newline or
# an unmatched quote.
#

eval "set -- $(
        printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" |
        xargs -n1 |
        sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' |
        tr '\n' ' '
    )" '"$@"'

exec "$JAVACMD" "$@"


================================================
FILE: gradlew.bat
================================================
@rem
@rem Copyright 2015 the original author or authors.
@rem
@rem Licensed under the Apache License, Version 2.0 (the "License");
@rem you may not use this file except in compliance with the License.
@rem You may obtain a copy of the License at
@rem
@rem      https://www.apache.org/licenses/LICENSE-2.0
@rem
@rem Unless required by applicable law or agreed to in writing, software
@rem distributed under the License is distributed on an "AS IS" BASIS,
@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@rem See the License for the specific language governing permissions and
@rem limitations under the License.
@rem
@rem SPDX-License-Identifier: Apache-2.0
@rem

@if "%DEBUG%"=="" @echo off
@rem ##########################################################################
@rem
@rem  Gradle startup script for Windows
@rem
@rem ##########################################################################

@rem Set local scope for the variables with windows NT shell
if "%OS%"=="Windows_NT" setlocal

set DIRNAME=%~dp0
if "%DIRNAME%"=="" set DIRNAME=.
@rem This is normally unused
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%

@rem Resolve any "." and ".." in APP_HOME to make it shorter.
for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi

@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"

@rem GRADLE JVM WRAPPER START MARKER

setlocal
set BUILD_DIR=%LOCALAPPDATA%\gradle-jvm

for /f "tokens=3 delims= " %%A in ('reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v "PROCESSOR_ARCHITECTURE"') do set WIN_ARCH=%%A
if "%WIN_ARCH%" equ "AMD64" (
    set JVM_TARGET_DIR=%BUILD_DIR%\jdk-25.0.2_windows-x64_bin-96701c\
    set JVM_URL=https://download.oracle.com/java/25/archive/jdk-25.0.2_windows-x64_bin.zip
) else if "%WIN_ARCH%" equ "ARM64" (
    set JVM_TARGET_DIR=%BUILD_DIR%\microsoft-jdk-25.0.2-windows-aarch64-7d2a81\
    set JVM_URL=https://aka.ms/download-jdk/microsoft-jdk-25.0.2-windows-aarch64.zip
) else (
    echo Unknown architecture %WIN_ARCH%
    goto fail
)

set IS_TAR_GZ=0
set JVM_TEMP_FILE=gradle-jvm.zip

if /I "%JVM_URL:~-7%"==".tar.gz" (
    set IS_TAR_GZ=1
    set JVM_TEMP_FILE=gradle-jvm.tar.gz
)

set POWERSHELL=%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe

if not exist "%JVM_TARGET_DIR%" MD "%JVM_TARGET_DIR%"

if not exist "%JVM_TARGET_DIR%.flag" goto downloadAndExtractJvm

set /p CURRENT_FLAG=<"%JVM_TARGET_DIR%.flag"
if "%CURRENT_FLAG%" == "%JVM_URL%" goto continueWithJvm

:downloadAndExtractJvm

PUSHD "%BUILD_DIR%"
if errorlevel 1 goto fail

echo Downloading %JVM_URL% to %BUILD_DIR%\%JVM_TEMP_FILE%
if exist "%JVM_TEMP_FILE%" DEL /F "%JVM_TEMP_FILE%"
"%POWERSHELL%" -nologo -noprofile -Command "Set-StrictMode -Version 3.0; $ErrorActionPreference = \"Stop\"; (New-Object Net.WebClient).DownloadFile('%JVM_URL%', '%JVM_TEMP_FILE%')"
if errorlevel 1 goto fail

POPD

RMDIR /S /Q "%JVM_TARGET_DIR%"
if errorlevel 1 goto fail

MKDIR "%JVM_TARGET_DIR%"
if errorlevel 1 goto fail

PUSHD "%JVM_TARGET_DIR%"
if errorlevel 1 goto fail

echo Extracting %BUILD_DIR%\%JVM_TEMP_FILE% to %JVM_TARGET_DIR%

if "%IS_TAR_GZ%"=="1" (
    tar xf "..\\%JVM_TEMP_FILE%"
) else (
    "%POWERSHELL%" -nologo -noprofile -command "Set-StrictMode -Version 3.0; $ErrorActionPreference = \"Stop\"; Add-Type -A 'System.IO.Compression.FileSystem'; [IO.Compression.ZipFile]::ExtractToDirectory('..\\%JVM_TEMP_FILE%', '.');"
)
if errorlevel 1 goto fail

DEL /F "..\%JVM_TEMP_FILE%"
if errorlevel 1 goto fail

POPD

echo %JVM_URL%>"%JVM_TARGET_DIR%.flag"
if errorlevel 1 goto fail

:continueWithJvm

set JAVA_HOME=
for /d %%d in ("%JVM_TARGET_DIR%"*) do if exist "%%d\bin\java.exe" set JAVA_HOME=%%d
if not exist "%JAVA_HOME%\bin\java.exe" (
  echo Unable to find java.exe under %JVM_TARGET_DIR%
  goto fail
)

endlocal & set JAVA_HOME=%JAVA_HOME%

@rem GRADLE JVM WRAPPER END MARKER

@rem Find java.exe
if defined JAVA_HOME goto findJavaFromJavaHome

set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
if %ERRORLEVEL% equ 0 goto execute

echo. 1>&2
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2
echo. 1>&2
echo Please set the JAVA_HOME variable in your environment to match the 1>&2
echo location of your Java installation. 1>&2

goto fail

:findJavaFromJavaHome
set JAVA_HOME=%JAVA_HOME:"=%
set JAVA_EXE=%JAVA_HOME%/bin/java.exe

if exist "%JAVA_EXE%" goto execute

echo. 1>&2
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2
echo. 1>&2
echo Please set the JAVA_HOME variable in your environment to match the 1>&2
echo location of your Java installation. 1>&2

goto fail

:execute
@rem Setup the command line



@rem Execute Gradle
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %*

:end
@rem End local scope for the variables with windows NT shell
if %ERRORLEVEL% equ 0 goto mainEnd

:fail
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
rem the _cmd.exe /c_ return code!
set EXIT_CODE=%ERRORLEVEL%
if %EXIT_CODE% equ 0 set EXIT_CODE=1
if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE%
exit /b %EXIT_CODE%

:mainEnd
if "%OS%"=="Windows_NT" endlocal

:omega


================================================
FILE: protocol/build.gradle.kts
================================================
import com.jetbrains.rd.generator.gradle.RdGenTask

plugins {
    // Version is configured in gradle.properties
    id("com.jetbrains.rdgen")
    id("org.jetbrains.kotlin.jvm")
}

repositories {
    maven("https://cache-redirector.jetbrains.com/intellij-dependencies")
    maven("https://cache-redirector.jetbrains.com/maven-central")
    val rd_version: String? by project
    if (rd_version == "SNAPSHOT") {
      mavenLocal()
    }
}

val isMonorepo = rootProject.projectDir != projectDir.parentFile
val unrealLinkRepoRoot: File = projectDir.parentFile

sourceSets {
    main {
        kotlin {
            srcDir(unrealLinkRepoRoot.resolve("protocol/src/main/kotlin/model"))
        }
    }
}

data class UnrealLinkGeneratorSettings(
    val ue4LibCsLibraryOutput: File,
    val ue4LibCppLibraryOutput: File,
    val ue4LibKtLibraryOutput: File,
    val riderModelCsOutput: File,
    val riderModelKtOutput: File,
    val csEditorOutput: File,
    val cppEditorOutput: File,
    val fileSuffix: String
)

val ktOutputRelativePath = "src/rider/generated/kotlin/com/jetbrains/rider/model"

val unrealLinkGeneratorSettings = if (isMonorepo) {
    val monorepoRoot =
        buildscript.sourceFile?.parentFile?.parentFile?.parentFile?.parentFile?.parentFile ?: error("Cannot find products home")
    check(monorepoRoot.resolve(".ultimate.root.marker").isFile) {
        error("Incorrect location in monorepo: monorepoRoot='$monorepoRoot'")
    }
    val monorepoPreGeneratedRootDir = monorepoRoot.resolve("dotnet/Plugins/_UnrealLink.Pregenerated")
    val monorepoPreGeneratedFrontendDir = monorepoPreGeneratedRootDir.resolve("Frontend")
    val monorepoPreGeneratedBackendDir = monorepoPreGeneratedRootDir.resolve("BackendModel")
    val monorepoPreGeneratedCppDir = monorepoPreGeneratedRootDir.resolve("CppModel")
    val ktOutputMonorepoRoot = monorepoPreGeneratedFrontendDir.resolve(ktOutputRelativePath)

    UnrealLinkGeneratorSettings(
        monorepoPreGeneratedBackendDir.resolve("Library"),
        monorepoPreGeneratedCppDir.resolve( "Library"),
        ktOutputMonorepoRoot.resolve("Library"),
        monorepoPreGeneratedBackendDir.resolve("RdRiderProtocol"),
        ktOutputMonorepoRoot.resolve("RdRiderProtocol"),
        monorepoPreGeneratedBackendDir.resolve("RdEditorProtocol"),
        monorepoPreGeneratedCppDir.resolve("RdEditorProtocol"),
        ".Pregenerated"
    )
} else {
    val csOutputRoot = File(unrealLinkRepoRoot, "src/dotnet/RiderPlugin.UnrealLink/obj/model")
    val cppOutputRoot = File(unrealLinkRepoRoot, "src/cpp/RiderLink/Source/RiderLink/Public/Model")
    val ktOutputRoot = File(unrealLinkRepoRoot, ktOutputRelativePath)
    UnrealLinkGeneratorSettings(
        csOutputRoot.resolve("Library"),
        cppOutputRoot.resolve( "Library"),
        ktOutputRoot.resolve("Library"),
        csOutputRoot.resolve("RdRiderProtocol"),
        ktOutputRoot.resolve("RdRiderProtocol"),
        csOutputRoot.resolve("RdEditorProtocol"),
        cppOutputRoot.resolve("RdEditorProtocol"),
        ".Pregenerated"
    )
}

rdgen {
    verbose = true
    packages = "model.editorPlugin,model.lib.ue4,model.rider"

    generator {
        language = "csharp"
        transform = "symmetric"
        root = "model.lib.ue4.UE4Library"
        directory = unrealLinkGeneratorSettings.ue4LibCsLibraryOutput.absolutePath
        generatedFileSuffix = unrealLinkGeneratorSettings.fileSuffix
    }

    generator {
        language = "cpp"
        transform = "reversed"
        root = "model.lib.ue4.UE4Library"
        directory = unrealLinkGeneratorSettings.ue4LibCppLibraryOutput.absolutePath
        generatedFileSuffix = unrealLinkGeneratorSettings.fileSuffix
    }

    generator {
        language = "kotlin"
        transform = "asis"
        root = "model.lib.ue4.UE4Library"
        directory = unrealLinkGeneratorSettings.ue4LibKtLibraryOutput.absolutePath
        generatedFileSuffix = unrealLinkGeneratorSettings.fileSuffix
    }

    generator {
        language = "csharp"
        transform = "reversed"
        root = "com.jetbrains.rider.model.nova.ide.IdeRoot"
        directory = unrealLinkGeneratorSettings.riderModelCsOutput.absolutePath
        generatedFileSuffix = unrealLinkGeneratorSettings.fileSuffix
    }

    generator {
        language = "kotlin"
        transform = "asis"
        root = "com.jetbrains.rider.model.nova.ide.IdeRoot"
        directory = unrealLinkGeneratorSettings.riderModelKtOutput.absolutePath
        generatedFileSuffix = unrealLinkGeneratorSettings.fileSuffix
    }

    generator {
        language = "csharp"
        transform = "asis"
        root = "model.editorPlugin.RdEditorRoot"
        directory = unrealLinkGeneratorSettings.csEditorOutput.absolutePath
        generatedFileSuffix = unrealLinkGeneratorSettings.fileSuffix
    }

    generator {
        language = "cpp"
        transform = "reversed"
        root = "model.editorPlugin.RdEditorRoot"
        directory = unrealLinkGeneratorSettings.cppEditorOutput.absolutePath
        generatedFileSuffix = unrealLinkGeneratorSettings.fileSuffix
    }
}

tasks.withType<RdGenTask> {
    dependsOn(sourceSets["main"].runtimeClasspath)
    classpath(sourceSets["main"].runtimeClasspath)
}

dependencies {
    if (isMonorepo) {
        implementation(project(":rider-model"))
    } else {
        val rdVersion: String by project
        val rdKotlinVersion: String by project

        implementation("com.jetbrains.rd:rd-gen:$rdVersion")
        implementation("org.jetbrains.kotlin:kotlin-stdlib:$rdKotlinVersion")
        implementation(
            project(
                mapOf(
                    "path" to ":",
                    "configuration" to "riderModel"
                )
            )
        )
    }
}


================================================
FILE: protocol/src/main/kotlin/model/editorPlugin/LiveCodingModel.kt
================================================
package model.editorPlugin

import com.jetbrains.rd.generator.nova.*
import com.jetbrains.rd.generator.nova.PredefinedType.*
@Suppress("unused")
object LiveCodingModel : Ext(RdEditorModel) {
        init {
                call("LC_IsEnabledByDefault", void, bool)
                source("LC_EnableByDefault", bool)

                call("LC_IsEnabledForSession", void, bool)
                call("LC_CanEnableForSession", void, bool)
                source("LC_EnableForSession", bool)

                call("LC_IsCompiling", void, bool)
                call("LC_HasStarted", void, bool)
                source("LC_Compile", void)
                sink("LC_OnPatchComplete", void)
        }
}


================================================
FILE: protocol/src/main/kotlin/model/editorPlugin/RdEditorModel.kt
================================================
package model.editorPlugin

import com.jetbrains.rd.generator.nova.*
import com.jetbrains.rd.generator.nova.PredefinedType.*
import com.jetbrains.rd.generator.nova.cpp.Cpp17Generator
import com.jetbrains.rd.generator.nova.csharp.CSharp50Generator
import model.lib.ue4.UE4Library

@Suppress("unused")
object RdEditorRoot : Root() {
    init {
        setting(CSharp50Generator.Namespace, "RiderPlugin.UnrealLink.Model.BackendUnreal")
        setting(Cpp17Generator.Namespace, "JetBrains::EditorPlugin")

        setting(Cpp17Generator.AdditionalHeaders, listOf("UE4TypesMarshallers.h"))
        setting(Cpp17Generator.ExportMacroName,  "RIDERLINK_API")
        setting(Cpp17Generator.GeneratePrecompiledHeaders, false)
        setting(Cpp17Generator.UsePrecompiledHeaders, false)
    }
}

@Suppress("unused")
object RdEditorModel : Ext(RdEditorRoot) {
    init {
        property("connectionInfo", UE4Library.ConnectionInfo).readonly

        signal("unrealLog", UE4Library.UnrealLogEvent).async

        signal("openBlueprint", UE4Library.BlueprintReference)

        signal("onBlueprintAdded", UE4Library.UClass).async
        call("isBlueprintPathName", UE4Library.FString, bool)
        call("getPathNameByPath", UE4Library.FString, UE4Library.FString.nullable)

        callback("AllowSetForegroundWindow", int, bool)

        property("isGameControlModuleInitialized", false).readonly
        sink("PlayStateFromEditor", UE4Library.PlayState)
        source("RequestPlayFromRider", int)
        source("RequestPauseFromRider", int)
        source("RequestResumeFromRider", int)
        source("RequestStopFromRider", int)
        source("RequestFrameSkipFromRider", int)
        sink("NotificationReplyFromEditor", UE4Library.RequestResultBase)

        sink("PlayModeFromEditor", int)
        source("PlayModeFromRider", int)

        // Hot Reload here is not Unreal's HotReload but generic Hot Reload mechanism which can be either Unreal's HotReload or Unreal's LiveCoding
        property("IsHotReloadAvailable", false).readonly
        property("IsHotReloadCompiling", false).readonly
        source("TriggerHotReload", void)
    }
}


================================================
FILE: protocol/src/main/kotlin/model/lib/ue4/UE4Library.kt
================================================
package model.lib.ue4

import com.jetbrains.rd.generator.nova.*
import com.jetbrains.rd.generator.nova.PredefinedType.*
import com.jetbrains.rd.generator.nova.cpp.Cpp17Generator
import com.jetbrains.rd.generator.nova.cpp.CppIntrinsicType
import com.jetbrains.rd.generator.nova.csharp.CSharp50Generator
import com.jetbrains.rd.generator.nova.kotlin.Kotlin11Generator

object UE4Library : Root() {
    init {
        setting(Kotlin11Generator.Namespace, "com.jetbrains.rider.plugins.unreal.model")
        setting(CSharp50Generator.Namespace, "RiderPlugin.UnrealLink.Model")
        setting(Cpp17Generator.Namespace, "JetBrains::EditorPlugin")

        setting(Cpp17Generator.AdditionalHeaders, listOf(
                "UE4TypesMarshallers.h",
                "Runtime/Core/Public/Containers/Array.h",
                "Runtime/Core/Public/Containers/ContainerAllocationPolicies.h"
        ))
        setting(Cpp17Generator.ListType, CppIntrinsicType(null, "TArray", "Containers/Array.h"))
        setting(Cpp17Generator.AllocatorType) { "FDefaultAllocator" }
        setting(Cpp17Generator.ExportMacroName,  "RIDERLINK_API")
        setting(Cpp17Generator.GeneratePrecompiledHeaders, false)
        setting(Cpp17Generator.UsePrecompiledHeaders, false)
    }

    private fun <T : Declaration> declare(intrinsic: CppIntrinsicType, factory: Toplevel.() -> T): T {
        return this.factory().apply {
            intrinsic.namespace?.let { ns ->
                setting(Cpp17Generator.Namespace, ns)
            }
            setting(Cpp17Generator.Intrinsic, intrinsic)
        }
    }

    val StringRange = structdef("StringRange") {
        field("first", int)
        field("last", int)
    }

    val FString = declare(CppIntrinsicType(null, "FString", "Containers/UnrealString.h")) {
        structdef("FString") {
            field("data", string)
        }
    }

    val PlayState = enum("PlayState") {
        +"Idle"
        +"Play"
        +"Pause"
    }

    val RequestResultBase = basestruct("RequestResultBase") {
        field("requestID", int)
    }

    @Suppress("unused")
    val RequestSucceed = structdef("RequestSucceed") extends RequestResultBase {
    }

    @Suppress("unused")
    val RequestFailed = structdef("RequestFailed") extends RequestResultBase {
        field("type", enum("NotificationType") {
            +"Message"
            +"Error"
        })
        field("message", FString)
    }

    val VerbosityType = declare(CppIntrinsicType("ELogVerbosity", "Type", "Logging/LogVerbosity.h"))
    {
        setting(Cpp17Generator.IsNonScoped, "uint8")

        enum("VerbosityType") {
            (+"NoLogging").doc("= 0")


            (+"Fatal").doc(
                    "Always prints a fatal error to console (and log file) and crashes (even if logging is disabled)"
            )

            (+"Error").doc(
                    "Prints an error to console (and log file)." +
                            "Command lets and the editor collect and report errors. Error messages result in command let failure."
            )

            (+"Warning").doc(
                    "Prints a warning to console (and log file)." +
                            "Command lets and the editor collect and report warnings. Warnings can be treated as an error.")

            (+"Display").doc(
                    "Prints a message to console (and log file)"
            )

            (+"Log").doc("Prints a message to a log file (does not print to console)")

            (+"Verbose").doc(
                    "Prints a verbose message to a log file (if Verbose logging is enabled for the given category, usually used for detailed logging)"
            )

            (+"VeryVerbose").doc(
                    "Prints a verbose message to a log file (if VeryVerbose logging is enabled, usually used for detailed logging that would otherwise spam output)"
            )

            // Log masks and special Enum values

            (+"All")/*.setting(Cpp17Generator.EnumConstantValue, 7)*/.doc("=VeryVerbose")
            (+"NumVerbosity")
            (+"VerbosityMask").setting(Cpp17Generator.EnumConstantValue, 0xf)
            (+"SetColor").setting(Cpp17Generator.EnumConstantValue, 0x40).doc("not actually a verbosity, used to set the color of an output device")
            (+"BreakOnLog").setting(Cpp17Generator.EnumConstantValue, 0x80)
        }
    }

    private val LogMessageInfo = structdef("LogMessageInfo") {
        field("type", VerbosityType)
        field("category", FString)
        field("time", dateTime.nullable)
    }

    val UnrealLogEvent = structdef("UnrealLogEvent") {
        field("info", LogMessageInfo)
        field("text", FString)
        field("bpPathRanges", immutableList(StringRange))
        field("methodRanges", immutableList(StringRange))
    }

    /*@Suppress("unused")
    private val LogMessageEvent = structdef("LogMessageEvent") extends LogEvent {
        field("message", FString)
    }*/

    val UClass = structdef("UClass") {
        field("name", FString)
    }

    @Suppress("unused")
    val BlueprintFunction = structdef("BlueprintFunction") {
        field("class", UClass)
        field("name", FString)

        const("separator", string, ":")
    }

    //region Script Call Stack
    private val ScriptCallStackFrame = structdef("ScriptCallStackFrame") {
        //        field("header", FString)
//        field("blueprintFunction", BlueprintFunction)
        field("entry", FString)
    }

    private val IScriptCallStack = basestruct("IScriptCallStack") {
        const("header", string, "Script call stack:")
    }

    @Suppress("unused")
    private val EmptyScriptCallStack = structdef("EmptyScriptCallStack") extends IScriptCallStack {
        const("message", string, "Script call stack: [Empty] (FFrame::GetStackTrace() called from native code)")
    }

    @Suppress("unused")
    private val ScriptCallStack = structdef("ScriptCallStack") extends IScriptCallStack {
        field("frames", immutableList(ScriptCallStackFrame))
    }

    @Suppress("unused")
    private val UnableToDisplayScriptCallStack = structdef("UnableToDisplayScriptCallStack") extends IScriptCallStack {
        const("message", string, "Unable to display Script Callstack. Compile with DO_BLUEPRINT_GUARD=1")
    }

    //endregion

    //region ScriptMsg
    private val IScriptMsg = basestruct("IScriptMsg") {
        const("header", string, "Script msg:")
    }

    @Suppress("unused")
    private val ScriptMsgException = structdef("ScriptMsgException") extends IScriptMsg {
        field("message", FString)
    }

    @Suppress("unused")
    private val ScriptMsgCallStack = structdef("ScriptMsgCallStack") extends IScriptMsg {
        field("message", FString)
        field("scriptCallStack", IScriptCallStack)
    }

/*
    @Suppress("unused")
    private val ScriptMsgEvent = structdef("ScriptMsgEvent") extends LogPart {
        field("scriptMsg", IScriptMsg)
    }
*/

    //endregion
    @Suppress("unused")
    val BlueprintHighlighter = structdef("BlueprintHighlighter") {
        field("begin", int)
        field("end", int)
    }

    val BlueprintReference = structdef("BlueprintReference") {
        field("pathName", FString)
        field("guid", FString)
    }

    val ConnectionInfo = structdef("ConnectionInfo") {
        field("projectName", string)
        field("executableName", string)
        field("processId", int)
    }
}



================================================
FILE: protocol/src/main/kotlin/model/rider/RdRiderModel.kt
================================================
package model.rider

import com.jetbrains.rd.generator.nova.*
import com.jetbrains.rd.generator.nova.PredefinedType.*
import com.jetbrains.rd.generator.nova.csharp.CSharp50Generator
import com.jetbrains.rd.generator.nova.kotlin.Kotlin11Generator
import com.jetbrains.rider.model.nova.ide.SolutionModel
import model.lib.ue4.UE4Library

@Suppress("unused")
object RdRiderModel : Ext(SolutionModel.Solution) {
    init {
        setting(Kotlin11Generator.Namespace, "com.jetbrains.rider.plugins.unreal.model.frontendBackend")
        setting(CSharp50Generator.Namespace, "RiderPlugin.UnrealLink.Model.FrontendBackend")
    }

    private val LinkRequest = structdef("LinkRequest") {
        field("data", UE4Library.FString)
    }

    val ILinkResponse = basestruct("ILinkResponse") {}

    val LinkResponseBlueprint = structdef("LinkResponseBlueprint") extends ILinkResponse {
        field("fullPath", UE4Library.FString)
        field("range", UE4Library.StringRange)
    }

    val LinkResponseFilePath = structdef("LinkResponseFilePath") extends ILinkResponse {
        field("fullPath", UE4Library.FString)
        field("range", UE4Library.StringRange)
    }

    val LinkResponseUnresolved = structdef("LinkResponseUnresolved") extends ILinkResponse {}

    private val MethodReference = structdef("MethodReference") {
        field("class", UE4Library.UClass)
        field("method", UE4Library.FString)

        const("separator", string, "::")
    }

    private val PluginInstallStatus = enum("PluginInstallStatus") {
        +"NoPlugin"
        +"UpToDate"
        +"InEngine"
        +"InGame"
    }


    private val EditorPluginOutOfSync = structdef("EditorPluginOutOfSync") {
        field("status", PluginInstallStatus)
        field("IsGameAvailable", bool)
    }

    private val InstallMessage = structdef("InstallMessage") {
        field("text", string)
        field("type", enum("ContentType") {
            +"Normal"
            +"Error"
        })
    }

    private val InstallPluginDescription = structdef("InstallPluginDescription") {
        field("location", enum("PluginInstallLocation") {
            +"Engine"
            +"Game"
            +"NotInstalled"
        })
        field("forceInstall", enum("ForceInstall") {
            +"Yes"
            +"No"
        })
        field("buildRequired", bool).default(true)
        field("selectedUprojectPaths", immutableList(string))
        field("unselectedUprojectPaths", immutableList(string))
    }

    private val GamePluginInstallInfo = structdef("GamePluginInstallInfo") {
        field("projectName", string)
        field("uprojectPath", string)
        field("isPluginAvailable", bool)
        field("isPluginSynced", bool)
    }

    init {
        property("editorId", 0).readonly.async

        signal("unrealLog", UE4Library.UnrealLogEvent)

        call("filterLinkCandidates", immutableList(LinkRequest), array(ILinkResponse)).async
        call("isMethodReference", MethodReference, bool).async

        signal("navigateToMethod", MethodReference)
        signal("navigateToClass", UE4Library.UClass)

        signal("openBlueprint", UE4Library.BlueprintReference)

        callback("AllowSetForegroundWindow", int, bool)

        property("isConnectedToUnrealEditor", false).readonly.async
        property("isUnrealEngineSolution", false)
        property("isPreBuiltEngine", false)
        property("connectionInfo", UE4Library.ConnectionInfo).readonly

        sink("onEditorPluginOutOfSync", EditorPluginOutOfSync)
        source("installEditorPlugin", InstallPluginDescription)
        source("refreshProjects", void)
        source("enableAutoupdatePlugin", void)

        property("isGameControlModuleInitialized", false).readonly
        sink("PlayStateFromEditor", UE4Library.PlayState)
        source("RequestPlayFromRider", int)
        source("RequestPauseFromRider", int)
        source("RequestResumeFromRider", int)
        source("RequestStopFromRider", int)
        source("RequestFrameSkipFromRider", int)
        sink("NotificationReplyFromEditor", UE4Library.RequestResultBase)

        sink("PlayModeFromEditor", int)
        source("PlayModeFromRider", int)

        sink("RiderLinkInstallPanelInit", void)
        sink("RiderLinkInstallMessage", InstallMessage).async
        sink("InstallPluginFinished", bool).async
        property("RiderLinkInstallationInProgress", false)
        property("RefreshInProgress", false)
        property("IsUproject", false)
        property("isInstallInfoAvailable", false)
        sink("gamePluginInstallInfos", immutableList(GamePluginInstallInfo))

        source("CancelRiderLinkInstall", void)

        // Hot Reload here is not Unreal's HotReload but generic Hot Reload mechanism which can be either Unreal's HotReload or Unreal's LiveCoding
        property("IsHotReloadAvailable", false).readonly
        property("IsHotReloadCompiling", false).readonly
        signal("TriggerHotReload", void)
        signal("DeletePlugin", void)
    }
}


================================================
FILE: settings.gradle.kts
================================================
rootProject.name = "UnrealLink"

pluginManagement {
    val rdVersion: String by settings
    val rdKotlinVersion: String by settings
    val intellijPlatformGradlePluginVersion: String by settings
    val gradleJvmWrapperVersion: String by settings

    repositories {
        maven("https://cache-redirector.jetbrains.com/intellij-dependencies")
        maven("https://cache-redirector.jetbrains.com/plugins.gradle.org")
        maven("https://cache-redirector.jetbrains.com/maven-central")

        if (rdVersion == "SNAPSHOT") {
            mavenLocal()
        }
    }

    plugins {
        id("com.jetbrains.rdgen") version rdVersion
        id("org.jetbrains.kotlin.jvm") version rdKotlinVersion
        id("org.jetbrains.intellij.platform") version intellijPlatformGradlePluginVersion
        id("me.filippov.gradle.jvm.wrapper") version gradleJvmWrapperVersion
    }

    resolutionStrategy {
        eachPlugin {
            when (requested.id.name) {
                // This required to correctly rd-gen plugin resolution.
                // Maybe we should switch our naming to match Gradle plugin naming convention.
                "rdgen" -> {
                    useModule("com.jetbrains.rd:rd-gen:${rdVersion}")
                }
            }
        }
    }
}

include(":protocol")


================================================
FILE: setup_unreal_plugin.cmd
================================================
.\gradlew -q symlinkPluginToUnrealProject

================================================
FILE: src/SubplatformsCollection.Root
================================================


================================================
FILE: src/cpp/BuildScript/GenerateRiderLinkZip.cs
================================================
using System;
using System.Collections.Generic;
using System.Collections.Immutable;
using System.Linq;
using System.Security.Cryptography;
using JetBrains.Application.BuildScript;
using JetBrains.Application.BuildScript.Compile;
using JetBrains.Application.BuildScript.Solution;
using JetBrains.Build;
using JetBrains.Extension;
using JetBrains.Util;
using JetBrains.Util.dataStructures;
using JetBrains.Util.Special;
using JetBrains.Util.Storage;

namespace Plugins.UnrealLink.src.cpp.BuildScript
{
  public class GenerateRiderLinkZip
  {
    [BuildStep]
    public static SubplatformFileForPackaging[] Run(AllAssembliesOnEverything allass, ProductHomeDirArtifact homedir, ILogger logger)
    {
      if (allass.FindSubplatformByClass<GenerateRiderLinkZip>() is SubplatformOnSources subplatform)
      {
        FileSystemPath dirRiderLink = homedir.ProductHomeDir / subplatform.Name.RelativePath / "RiderLink";
        FileSystemPath dirModel = dirRiderLink.Parent.Parent.Parent.Parent / "_UnrealLink.Pregenerated" / "CppModel";

        IList<ImmutableFileItem> files = dirRiderLink.GetChildFiles(flags: PathSearchFlags.RecurseIntoSubdirectories)
          .OrderBy().Select(file => ImmutableFileItem.CreateFromDisk(file).WithRelativePath(file.MakeRelativeTo(dirRiderLink))).ToList();

        IList<ImmutableFileItem> models = dirModel.GetChildFiles(flags: PathSearchFlags.RecurseIntoSubdirectories)
          .OrderBy().Select(file => ImmutableFileItem.CreateFromDisk(file).WithRelativePath((RelativePath)"Source" / "RiderLink" / "Public" / "Model" / file.MakeRelativeTo(dirModel))).ToList();
        files.AddRange(models);

        ImmutableFileItem fiUpluginTemplate = files.Single(fi => fi.RelativePath == "RiderLink.uplugin.template");
        StreamEx.TextAndEncoding taeUpluginTemplate = fiUpluginTemplate.FileContent.ReadTextFromFile();
        string sUpluginContent = taeUpluginTemplate.Text.Replace("%PLUGIN_VERSION%", GlobalDefines.FullMarketingVersionString);
        ImmutableFileItem fiUplugin = new ImmutableFileItem(fiUpluginTemplate.RelativePath.NameWithoutExtension, ImmutableByteStream.FromByteArray(taeUpluginTemplate.Encoding.GetBytes(sUpluginContent).ToImmutableArray()));

        byte[] bytesChecksumContent = MD5.Create().WithDispose(hasher =>
        {
          foreach (var fi in files) hasher.TransformBlock(fi.FileContent);
          hasher.TransformFinalBlock(Array.Empty<byte>(), 0, 0);
          return hasher.Hash;
        });
        ImmutableFileItem fiChecksum = new ImmutableFileItem("Resources/checksum", ImmutableByteStream.FromByteArray(bytesChecksumContent.ToImmutableArray()));

        ImmutableFileItem fiZip = Compression.ZipCompress(dirRiderLink.Name + ExtensionConstants.Zip, files.Where(fi => fi != fiUpluginTemplate).Concat(fiUplugin, fiChecksum), logger, whencompress: Compression.WhenToCompressEntry.Always);
        return new[] { new SubplatformFileForPackaging(subplatform.Name, fiZip) };
      }

      return Array.Empty<SubplatformFileForPackaging>();
    }
  }
}

================================================
FILE: src/cpp/RiderLink/RiderLink.uplugin.template
================================================
{
	"FileVersion": 3,
	"Version": 1,
	"VersionName": "%PLUGIN_VERSION%",
	"FriendlyName": "RiderLink",
	"Description": "Plugin for establishing IPC connection with JetBrains Rider IDE",
	"Category": "Programming",
	"CreatedBy": "JetBrains",
	"CreatedByURL": "https://www.jetbrains.com/",
	"DocsURL": "",
	"MarketplaceURL": "",
	"SupportURL": "",
	"EnabledByDefault": true,
	"CanContainContent": false,
	"IsBetaVersion": false,
	"Installed": false,
	"Modules": [
		{
			"Name": "RD",
			"Type": "EditorNoCommandlet",
			"LoadingPhase": "PreDefault"
		},
		{
			"Name": "RiderLink",
			"Type": "EditorNoCommandlet",
			"LoadingPhase": "PreDefault"
		},
		{
			"Name": "RiderLogging",
			"Type": "EditorNoCommandlet",
			"LoadingPhase": "PreDefault"
		},
		{
			"Name": "RiderBlueprint",
			"Type": "EditorNoCommandlet",
			"LoadingPhase": "Default"
		},
		{
			"Name": "RiderGameControl",
			"Type": "EditorNoCommandlet",
			"LoadingPhase": "Default"
		},
		{
			"Name": "RiderShaderInfo",
			"Type": "EditorNoCommandlet",
			"LoadingPhase": "PostEngineInit"
		},
		{
			"Name": "RiderLC",
			"Type": "EditorNoCommandlet",
			"LoadingPhase": "PostEngineInit"
		},
		{
			"Name": "RiderDebuggerSupport",
			"Type": "EditorNoCommandlet",
			"LoadingPhase": "PreDefault",
			"PlatformAllowList": [
				"Win64"
			],
			"WhitelistPlatforms": [
				"Win64"

			]
		}
	]
}

================================================
FILE: src/cpp/RiderLink/Source/RD/RD.Build.cs
================================================
using System.IO;
using UnrealBuildTool;

public class RD : ModuleRules
{
	public RD(ReadOnlyTargetRules Target) : base(Target)
	{
		PublicDependencyModuleNames.Add("Core");
		bUseRTTI = true;

#if UE_5_2_OR_LATER
		bDisableStaticAnalysis = true;
#endif

#if UE_5_2_OR_LATER
		IWYUSupport = IWYUSupport.KeepAsIs;
#else
		bEnforceIWYU = false;
#endif

#if UE_5_6_OR_LATER
		CppStandard = CppStandardVersion.Cpp20;
#elif UE_4_22_OR_LATER
		CppStandard = CppStandardVersion.Cpp17;
#endif

#if UE_4_22_OR_LATER
		PCHUsage = PCHUsageMode.NoPCHs;
#else
		PCHUsage = PCHUsageMode.NoSharedPCHs;
#endif

#if UE_5_6_OR_LATER
		CppCompileWarningSettings.ShadowVariableWarningLevel = WarningLevel.Off;
#elif UE_4_24_OR_LATER
		ShadowVariableWarningLevel = WarningLevel.Off;
#else
		bEnableShadowVariableWarnings = false;
#endif

#if UE_4_24_OR_LATER
		bUseUnity = false;
#else
		bFasterWithoutUnity = true;
#endif

		PublicDefinitions.Add("_SILENCE_ALL_CXX17_DEPRECATION_WARNINGS");

		if (Target.Platform == UnrealTargetPlatform.Win64)
		{
			PublicDefinitions.Add("_WINSOCK_DEPRECATED_NO_WARNINGS");
			PublicDefinitions.Add("_CRT_SECURE_NO_WARNINGS");
			PublicDefinitions.Add("_CRT_NONSTDC_NO_DEPRECATE");
			PublicDefinitions.Add("SPDLOG_WCHAR_FILENAMES");
			PublicDefinitions.Add("SPDLOG_WCHAR_TO_UTF8_SUPPORT");
			PrivateDefinitions.Add("WIN32_LEAN_AND_MEAN");
		}

		if (Target.Platform == UnrealTargetPlatform.Mac)
		{
			PublicDefinitions.Add("_DARWIN");
		}

		// Common dependencies
		PrivateDefinitions.Add("rd_framework_cpp_EXPORTS");
		PrivateDefinitions.Add("rd_core_cpp_EXPORTS");
		PrivateDefinitions.Add("spdlog_EXPORTS");
		PrivateDefinitions.Add("FMT_EXPORT");
		PrivateDefinitions.Add("_DISABLE_CONSTEXPR_MUTEX_CONSTRUCTOR");

		PublicDefinitions.Add("SPDLOG_NO_EXCEPTIONS");
		PublicDefinitions.Add("SPDLOG_COMPILED_LIB");
		PublicDefinitions.Add("SPDLOG_SHARED_LIB");
		PublicDefinitions.Add(
			"nssv_CONFIG_SELECT_STRING_VIEW=nssv_STRING_VIEW_NONSTD");
		PublicDefinitions.Add("FMT_SHARED");

		string[] Paths =
		{
			"src", "src/rd_core_cpp", "src/rd_core_cpp/src/main"
			, "src/rd_framework_cpp", "src/rd_framework_cpp/src/main"
			, "src/rd_framework_cpp/src/main/util", "src/rd_gen_cpp/src"
			, "thirdparty", "thirdparty/ordered-map/include"
			, "thirdparty/optional/tl", "thirdparty/variant/include"
			, "thirdparty/string-view-lite/include", "thirdparty/spdlog/include"
			, "thirdparty/clsocket/src", "thirdparty/CTPL/include", "thirdparty/utf-cpp/include"
		};

		foreach (var Item in Paths)
		{
			PublicIncludePaths.Add(Path.Combine(ModuleDirectory, Item));
		}
	}
}


================================================
FILE: src/cpp/RiderLink/Source/RD/RD.cpp
================================================
#include "RD.h"

#include <Modules/ModuleManager.h>

#define LOCTEXT_NAMESPACE "RD"

DEFINE_LOG_CATEGORY(FLogRDModule);

IMPLEMENT_MODULE(FRDModule, RD);

#undef LOCTEXT_NAMESPACE

================================================
FILE: src/cpp/RiderLink/Source/RD/RD.h
================================================
// Copyright 1998-2018 Epic Games, Inc. All Rights Reserved.

#pragma once

#include "Logging/LogMacros.h"
#include "Logging/LogVerbosity.h"
#include "Modules/ModuleInterface.h"

DECLARE_LOG_CATEGORY_EXTERN(FLogRDModule, Log, All);

class FRDModule : public IModuleInterface
{
public:
	FRDModule() = default;
	~FRDModule() = default;
};


================================================
FILE: src/cpp/RiderLink/Source/RD/src/rd_core_cpp/rd_core_export.h
================================================

#ifndef RD_CORE_API_H
#define RD_CORE_API_H

#if defined(_WIN32)
#ifdef RD_CORE_STATIC_DEFINE
#  define RD_CORE_API
#  define RD_CORE_NO_EXPORT
#else
#  ifndef RD_CORE_API
#    ifdef rd_core_cpp_EXPORTS
        /* We are building this library */
#      define RD_CORE_API __declspec(dllexport)
#    else
        /* We are using this library */
#      define RD_CORE_API __declspec(dllimport)
#    endif
#  endif

#  ifndef RD_CORE_NO_EXPORT
#    define RD_CORE_NO_EXPORT
#  endif
#endif

#ifndef RD_CORE_DEPRECATED
#  define RD_CORE_DEPRECATED __declspec(deprecated)
#endif

#ifndef RD_CORE_DEPRECATED_EXPORT
#  define RD_CORE_DEPRECATED_EXPORT RD_CORE_API RD_CORE_DEPRECATED
#endif

#ifndef RD_CORE_DEPRECATED_NO_EXPORT
#  define RD_CORE_DEPRECATED_NO_EXPORT RD_CORE_NO_EXPORT RD_CORE_DEPRECATED
#endif

#if 0 /* DEFINE_NO_DEPRECATED */
#  ifndef RD_CORE_NO_DEPRECATED
#    define RD_CORE_NO_DEPRECATED
#  endif
#endif
#endif

#if defined(unix) || defined(__unix__) || defined(__unix) || defined(__APPLE__)
#ifdef RD_CORE_STATIC_DEFINE
#  define RD_CORE_API
#  define RD_CORE_NO_EXPORT
#else
#  ifndef RD_CORE_API
#    ifdef rd_core_cpp_EXPORTS
        /* We are building this library */
#      define RD_CORE_API __attribute__((visibility("default")))
#    else
        /* We are using this library */
#      define RD_CORE_API __attribute__((visibility("default")))
#    endif
#  endif

#  ifndef RD_CORE_NO_EXPORT
#    define RD_CORE_NO_EXPORT __attribute__((visibility("hidden")))
#  endif
#endif

#ifndef RD_CORE_DEPRECATED
#  define RD_CORE_DEPRECATED __attribute__ ((__deprecated__))
#endif

#ifndef RD_CORE_DEPRECATED_EXPORT
#  define RD_CORE_DEPRECATED_EXPORT RD_CORE_API RD_CORE_DEPRECATED
#endif

#ifndef RD_CORE_DEPRECATED_NO_EXPORT
#  define RD_CORE_DEPRECATED_NO_EXPORT RD_CORE_NO_EXPORT RD_CORE_DEPRECATED
#endif

#if 0 /* DEFINE_NO_DEPRECATED */
#  ifndef RD_CORE_NO_DEPRECATED
#    define RD_CORE_NO_DEPRECATED
#  endif
#endif
#endif

#endif /* RD_CORE_API_H */


================================================
FILE: src/cpp/RiderLink/Source/RD/src/rd_core_cpp/src/main/lifetime/Lifetime.cpp
================================================
#include "Lifetime.h"

#include <memory>

#include <thirdparty.hpp>
#include <spdlog/spdlog.h>
#include <spdlog/sinks/stdout_color_sinks.h>

namespace rd
{
/*thread_local */ Lifetime::Allocator Lifetime::allocator;

LifetimeImpl* Lifetime::operator->() const
{
	return ptr.operator->();
}

std::once_flag onceFlag;

Lifetime::Lifetime(bool is_eternal) : ptr(std::allocate_shared<LifetimeImpl, Allocator>(allocator, is_eternal))
{
	std::call_once(onceFlag, [] {
		spdlog::set_default_logger(spdlog::stderr_color_mt<spdlog::synchronous_factory>("default", spdlog::color_mode::automatic));
	});
}

Lifetime Lifetime::create_nested() const
{
	Lifetime lw(false);
	ptr->attach_nested(lw.ptr);
	return lw;
}

Lifetime const& Lifetime::Eternal()
{
	static Lifetime ETERNAL(true);
	return ETERNAL;
}

bool operator==(Lifetime const& lw1, Lifetime const& lw2)
{
	return lw1.ptr == lw2.ptr;
}

bool operator!=(Lifetime const& lw1, Lifetime const& lw2)
{
	return !(lw1 == lw2);
}
}	 // namespace rd


================================================
FILE: src/cpp/RiderLink/Source/RD/src/rd_core_cpp/src/main/lifetime/Lifetime.h
================================================
#ifndef RD_CPP_CORE_LIFETIMEWRAPPER_H
#define RD_CPP_CORE_LIFETIMEWRAPPER_H

#if defined(_MSC_VER)
#pragma warning(push)
#pragma warning(disable:4251)
#endif

#include "LifetimeImpl.h"

#include <std/hash.h>

#include <memory>

#include <rd_core_export.h>

namespace rd
{
class Lifetime;

template <>
struct RD_CORE_API hash<Lifetime>
{
	size_t operator()(const Lifetime& value) const noexcept;
};

class RD_CORE_API Lifetime final
{
private:
	using Allocator = std::allocator<LifetimeImpl>;

	static /*thread_local */ Allocator allocator;

	friend class LifetimeDefinition;

	friend struct hash<Lifetime>;

	std::shared_ptr<LifetimeImpl> ptr;

public:
	static Lifetime const& Eternal();

	// region ctor/dtor

	Lifetime(Lifetime const& other) = default;

	Lifetime& operator=(Lifetime const& other) = default;

	Lifetime(Lifetime&& other) noexcept = default;

	Lifetime& operator=(Lifetime&& other) noexcept = default;

	~Lifetime() = default;
	// endregion

	friend bool RD_CORE_API operator==(Lifetime const& lw1, Lifetime const& lw2);
	friend bool RD_CORE_API operator!=(Lifetime const& lw1, Lifetime const& lw2);

	explicit Lifetime(bool is_eternal = false);

	LifetimeImpl* operator->() const;

	Lifetime create_nested() const;
};

inline size_t hash<Lifetime>::operator()(const Lifetime& value) const noexcept
{
	return hash<std::shared_ptr<LifetimeImpl> >()(value.ptr);
}
}	 // namespace rd
#if defined(_MSC_VER)
#pragma warning(pop)
#endif


#endif	  // RD_CPP_CORE_LIFETIMEWRAPPER_H


================================================
FILE: src/cpp/RiderLink/Source/RD/src/rd_core_cpp/src/main/lifetime/LifetimeDefinition.cpp
================================================
#include "LifetimeDefinition.h"

#include <spdlog/spdlog.h>

namespace rd
{
LifetimeDefinition::LifetimeDefinition(bool eternaled) : eternaled(eternaled), lifetime(eternaled)
{
}

LifetimeDefinition::LifetimeDefinition(const Lifetime& parent) : LifetimeDefinition(false)
{
	parent->attach_nested(lifetime.ptr);
}

bool LifetimeDefinition::is_terminated() const
{
	return lifetime->is_terminated();
}

void LifetimeDefinition::terminate()
{
	lifetime->terminate();
}

bool LifetimeDefinition::is_eternal() const
{
	return lifetime->is_eternal();
}

namespace
{
LifetimeDefinition ETERNAL(true);
}

std::shared_ptr<LifetimeDefinition> LifetimeDefinition::get_shared_eternal()
{
	return std::shared_ptr<LifetimeDefinition>(&ETERNAL, [](LifetimeDefinition* /*ld*/) {});
}

LifetimeDefinition::~LifetimeDefinition()
{
	if (lifetime.ptr != nullptr)
	{	 // wasn't moved
		if (!is_eternal())
		{
			if (!lifetime->is_terminated())
			{
				lifetime->terminate();
			}
		}
	}
}
}	 // namespace rd


================================================
FILE: src/cpp/RiderLink/Source/RD/src/rd_core_cpp/src/main/lifetime/LifetimeDefinition.h
================================================
#ifndef RD_CPP_CORE_LIFETIME_DEFINITION_H
#define RD_CPP_CORE_LIFETIME_DEFINITION_H

#include "util/core_traits.h"

#include "LifetimeImpl.h"
#include "Lifetime.h"

#include <functional>
#include <type_traits>

#include <rd_core_export.h>

namespace rd
{
class RD_CORE_API LifetimeDefinition
{
private:
	friend class SequentialLifetimes;

	bool eternaled = false;

public:
	Lifetime lifetime;

	explicit LifetimeDefinition(bool is_eternal = false);

	explicit LifetimeDefinition(const Lifetime& parent);

	LifetimeDefinition(LifetimeDefinition const& other) = delete;

	LifetimeDefinition& operator=(LifetimeDefinition const& other) = delete;

	LifetimeDefinition(LifetimeDefinition&& other) = default;

	LifetimeDefinition& operator=(LifetimeDefinition&& other) = default;

	virtual ~LifetimeDefinition();

	//    static std::shared_ptr<LifetimeDefinition> eternal;
	static std::shared_ptr<LifetimeDefinition> get_shared_eternal();

	bool is_terminated() const;

	bool is_eternal() const;

	void terminate();

	template <typename F>
	static auto use(F&& block) -> typename util::result_of_t<F(Lifetime)>
	{
		LifetimeDefinition definition(false);
		Lifetime lw = definition.lifetime.create_nested();
		return block(lw);
	}
};
}	 // namespace rd

#endif	  // RD_CPP_CORE_LIFETIME_DEFINITION_H


================================================
FILE: src/cpp/RiderLink/Source/RD/src/rd_core_cpp/src/main/lifetime/LifetimeImpl.cpp
================================================
#include "LifetimeImpl.h"

#include <utility>

namespace rd
{
#if __cplusplus < 201703L
LifetimeImpl::counter_t LifetimeImpl::get_id = 0;
#endif

LifetimeImpl::LifetimeImpl(bool is_eternal) : eternaled(is_eternal), id(LifetimeImpl::get_id++)
{
}

void LifetimeImpl::terminate()
{
	if (is_eternal())
		return;

	terminated = true;

	// region thread-safety section

	actions_t actions_copy;
	{
		std::lock_guard<decltype(actions_lock)> guard(actions_lock);
		actions_copy = std::move(actions);

		actions.clear();
	}
	// endregion

	for (auto it = actions_copy.rbegin(); it != actions_copy.rend(); ++it)
	{
		it->second();
	}
}

bool LifetimeImpl::is_terminated() const
{
	return terminated;
}

bool LifetimeImpl::is_eternal() const
{
	return eternaled;
}

void LifetimeImpl::attach_nested(std::shared_ptr<LifetimeImpl> nested)
{
	if (nested->is_terminated() || is_eternal())
		return;

	std::function<void()> action = [nested] { nested->terminate(); };
	counter_t action_id = add_action(action);
	nested->add_action([this, id = action_id] { actions.erase(id); });
}

LifetimeImpl::~LifetimeImpl()
{
	/*if (!is_eternal() && !is_terminated()) {
		spdlog::error("forget to terminate lifetime with id: {}", to_string(id));
		terminate();
	}*/
}
}	 // namespace rd


================================================
FILE: src/cpp/RiderLink/Source/RD/src/rd_core_cpp/src/main/lifetime/LifetimeImpl.h
================================================
#ifndef RD_CPP_CORE_LIFETIME_H
#define RD_CPP_CORE_LIFETIME_H

#if defined(_MSC_VER)
#pragma warning(push)
#pragma warning(disable:4251)
#endif

#include <std/hash.h>

#include <functional>
#include <map>
#include <memory>
#include <mutex>
#include <atomic>
#include <utility>

#include <thirdparty.hpp>

#include <rd_core_export.h>

namespace rd
{
class RD_CORE_API LifetimeImpl final
{
public:
	friend class LifetimeDefinition;

	friend class Lifetime;

	using counter_t = int32_t;

private:
	bool eternaled = false;
	std::atomic<bool> terminated{false};

	counter_t id = 0;

	counter_t action_id_in_map = 0;
	using actions_t = ordered_map<int, std::function<void()>, rd::hash<int>>;
	actions_t actions;

	void terminate();

	std::mutex actions_lock;

public:
	// region ctor/dtor
	explicit LifetimeImpl(bool is_eternal = false);

	LifetimeImpl(LifetimeImpl const& other) = delete;

	~LifetimeImpl();
	// endregion

	template <typename F>
	counter_t add_action(F&& action)
	{
		std::lock_guard<decltype(actions_lock)> guard(actions_lock);

		if (is_eternal())
		{
			return -1;
		}
		if (is_terminated())
		{
			throw std::invalid_argument("Already Terminated");
		}

		actions[action_id_in_map] = std::forward<F>(action);
		return action_id_in_map++;
	}

	void remove_action(counter_t i)
	{
		std::lock_guard<decltype(actions_lock)> guard(actions_lock);

		actions.erase(i);
	}

#if __cplusplus >= 201703L
	static inline counter_t get_id = 0;
#else
	static counter_t get_id;
#endif

	template <typename F, typename G>
	void bracket(F&& opening, G&& closing)
	{
		if (is_terminated())
			return;
		opening();
		add_action(std::forward<G>(closing));
	}

	bool is_terminated() const;

	bool is_eternal() const;

	void attach_nested(std::shared_ptr<LifetimeImpl> nested);
};
}	 // namespace rd
#if defined(_MSC_VER)
#pragma warning(pop)
#endif


#endif	  // RD_CPP_CORE_LIFETIME_H


================================================
FILE: src/cpp/RiderLink/Source/RD/src/rd_core_cpp/src/main/lifetime/SequentialLifetimes.cpp
================================================
#include "SequentialLifetimes.h"

namespace rd
{
SequentialLifetimes::SequentialLifetimes(Lifetime parent_lifetime) : parent_lifetime(std::move(parent_lifetime))
{
	this->parent_lifetime->add_action([this] { set_current_lifetime(LifetimeDefinition::get_shared_eternal()); });
}

Lifetime SequentialLifetimes::next()
{
	std::shared_ptr<LifetimeDefinition> new_def = std::make_shared<LifetimeDefinition>(parent_lifetime);
	set_current_lifetime(new_def);
	return current_def->lifetime;
}

void SequentialLifetimes::terminate_current()
{
	set_current_lifetime(LifetimeDefinition::get_shared_eternal());
}

bool SequentialLifetimes::is_terminated() const
{
	return current_def->is_eternal() || current_def->is_terminated();
}

void SequentialLifetimes::set_current_lifetime(std::shared_ptr<LifetimeDefinition> new_def)
{
	std::shared_ptr<LifetimeDefinition> prev = current_def;
	current_def = new_def;
	prev->terminate();
}
}	 // namespace rd


================================================
FILE: src/cpp/RiderLink/Source/RD/src/rd_core_cpp/src/main/lifetime/SequentialLifetimes.h
================================================
#ifndef RD_CPP_CORE_SEQUENTIAL_LIFETIMES_H
#define RD_CPP_CORE_SEQUENTIAL_LIFETIMES_H

#if defined(_MSC_VER)
#pragma warning(push)
#pragma warning(disable:4251)
#endif

#include "LifetimeDefinition.h"
#include "Lifetime.h"

#include <rd_core_export.h>

namespace rd
{
class RD_CORE_API SequentialLifetimes
{
private:
	std::shared_ptr<LifetimeDefinition> current_def = LifetimeDefinition::get_shared_eternal();
	Lifetime parent_lifetime;

public:
	// region ctor/dtor
	SequentialLifetimes() = delete;

	SequentialLifetimes(SequentialLifetimes const&) = delete;

	SequentialLifetimes& operator=(SequentialLifetimes const&) = delete;

	SequentialLifetimes(SequentialLifetimes&&) = delete;

	SequentialLifetimes& operator=(SequentialLifetimes&&) = delete;

	explicit SequentialLifetimes(Lifetime parent_lifetime);
	// endregion

	Lifetime next();

	void terminate_current();

	bool is_terminated() const;

	void set_current_lifetime(std::shared_ptr<LifetimeDefinition> new_def);
};
}	 // namespace rd
#if defined(_MSC_VER)
#pragma warning(pop)
#endif


#endif	  // RD_CPP_CORE_SEQUENTIAL_LIFETIMES_H


================================================
FILE: src/cpp/RiderLink/Source/RD/src/rd_core_cpp/src/main/reactive/Property.h
================================================
#ifndef RD_CPP_CORE_PROPERTY_H
#define RD_CPP_CORE_PROPERTY_H

#include "base/IProperty.h"
#include "reactive/base/SignalX.h"

#include <util/core_util.h>

namespace rd
{
/**
 * \brief complete class which has \a Property<T> 's properties.
 * \tparam T type of stored value (may be abstract)
 */
template <typename T>
class Property : public IProperty<T>
{
	using WT = typename IProperty<T>::WT;

public:
	// region ctor/dtor

	Property() = default;

	Property(Property&& other) = default;

	Property& operator=(Property&& other) = default;

	virtual ~Property() = default;

	template <typename F>
	explicit Property(F&& value) : IProperty<T>(std::forward<F>(value))
	{
	}
	// endregion

	T const& get() const override
	{
		RD_ASSERT_THROW_MSG(this->has_value(), "get of uninitialized value from property");
		return *(this->value);
	}

	void set(WT new_value) const override
	{
		if (!this->has_value() || (this->get() != wrapper::get<T>(new_value)))
		{
			if (this->has_value())
			{
				this->before_change.fire(*(this->value));
			}
			this->value = std::move(new_value);
			this->change.fire(*(this->value));
		}
	}

	friend bool operator==(const Property& lhs, const Property& rhs)
	{
		return &lhs == &rhs;
	}

	friend bool operator!=(const Property& lhs, const Property& rhs)
	{
		return !(rhs == lhs);
	}

	friend std::string to_string(Property const& value)
	{
		return value.has_value() ? to_string(value.get()) : "empty property"s;
	}
};
}	 // namespace rd

static_assert(std::is_move_constructible<rd::Property<int>>::value, "Is not move constructible from Property<int>");

#endif	  // RD_CPP_CORE_PROPERTY_H


================================================
FILE: src/cpp/RiderLink/Source/RD/src/rd_core_cpp/src/main/reactive/ViewableList.h
================================================
#ifndef RD_CPP_CORE_VIEWABLELIST_H
#define RD_CPP_CORE_VIEWABLELIST_H

#include "base/IViewableList.h"
#include "reactive/base/SignalX.h"
#include "util/core_util.h"

#include <algorithm>
#include <iterator>
#include <utility>

namespace rd
{
/**
 * \brief complete class which has @code IViewableList<T>'s properties
 */
template <typename T, typename A = allocator<T>>
class ViewableList : public IViewableList<T>
{
public:
	using Event = typename IViewableList<T>::Event;

private:
	using WA = typename std::allocator_traits<A>::template rebind_alloc<Wrapper<T>>;

	using data_t = std::vector<Wrapper<T>, WA>;
	mutable data_t list;
	Signal<Event> change;

protected:
	using WT = typename IViewableList<T>::WT;

	const std::vector<Wrapper<T>>& getList() const override
	{
		return list;
	}

public:
	// region ctor/dtor

	ViewableList() = default;

	ViewableList(ViewableList&&) = default;

	ViewableList& operator=(ViewableList&&) = default;

	virtual ~ViewableList() = default;

	// endregion

	// region iterators
public:
	class iterator
	{
		friend class ViewableList<T>;

		typename data_t::iterator it_;

		explicit iterator(const typename data_t::iterator& it) : it_(it)
		{
		}

	public:
		using iterator_category = std::random_access_iterator_tag;
		using value_type = T;
		using difference_type = std::ptrdiff_t;
		using pointer = T const*;
		using reference = T const&;

		iterator(const iterator& other) = default;

		iterator(iterator&& other) noexcept = default;

		iterator& operator=(const iterator& other) = default;

		iterator& operator=(iterator&& other) noexcept = default;

		iterator& operator++()
		{
			++it_;
			return *this;
		}

		iterator operator++(int)
		{
			auto it = *this;
			++*this;
			return it;
		}

		iterator& operator--()
		{
			--it_;
			return *this;
		}

		iterator operator--(int)
		{
			auto it = *this;
			--*this;
			return it;
		}

		iterator& operator+=(difference_type delta)
		{
			it_ += delta;
			return *this;
		}

		iterator& operator-=(difference_type delta)
		{
			it_ -= delta;
			return *this;
		}

		iterator operator+(difference_type delta) const
		{
			auto it = *this;
			return it += delta;
		}

		iterator operator-(difference_type delta) const
		{
			auto it = *this;
			return it -= delta;
		}

		difference_type operator-(iterator const& other) const
		{
			return it_ - other.it_;
		}

		bool operator<(iterator const& other) const noexcept
		{
			return this->it_ < other.it_;
		}

		bool operator>(iterator const& other) const noexcept
		{
			return this->it_ > other.it_;
		}

		bool operator==(iterator const& other) const noexcept
		{
			return this->it_ == other.it_;
		}

		bool operator!=(iterator const& other) const noexcept
		{
			return !(*this == other);
		}

		bool operator<=(iterator const& other) const noexcept
		{
			return (this->it_ < other.it_) || (*this == other);
		}

		bool operator>=(iterator const& other) const noexcept
		{
			return (this->it_ > other.it_) || (*this == other);
		}

		reference operator*() noexcept
		{
			return **it_;
		}

		reference operator*() const noexcept
		{
			return **it_;
		}

		pointer operator->() noexcept
		{
			return (*it_).get();
		}

		pointer operator->() const noexcept
		{
			return (*it_).get();
		}
	};

	using reverse_iterator = std::reverse_iterator<iterator>;

	iterator begin() const
	{
		return iterator(list.begin());
	}

	iterator end() const
	{
		return iterator(list.end());
	}

	reverse_iterator rbegin() const
	{
		return reverse_iterator(end());
	}

	reverse_iterator rend() const
	{
		return reverse_iterator(begin());
	}
	// endregion

	void advise(Lifetime lifetime, std::function<void(Event const&)> handler) const override
	{
		if (lifetime->is_terminated())
			return;
		change.advise(lifetime, handler);
		for (int32_t i = 0; i < static_cast<int32_t>(size()); ++i)
		{
			handler(typename Event::Add(i, &(*list[i])));
		}
	}

	bool add(WT element) const override
	{
		list.emplace_back(std::move(element));
		change.fire(typename Event::Add(static_cast<int32_t>(size()) - 1, &(*list.back())));
		return true;
	}

	bool add(size_t index, WT element) const override
	{
		list.emplace(list.begin() + index, std::move(element));
		change.fire(typename Event::Add(static_cast<int32_t>(index), &(*list[index])));
		return true;
	}

	WT removeAt(size_t index) const override
	{
		auto res = std::move(list[index]);
		list.erase(list.begin() + index);

		change.fire(typename Event::Remove(static_cast<int32_t>(index), &(*res)));
		return wrapper::unwrap<T>(std::move(res));
	}

	bool remove(T const& element) const override
	{
		auto it = std::find_if(list.begin(), list.end(), [&element](auto const& p) { return *p == element; });
		if (it == list.end())
		{
			return false;
		}
		ViewableList::removeAt(std::distance(list.begin(), it));
		return true;
	}

	T const& get(size_t index) const override
	{
		return *list[index];
	}

	WT set(size_t index, WT element) const override
	{
		auto old_value = std::move(list[index]);
		list[index] = Wrapper<T>(std::move(element));
		change.fire(typename Event::Update(static_cast<int32_t>(index), &(*old_value), &(*list[index])));	   //???
		return wrapper::unwrap<T>(std::move(old_value));
	}

	bool addAll(size_t index, std::vector<WT> elements) const override
	{
		for (auto& element : elements)
		{
			ViewableList::add(index, std::move(element));
			++index;
		}
		return true;
	}

	bool addAll(std::vector<WT> elements) const override
	{
		for (auto&& element : elements)
		{
			ViewableList::add(std::move(element));
		}
		return true;
	}

	void clear() const override
	{
		std::vector<Event> changes;
		for (size_t i = size(); i > 0; --i)
		{
			changes.push_back(typename Event::Remove(static_cast<int32_t>(i - 1), &(*list[i - 1])));
		}
		for (auto const& e : changes)
		{
			change.fire(e);
		}
		list.clear();
	}

	bool removeAll(std::vector<WT> elements) const override
	{
		// TO-DO faster
		//        std::unordered_set<T> set(elements.begin(), elements.end());

		bool res = false;
		for (size_t i = list.size(); i > 0; --i)
		{
			auto const& x = list[i - 1];
			if (std::count_if(elements.begin(), elements.end(),
					[&x](auto const& elem) { return wrapper::TransparentKeyEqual<T>()(elem, x); }) > 0)
			{
				removeAt(i - 1);
				res = true;
			}
		}
		return res;
	}

	size_t size() const override
	{
		return list.size();
	}

	bool empty() const override
	{
		return list.empty();
	}
};
}	 // namespace rd

static_assert(std::is_move_constructible<rd::ViewableList<int>>::value, "Is move constructible from ViewableList<int>");

#endif	  // RD_CPP_CORE_VIEWABLELIST_H


================================================
FILE: src/cpp/RiderLink/Source/RD/src/rd_core_cpp/src/main/reactive/ViewableMap.h
================================================
#ifndef RD_CPP_CORE_VIEWABLE_MAP_H
#define RD_CPP_CORE_VIEWABLE_MAP_H

#include "base/IViewableMap.h"
#include "reactive/base/SignalX.h"

#include <util/core_util.h>
#include <std/unordered_map.h>

#include <thirdparty.hpp>

#include <iterator>
#include <utility>

namespace rd
{
/**
 * \brief complete class which has @code IViewableMap<K, V>'s properties
 */
template <typename K, typename V, typename KA = std::allocator<K>, typename VA = std::allocator<V>>
class ViewableMap : public IViewableMap<K, V>
{
public:
	using Event = typename IViewableMap<K, V>::Event;

private:
	using WK = typename IViewableMap<K, V>::WK;
	using WV = typename IViewableMap<K, V>::WV;
	using OV = typename IViewableMap<K, V>::OV;
	using PA = typename std::allocator_traits<VA>::template rebind_alloc<std::pair<Wrapper<K>, Wrapper<V>>>;

	Signal<Event> change;

	using data_t = ordered_map<Wrapper<K>, Wrapper<V>, wrapper::TransparentHash<K>, wrapper::TransparentKeyEqual<K>, PA>;
	mutable data_t map;

public:
	// region ctor/dtor

	ViewableMap() = default;

	ViewableMap(ViewableMap&&) = default;

	ViewableMap& operator=(ViewableMap&&) = default;

	virtual ~ViewableMap() = default;
	// endregion

	// region iterators

public:
	class iterator
	{
		friend class ViewableMap<K, V>;

		mutable typename data_t::iterator it_;

		explicit iterator(const typename data_t::iterator& it) : it_(it)
		{
		}

	public:
		using iterator_category = typename data_t::iterator::iterator_category;
		using key_type = K;
		using value_type = V;
		using difference_type = std::ptrdiff_t;
		using reference = V const&;
		using pointer = V const*;

		iterator(const iterator& other) = default;

		iterator(iterator&& other) noexcept = default;

		iterator& operator=(const iterator& other) = default;

		iterator& operator=(iterator&& other) noexcept = default;

		iterator& operator++()
		{
			++it_;
			return *this;
		}

		iterator operator++(int)
		{
			auto it = *this;
			++*this;
			return it;
		}

		iterator& operator--()
		{
			--it_;
			return *this;
		}

		iterator operator--(int)
		{
			auto it = *this;
			--*this;
			return it;
		}

		iterator& operator+=(difference_type delta)
		{
			it_ += delta;
			return *this;
		}

		iterator& operator-=(difference_type delta)
		{
			it_ -= delta;
			return *this;
		}

		iterator operator+(difference_type delta) const
		{
			auto it = *this;
			return it += delta;
		}

		iterator operator-(difference_type delta) const
		{
			auto it = *this;
			return it -= delta;
		}

		difference_type operator-(iterator const& other) const
		{
			return it_ - other.it_;
		}

		bool operator<(iterator const& other) const noexcept
		{
			return this->it_ < other.it_;
		}

		bool operator>(iterator const& other) const noexcept
		{
			return this->it_ > other.it_;
		}

		bool operator==(iterator const& other) const noexcept
		{
			return this->it_ == other.it_;
		}

		bool operator!=(iterator const& other) const noexcept
		{
			return !(*this == other);
		}

		bool operator<=(iterator const& other) const noexcept
		{
			return (this->it_ < other.it_) || (*this == other);
		}

		bool operator>=(iterator const& other) const noexcept
		{
			return (this->it_ > other.it_) || (*this == other);
		}

		reference operator*() const noexcept
		{
			return *it_.value();
		}

		pointer operator->() const noexcept
		{
			return it_.value().get();
		}

		key_type const& key() const
		{
			return *it_.key();
		}

		value_type const& value() const
		{
			return *it_.value();
		}
	};

	class reverse_iterator : public std::reverse_iterator<iterator>
	{
		using base_t = std::reverse_iterator<iterator>;

	public:
		using iterator_category = typename iterator::iterator_category;
		using key_type = typename iterator::key_type;
		using value_type = typename iterator::value_type;
		using difference_type = typename iterator::difference_type;
		using reference = typename iterator::reference;
		using pointer = typename iterator::pointer;

		reverse_iterator(const reverse_iterator& other) = default;

		reverse_iterator& operator=(const reverse_iterator& other) = default;

		explicit reverse_iterator(const iterator& other) : base_t(other){};

		reverse_iterator& operator=(const iterator& other)
		{
			static_cast<base_t>(*this) = other;
		};

		key_type const& key() const
		{
			auto it = base_t::current;
			return (--(it)).key();
		}

		value_type const& value() const
		{
			auto it = base_t::current;
			return (--it).value();
		}
	};

	iterator begin() const
	{
		return iterator(map.begin());
	}

	iterator end() const
	{
		return iterator(map.end());
	}

	reverse_iterator rbegin() const
	{
		return reverse_iterator(end());
	}

	reverse_iterator rend() const
	{
		return reverse_iterator(begin());
	}

	// endregion

	void advise(Lifetime lifetime, std::function<void(Event const&)> handler) const override
	{
		change.advise(lifetime, handler);
		/*for (auto const &[key, value] : map) {*/
		for (auto const& it : map)
		{
			auto& key = it.first;
			auto& value = it.second;
			handler(Event(typename Event::Add(&(*key), &(*value))));
			;
		}
	}

	const V* get(K const& key) const override
	{
		auto it = map.find(key);
		if (it == map.end())
		{
			return nullptr;
		}
		return &(*it->second);
	}

	const V* set(WK key, WV value) const override
	{
		if (map.count(key) == 0)
		{
			/*auto[it, success] = map.emplace(std::make_unique<K>(std::move(key)), std::make_unique<V>(std::move(value)));*/
			auto node = map.emplace(std::move(key), std::move(value));
			auto& it = node.first;
			auto const& key_ptr = it->first;
			auto const& value_ptr = it->second;
			change.fire(typename Event::Add(&(*key_ptr), &(*value_ptr)));
			return nullptr;
		}
		else
		{
			auto it = map.find(key);
			auto const& key_ptr = it->first;
			auto const& value_ptr = it->second;

			if (*value_ptr != wrapper::get<V>(value))
			{	 // TO-DO more effective
				Wrapper<V> old_value = std::move(map.at(key));

				map.at(key_ptr) = Wrapper<V>(std::move(value));
				change.fire(typename Event::Update(&(*key_ptr), &(*old_value), &(*value_ptr)));
			}
			return &*(value_ptr);
		}
	}

	OV remove(K const& key) const override
	{
		if (map.count(key) > 0)
		{
			Wrapper<V> old_value = std::move(map.at(key));
			change.fire(typename Event::Remove(&key, &(*old_value)));
			map.erase(key);
			return wrapper::unwrap<V>(std::move(old_value));
		}
		return nullopt;
	}

	void clear() const override
	{
		std::vector<Event> changes;
		/*for (auto const &[key, value] : map) {*/
		for (auto const& it : map)
		{
			changes.push_back(typename Event::Remove(&(*it.first), &(*it.second)));
		}
		for (auto const& it : changes)
		{
			change.fire(it);
		}
		map.clear();
	}

	size_t size() const override
	{
		return map.size();
	}

	bool empty() const override
	{
		return map.empty();
	}
};
}	 // namespace rd

static_assert(std::is_move_constructible<rd::ViewableMap<int, int>>::value, "Is move constructible from ViewableMap<int, int>");

#endif	  // RD_CPP_CORE_VIEWABLE_MAP_H


================================================
FILE: src/cpp/RiderLink/Source/RD/src/rd_core_cpp/src/main/reactive/ViewableSet.h
================================================
#ifndef RD_CPP_CORE_VIEWABLESET_H
#define RD_CPP_CORE_VIEWABLESET_H

#include "base/IViewableSet.h"
#include "reactive/base/SignalX.h"

#include <std/allocator.h>
#include <util/core_util.h>

namespace rd
{
/**
 * \brief complete class which has @code IViewableSet<T>'s properties
 * \tparam T
 */
template <typename T, typename A = allocator<T>>
class ViewableSet : public IViewableSet<T, A>
{
public:
	using Event = typename IViewableSet<T>::Event;

	using IViewableSet<T, A>::advise;

private:
	using WT = typename IViewableSet<T, A>::WT;
	using WA = typename std::allocator_traits<A>::template rebind_alloc<Wrapper<T>>;

	Signal<Event> change;
	using data_t = ordered_set<Wrapper<T>, wrapper::TransparentHash<T>, wrapper::TransparentKeyEqual<T>, WA>;
	mutable data_t set;

public:
	// region ctor/dtor

	ViewableSet() = default;

	ViewableSet(ViewableSet&&) = default;

	ViewableSet& operator=(ViewableSet&&) = default;

	virtual ~ViewableSet() = default;
	// endregion

	// region iterators
public:
	class iterator
	{
		friend class ViewableSet<T>;

		typename data_t::iterator it_;

		explicit iterator(const typename data_t::iterator& it) : it_(it)
		{
		}

	public:
		using iterator_category = std::random_access_iterator_tag;
		using value_type = T;
		using difference_type = std::ptrdiff_t;
		using pointer = T const*;
		using reference = T const&;

		iterator(const iterator& other) = default;

		iterator(iterator&& other) noexcept = default;

		iterator& operator=(const iterator& other) = default;

		iterator& operator=(iterator&& other) noexcept = default;

		iterator& operator++()
		{
			++it_;
			return *this;
		}

		iterator operator++(int)
		{
			auto it = *this;
			++*this;
			return it;
		}

		iterator& operator--()
		{
			--it_;
			return *this;
		}

		iterator operator--(int)
		{
			auto it = *this;
			--*this;
			return it;
		}

		iterator& operator+=(difference_type delta)
		{
			it_ += delta;
			return *this;
		}

		iterator& operator-=(difference_type delta)
		{
			it_ -= delta;
			return *this;
		}

		iterator operator+(difference_type delta) const
		{
			auto it = *this;
			return it += delta;
		}

		iterator operator-(difference_type delta) const
		{
			auto it = *this;
			return it -= delta;
		}

		difference_type operator-(iterator const& other) const
		{
			return it_ - other.it_;
		}

		bool operator<(iterator const& other) const noexcept
		{
			return this->it_ < other.it_;
		}

		bool operator>(iterator const& other) const noexcept
		{
			return this->it_ > other.it_;
		}

		bool operator==(iterator const& other) const noexcept
		{
			return this->it_ == other.it_;
		}

		bool operator!=(iterator const& other) const noexcept
		{
			return !(*this == other);
		}

		bool operator<=(iterator const& other) const noexcept
		{
			return (this->it_ < other.it_) || (*this == other);
		}

		bool operator>=(iterator const& other) const noexcept
		{
			return (this->it_ > other.it_) || (*this == other);
		}

		reference operator*() const noexcept
		{
			return **it_;
		}

		pointer operator->() const noexcept
		{
			return (*it_).get();
		}
	};

	using reverse_iterator = std::reverse_iterator<iterator>;

	iterator begin() const
	{
		return iterator(set.begin());
	}

	iterator end() const
	{
		return iterator(set.end());
	}

	reverse_iterator rbegin() const
	{
		return reverse_iterator(end());
	}

	reverse_iterator rend() const
	{
		return reverse_iterator(begin());
	}

	// endregion

	bool add(WT element) const override
	{
		/*auto const &[it, success] = set.emplace(std::make_unique<T>(std::move(element)));*/
		auto const& it = set.emplace(std::move(element));
		if (!it.second)
		{
			return false;
		}
		change.fire(Event(AddRemove::ADD, &(wrapper::get<T>(*it.first))));
		return true;
	}

	bool addAll(std::vector<WT> elements) const override
	{
		for (auto&& element : elements)
		{
			ViewableSet::add(std::move(element));
		}
		return true;
	}

	void clear() const override
	{
		std::vector<Event> changes;
		for (auto const& element : set)
		{
			changes.push_back(Event(AddRemove::REMOVE, &(*element)));
		}
		for (auto const& e : changes)
		{
			change.fire(e);
		}
		set.clear();
	}

	bool remove(T const& element) const override
	{
		if (!ViewableSet::contains(element))
		{
			return false;
		}
		auto it = set.find(element);
		change.fire(Event(AddRemove::REMOVE, &(wrapper::get<T>(*it))));
		set.erase(it);
		return true;
	}

	void advise(Lifetime lifetime, std::function<void(Event const&)> handler) const override
	{
		for (auto const& x : set)
		{
			handler(Event(AddRemove::ADD, &(*x)));
		}
		change.advise(lifetime, handler);
	}

	size_t size() const override
	{
		return set.size();
	}

	bool contains(T const& element) const override
	{
		return set.count(element) > 0;
	}

	bool empty() const override
	{
		return set.empty();
	}

	template <typename... Args>
	bool emplace_add(Args&&... args) const
	{
		return add(WT{std::forward<Args>(args)...});
	}
};
}	 // namespace rd

static_assert(std::is_move_constructible<rd::ViewableSet<int>>::value, "Is move constructible from ViewableSet<int>");

#endif	  // RD_CPP_CORE_VIEWABLESET_H


================================================
FILE: src/cpp/RiderLink/Source/RD/src/rd_core_cpp/src/main/reactive/base/IProperty.h
================================================
#ifndef RD_CPP_IPROPERTY_H
#define RD_CPP_IPROPERTY_H

#include "SignalX.h"
#include "IPropertyBase.h"

#include <lifetime/Lifetime.h>
#include <types/wrapper.h>

#include <functional>

namespace rd
{
/**
 * \brief A mutable property.
 * \tparam T type of stored value (may be abstract)
 */
template <typename T>
class IProperty : public IPropertyBase<T>
{
protected:
	using WT = typename IPropertyBase<T>::WT;

public:
	// region ctor/dtor

	IProperty() = default;

	IProperty(IProperty&& other) = default;

	IProperty& operator=(IProperty&& other) = default;

	explicit IProperty(T const& value) : IPropertyBase<T>(value)
	{
	}

	template <typename F>
	explicit IProperty(F&& value) : IPropertyBase<T>(std::forward<F>(value))
	{
	}

	virtual ~IProperty() = default;
	// endregion

	virtual T const& get() const = 0;

private:
	void advise0(Lifetime lifetime, std::function<void(T const&)> handler, Signal<T> const& signal) const
	{
		if (lifetime->is_terminated())
		{
			return;
		}
		signal.advise(lifetime, handler);
		if (this->has_value())
		{
			handler(this->get());
		}
	}

	void advise_before(Lifetime lifetime, std::function<void(T const&)> handler) const override
	{
		advise0(lifetime, handler, this->before_change);
	}

public:
	void advise(Lifetime lifetime, std::function<void(T const&)> handler) const override
	{
		advise0(lifetime, std::move(handler), this->change);
	}

	/**
	 * \brief set value of type T or derived type to it.
	 */
	virtual void set(value_or_wrapper<T>) const = 0;

	/**
	 * \brief construct value of type T and delegate call to set
	 */
	template <typename... Args>
	void emplace(Args&&... args) const
	{
		set(value_or_wrapper<T>{std::forward<Args>(args)...});
	}

	void set_if_empty(WT new_value) const
	{
		if (!this->has_value())
		{
			set(std::move(new_value));
		}
	}
};
}	 // namespace rd

#endif	  // RD_CPP_IPROPERTY_H


================================================
FILE: src/cpp/RiderLink/Source/RD/src/rd_core_cpp/src/main/reactive/base/IPropertyBase.h
================================================
#ifndef RD_CPP_IPROPERTYBASE_H
#define RD_CPP_IPROPERTYBASE_H

#include "interfaces.h"
#include "SignalX.h"

#include <types/wrapper.h>
#include <lifetime/SequentialLifetimes.h>

#include "thirdparty.hpp"

namespace rd
{
template <typename T>
class IPropertyBase : public ISource<T>, public IViewable<T>
{
protected:
	mutable property_storage<T> value;

	Signal<T> change, before_change;

	using WT = value_or_wrapper<T>;

public:
	bool has_value() const
	{
		return (bool) (value);
	}

	// region ctor/dtor

	IPropertyBase() = default;

	IPropertyBase(IPropertyBase&& other) = default;

	IPropertyBase& operator=(IPropertyBase&& other) = default;

	template <typename F>
	explicit IPropertyBase(F&& value) : value(std::forward<F>(value))
	{
	}

	virtual ~IPropertyBase() = default;
	// endregion

	virtual void advise_before(Lifetime lifetime, std::function<void(T const&)> handler) const = 0;

	void view(Lifetime lifetime, std::function<void(Lifetime, T const&)> handler) const override
	{
		if (lifetime->is_terminated())
			return;

		Lifetime lf = lifetime.create_nested();
		std::shared_ptr<SequentialLifetimes> seq = std::make_shared<SequentialLifetimes>(lf);

		this->advise_before(lf, [lf, seq](T const& /*v*/) {
			if (!lf->is_terminated())
			{
				seq->terminate_current();
			}
		});

		this->advise(lf, [lf, seq, handler](T const& v) {
			if (!lf->is_terminated())
			{
				handler(seq->next(), v);
			}
		});
	}
};
}	 // namespace rd

#endif	  // RD_CPP_IPROPERTYBASE_H


================================================
FILE: src/cpp/RiderLink/Source/RD/src/rd_core_cpp/src/main/reactive/base/IViewableList.h
================================================
#ifndef RD_CPP_IVIEWABLELIST_H
#define RD_CPP_IVIEWABLELIST_H

#include "interfaces.h"
#include "viewable_collections.h"

#include <lifetime/LifetimeDefinition.h>
#include <util/overloaded.h>
#include <types/wrapper.h>

#include <std/unordered_map.h>

#include <vector>
#include <utility>
#include <algorithm>

#include "thirdparty.hpp"

namespace rd
{
namespace detail
{
template <typename T>
class ListEvent
{
public:
	class Add
	{
	public:
		int32_t index;
		T const* new_value;

		Add(int32_t index, T const* new_value) : index(index), new_value(new_value)
		{
		}
	};

	class Update
	{
	public:
		int32_t index;
		T const* old_value;
		T const* new_value;

		Update(int32_t index, T const* old_value, T const* new_value) : index(index), old_value(old_value), new_value(new_value)
		{
		}
	};

	class Remove
	{
	public:
		int32_t index;
		T const* old_value;

		Remove(int32_t index, T const* old_value) : index(index), old_value(old_value)
		{
		}
	};

	variant<Add, Update, Remove> v;

	ListEvent(Add x) : v(x)
	{
	}

	ListEvent(Update x) : v(x)
	{
	}

	ListEvent(Remove x) : v(x)
	{
	}

	int32_t get_index() const
	{
		return visit(util::make_visitor([](Add const& e) { return e.index; }, [](Update const& e) { return e.index; },
						 [](Remove const& e) { return e.index; }),
			v);
	}

	T const* get_new_value() const
	{
		return visit(util::make_visitor([](Add const& e) { return e.new_value; }, [](Update const& e) { return e.new_value; },
						 [](Remove const& /*e*/) { return static_cast<T const*>(nullptr); }),
			v);
	}

	friend std::string to_string(ListEvent const& e)
	{
		std::string res = visit(
			util::make_visitor(
				[](typename ListEvent::Add const& e) { return "Add " + std::to_string(e.index) + ":" + to_string(*e.new_value); },
				[](typename ListEvent::Update const& e) {
					return "Update " + std::to_string(e.index) + ":" +
						   //                       to_string(e.old_value) + ":" +
						   to_string(*e.new_value);
				},
				[](typename ListEvent::Remove const& e) { return "Remove " + std::to_string(e.index); }),
			e.v);
		return res;
	}
};
}	 // namespace detail
/**
 * \brief A list allowing its contents to be observed.
 * \tparam T type of stored values (may be abstract)
 */
template <typename T>
class IViewableList : public IViewable<std::pair<size_t, T const*>>, public ISource<detail::ListEvent<T>>
{
protected:
	using WT = value_or_wrapper<T>;

public:
	/**
	 * \brief Represents an addition, update or removal of an element in the list.
	 */
	using Event = typename detail::ListEvent<T>;

protected:
	mutable rd::unordered_map<Lifetime, std::vector<LifetimeDefinition>> lifetimes;

public:
	// region ctor/dtor

	IViewableList() = default;

	IViewableList(IViewableList&&) = default;

	IViewableList& operator=(IViewableList&&) = default;

	virtual ~IViewableList() = default;
	// endregion

	/**
	 * \brief Adds a subscription to additions and removals of list elements. When a list element is updated,
	 * the [handler] is called twice: to report the removal of the old element and the addition of the new one.
	 * \param lifetime lifetime of subscription.
	 * \param handler to be called.
	 */
	void advise_add_remove(Lifetime lifetime, std::function<void(AddRemove, size_t, T const&)> handler) const
	{
		advise(lifetime, [handler](Event e) {
			visit(util::make_visitor([handler](typename Event::Add const& e) { handler(AddRemove::ADD, e.index, *e.new_value); },
					  [handler](typename Event::Update const& e) {
						  handler(AddRemove::REMOVE, e.index, *e.old_value);
						  handler(AddRemove::ADD, e.index, *e.new_value);
					  },
					  [handler](typename Event::Remove const& e) { handler(AddRemove::REMOVE, e.index, *e.old_value); }),
				e.v);
		});
	}

	/**
	 * \brief Adds a subscription to changes of the contents of the list.
	 * \param lifetime lifetime of subscription.
	 * \param handler to be called.
	 */
	void view(Lifetime lifetime, std::function<void(Lifetime lifetime, std::pair<size_t, T const*> const&)> handler) const override
	{
		view(lifetime, [handler](Lifetime lt, size_t idx, T const& v) { handler(lt, std::make_pair(idx, &v)); });
	}

	/**
	 * \brief @see view	above
	 */
	void view(Lifetime lifetime, std::function<void(Lifetime, size_t, T const&)> handler) const
	{
		advise_add_remove(lifetime, [this, lifetime, handler](AddRemove kind, size_t idx, T const& value) {
			switch (kind)
			{
				case AddRemove::ADD:
				{
					LifetimeDefinition def(lifetime);
					std::vector<LifetimeDefinition>& v = lifetimes[lifetime];
					auto it = v.emplace(v.begin() + idx, std::move(def));
					handler(it->lifetime, idx, value);
					break;
				}
				case AddRemove::REMOVE:
				{
					LifetimeDefinition def = std::move(lifetimes.at(lifetime)[idx]);
					std::vector<LifetimeDefinition>& v = lifetimes.at(lifetime);
					v.erase(v.begin() + idx);
					def.terminate();
					break;
				}
			}
		});
	}

	void advise(Lifetime lifetime, std::function<void(Event const&)> handler) const override = 0;

	virtual bool add(WT element) const = 0;

	virtual bool add(size_t index, WT element) const = 0;

	virtual WT removeAt(size_t index) const = 0;

	virtual bool remove(T const& element) const = 0;

	virtual T const& get(size_t index) const = 0;

	virtual WT set(size_t index, WT element) const = 0;

	virtual bool addAll(size_t index, std::vector<WT> elements) const = 0;

	virtual bool addAll(std::vector<WT> elements) const = 0;

	virtual void clear() const = 0;

	virtual bool removeAll(std::vector<WT> elements) const = 0;

	virtual size_t size() const = 0;

	virtual bool empty() const = 0;

	template <typename... Args>
	bool emplace_add(Args&&... args) const
	{
		return add(WT{std::forward<Args>(args)...});
	}

	template <typename... Args>
	bool emplace_add(size_t index, Args&&... args) const
	{
		return add(index, WT{std::forward<Args>(args)...});
	}

	template <typename... Args>
	WT emplace_set(size_t index, Args&&... args) const
	{
		return set(index, WT{std::forward<Args>(args)...});
	}

	template <typename U>
	friend typename std::enable_if<(!std::is_abstract<U>::value), std::vector<U>>::type convert_to_list(
		IViewableList<U> const& list);

protected:
	virtual const std::vector<Wrapper<T>>& getList() const = 0;
};

template <typename T>
typename std::enable_if<(!std::is_abstract<T>::value), std::vector<T>>::type convert_to_list(IViewableList<T> const& list)
{
	std::vector<T> res(list.size());
	std::transform(list.getList().begin(), list.getList().end(), res.begin(), [](Wrapper<T> const& ptr) { return *ptr; });
	return res;
}
}	 // namespace rd

static_assert(
	std::is_move_constructible<rd::IViewableList<int>::Event>::value, "Is move constructible from IViewableList<int>::Event");

#endif	  // RD_CPP_IVIEWABLELIST_H


================================================
FILE: src/cpp/RiderLink/Source/RD/src/rd_core_cpp/src/main/reactive/base/IViewableMap.h
================================================
#ifndef RD_CPP_IVIEWABLEMAP_H
#define RD_CPP_IVIEWABLEMAP_H

#include "lifetime/LifetimeDefinition.h"
#include "util/overloaded.h"
#include "interfaces.h"
#include "viewable_collections.h"
#include "util/core_util.h"

#include "std/unordered_map.h"

#include "thirdparty.hpp"

namespace rd
{
namespace detail
{
template <typename K, typename V>
class MapEvent
{
public:
	class Add
	{
	public:
		K const* key;
		V const* new_value;

		Add(K const* key, V const* new_value) : key(key), new_value(new_value)
		{
		}
	};

	class Update
	{
	public:
		K const* key;
		V const* old_value;
		V const* new_value;

		Update(K const* key, V const* old_value, V const* new_value) : key(key), old_value(old_value), new_value(new_value)
		{
		}
	};

	class Remove
	{
	public:
		K const* key;
		V const* old_value;

		Remove(K const* key, V const* old_value) : key(key), old_value(old_value)
		{
		}
	};

	variant<Add, Update, Remove> v;

	MapEvent(Add x) : v(x)
	{
	}

	MapEvent(Update x) : v(x)
	{
	}

	MapEvent(Remove x) : v(x)
	{
	}

	K const* get_key() const
	{
		return visit(
			util::make_visitor([](typename MapEvent::Add const& e) { return e.key; },
				[](typename MapEvent::Update const& e) { return e.key; }, [](typename MapEvent::Remove const& e) { return e.key; }),
			v);
	}

	V const* get_old_value() const
	{
		return visit(util::make_visitor([](typename MapEvent::Add const&) { return static_cast<V const*>(nullptr); },
						 [](typename MapEvent::Update const& e) { return e.old_value; },
						 [](typename MapEvent::Remove const& e) { e.old_value; }),
			v);
	}

	V const* get_new_value() const
	{
		return visit(util::make_visitor([](typename MapEvent::Add const& e) { return e.new_value; },
						 [](typename MapEvent::Update const& e) { return e.new_value; },
						 [](typename MapEvent::Remove const& /*e*/) { return static_cast<V const*>(nullptr); }),
			v);
	}

	friend std::string to_string(MapEvent const& e)
	{
		std::string res =
			visit(util::make_visitor([](typename MapEvent::Add const& e)
										 -> std::string { return "Add " + to_string(*e.key) + ":" + to_string(*e.new_value); },
					  [](typename MapEvent::Update const& e) -> std::string {
						  return "Update " + to_string(*e.key) + ":" +
								 //                       to_string(e.old_value) + ":" +
								 to_string(*e.new_value);
					  },
					  [](typename MapEvent::Remove const& e) -> std::string { return "Remove " + to_string(*e.key); }),
				e.v);
		return res;
	}
};
}	 // namespace detail

/**
 * \brief A set allowing its contents to be observed.
 * \tparam K type of stored keys (may be abstract)
 * \tparam V type of stored values (may be abstract)
 */
template <typename K, typename V>
class IViewableMap : public IViewable<std::pair<K const*, V const*>>, public ISource<detail::MapEvent<K, V>>
{
protected:
	using WK = value_or_wrapper<K>;
	using WV = value_or_wrapper<V>;
	using OV = opt_or_wrapper<V>;

	mutable rd::unordered_map<Lifetime,
		ordered_map<K const*, LifetimeDefinition, wrapper::TransparentHash<K>, wrapper::TransparentKeyEqual<K>>>
		lifetimes;

public:
	/**
	 * \brief Represents an addition, update or removal of an element in the map.
	 */
	using Event = typename detail::MapEvent<K, V>;

	// region ctor/dtor

	IViewableMap() = default;

	IViewableMap(IViewableMap&&) = default;

	IViewableMap& operator=(IViewableMap&&) = default;

	virtual ~IViewableMap() = default;
	// endregion

	void view(Lifetime lifetime, std::function<void(Lifetime lifetime, std::pair<K const*, V const*> const&)

									 >
									 handler) const override
	{
		advise_add_remove(lifetime, [this, lifetime, handler](AddRemove kind, K const& key, V const& value) {
			const std::pair<K const*, V const*> entry = std::make_pair(&key, &value);
			switch (kind)
			{
				case AddRemove::ADD:
				{
					if (lifetimes[lifetime].count(key) == 0)
					{
						/*auto const &[it, inserted] = lifetimes[lifetime].emplace(key, LifetimeDefinition(lifetime));*/
						auto const& pair = lifetimes[lifetime].emplace(&key, LifetimeDefinition(lifetime));
						auto& it = pair.first;
						auto& inserted = pair.second;
						RD_ASSERT_MSG(inserted, "lifetime definition already exists in viewable map by key:" + to_string(key));
						handler(it->second.lifetime, entry);
					}
					break;
				}
				case AddRemove::REMOVE:
				{
					RD_ASSERT_MSG(lifetimes.at(lifetime).count(key) > 0,
						"attempting to remove non-existing lifetime in viewable map by key:" + to_string(key));
					LifetimeDefinition def = std::move(lifetimes.at(lifetime).at(key));
					lifetimes.at(lifetime).erase(key);
					def.terminate();
					break;
				}
			}
		});
	}

	/**
	 * \brief Adds a subscription to additions and removals of map elements. When a map element is updated, the [handler]
	 * is called twice: to report the removal of the old element and the addition of the new one.
	 * \param lifetime lifetime of subscription.
	 * \param handler to be called.
	 */
	void advise_add_remove(Lifetime lifetime, std::function<void(AddRemove, K const&, V const&)

												  >
												  handler) const
	{
		advise(lifetime, [handler](Event e) {
			visit(util::make_visitor([handler](typename Event::Add const& e) { handler(AddRemove::ADD, *e.key, *e.new_value); },
					  [handler](typename Event::Update const& e) {
						  handler(AddRemove::REMOVE, *e.key, *e.old_value);
						  handler(AddRemove::ADD, *e.key, *e.new_value);
					  },
					  [handler](typename Event::Remove const& e) { handler(AddRemove::REMOVE, *e.key, *e.old_value); }),
				e.v);
		});
	}

	/**
	 * \brief Adds a subscription to changes of the contents of the map, with the handler receiving keys and values
	 * as separate parameters.
	 *
	 * \details When [handler] is initially added, it is called receiving all keys and values currently in the map.
	 * Every time a key/value pair is added to the map, the [handler] is called receiving the new key and value.
	 * The [Lifetime] instance passed to the handler expires when the key/value pair is removed from the map.
	 *
	 * \param lifetime lifetime of subscription.
	 * \param handler to be called.
	 */
	void view(Lifetime lifetime, std::function<void(Lifetime, K const&, V const&)

									 >
									 handler) const
	{
		view(lifetime,
			[handler](Lifetime lf, const std::pair<K const*, V const*> entry) { handler(lf, *entry.first, *entry.second); });
	}

	void advise(Lifetime lifetime, std::function<void(Event const&)> handler) const override = 0;

	virtual const V* get(K const&) const = 0;

	virtual const V* set(WK, WV) const = 0;

	virtual OV remove(K const&) const = 0;

	virtual void clear() const = 0;

	virtual size_t size() const = 0;

	virtual bool empty() const = 0;

	template <typename... Args>
	const V* emplace_set(WK wk, Args&&... args) const
	{
		return set(std::move(wk), WV{std::forward<Args>(args)...});
	}
};
}	 // namespace rd

static_assert(std::is_move_constructible<rd::IViewableMap<int, int>::Event>::value,
	"Is move constructible from IViewableMap<int, int>::Event");

#endif	  // RD_CPP_IVIEWABLEMAP_H


================================================
FILE: src/cpp/RiderLink/Source/RD/src/rd_core_cpp/src/main/reactive/base/IViewableSet.h
================================================
#ifndef RD_CPP_IVIEWABLESET_H
#define RD_CPP_IVIEWABLESET_H

#include "interfaces.h"
#include "viewable_collections.h"

#include <lifetime/LifetimeDefinition.h>
#include <util/core_util.h>

#include <std/unordered_map.h>

#include <thirdparty.hpp>

namespace rd
{
namespace detail
{
template <typename T>
class SetEvent
{
public:
	SetEvent(AddRemove kind, T const* value) : kind(kind), value(value)
	{
	}

	AddRemove kind;
	T const* value;

	friend std::string to_string(SetEvent const& e)
	{
		return to_string(e.kind) + ":" + to_string(*e.value);
	}
};
}	 // namespace detail

/**
 * \brief A set allowing its contents to be observed.
 * \tparam T type of stored values (may be abstract)
 */
template <typename T, typename A = allocator<T>>
class IViewableSet : public IViewable<T>, public ISource<detail::SetEvent<T>>
{
protected:
	using WT = value_or_wrapper<T>;
	mutable rd::unordered_map<Lifetime,
		ordered_map<T const*, LifetimeDefinition, wrapper::TransparentHash<T>, wrapper::TransparentKeyEqual<T>>>
		lifetimes;

public:
	// region ctor/dtor

	IViewableSet() = default;

	IViewableSet(IViewableSet&&) = default;

	IViewableSet& operator=(IViewableSet&&) = default;

	virtual ~IViewableSet() = default;
	// endregion

	/**
	 * \brief Represents an addition or removal of an element in the set.
	 */
	using Event = typename detail::SetEvent<T>;

	/**
	 * \brief Adds a subscription for additions and removals of set elements. When the subscription is initially
	 * added, [handler] is called with [AddRemove::Add] events for all elements currently in the set.
	 *
	 * \param lifetime lifetime of subscription.
	 * \param handler to be called.
	 */
	void advise(Lifetime lifetime, std::function<void(AddRemove, T const&)> handler) const
	{
		this->advise(lifetime, [handler](Event e) { handler(e.kind, *e.value); });
	}

	/**
	 * \brief Adds a subscription to changes of the contents of the set.
	 *
	 * \details When [handler] is initially added, it is called receiving all elements currently in the set.
	 * Every time an object is added to the set, the [handler] is called receiving the new element.
	 * The [Lifetime] instance passed to the handler expires when the element is removed from the set.
	 *
	 * \param lifetime
	 * \param handler
	 */
	void view(Lifetime lifetime, std::function<void(Lifetime, T const&)> handler) const override
	{
		advise(lifetime, [this, lifetime, handler](AddRemove kind, T const& key) {
			switch (kind)
			{
				case AddRemove::ADD:
				{
					/*auto const &[it, inserted] = lifetimes[lifetime].emplace(key, LifetimeDefinition(lifetime));*/
					auto const& it = lifetimes[lifetime].emplace(&key, lifetime);
					RD_ASSERT_MSG(it.second, "lifetime definition already exists in viewable set by key:" + to_string(key));
					handler(it.first->second.lifetime, key);
					break;
				}
				case AddRemove::REMOVE:
				{
					RD_ASSERT_MSG(lifetimes.at(lifetime).count(key) > 0,
						"attempting to remove non-existing lifetime in viewable set by key:" + to_string(key));
					LifetimeDefinition def = std::move(lifetimes.at(lifetime).at(key));
					lifetimes.at(lifetime).erase(key);
					def.terminate();
					break;
				}
			}
		});
	}

	/**
	 * \brief Adds a subscription for additions and removals of set elements. When the subscription is initially
	 * added, [handler] is called with [AddRemove.Add] events for all elements currently in the set.
	 *
	 * \param lifetime lifetime of subscription.
	 * \param handler to be called.
	 */
	void advise(Lifetime lifetime, std::function<void(Event const&)> handler) const override = 0;

	virtual bool add(WT) const = 0;

	virtual bool addAll(std::vector<WT> elements) const = 0;

	virtual void clear() const = 0;

	virtual bool remove(T const&) const = 0;

	virtual size_t size() const = 0;

	virtual bool contains(T const&) const = 0;

	virtual bool empty() const = 0;

	template <typename... Args>
	bool emplace_add(Args&&... args) const
	{
		return add(WT{std::forward<Args>(args)...});
	}
};
}	 // namespace rd

static_assert(
	std::is_move_constructible<rd::IViewableSet<int>::Event>::value, "Is move constructible from IViewableSet<int>::Event");

#endif	  // RD_CPP_IVIEWABLESET_H


================================================
FILE: src/cpp/RiderLink/Source/RD/src/rd_core_cpp/src/main/reactive/base/SignalCookie.cpp
================================================
#include "SignalCookie.h"

#include <atomic>

namespace
{
std::atomic<int32_t> cookie;
}

void rd_signal_cookie_inc()
{
	++cookie;
}

void rd_signal_cookie_dec()
{
	--cookie;
}

int32_t rd_signal_cookie_get()
{
	return cookie;
}


================================================
FILE: src/cpp/RiderLink/Source/RD/src/rd_core_cpp/src/main/reactive/base/SignalCookie.h
================================================
#ifndef RD_CPP_SIGNALCOOKIE_H
#define RD_CPP_SIGNALCOOKIE_H

#include <cstdint>
#include <rd_core_export.h>

extern "C" void RD_CORE_API rd_signal_cookie_inc();
extern "C" void RD_CORE_API rd_signal_cookie_dec();
extern "C" int32_t RD_CORE_API rd_signal_cookie_get();

#endif	  // RD_CPP_SIGNALCOOKIE_H


================================================
FILE: src/cpp/RiderLink/Source/RD/src/rd_core_cpp/src/main/reactive/base/SignalX.h
================================================
#ifndef RD_CPP_CORE_SIGNAL_H
#define RD_CPP_CORE_SIGNAL_H

#include "interfaces.h"
#include "SignalCookie.h"

#include <lifetime/Lifetime.h>
#include <util/core_util.h>

#include <utility>
#include <functional>
#include <atomic>

namespace rd
{
/**
 * \brief complete class which has \a Signal<T> 's properties
 */
template <typename T>
class Signal final : public ISignal<T>
{
private:
	using WT = typename ISignal<T>::WT;

	class Event
	{
	private:
		std::function<void(T const&)> action;
		Lifetime lifetime;

	public:
		// region ctor/dtor
		Event() = delete;

		template <typename F>
		Event(F&& action, Lifetime lifetime) : action(std::forward<F>(action)), lifetime(lifetime)
		{
		}

		Event(Event&&) = default;
		// endregion

		bool is_alive() const
		{
			return !lifetime->is_terminated();
		}

		void execute_if_alive(T const& value) const
		{
			if (is_alive())
			{
				action(value);
			}
		}
	};

	using counter_t = int32_t;
	using listeners_t = std::map<counter_t, Event>;

	mutable counter_t advise_id = 0;
	mutable listeners_t listeners, priority_listeners;

	static void cleanup(listeners_t& queue)
	{
		util::erase_if(queue, [](Event const& e) -> bool { return !e.is_alive(); });
	}

	void fire_impl(T const& value, listeners_t& queue) const
	{
		for (auto const& p : queue)
		{
			auto const& event = p.second;
			event.execute_if_alive(value);
		}
		cleanup(queue);
	}

	template <typename F>
	void advise0(const Lifetime& lifetime, F&& handler, listeners_t& queue) const
	{
		if (lifetime->is_terminated())
			return;
		counter_t id = advise_id /*.load()*/;
		queue.emplace(id, Event(std::forward<F>(handler), lifetime));
		++advise_id;
	}

public:
	// region ctor/dtor

	Signal() = default;

	Signal(Signal const& other) = delete;

	Signal& operator=(Signal const& other) = delete;

	Signal(Signal&&) = default;

	Signal& operator=(Signal&&) = default;

	virtual ~Signal() = default;

	// endregion

	using ISignal<T>::fire;

	void fire(T const& value) const override
	{
		fire_impl(value, priority_listeners);
		fire_impl(value, listeners);
	}

	using ISignal<T>::advise;

	void advise(Lifetime lifetime, std::function<void(T const&)> handler) const override
	{
		advise0(lifetime, std::move(handler), isPriorityAdvise() ? priority_listeners : listeners);
	}

	static bool isPriorityAdvise()
	{
		return rd_signal_cookie_get() > 0;
	}
};

template <typename F>
void priorityAdviseSection(F&& block)
{
	rd_signal_cookie_inc();
	block();
	rd_signal_cookie_dec();
}
}	 // namespace rd

static_assert(std::is_move_constructible<rd::Signal<int>>::value, "Is not move constructible from Signal<int>");
static_assert(std::is_move_constructible<rd::Signal<rd::Void>>::value, "Is not move constructible from Signal<Void>");

#endif	  // RD_CPP_CORE_SIGNAL_H


================================================
FILE: src/cpp/RiderLink/Source/RD/src/rd_core_cpp/src/main/reactive/base/interfaces.h
================================================
#ifndef RD_CPP_CORE_INTERFACES_H
#define RD_CPP_CORE_INTERFACES_H

#include <lifetime/Lifetime.h>
#include <types/wrapper.h>
#include <util/core_traits.h>

#include <functional>
#include <type_traits>

namespace rd
{
/**
 * \brief An object that allows to subscribe to events.
 * \tparam T type of events
 */
template <typename T>
class ISource
{
public:
	virtual ~ISource() = default;

	/**
	 * \brief Adds an event subscription.
	 * \param lifetime lifetime of subscription.
	 * \param handler to be called, every time an event occurs.
	 */
	virtual void advise(Lifetime lifetime, std::function<void(T const&)> handler) const = 0;

	/**
	 * \brief @code advise with Eternal lifetime
	 */
	template <typename F>
	void advise_eternal(F&& handler) const
	{
		advise(Lifetime::Eternal(), std::forward<F>(handler));
	}

	/**
	 * \brief @code Void specialisation of @code advise method, at @tparam T=Void
	 */
	void advise(Lifetime lifetime, std::function<void()> handler) const
	{
		advise(lifetime, [handler = std::move(handler)](Void) { handler(); });
	}
};

/**
 * \brief An object that allows to subscribe to changes of its contents.
 * \tparam T type of content
 */
template <typename T>
class IViewable
{
public:
	virtual ~IViewable() = default;

	virtual void view(Lifetime lifetime, std::function<void(Lifetime, T const&)

											 >
											 handler) const = 0;
};

/**
 * \brief An object which has a collection of event listeners and can broadcast an event to the listeners.
 * \tparam T type of events
 */
template <typename T>
class ISignal : public ISource<T>
{
protected:
	using WT = value_or_wrapper<T>;

public:
	virtual ~ISignal() = default;

	virtual void fire(T const& value) const = 0;

	/**
	 * \brief @code fire specialisation at T=Void
	 */
	template <typename U = T>
	typename std::enable_if_t<util::is_void<U>> fire() const
	{
		fire(Void{});
	}
};
}	 // namespace rd

#endif	  // RD_CPP_CORE_INTERFACES_H


================================================
FILE: src/cpp/RiderLink/Source/RD/src/rd_core_cpp/src/main/reactive/base/viewable_collections.h
================================================
#ifndef RD_CPP_VIEWABLE_COLLECTIONS_H
#define RD_CPP_VIEWABLE_COLLECTIONS_H

#include <string>

namespace rd
{
enum class AddRemove
{
	ADD,
	REMOVE
};

inline std::string to_string(AddRemove kind)
{
	switch (kind)
	{
		case AddRemove::ADD:
			return "Add";
		case AddRemove::REMOVE:
			return "Remove";
		default:
			return "";
	}
}

enum class Op
{
	ADD,
	UPDATE,
	REMOVE,
	ACK
};

inline std::string to_string(Op op)
{
	switch (op)
	{
		case Op::ADD:
			return "Add";
		case Op::UPDATE:
			return "Update";
		case Op::REMOVE:
			return "Remove";
		case Op::ACK:
			return "Ack";
		default:
			return "";
	}
}
}	 // namespace rd

#endif	  // RD_CPP_VIEWABLE_COLLECTIONS_H


================================================
FILE: src/cpp/RiderLink/Source/RD/src/rd_core_cpp/src/main/std/allocator.h
================================================
#ifndef RD_CPP_ALLOCATOR_H
#define RD_CPP_ALLOCATOR_H

#include <memory>

namespace rd
{
template <typename T>
using allocator = std::allocator<T>;
}

#endif	  // RD_CPP_ALLOCATOR_H


================================================
FILE: src/cpp/RiderLink/Source/RD/src/rd_core_cpp/src/main/std/hash.h
================================================
#ifndef RD_CPP_HASH_H
#define RD_CPP_HASH_H

#include <cstddef>
#include <functional>

namespace rd
{
template <typename T>
struct hash
{
	size_t operator()(const T& value) const noexcept
	{
		return std::hash<T>()(value);
	}
};
}	 // namespace rd

#endif	  // RD_CPP_HASH_H


================================================
FILE: src/cpp/RiderLink/Source/RD/src/rd_core_cpp/src/main/std/list.h
================================================
#ifndef RD_CPP_LIST_H
#define RD_CPP_LIST_H

#include <vector>
#include <cstdint>

namespace rd
{
template <typename T>
int32_t size(T const& value) = delete;

// c++17 has std::size for std::vector
#if __cplusplus < 201703L

template <typename T, typename A>
int32_t size(std::vector<T, A> const& value)
{
	return static_cast<int32_t>(value.size());
}
#else	
template <typename T, typename A>
int32_t size(std::vector<T, A> const& value)
{
	return std::size(value);
}
#endif

template <typename T, typename A>
void resize(std::vector<T, A>& value, int32_t size)
{
	value.resize(size);
}
}	 // namespace rd

#endif	  // RD_CPP_LIST_H


================================================
FILE: src/cpp/RiderLink/Source/RD/src/rd_core_cpp/src/main/std/to_string.h
================================================
// ReSharper disable CppUE4CodingStandardNamingViolationWarning
#ifndef RD_CPP_TO_STRING_H
#define RD_CPP_TO_STRING_H

#include <string>
#include <thread>
#include <sstream>
#include <atomic>
#include <future>
#include <locale>

#include "ww898/utf_converters.hpp"

#include <thirdparty.hpp>

namespace rd
{
namespace detail
{
using std::to_string;

inline std::string to_string(std::string const& val)
{
	return val;
}

inline std::string to_string(const char* val)
{
	return val;
}

inline std::string to_string(std::wstring const& val)
{
	return ww898::utf::conv<std::string::value_type>(val);
}

inline std::string to_string(std::thread::id const& id)
{
	std::ostringstream ss;
	ss << id;
	return ss.str();
}

inline std::string to_string(std::exception const& e)
{
	return std::string(e.what());
}

inline std::string to_string(std::future_status const& status)
{
	switch (status)
	{
		case std::future_status::ready:
			return "ready";
		case std::future_status::timeout:
			return "timeout";
		case std::future_status::deferred:
			return "deferred";
		default:
			return "unknown";
	}
}

template <typename Rep, typename Period>
inline std::string to_string(std::chrono::duration<Rep, Period> const& time)
{
	return std::to_string(std::chrono::duration_cast<std::chrono::milliseconds>(time).count()) + "ms";
}

template <typename T>
inline std::string to_string(T const* val)
{
	return val ? to_string(*val) : "nullptr";
}

template <typename T>
inline std::string to_string(std::atomic<T> const& value)
{
	return to_string(value.load());
}

template <typename T>
inline std::string to_string(optional<T> const& val)
{
	if (val.has_value())
	{
		return to_string(*val);
	}
	else
	{
		return "nullopt";
	}
}

template <typename F, typename S>
inline std::string to_string(const std::pair<F, S> p)
{
	return "(" + to_string(p.first) + ", " + to_string(p.second) + ")";
}

template <template <class, class> class C, typename T, typename A>
std::string to_string(C<T, A> const& v)
{
	std::string res = "[";
	for (const auto& item : v)
	{
		res += to_string(item);
		res += ",";
	}
	res += "]";
	return res;
}

template <class T>
std::string as_string(T const& t)
{
	return to_string(t);
}

using std::to_wstring;

inline std::wstring to_wstring(std::string const& s)
{
	return ww898::utf::conv<std::wstring::value_type>(s);
}

template <class T>
std::wstring as_wstring(T const& t)
{
	return to_wstring(t);
}
}	 // namespace detail

template <typename T>
std::string to_string(T const& val)
{
	return detail::as_string(val);
}

template <typename T>
std::wstring to_wstring(T const& val)
{
	return detail::as_wstring(val);
}
}	 // namespace rd

#endif	  // RD_CPP_TO_STRING_H


================================================
FILE: src/cpp/RiderLink/Source/RD/src/rd_core_cpp/src/main/std/unordered_map.h
================================================
#ifndef RD_CPP_UNORDERED_MAP_H
#define RD_CPP_UNORDERED_MAP_H

#include "hash.h"

#include <unordered_map>

namespace rd
{
template <class _Key, class _Tp, class _Hash = hash<_Key>, class _Pred = std::equal_to<_Key>,
	class _Alloc = std::allocator<std::pair<const _Key, _Tp> > >
using unordered_map = std::unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>;
}

#endif	  // RD_CPP_UNORDERED_MAP_H


================================================
FILE: src/cpp/RiderLink/Source/RD/src/rd_core_cpp/src/main/std/unordered_set.h
================================================
#ifndef RD_CPP_UNORDERED_SET_H
#define RD_CPP_UNORDERED_SET_H

#include "hash.h"

#include <unordered_set>

namespace rd
{
template <class _Value, class _Hash = hash<_Value>, class _Pred = std::equal_to<_Value>, class _Alloc = std::allocator<_Value> >
using unordered_set = std::unordered_set<_Value, _Hash, _Pred, _Alloc>;
}

#endif	  // RD_CPP_UNORDERED_SET_H


================================================
FILE: src/cpp/RiderLink/Source/RD/src/rd_core_cpp/src/main/types/DateTime.cpp
================================================
#include "DateTime.h"

#include <sstream>
#include <iomanip>

namespace rd
{
DateTime::DateTime(time_t seconds) : seconds(seconds)
{
}

bool operator<(const DateTime& lhs, const DateTime& rhs)
{
	return lhs.seconds < rhs.seconds;
}

bool operator>(const DateTime& lhs, const DateTime& rhs)
{
	return rhs < lhs;
}

bool operator<=(const DateTime& lhs, const DateTime& rhs)
{
	return !(rhs < lhs);
}

bool operator>=(const DateTime& lhs, const DateTime& rhs)
{
	return !(lhs < rhs);
}

std::string to_string(DateTime const& time)
{
	std::stringstream ss;
	ss << std::put_time(std::localtime(&time.seconds), "%F %T");
	return ss.str();
}

bool operator==(const DateTime& lhs, const DateTime& rhs)
{
	return lhs.seconds == rhs.seconds;
}

bool operator!=(const DateTime& lhs, const DateTime& rhs)
{
	return !(rhs == lhs);
}

size_t hash<rd::DateTime>::operator()(const rd::DateTime& value) const noexcept
{
	return rd::hash<decltype(value.seconds)>()(value.seconds);
}
}	 // namespace rd


================================================
FILE: src/cpp/RiderLink/Source/RD/src/rd_core_cpp/src/main/types/DateTime.h
================================================
#ifndef RD_CPP_DATETIME_H
#define RD_CPP_DATETIME_H

#include <std/hash.h>

#include <ctime>
#include <string>

#include <rd_core_export.h>

namespace rd
{
/**
 * \brief Wrapper around time_t to be synchronized with "Date" in Kt and "DateTime" in C#.
 */
class RD_CORE_API DateTime
{
public:
	std::time_t seconds;

	explicit DateTime(time_t seconds);

	friend bool RD_CORE_API operator<(const DateTime& lhs, const DateTime& rhs);

	friend bool RD_CORE_API operator>(const DateTime& lhs, const DateTime& rhs);

	friend bool RD_CORE_API operator<=(const DateTime& lhs, const DateTime& rhs);

	friend bool RD_CORE_API operator>=(const DateTime& lhs, const DateTime& rhs);

	friend bool RD_CORE_API operator==(const DateTime& lhs, const DateTime& rhs);

	friend bool RD_CORE_API operator!=(const DateTime& lhs, const DateTime& rhs);

	//"1970-01-01 03:01:38" for example
	friend std::string RD_CORE_API to_string(DateTime const& time);
};
}	 // namespace rd
namespace rd
{
template <>
struct RD_CORE_API hash<rd::DateTime>
{
	size_t operator()(const rd::DateTime& value) const noexcept;
};
}	 // namespace rd

#endif	  // RD_CPP_DATETIME_H


================================================
FILE: src/cpp/RiderLink/Source/RD/src/rd_core_cpp/src/main/types/Void.h
================================================
#ifndef RD_CPP_VOID_H
#define RD_CPP_VOID_H

#include <functional>
#include <string>

namespace rd
{
/**
 * \brief For using in idle events
 */
class Void
{
	friend inline bool operator==(const Void&, const Void&)
	{
		return true;
	}

	friend inline bool operator!=(const Void&, const Void&)
	{
		return false;
	}
};

inline std::string to_string(Void const&)
{
	return "void";
}
}	 // namespace rd

namespace std
{
template <>
struct hash<rd::Void>
{
	size_t operator()(const rd::Void&) const noexcept
	{
		return 0;
	}
};
}	 // namespace std

#endif	  // RD_CPP_VOID_H


================================================
FILE: src/cpp/RiderLink/Source/RD/src/rd_core_cpp/src/main/types/wrapper.h
================================================
#ifndef RD_CPP_WRAPPER_H
#define RD_CPP_WRAPPER_H

#include <util/core_traits.h>
#include <std/allocator.h>
#include <std/hash.h>
#include <std/to_string.h>

#include <thirdparty.hpp>

#include <type_traits>
#include <memory>
#include <utility>

namespace rd
{
template <typename T, typename A = std::allocator<T>>
class Wrapper;

template <typename T, typename R = void>
struct helper
{
	using value_or_wrapper_type = T;
	using opt_or_wrapper_type = optional<T>;
	using property_storage = optional<T>;
	using raw_type = T;
};

template <typename T>
struct helper<T, typename std::enable_if_t<util::in_heap_v<T>>>
{
	using value_or_wrapper_type = Wrapper<T>;
	using opt_or_wrapper_type = Wrapper<T>;
	using property_storage = Wrapper<T>;
	using raw_type = T;
};

/*template<typename T>
struct helper<optional<T>> {
	using value_or_wrapper_type = Wrapper<T>;
	using opt_or_wrapper_type = Wrapper<T>;
	using property_storage = optional<optional<T>>;
	using raw_type = T;
};*/

template <typename T>
struct helper<Wrapper<T>>
{
	using value_or_wrapper_type = Wrapper<T>;
	using opt_or_wrapper_type = Wrapper<T>;
	using property_storage = Wrapper<Wrapper<T>>;
	using raw_type = T;
};

template <typename T>
using value_or_wrapper = typename helper<T>::value_or_wrapper_type;

template <typename T>
using opt_or_wrapper = typename helper<T>::opt_or_wrapper_type;

template <typename T>
using property_storage = typename helper<T>::property_storage;

template <typename T>
using raw_type = typename helper<T>::raw_type;

template <typename>
struct is_wrapper : std::false_type
{
};

template <typename T>
struct is_wrapper<Wrapper<T>> : std::true_type
{
};

template <typename T>
constexpr bool is_wrapper_v = is_wrapper<T>::value;

/**
 * \brief wrapper over value of any type. It supports semantic of shared ownership due to shared_ptr as storage.
 * \tparam T type of value
 */
template <typename T, typename A>
class Wrapper final : public std::shared_ptr<T>
{
private:
	template <typename, typename>
	friend class Wrapper;

	using Base = std::shared_ptr<T>;

	A alloc;

public:
	using type = T;

	// region ctor/dtor

	Wrapper() = default;

	Wrapper(Wrapper const&) = default;

	Wrapper& operator=(Wrapper const&) = default;

	Wrapper(Wrapper&&) = default;

	Wrapper& operator=(Wrapper&&) = default;

	constexpr explicit Wrapper(std::nullptr_t) noexcept
	{
	}

	constexpr Wrapper(nullopt_t) noexcept
	{
	}

	template <typename R, typename = typename std::enable_if_t<util::is_base_of_v<T, R>>>
	Wrapper(Wrapper<R> const& other) : Base(std::static_pointer_cast<T>(static_cast<std::shared_ptr<R>>(other)))
	{
	}

	template <typename R, typename = typename std::enable_if_t<util::is_base_of_v<T, R>>>
	Wrapper(Wrapper<R>&& other) : Base(std::static_pointer_cast<T>(static_cast<std::shared_ptr<R>>(std::move(other))))
	{
	}

	template <typename F, typename G = typename util::not_string_literal<F&&>::type,
		typename = typename std::enable_if_t<
			/*util::negation<
				util::disjunction<
					std::is_null_pointer<std::decay_t<F>>,
					std::is_same<Wrapper<T>, std::decay_t<F>>,
					detail::is_optional<std::decay_t<F>>
				>
			>::value*/
			util::conjunction<std::is_constructible<std::shared_ptr<T>, std::shared_ptr<G>>,
				util::negation<std::is_abstract<G>>>::value>>
	Wrapper(F&& value) : Base(std::allocate_shared<G>(alloc, std::forward<F>(value)))
	{
	}

	template <typename F>
	Wrapper(std::shared_ptr<F> const& ptr) noexcept : Base(std::static_pointer_cast<T>(ptr))
	{
	}

	template <typename F>
	Wrapper(std::shared_ptr<F>&& ptr) noexcept : Base(std::static_pointer_cast<T>(std::move(ptr)))
	{
	}

	template <typename U = T, typename R = typename std::enable_if_t<!std::is_abstract<std::decay_t<U>>::value>>
	Wrapper(optional<U>&& opt)
	{
		if (opt)
		{
			*this = std::allocate_shared<U>(alloc, *std::move(opt));
		}
	}

	template <typename R>
	static Wrapper<T> dynamic(Wrapper<R> const& w)
	{
		return Wrapper<T>(std::dynamic_pointer_cast<T>(w));
	}

	template <typename R>
	static Wrapper<T> dynamic(Wrapper<R>&& w)
	{
		return Wrapper<T>(std::dynamic_pointer_cast<T>(std::move(w)));
	}

	~Wrapper() = default;
	// endregion

	constexpr bool has_value() const
	{
		return operator bool();
	}

	constexpr T& operator*() &
	{
		return *static_cast<Base&>(*this);
	};

	constexpr T const& operator*() const&
	{
		return *static_cast<Base const&>(*this);
	};

	/*constexpr T &&operator*() &&{
		return *ptr.get();
	};*/

	T const* operator->() const
	{
		return Base::operator->();
	}

	T* operator->()
	{
		return Base::operator->();
	}

	explicit operator bool() const noexcept
	{
		return Base::operator bool();
	}

	friend bool operator==(const Wrapper& lhs, const Wrapper& rhs)
	{
		bool is_lhs = (bool) lhs;
		bool is_rhs = (bool) rhs;
		if (is_lhs != is_rhs)
		{
			return false;
		}
		if (!is_lhs && !is_rhs)
		{
			return true;
		}
		return *lhs.get() == *rhs.get();
	}

	friend bool operator!=(const Wrapper& lhs, const Wrapper& rhs)
	{
		return !(rhs == lhs);
	}

	friend std::string to_string(Wrapper const& value)
	{
		return value.has_value() ? to_string(*value) : "nullptr"s;
	}
};

namespace wrapper
{
template <typename T>
decltype(auto) get(T&& w)
{
	return std::forward<T>(w);
}

template <typename T>
decltype(auto) get(T const& w)
{
	return w;
}

template <typename T>
T& get(Wrapper<T>& w)
{
	return *w;
}

template <typename T>
T const& get(Wrapper<T> const& w)
{
	return *w;
}

template <typename T>
T&& get(Wrapper<T>&& w)
{
	return *std::move(std::move(w));
}

/*template<typename T>
Wrapper<T> make_wrapper(std::unique_ptr<T> &&value) {
	return Wrapper<T>(std::move(value));
}*/

template <typename T>
typename std::enable_if_t<!util::in_heap_v<T>, T> unwrap(Wrapper<T>&& ptr)
{
	return std::move(*ptr);
}

template <typename T>
typename std::enable_if_t<util::in_heap_v<T>, Wrapper<T>> unwrap(Wrapper<T>&& ptr)
{
	return Wrapper<T>(std::move(ptr));
}

template <typename T, typename... Args>
Wrapper<T> make_wrapper(Args&&... args)
{
	return Wrapper<T>(std::make_shared<T>(std::forward<Args>(args)...));
}

template <typename T, typename A, typename... Args>
Wrapper<T> allocate_wrapper(const A& alloc, Args&&... args)
{
	return Wrapper<T>(std::allocate_shared<T, A>(alloc, std::forward<Args>(args)...));
}
/*template<typename T>
constexpr Wrapper<T> null_wrapper = Wrapper<T>(nullptr);*/
}	 // namespace wrapper

template <typename T>
struct hash<rd::Wrapper<T>>
{
	size_t operator()(const rd::Wrapper<T>& value) const noexcept
	{
		return rd::hash<T>()(*value);
	}
};
}	 // namespace rd

static_assert(rd::is_wrapper<rd::Wrapper<std::wstring>>::value, "is wrapper doesn't work");

#endif	  // RD_CPP_WRAPPER_H


================================================
FILE: src/cpp/RiderLink/Source/RD/src/rd_core_cpp/src/main/util/core_traits.h
================================================
#ifndef RD_CORE_CPP_TRAITS_H
#define RD_CORE_CPP_TRAITS_H

#include <types/Void.h>

#include <type_traits>
#include <string>

namespace rd
{
class IPolymorphicSerializable;

namespace util
{
// region non_std

template <typename T, typename U>
constexpr bool is_same_v = std::is_same<T, U>::value;

template <typename Base, typename Derived>
constexpr bool is_base_of_v = std::is_base_of<Base, Derived>::value;

template <bool B>
using bool_constant = std::integral_constant<bool, B>;

template <class B>
struct negation : bool_constant<!bool(B::value)>
{
};

template <class...>
struct disjunction : std::false_type
{
};
template <class B1>
struct disjunction<B1> : B1
{
};
template <class B1, class... Bn>
struct disjunction<B1, Bn...> : std::conditional_t<bool(B1::value), B1, disjunction<Bn...>>
{
};

template <class...>
struct conjunction : std::true_type
{
};
template <class B1>
struct conjunction<B1> : B1
{
};
template <class B1, class... Bn>
struct conjunction<B1, Bn...> : std::conditional_t<bool(B1::value), conjunction<Bn...>, B1>
{
};

template <class...>
using void_t = void;

template <typename F, typename... Args>
struct is_invocable
	: std::is_constructible<std::function<void(Args...)>, std::reference_wrapper<typename std::remove_reference<F>::type>>
{
};

template <typename R, typename F, typename... Args>
struct is_invocable_r
	: std::is_constructible<std::function<R(Args...)>, std::reference_wrapper<typename std::remove_reference<F>::type>>
{
};

template <class F, class... Ts>
constexpr bool is_invocable_v = is_invocable<F, Ts...>::value;

#ifdef __cpp_lib_is_invocable
template <class> struct result_of;

template <class F, class... TN>
struct result_of<F(TN...)>
{
	using type = std::invoke_result_t<F, TN...>;
};
#else
template<class... TN> using result_of = std::result_of<TN...>;
#endif
template<class... TN> using result_of_t = typename result_of<TN...>::type;

template <typename T>
constexpr bool is_enum_v = std::is_enum<T>::value;

// TO-DO: is is_pod actually required for memcpy-like serialization?
template <class T>
constexpr bool is_pod_v = std::is_trivial<T>::value && std::is_standard_layout<T>::value;
// endregion

template <typename T>
/*inline */ constexpr bool is_void = std::is_same<T, Void>::value;

// region in_heap

template <typename T>
//		using in_heap = disjunction<std::is_abstract<T>, std::is_same<T, std::wstring>>;
using in_heap = disjunction<std::is_base_of<IPolymorphicSerializable, T>, std::is_same<T, std::wstring>>;

template <typename T>
/*inline */ constexpr bool in_heap_v = in_heap<T>::value;

static_assert(in_heap_v<std::wstring>, "std::wstring should be placed in shared memory");
static_assert(!in_heap_v<int>, "int shouldn't be placed in shared memory");

// endregion

// region literal

template <typename T>
struct is_wstring_literal :
	/*std::is_same<
			T,
			std::add_lvalue_reference_t<const wchar_t[std::extent<std::remove_reference_t<T>>::value]>*/
	std::is_convertible<T, std::wstring>
{
};

template <typename T, bool = is_wstring_literal<T>::value>
struct not_string_literal
{
	using type = std::wstring;
};

template <>
struct not_string_literal<std::wstring, true>
{
	using type = std::wstring;
};

template <typename T>
struct not_string_literal<T, false>
{
	using type = std::decay_t<T>;
};

static_assert(is_wstring_literal<decltype(L" ")>::value, "is_wstring trait doesn't work");
static_assert(is_wstring_literal<decltype(L" ")&&>::value, "is_wstring trait doesn't work");
static_assert(is_wstring_literal<decltype(L" ")&>::value, "is_wstring trait doesn't work");
static_assert(is_wstring_literal<wchar_t const (&)[1]>::value, "is_wstring trait doesn't work");
static_assert(!is_wstring_literal<int>::value, "is_wstring trait doesn't work");
//		static_assert(is_wstring_literal<std::wstring>::value, "is_wstring trait doesn't work");

// endregion
}	 // namespace util
}	 // namespace rd

#endif	  // RD_CORE_CPP_TRAITS_H


=======================
Download .txt
gitextract_ql_wvwqe/

├── .editorconfig
├── .gitattributes
├── .github/
│   └── workflows/
│       └── build.yml
├── .gitignore
├── .run/
│   ├── Debug backend.run.xml
│   └── UnrealLink [runIde].run.xml
├── CHANGELOG.md
├── CODE_OF_CONDUCT.md
├── License.txt
├── README.md
├── SETUP.md
├── SdkBasedPluginEmbedding.Root
├── SubplatformsCollection.Root
├── UnrealLink.sln
├── build.gradle.kts
├── gradle/
│   └── wrapper/
│       ├── gradle-wrapper.jar
│       └── gradle-wrapper.properties
├── gradle.properties
├── gradlew
├── gradlew.bat
├── protocol/
│   ├── build.gradle.kts
│   └── src/
│       └── main/
│           └── kotlin/
│               └── model/
│                   ├── editorPlugin/
│                   │   ├── LiveCodingModel.kt
│                   │   └── RdEditorModel.kt
│                   ├── lib/
│                   │   └── ue4/
│                   │       └── UE4Library.kt
│                   └── rider/
│                       └── RdRiderModel.kt
├── settings.gradle.kts
├── setup_unreal_plugin.cmd
├── src/
│   ├── SubplatformsCollection.Root
│   ├── cpp/
│   │   ├── BuildScript/
│   │   │   └── GenerateRiderLinkZip.cs
│   │   ├── RiderLink/
│   │   │   ├── RiderLink.uplugin.template
│   │   │   └── Source/
│   │   │       ├── RD/
│   │   │       │   ├── RD.Build.cs
│   │   │       │   ├── RD.cpp
│   │   │       │   ├── RD.h
│   │   │       │   ├── src/
│   │   │       │   │   ├── rd_core_cpp/
│   │   │       │   │   │   ├── rd_core_export.h
│   │   │       │   │   │   └── src/
│   │   │       │   │   │       └── main/
│   │   │       │   │   │           ├── lifetime/
│   │   │       │   │   │           │   ├── Lifetime.cpp
│   │   │       │   │   │           │   ├── Lifetime.h
│   │   │       │   │   │           │   ├── LifetimeDefinition.cpp
│   │   │       │   │   │           │   ├── LifetimeDefinition.h
│   │   │       │   │   │           │   ├── LifetimeImpl.cpp
│   │   │       │   │   │           │   ├── LifetimeImpl.h
│   │   │       │   │   │           │   ├── SequentialLifetimes.cpp
│   │   │       │   │   │           │   └── SequentialLifetimes.h
│   │   │       │   │   │           ├── reactive/
│   │   │       │   │   │           │   ├── Property.h
│   │   │       │   │   │           │   ├── ViewableList.h
│   │   │       │   │   │           │   ├── ViewableMap.h
│   │   │       │   │   │           │   ├── ViewableSet.h
│   │   │       │   │   │           │   └── base/
│   │   │       │   │   │           │       ├── IProperty.h
│   │   │       │   │   │           │       ├── IPropertyBase.h
│   │   │       │   │   │           │       ├── IViewableList.h
│   │   │       │   │   │           │       ├── IViewableMap.h
│   │   │       │   │   │           │       ├── IViewableSet.h
│   │   │       │   │   │           │       ├── SignalCookie.cpp
│   │   │       │   │   │           │       ├── SignalCookie.h
│   │   │       │   │   │           │       ├── SignalX.h
│   │   │       │   │   │           │       ├── interfaces.h
│   │   │       │   │   │           │       └── viewable_collections.h
│   │   │       │   │   │           ├── std/
│   │   │       │   │   │           │   ├── allocator.h
│   │   │       │   │   │           │   ├── hash.h
│   │   │       │   │   │           │   ├── list.h
│   │   │       │   │   │           │   ├── to_string.h
│   │   │       │   │   │           │   ├── unordered_map.h
│   │   │       │   │   │           │   └── unordered_set.h
│   │   │       │   │   │           ├── types/
│   │   │       │   │   │           │   ├── DateTime.cpp
│   │   │       │   │   │           │   ├── DateTime.h
│   │   │       │   │   │           │   ├── Void.h
│   │   │       │   │   │           │   └── wrapper.h
│   │   │       │   │   │           └── util/
│   │   │       │   │   │               ├── core_traits.h
│   │   │       │   │   │               ├── core_util.h
│   │   │       │   │   │               ├── enum.h
│   │   │       │   │   │               ├── erase_if.h
│   │   │       │   │   │               ├── gen_util.h
│   │   │       │   │   │               ├── overloaded.h
│   │   │       │   │   │               └── shared_function.h
│   │   │       │   │   ├── rd_framework_cpp/
│   │   │       │   │   │   ├── rd_framework_export.h
│   │   │       │   │   │   └── src/
│   │   │       │   │   │       └── main/
│   │   │       │   │   │           ├── base/
│   │   │       │   │   │           │   ├── IProtocol.cpp
│   │   │       │   │   │           │   ├── IProtocol.h
│   │   │       │   │   │           │   ├── IRdBindable.h
│   │   │       │   │   │           │   ├── IRdDynamic.h
│   │   │       │   │   │           │   ├── IRdReactive.h
│   │   │       │   │   │           │   ├── IRdWireable.cpp
│   │   │       │   │   │           │   ├── IRdWireable.h
│   │   │       │   │   │           │   ├── ISerializersOwner.cpp
│   │   │       │   │   │           │   ├── ISerializersOwner.h
│   │   │       │   │   │           │   ├── IUnknownInstance.cpp
│   │   │       │   │   │           │   ├── IUnknownInstance.h
│   │   │       │   │   │           │   ├── IWire.h
│   │   │       │   │   │           │   ├── RdBindableBase.cpp
│   │   │       │   │   │           │   ├── RdBindableBase.h
│   │   │       │   │   │           │   ├── RdPropertyBase.h
│   │   │       │   │   │           │   ├── RdReactiveBase.cpp
│   │   │       │   │   │           │   ├── RdReactiveBase.h
│   │   │       │   │   │           │   ├── WireBase.cpp
│   │   │       │   │   │           │   └── WireBase.h
│   │   │       │   │   │           ├── ext/
│   │   │       │   │   │           │   ├── ExtWire.cpp
│   │   │       │   │   │           │   ├── ExtWire.h
│   │   │       │   │   │           │   ├── RdExtBase.cpp
│   │   │       │   │   │           │   └── RdExtBase.h
│   │   │       │   │   │           ├── impl/
│   │   │       │   │   │           │   ├── RName.cpp
│   │   │       │   │   │           │   ├── RName.h
│   │   │       │   │   │           │   ├── RdList.h
│   │   │       │   │   │           │   ├── RdMap.h
│   │   │       │   │   │           │   ├── RdProperty.h
│   │   │       │   │   │           │   ├── RdSet.h
│   │   │       │   │   │           │   └── RdSignal.h
│   │   │       │   │   │           ├── intern/
│   │   │       │   │   │           │   ├── InternRoot.cpp
│   │   │       │   │   │           │   ├── InternRoot.h
│   │   │       │   │   │           │   ├── InternScheduler.cpp
│   │   │       │   │   │           │   └── InternScheduler.h
│   │   │       │   │   │           ├── protocol/
│   │   │       │   │   │           │   ├── Buffer.cpp
│   │   │       │   │   │           │   ├── Buffer.h
│   │   │       │   │   │           │   ├── Identities.cpp
│   │   │       │   │   │           │   ├── Identities.h
│   │   │       │   │   │           │   ├── MessageBroker.cpp
│   │   │       │   │   │           │   ├── MessageBroker.h
│   │   │       │   │   │           │   ├── Protocol.cpp
│   │   │       │   │   │           │   ├── Protocol.h
│   │   │       │   │   │           │   ├── RdId.cpp
│   │   │       │   │   │           │   └── RdId.h
│   │   │       │   │   │           ├── scheduler/
│   │   │       │   │   │           │   ├── SimpleScheduler.cpp
│   │   │       │   │   │           │   ├── SimpleScheduler.h
│   │   │       │   │   │           │   ├── SingleThreadScheduler.cpp
│   │   │       │   │   │           │   ├── SingleThreadScheduler.h
│   │   │       │   │   │           │   ├── SynchronousScheduler.cpp
│   │   │       │   │   │           │   ├── SynchronousScheduler.h
│   │   │       │   │   │           │   └── base/
│   │   │       │   │   │           │       ├── IScheduler.cpp
│   │   │       │   │   │           │       ├── IScheduler.h
│   │   │       │   │   │           │       ├── SingleThreadSchedulerBase.cpp
│   │   │       │   │   │           │       └── SingleThreadSchedulerBase.h
│   │   │       │   │   │           ├── serialization/
│   │   │       │   │   │           │   ├── AbstractPolymorphic.h
│   │   │       │   │   │           │   ├── ArraySerializer.h
│   │   │       │   │   │           │   ├── DefaultAbstractDeclaration.cpp
│   │   │       │   │   │           │   ├── DefaultAbstractDeclaration.h
│   │   │       │   │   │           │   ├── ISerializable.cpp
│   │   │       │   │   │           │   ├── ISerializable.h
│   │   │       │   │   │           │   ├── InternedAnySerializer.h
│   │   │       │   │   │           │   ├── InternedSerializer.h
│   │   │       │   │   │           │   ├── NullableSerializer.h
│   │   │       │   │   │           │   ├── Polymorphic.cpp
│   │   │       │   │   │           │   ├── Polymorphic.h
│   │   │       │   │   │           │   ├── RdAny.cpp
│   │   │       │   │   │           │   ├── RdAny.h
│   │   │       │   │   │           │   ├── SerializationCtx.cpp
│   │   │       │   │   │           │   ├── SerializationCtx.h
│   │   │       │   │   │           │   ├── Serializers.cpp
│   │   │       │   │   │           │   └── Serializers.h
│   │   │       │   │   │           ├── task/
│   │   │       │   │   │           │   ├── RdCall.h
│   │   │       │   │   │           │   ├── RdEndpoint.h
│   │   │       │   │   │           │   ├── RdSymmetricCall.h
│   │   │       │   │   │           │   ├── RdTask.h
│   │   │       │   │   │           │   ├── RdTaskImpl.h
│   │   │       │   │   │           │   ├── RdTaskResult.h
│   │   │       │   │   │           │   ├── WiredRdTask.h
│   │   │       │   │   │           │   └── WiredRdTaskImpl.h
│   │   │       │   │   │           ├── util/
│   │   │       │   │   │           │   ├── framework_traits.h
│   │   │       │   │   │           │   ├── guards.h
│   │   │       │   │   │           │   ├── hashing.cpp
│   │   │       │   │   │           │   ├── hashing.h
│   │   │       │   │   │           │   ├── thread_util.cpp
│   │   │       │   │   │           │   └── thread_util.h
│   │   │       │   │   │           └── wire/
│   │   │       │   │   │               ├── ByteBufferAsyncProcessor.cpp
│   │   │       │   │   │               ├── ByteBufferAsyncProcessor.h
│   │   │       │   │   │               ├── PkgInputStream.cpp
│   │   │       │   │   │               ├── PkgInputStream.h
│   │   │       │   │   │               ├── PumpScheduler.cpp
│   │   │       │   │   │               ├── PumpScheduler.h
│   │   │       │   │   │               ├── SocketWire.cpp
│   │   │       │   │   │               ├── SocketWire.h
│   │   │       │   │   │               ├── WireUtil.cpp
│   │   │       │   │   │               └── WireUtil.h
│   │   │       │   │   └── rd_gen_cpp/
│   │   │       │   │       └── src/
│   │   │       │   │           ├── RdTextBuffer.cpp
│   │   │       │   │           └── RdTextBuffer.h
│   │   │       │   └── thirdparty/
│   │   │       │       ├── CTPL/
│   │   │       │       │   ├── LICENSE
│   │   │       │       │   ├── README.md
│   │   │       │       │   └── include/
│   │   │       │       │       └── ctpl_stl.h
│   │   │       │       ├── clsocket/
│   │   │       │       │   ├── README
│   │   │       │       │   └── src/
│   │   │       │       │       ├── ActiveSocket.cpp
│   │   │       │       │       ├── ActiveSocket.h
│   │   │       │       │       ├── Host.h
│   │   │       │       │       ├── PassiveSocket.cpp
│   │   │       │       │       ├── PassiveSocket.h
│   │   │       │       │       ├── SimpleSocket.cpp
│   │   │       │       │       ├── SimpleSocket.h
│   │   │       │       │       └── StatTimer.h
│   │   │       │       ├── countdownlatch/
│   │   │       │       │   ├── LICENSE
│   │   │       │       │   ├── README.md
│   │   │       │       │   ├── countdownlatch.cpp
│   │   │       │       │   └── countdownlatch.hpp
│   │   │       │       ├── optional/
│   │   │       │       │   ├── COPYING
│   │   │       │       │   ├── README.md
│   │   │       │       │   └── tl/
│   │   │       │       │       └── optional.hpp
│   │   │       │       ├── ordered-map/
│   │   │       │       │   ├── LICENSE
│   │   │       │       │   ├── README.md
│   │   │       │       │   └── include/
│   │   │       │       │       └── tsl/
│   │   │       │       │           ├── ordered_hash.h
│   │   │       │       │           ├── ordered_map.h
│   │   │       │       │           └── ordered_set.h
│   │   │       │       ├── spdlog/
│   │   │       │       │   ├── LICENSE
│   │   │       │       │   ├── README.md
│   │   │       │       │   ├── cmake/
│   │   │       │       │   │   ├── ide.cmake
│   │   │       │       │   │   ├── spdlog.pc.in
│   │   │       │       │   │   ├── spdlogCPack.cmake
│   │   │       │       │   │   ├── spdlogConfig.cmake.in
│   │   │       │       │   │   ├── utils.cmake
│   │   │       │       │   │   └── version.rc.in
│   │   │       │       │   ├── include/
│   │   │       │       │   │   └── spdlog/
│   │   │       │       │   │       ├── async.h
│   │   │       │       │   │       ├── async_logger-inl.h
│   │   │       │       │   │       ├── async_logger.h
│   │   │       │       │   │       ├── cfg/
│   │   │       │       │   │       │   ├── argv.h
│   │   │       │       │   │       │   ├── env.h
│   │   │       │       │   │       │   ├── helpers-inl.h
│   │   │       │       │   │       │   ├── helpers.h
│   │   │       │       │   │       │   └── log_levels.h
│   │   │       │       │   │       ├── common-inl.h
│   │   │       │       │   │       ├── common.h
│   │   │       │       │   │       ├── details/
│   │   │       │       │   │       │   ├── backtracer-inl.h
│   │   │       │       │   │       │   ├── backtracer.h
│   │   │       │       │   │       │   ├── circular_q.h
│   │   │       │       │   │       │   ├── console_globals.h
│   │   │       │       │   │       │   ├── file_helper-inl.h
│   │   │       │       │   │       │   ├── file_helper.h
│   │   │       │       │   │       │   ├── fmt_helper.h
│   │   │       │       │   │       │   ├── log_msg-inl.h
│   │   │       │       │   │       │   ├── log_msg.h
│   │   │       │       │   │       │   ├── log_msg_buffer-inl.h
│   │   │       │       │   │       │   ├── log_msg_buffer.h
│   │   │       │       │   │       │   ├── mpmc_blocking_q.h
│   │   │       │       │   │       │   ├── null_mutex.h
│   │   │       │       │   │       │   ├── os-inl.h
│   │   │       │       │   │       │   ├── os.h
│   │   │       │       │   │       │   ├── periodic_worker-inl.h
│   │   │       │       │   │       │   ├── periodic_worker.h
│   │   │       │       │   │       │   ├── registry-inl.h
│   │   │       │       │   │       │   ├── registry.h
│   │   │       │       │   │       │   ├── synchronous_factory.h
│   │   │       │       │   │       │   ├── tcp_client-windows.h
│   │   │       │       │   │       │   ├── tcp_client.h
│   │   │       │       │   │       │   ├── thread_pool-inl.h
│   │   │       │       │   │       │   ├── thread_pool.h
│   │   │       │       │   │       │   ├── udp_client-windows.h
│   │   │       │       │   │       │   ├── udp_client.h
│   │   │       │       │   │       │   └── windows_include.h
│   │   │       │       │   │       ├── fmt/
│   │   │       │       │   │       │   ├── bin_to_hex.h
│   │   │       │       │   │       │   ├── bundled/
│   │   │       │       │   │       │   │   ├── LICENSE.rst
│   │   │       │       │   │       │   │   ├── args.h
│   │   │       │       │   │       │   │   ├── chrono.h
│   │   │       │       │   │       │   │   ├── color.h
│   │   │       │       │   │       │   │   ├── compile.h
│   │   │       │       │   │       │   │   ├── core.h
│   │   │       │       │   │       │   │   ├── fmt.license.rst
│   │   │       │       │   │       │   │   ├── format-inl.h
│   │   │       │       │   │       │   │   ├── format.h
│   │   │       │       │   │       │   │   ├── locale.h
│   │   │       │       │   │       │   │   ├── os.h
│   │   │       │       │   │       │   │   ├── ostream.h
│   │   │       │       │   │       │   │   ├── posix.h
│   │   │       │       │   │       │   │   ├── printf.h
│   │   │       │       │   │       │   │   ├── ranges.h
│   │   │       │       │   │       │   │   └── xchar.h
│   │   │       │       │   │       │   ├── chrono.h
│   │   │       │       │   │       │   ├── compile.h
│   │   │       │       │   │       │   ├── fmt.h
│   │   │       │       │   │       │   ├── ostr.h
│   │   │       │       │   │       │   ├── ranges.h
│   │   │       │       │   │       │   └── xchar.h
│   │   │       │       │   │       ├── formatter.h
│   │   │       │       │   │       ├── fwd.h
│   │   │       │       │   │       ├── logger-inl.h
│   │   │       │       │   │       ├── logger.h
│   │   │       │       │   │       ├── pattern_formatter-inl.h
│   │   │       │       │   │       ├── pattern_formatter.h
│   │   │       │       │   │       ├── sinks/
│   │   │       │       │   │       │   ├── android_sink.h
│   │   │       │       │   │       │   ├── ansicolor_sink-inl.h
│   │   │       │       │   │       │   ├── ansicolor_sink.h
│   │   │       │       │   │       │   ├── base_sink-inl.h
│   │   │       │       │   │       │   ├── base_sink.h
│   │   │       │       │   │       │   ├── basic_file_sink-inl.h
│   │   │       │       │   │       │   ├── basic_file_sink.h
│   │   │       │       │   │       │   ├── daily_file_sink.h
│   │   │       │       │   │       │   ├── dist_sink.h
│   │   │       │       │   │       │   ├── dup_filter_sink.h
│   │   │       │       │   │       │   ├── hourly_file_sink.h
│   │   │       │       │   │       │   ├── mongo_sink.h
│   │   │       │       │   │       │   ├── msvc_sink.h
│   │   │       │       │   │       │   ├── null_sink.h
│   │   │       │       │   │       │   ├── ostream_sink.h
│   │   │       │       │   │       │   ├── qt_sinks.h
│   │   │       │       │   │       │   ├── ringbuffer_sink.h
│   │   │       │       │   │       │   ├── rotating_file_sink-inl.h
│   │   │       │       │   │       │   ├── rotating_file_sink.h
│   │   │       │       │   │       │   ├── sink-inl.h
│   │   │       │       │   │       │   ├── sink.h
│   │   │       │       │   │       │   ├── stdout_color_sinks-inl.h
│   │   │       │       │   │       │   ├── stdout_color_sinks.h
│   │   │       │       │   │       │   ├── stdout_sinks-inl.h
│   │   │       │       │   │       │   ├── stdout_sinks.h
│   │   │       │       │   │       │   ├── syslog_sink.h
│   │   │       │       │   │       │   ├── systemd_sink.h
│   │   │       │       │   │       │   ├── tcp_sink.h
│   │   │       │       │   │       │   ├── udp_sink.h
│   │   │       │       │   │       │   ├── win_eventlog_sink.h
│   │   │       │       │   │       │   ├── wincolor_sink-inl.h
│   │   │       │       │   │       │   └── wincolor_sink.h
│   │   │       │       │   │       ├── spdlog-inl.h
│   │   │       │       │   │       ├── spdlog.h
│   │   │       │       │   │       ├── stopwatch.h
│   │   │       │       │   │       ├── tweakme.h
│   │   │       │       │   │       └── version.h
│   │   │       │       │   ├── scripts/
│   │   │       │       │   │   ├── extract_version.py
│   │   │       │       │   │   └── format.sh
│   │   │       │       │   └── src/
│   │   │       │       │       ├── async.cpp
│   │   │       │       │       ├── cfg.cpp
│   │   │       │       │       ├── color_sinks.cpp
│   │   │       │       │       ├── file_sinks.cpp
│   │   │       │       │       ├── fmt.cpp
│   │   │       │       │       ├── spdlog.cpp
│   │   │       │       │       └── stdout_sinks.cpp
│   │   │       │       ├── string-view-lite/
│   │   │       │       │   ├── LICENSE.txt
│   │   │       │       │   ├── README.md
│   │   │       │       │   ├── cmake/
│   │   │       │       │   │   └── string_view-lite-config.cmake.in
│   │   │       │       │   └── include/
│   │   │       │       │       └── nonstd/
│   │   │       │       │           └── string_view.hpp
│   │   │       │       ├── thirdparty.cpp
│   │   │       │       ├── thirdparty.hpp
│   │   │       │       ├── utf-cpp/
│   │   │       │       │   ├── LICENSE.md
│   │   │       │       │   ├── README.md
│   │   │       │       │   └── include/
│   │   │       │       │       └── ww898/
│   │   │       │       │           ├── cp_utf16.hpp
│   │   │       │       │           ├── cp_utf32.hpp
│   │   │       │       │           ├── cp_utf8.hpp
│   │   │       │       │           ├── cp_utfw.hpp
│   │   │       │       │           ├── utf_config.hpp
│   │   │       │       │           ├── utf_converters.hpp
│   │   │       │       │           ├── utf_selector.hpp
│   │   │       │       │           └── utf_sizes.hpp
│   │   │       │       └── variant/
│   │   │       │           ├── LICENSE.md
│   │   │       │           ├── README.md
│   │   │       │           ├── cmake/
│   │   │       │           │   └── mpark_variant-config.cmake.in
│   │   │       │           └── include/
│   │   │       │               └── mpark/
│   │   │       │                   ├── config.hpp
│   │   │       │                   ├── in_place.hpp
│   │   │       │                   ├── lib.hpp
│   │   │       │                   └── variant.hpp
│   │   │       ├── RiderBlueprint/
│   │   │       │   ├── Private/
│   │   │       │   │   ├── BlueprintProvider.cpp
│   │   │       │   │   └── RiderBlueprint.cpp
│   │   │       │   ├── Public/
│   │   │       │   │   ├── BlueprintProvider.hpp
│   │   │       │   │   └── RiderBlueprint.hpp
│   │   │       │   └── RiderBlueprint.Build.cs
│   │   │       ├── RiderDebuggerSupport/
│   │   │       │   ├── Private/
│   │   │       │   │   ├── BlueprintStackGetter.cpp
│   │   │       │   │   ├── DebugLogger.cpp
│   │   │       │   │   ├── DebugLogger.h
│   │   │       │   │   ├── RiderDebuggerSupport.cpp
│   │   │       │   │   ├── RiderDebuggerSupport.h
│   │   │       │   │   ├── UnrealFunctions.cpp
│   │   │       │   │   ├── UnrealFunctions.h
│   │   │       │   │   ├── WideStringWrapper.cpp
│   │   │       │   │   └── WideStringWrapper.h
│   │   │       │   └── RiderDebuggerSupport.Build.cs
│   │   │       ├── RiderGameControl/
│   │   │       │   ├── Private/
│   │   │       │   │   └── RiderGameControl.cpp
│   │   │       │   ├── Public/
│   │   │       │   │   └── RiderGameControl.hpp
│   │   │       │   └── RiderGameControl.Build.cs
│   │   │       ├── RiderLC/
│   │   │       │   ├── Private/
│   │   │       │   │   ├── RiderLC.cpp
│   │   │       │   │   └── RiderLC.hpp
│   │   │       │   └── RiderLC.Build.cs
│   │   │       ├── RiderLink/
│   │   │       │   ├── Private/
│   │   │       │   │   ├── ProtocolFactory.cpp
│   │   │       │   │   ├── ProtocolFactory.h
│   │   │       │   │   ├── RiderLink.cpp
│   │   │       │   │   ├── RiderLink.hpp
│   │   │       │   │   └── UE4TypesMarshallers.cpp
│   │   │       │   ├── Public/
│   │   │       │   │   ├── IRiderLink.hpp
│   │   │       │   │   └── UE4TypesMarshallers.h
│   │   │       │   └── RiderLink.Build.cs
│   │   │       ├── RiderLogging/
│   │   │       │   ├── Private/
│   │   │       │   │   ├── RiderLogging.cpp
│   │   │       │   │   ├── RiderLogging.hpp
│   │   │       │   │   ├── RiderOutputDevice.cpp
│   │   │       │   │   └── RiderOutputDevice.hpp
│   │   │       │   └── RiderLogging.Build.cs
│   │   │       └── RiderShaderInfo/
│   │   │           ├── RiderShaderInfo.Build.cs
│   │   │           ├── RiderShaderInfo.cpp
│   │   │           └── RiderShaderInfo.h
│   │   ├── Subplatform.Root
│   │   └── Subplatform.Snk
│   ├── dotnet/
│   │   ├── BuildScript/
│   │   │   └── DefineUnrealLinkConstants.cs
│   │   ├── Directory.Build.props
│   │   ├── PackagesLock.targets
│   │   ├── Plugin.props
│   │   ├── RiderPlugin.UnrealLink/
│   │   │   ├── BuildScript/
│   │   │   │   └── UnrealLinkInRiderProduct.cs
│   │   │   ├── EditorNavigator.cs
│   │   │   ├── Install/
│   │   │   │   └── AdvertiseRiderBundledPlugin.cs
│   │   │   ├── LinkResolver.cs
│   │   │   ├── PluginInstaller/
│   │   │   │   ├── PluginPathsProvider.cs
│   │   │   │   ├── UnrealPluginDetector.cs
│   │   │   │   ├── UnrealPluginInstallInfo.cs
│   │   │   │   ├── UnrealPluginInstaller.cs
│   │   │   │   └── UnrealProjectsRefresher.cs
│   │   │   ├── Resources/
│   │   │   │   ├── Strings.Designer.cs
│   │   │   │   └── Strings.resx
│   │   │   ├── RiderBackendToUnrealEditor.cs
│   │   │   ├── RiderPlugin.UnrealLink.csproj
│   │   │   ├── Settings/
│   │   │   │   └── UnrealLinkOptionsPage.cs
│   │   │   ├── UnrealEngineAssetsNavigationProvider.cs
│   │   │   ├── UnrealHost.cs
│   │   │   ├── UnrealLiveCodingBuildRunner.cs
│   │   │   ├── Utils/
│   │   │   │   ├── CmdUtils.cs
│   │   │   │   ├── FsUtils.cs
│   │   │   │   └── ModelUtils.cs
│   │   │   └── ZoneMarker.cs
│   │   ├── Subplatform.Root
│   │   ├── Subplatform.Snk
│   │   └── Versions.props
│   └── rider/
│       ├── main/
│       │   ├── kotlin/
│       │   │   ├── com/
│       │   │   │   └── jetbrains/
│       │   │   │       └── rider/
│       │   │   │           ├── UnrealLinkBundle.kt
│       │   │   │           ├── plugins/
│       │   │   │           │   └── unreal/
│       │   │   │           │       ├── RiderLinkInstallService.kt
│       │   │   │           │       ├── UE4LibraryStartUpSerializerRegistrar.kt
│       │   │   │           │       ├── UnrealHost.kt
│       │   │   │           │       ├── UnrealLinkSettings.kt
│       │   │   │           │       ├── UnrealPluginUsagesCollector.kt
│       │   │   │           │       ├── actions/
│       │   │   │           │       │   ├── ActionsUtils.kt
│       │   │   │           │       │   ├── CancelRiderLinkInstallAction.kt
│       │   │   │           │       │   ├── EnableAutoUpdatePlugin.kt
│       │   │   │           │       │   ├── FilterCheckboxAction.kt
│       │   │   │           │       │   ├── HotReloadBuildAction.kt
│       │   │   │           │       │   ├── HotReloadBuildModeProvider.kt
│       │   │   │           │       │   ├── InstallActions.kt
│       │   │   │           │       │   ├── PlayActions.kt
│       │   │   │           │       │   ├── PlaySettingsActions.kt
│       │   │   │           │       │   └── UnrealHostOperations.kt
│       │   │   │           │       ├── debugger/
│       │   │   │           │       │   ├── BlueprintCallstackFrameCompatibilityMatcher.kt
│       │   │   │           │       │   ├── BlueprintCallstackFrameMatchResult.kt
│       │   │   │           │       │   ├── BlueprintExecutionStack.kt
│       │   │   │           │       │   ├── BlueprintStackFrameContainer.kt
│       │   │   │           │       │   ├── BlueprintStackTransformer.kt
│       │   │   │           │       │   ├── UnrealDebugProcessExtension.kt
│       │   │   │           │       │   ├── UnrealDebuggerLogger.kt
│       │   │   │           │       │   ├── actions/
│       │   │   │           │       │   │   ├── FramesPopupGroup.kt
│       │   │   │           │       │   │   ├── ShowBlueprintFunctionsAction.kt
│       │   │   │           │       │   │   ├── ShowLibraryFramesAction.kt
│       │   │   │           │       │   │   ├── ShowUnrealFramesAction.kt
│       │   │   │           │       │   │   └── UnrealToggleBaseAction.kt
│       │   │   │           │       │   └── frames/
│       │   │   │           │       │       ├── BlueprintFrame.kt
│       │   │   │           │       │       ├── BlueprintFrameMessages.kt
│       │   │   │           │       │       ├── StubBlueprintFrame.kt
│       │   │   │           │       │       ├── UnrealExternalCodeFrame.kt
│       │   │   │           │       │       └── UnrealFrameBase.kt
│       │   │   │           │       ├── filters/
│       │   │   │           │       │   └── linkInfo/
│       │   │   │           │       │       ├── BlueprintClassHyperLinkInfo.kt
│       │   │   │           │       │       ├── BlueprintFunctionHyperLinkInfo.kt
│       │   │   │           │       │       ├── MethodReferenceHyperLinkInfo.kt
│       │   │   │           │       │       └── UnrealClassHyperLinkInfo.kt
│       │   │   │           │       ├── notifications/
│       │   │   │           │       │   └── OutOfSyncPluginProtocolListener.kt
│       │   │   │           │       ├── spellchecker/
│       │   │   │           │       │   └── UnrealBundledDictionaryProvider.kt
│       │   │   │           │       └── toolWindow/
│       │   │   │           │           ├── UnrealToolWindowFactory.kt
│       │   │   │           │           └── log/
│       │   │   │           │               ├── UnrealLogCategoryFilterComboBox.kt
│       │   │   │           │               ├── UnrealLogConsoleActionsPostProcessor.kt
│       │   │   │           │               ├── UnrealLogConsoleViewContentType.kt
│       │   │   │           │               ├── UnrealLogFilter.kt
│       │   │   │           │               ├── UnrealLogPanel.kt
│       │   │   │           │               ├── UnrealLogPanelSettings.kt
│       │   │   │           │               ├── UnrealLogSettings.kt
│       │   │   │           │               └── UnrealLogVerbosityFilterComboBox.kt
│       │   │   │           └── settings/
│       │   │   │               ├── UnrealLinkSettingsConfigurable.kt
│       │   │   │               ├── UnrealLogColorSettingsPage.kt
│       │   │   │               └── UnrealLogSettingsConfigurable.kt
│       │   │   └── icons/
│       │   │       └── UnrealIcons.kt
│       │   └── resources/
│       │       ├── META-INF/
│       │       │   └── plugin.xml
│       │       ├── UnrealIconMappings.json
│       │       ├── com/
│       │       │   └── jetbrains/
│       │       │       └── rider/
│       │       │           └── plugins/
│       │       │               └── unreal/
│       │       │                   └── spellchecker/
│       │       │                       └── unreal.dic
│       │       ├── icon-robots.txt
│       │       ├── icons/
│       │       │   └── expui/
│       │       │       └──  icon-robots.txt
│       │       └── messages/
│       │           └── UnrealLinkBundle.properties
│       └── test/
│           ├── kotlin/
│           │   └── com/
│           │       └── jetbrains/
│           │           └── rider/
│           │               └── plugins/
│           │                   └── unreal/
│           │                       └── test/
│           │                           └── cases/
│           │                               ├── RiderTestDataMarker.kt
│           │                               └── integrationTests/
│           │                                   ├── Notification.kt
│           │                                   ├── PlayButtons.kt
│           │                                   ├── UnrealLinkBase.kt
│           │                                   ├── UnrealLinkInstallation.kt
│           │                                   └── projectModel/
│           │                                       └── RefreshSolution.kt
│           ├── resources/
│           │   ├── episodes/
│           │   │   └── Plugins/
│           │   │       ├── UnrealIntegration.xml
│           │   │       └── UnrealLinkSmoke.xml
│           │   └── intellij.rider.plugins.unreal.link.test.cases.xml
│           └── testData/
│               ├── integrationTests/
│               │   └── projectModel/
│               │       └── RefreshSolution/
│               │           └── refreshSolution/
│               │               ├── refreshSolution.gold
│               │               ├── refreshSolution_4_27.gold
│               │               ├── refreshSolution_5_5.gold
│               │               ├── refreshSolution_text.gold
│               │               ├── refreshSolution_text_4_27.gold
│               │               ├── refreshSolution_text_5_5.gold
│               │               └── refreshSolution_text_5_7.gold
│               ├── solutions/
│               │   └── TestSolutions/
│               │       └── Unreal/
│               │           └── EmptyUProject/
│               │               ├── EmptyUProject.uproject
│               │               └── Source/
│               │                   ├── EmptyUProject/
│               │                   │   ├── EmptyUProject.Build.cs
│               │                   │   ├── EmptyUProject.cpp
│               │                   │   └── EmptyUProject.h
│               │                   ├── EmptyUProject.Target.cs
│               │                   └── EmptyUProjectEditor.Target.cs
│               └── unreal/
│                   └── additionalSource/
│                       └── plugins/
│                           └── EmptyTestPlugin/
│                               ├── EmptyTestPlugin.uplugin
│                               └── Source/
│                                   └── EmptyTestPlugin/
│                                       ├── EmptyTestPlugin.Build.cs
│                                       ├── Private/
│                                       │   └── EmptyTestPlugin.cpp
│                                       └── Public/
│                                           └── EmptyTestPlugin.h
└── tools/
    └── dotnet.cmd
Download .txt
Showing preview only (514K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (1872 symbols across 309 files)

FILE: src/cpp/BuildScript/GenerateRiderLinkZip.cs
  class GenerateRiderLinkZip (line 18) | public class GenerateRiderLinkZip
    method Run (line 20) | [BuildStep]

FILE: src/cpp/RiderLink/Source/RD/RD.Build.cs
  class RD (line 4) | public class RD : ModuleRules
    method RD (line 6) | public RD(ReadOnlyTargetRules Target) : base(Target)

FILE: src/cpp/RiderLink/Source/RD/RD.h
  function class (line 11) | class FRDModule : public IModuleInterface

FILE: src/cpp/RiderLink/Source/RD/src/rd_core_cpp/src/main/lifetime/Lifetime.cpp
  type rd (line 9) | namespace rd
    function LifetimeImpl (line 13) | LifetimeImpl* Lifetime::operator->() const
    function Lifetime (line 27) | Lifetime Lifetime::create_nested() const
    function Lifetime (line 34) | Lifetime const& Lifetime::Eternal()

FILE: src/cpp/RiderLink/Source/RD/src/rd_core_cpp/src/main/lifetime/Lifetime.h
  function namespace (line 17) | namespace rd

FILE: src/cpp/RiderLink/Source/RD/src/rd_core_cpp/src/main/lifetime/LifetimeDefinition.cpp
  type rd (line 5) | namespace rd

FILE: src/cpp/RiderLink/Source/RD/src/rd_core_cpp/src/main/lifetime/LifetimeDefinition.h
  function namespace (line 14) | namespace rd

FILE: src/cpp/RiderLink/Source/RD/src/rd_core_cpp/src/main/lifetime/LifetimeImpl.cpp
  type rd (line 5) | namespace rd

FILE: src/cpp/RiderLink/Source/RD/src/rd_core_cpp/src/main/lifetime/LifetimeImpl.h
  function LifetimeImpl (line 24) | LifetimeImpl final

FILE: src/cpp/RiderLink/Source/RD/src/rd_core_cpp/src/main/lifetime/SequentialLifetimes.cpp
  type rd (line 3) | namespace rd
    function Lifetime (line 10) | Lifetime SequentialLifetimes::next()

FILE: src/cpp/RiderLink/Source/RD/src/rd_core_cpp/src/main/lifetime/SequentialLifetimes.h
  function namespace (line 14) | namespace rd

FILE: src/cpp/RiderLink/Source/RD/src/rd_core_cpp/src/main/reactive/Property.h
  function namespace (line 9) | namespace rd

FILE: src/cpp/RiderLink/Source/RD/src/rd_core_cpp/src/main/reactive/ViewableList.h
  function namespace (line 12) | namespace rd
  function noexcept (line 133) | bool operator<(iterator const& other) const noexcept
  function noexcept (line 138) | bool operator>(iterator const& other) const noexcept
  function noexcept (line 143) | bool operator==(iterator const& other) const noexcept
  function noexcept (line 148) | bool operator!=(iterator const& other) const noexcept
  function noexcept (line 153) | bool operator<=(iterator const& other) const noexcept
  function noexcept (line 158) | bool operator>=(iterator const& other) const noexcept
  function reference (line 163) | reference operator*() noexcept
  function reference (line 168) | reference operator*() const noexcept
  function pointer (line 173) | pointer operator->() noexcept
  function pointer (line 178) | pointer operator->() const noexcept
  function advise (line 207) | void advise(Lifetime lifetime, std::function<void(Event const&)> handler...
  function add (line 218) | bool add(WT element) const override
  function add (line 225) | bool add(size_t index, WT element) const override
  function WT (line 232) | WT removeAt(size_t index) const override
  function remove (line 241) | bool remove(T const& element) const override
  function T (line 252) | T const& get(size_t index) const override
  function WT (line 257) | WT set(size_t index, WT element) const override

FILE: src/cpp/RiderLink/Source/RD/src/rd_core_cpp/src/main/reactive/ViewableMap.h
  function namespace (line 15) | namespace rd
  function noexcept (line 133) | bool operator<(iterator const& other) const noexcept
  function noexcept (line 138) | bool operator>(iterator const& other) const noexcept
  function noexcept (line 143) | bool operator==(iterator const& other) const noexcept
  function noexcept (line 148) | bool operator!=(iterator const& other) const noexcept
  function noexcept (line 153) | bool operator<=(iterator const& other) const noexcept
  function noexcept (line 158) | bool operator>=(iterator const& other) const noexcept
  function reference (line 163) | reference operator*() const noexcept
  function pointer (line 168) | pointer operator->() const noexcept
  function class (line 184) | class reverse_iterator : public std::reverse_iterator<iterator>

FILE: src/cpp/RiderLink/Source/RD/src/rd_core_cpp/src/main/reactive/ViewableSet.h
  function namespace (line 10) | namespace rd
  function noexcept (line 126) | bool operator<(iterator const& other) const noexcept
  function noexcept (line 131) | bool operator>(iterator const& other) const noexcept
  function noexcept (line 136) | bool operator==(iterator const& other) const noexcept
  function noexcept (line 141) | bool operator!=(iterator const& other) const noexcept
  function noexcept (line 146) | bool operator<=(iterator const& other) const noexcept
  function noexcept (line 151) | bool operator>=(iterator const& other) const noexcept
  function reference (line 156) | reference operator*() const noexcept
  function pointer (line 161) | pointer operator->() const noexcept
  function add (line 191) | bool add(WT element) const override

FILE: src/cpp/RiderLink/Source/RD/src/rd_core_cpp/src/main/reactive/base/IProperty.h
  function explicit (line 33) | explicit IProperty(T const& value) : IPropertyBase<T>(value)
  function advise_before (line 61) | void advise_before(Lifetime lifetime, std::function<void(T const&)> hand...

FILE: src/cpp/RiderLink/Source/RD/src/rd_core_cpp/src/main/reactive/base/IPropertyBase.h
  function namespace (line 12) | namespace rd

FILE: src/cpp/RiderLink/Source/RD/src/rd_core_cpp/src/main/reactive/base/IViewableList.h
  function class (line 38) | class Update
  function advise_add_remove (line 142) | void advise_add_remove(Lifetime lifetime, std::function<void(AddRemove, ...
  function view (line 160) | void view(Lifetime lifetime, std::function<void(Lifetime lifetime, std::...
  function view (line 168) | void view(Lifetime lifetime, std::function<void(Lifetime, size_t, T cons...

FILE: src/cpp/RiderLink/Source/RD/src/rd_core_cpp/src/main/reactive/base/IViewableMap.h
  function v (line 58) | MapEvent(Add x) : v(x)
  function v (line 62) | MapEvent(Update x) : v(x)
  function v (line 66) | MapEvent(Remove x) : v(x)

FILE: src/cpp/RiderLink/Source/RD/src/rd_core_cpp/src/main/reactive/base/IViewableSet.h
  function namespace (line 16) | namespace detail
  function advise (line 73) | void advise(Lifetime lifetime, std::function<void(AddRemove, T const&)> ...
  function view (line 88) | void view(Lifetime lifetime, std::function<void(Lifetime, T const&)> han...

FILE: src/cpp/RiderLink/Source/RD/src/rd_core_cpp/src/main/reactive/base/SignalCookie.cpp
  function rd_signal_cookie_inc (line 10) | void rd_signal_cookie_inc()
  function rd_signal_cookie_dec (line 15) | void rd_signal_cookie_dec()
  function rd_signal_cookie_get (line 20) | int32_t rd_signal_cookie_get()

FILE: src/cpp/RiderLink/Source/RD/src/rd_core_cpp/src/main/reactive/base/SignalX.h
  function class (line 25) | class Event
  function cleanup (line 63) | static void cleanup(listeners_t& queue)

FILE: src/cpp/RiderLink/Source/RD/src/rd_core_cpp/src/main/reactive/base/interfaces.h
  function namespace (line 11) | namespace rd

FILE: src/cpp/RiderLink/Source/RD/src/rd_core_cpp/src/main/reactive/base/viewable_collections.h
  type class (line 8) | enum class
  function std (line 14) | inline std::string to_string(AddRemove kind)
  function Op (line 27) | enum class Op

FILE: src/cpp/RiderLink/Source/RD/src/rd_core_cpp/src/main/std/allocator.h
  function namespace (line 6) | namespace rd

FILE: src/cpp/RiderLink/Source/RD/src/rd_core_cpp/src/main/std/hash.h
  function namespace (line 7) | namespace rd

FILE: src/cpp/RiderLink/Source/RD/src/rd_core_cpp/src/main/std/list.h
  function namespace (line 7) | namespace rd

FILE: src/cpp/RiderLink/Source/RD/src/rd_core_cpp/src/main/std/to_string.h
  function namespace (line 16) | namespace rd

FILE: src/cpp/RiderLink/Source/RD/src/rd_core_cpp/src/main/std/unordered_map.h
  function namespace (line 8) | namespace rd

FILE: src/cpp/RiderLink/Source/RD/src/rd_core_cpp/src/main/std/unordered_set.h
  function namespace (line 8) | namespace rd

FILE: src/cpp/RiderLink/Source/RD/src/rd_core_cpp/src/main/types/DateTime.cpp
  type rd (line 6) | namespace rd
    function to_string (line 32) | std::string to_string(DateTime const& time)

FILE: src/cpp/RiderLink/Source/RD/src/rd_core_cpp/src/main/types/DateTime.h
  function namespace (line 11) | namespace rd
  function namespace (line 39) | namespace rd

FILE: src/cpp/RiderLink/Source/RD/src/rd_core_cpp/src/main/types/Void.h
  function Void (line 34) | struct hash<rd::Void>

FILE: src/cpp/RiderLink/Source/RD/src/rd_core_cpp/src/main/types/wrapper.h
  function namespace (line 15) | namespace rd

FILE: src/cpp/RiderLink/Source/RD/src/rd_core_cpp/src/main/util/core_traits.h
  function namespace (line 9) | namespace rd

FILE: src/cpp/RiderLink/Source/RD/src/rd_core_cpp/src/main/util/core_util.h
  function namespace (line 39) | namespace util

FILE: src/cpp/RiderLink/Source/RD/src/rd_core_cpp/src/main/util/erase_if.h
  function namespace (line 4) | namespace rd

FILE: src/cpp/RiderLink/Source/RD/src/rd_core_cpp/src/main/util/gen_util.h
  function namespace (line 9) | namespace rd

FILE: src/cpp/RiderLink/Source/RD/src/rd_core_cpp/src/main/util/overloaded.h
  function namespace (line 4) | namespace rd

FILE: src/cpp/RiderLink/Source/RD/src/rd_core_cpp/src/main/util/shared_function.h
  function namespace (line 6) | namespace rd

FILE: src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/base/IProtocol.cpp
  type rd (line 11) | namespace rd
    function IProtocol (line 22) | const IProtocol* IProtocol::get_protocol() const
    function IScheduler (line 27) | IScheduler* IProtocol::get_scheduler() const
    function IWire (line 32) | const IWire* IProtocol::get_wire() const
    function Serializers (line 37) | const Serializers& IProtocol::get_serializers() const
    function Identities (line 42) | const Identities* IProtocol::get_identity() const
    function RName (line 47) | const RName& IProtocol::get_location() const

FILE: src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/base/IProtocol.h
  function namespace (line 19) | namespace rd

FILE: src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/base/IRdBindable.h
  function namespace (line 10) | namespace rd
  function namespace (line 15) | namespace rd

FILE: src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/base/IRdDynamic.h
  function namespace (line 8) | namespace rd

FILE: src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/base/IRdReactive.h
  function namespace (line 10) | namespace rd

FILE: src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/base/IRdWireable.cpp
  type rd (line 3) | namespace rd

FILE: src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/base/IRdWireable.h
  function namespace (line 10) | namespace rd

FILE: src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/base/ISerializersOwner.cpp
  type rd (line 3) | namespace rd

FILE: src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/base/ISerializersOwner.h
  function namespace (line 13) | namespace rd

FILE: src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/base/IUnknownInstance.cpp
  type rd (line 3) | namespace rd

FILE: src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/base/IUnknownInstance.h
  function namespace (line 8) | namespace rd

FILE: src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/base/RdBindableBase.cpp
  type rd (line 5) | namespace rd
    function IProtocol (line 51) | const IProtocol* RdBindableBase::get_protocol() const
    function RName (line 64) | const RName& RdBindableBase::get_location() const
    function RdId (line 69) | RdId RdBindableBase::get_id() const
    function SerializationCtx (line 79) | SerializationCtx& RdBindableBase::get_serialization_context() const

FILE: src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/base/RdBindableBase.h
  function namespace (line 16) | namespace rd

FILE: src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/base/RdPropertyBase.h
  function namespace (line 13) | namespace rd

FILE: src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/base/RdReactiveBase.cpp
  type rd (line 5) | namespace rd
    function RdReactiveBase (line 17) | RdReactiveBase& RdReactiveBase::operator=(RdReactiveBase&& other)
    function IWire (line 24) | const IWire* RdReactiveBase::get_wire() const
    function Serializers (line 45) | const Serializers& RdReactiveBase::get_serializers() const
    function IScheduler (line 50) | IScheduler* RdReactiveBase::get_default_scheduler() const
    function IScheduler (line 55) | IScheduler* RdReactiveBase::get_wire_scheduler() const

FILE: src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/base/RdReactiveBase.h
  function namespace (line 17) | namespace rd

FILE: src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/base/WireBase.cpp
  type rd (line 3) | namespace rd

FILE: src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/base/WireBase.h
  function namespace (line 10) | namespace rd

FILE: src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/ext/ExtWire.cpp
  type rd (line 5) | namespace rd

FILE: src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/ext/ExtWire.h
  function namespace (line 19) | namespace rd

FILE: src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/ext/RdExtBase.cpp
  type rd (line 8) | namespace rd
    function IProtocol (line 10) | const IProtocol* RdExtBase::get_protocol() const
    function IScheduler (line 96) | IScheduler* RdExtBase::get_wire_scheduler() const
    function to_string (line 101) | std::string to_string(RdExtBase::ExtState state)

FILE: src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/ext/RdExtBase.h
  type class (line 28) | enum class

FILE: src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/impl/RName.cpp
  type rd (line 5) | namespace rd
    class RNameImpl (line 7) | class RNameImpl
      method RNameImpl (line 13) | RNameImpl(const RName& other) = delete;
      method RNameImpl (line 14) | RNameImpl(RName&& other) noexcept = delete;
      method RNameImpl (line 15) | RNameImpl& operator=(const RNameImpl& other) = delete;
      method RNameImpl (line 16) | RNameImpl& operator=(RNameImpl&& other) noexcept = delete;
    function RName (line 36) | RName RName::sub(string_view localName, string_view separator) const
    function to_string (line 41) | std::string to_string(RName const& value)
    function to_string (line 51) | std::string to_string(RNameImpl const& value)

FILE: src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/impl/RName.h
  function namespace (line 14) | namespace rd

FILE: src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/impl/RdList.h
  function namespace (line 14) | namespace rd
  function WT (line 191) | WT removeAt(size_t index) const override
  function T (line 196) | T const& get(size_t index) const override
  function WT (line 201) | WT set(size_t index, WT element) const override
  function size (line 211) | size_t size() const override
  function override (line 221) | const override
  function addAll (line 226) | bool addAll(size_t index, std::vector<WT> elements) const override
  function addAll (line 231) | bool addAll(std::vector<WT> elements) const override
  function removeAll (line 236) | bool removeAll(std::vector<WT> elements) const override

FILE: src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/impl/RdMap.h
  function namespace (line 16) | namespace rd
  function write (line 82) | void write(SerializationCtx& /*ctx*/, Buffer& buffer) const override
  function init (line 89) | void init(Lifetime lifetime) const override
  function on_wire_received (line 141) | void on_wire_received(Buffer buffer) const override
  function advise (line 244) | void advise(Lifetime lifetime, std::function<void(Event const&)> handler...
  function V (line 253) | V const* get(K const& key) const override
  function V (line 258) | V const* set(WK key, WV value) const override
  function OV (line 263) | OV remove(K const& key) const override
  function empty (line 278) | bool empty() const override

FILE: src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/impl/RdProperty.h
  function namespace (line 14) | namespace rd

FILE: src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/impl/RdSet.h
  function write (line 56) | void write(SerializationCtx& /*ctx*/, Buffer& buffer) const override
  function init (line 63) | void init(Lifetime lifetime) const override
  function on_wire_received (line 84) | void on_wire_received(Buffer buffer) const override
  function add (line 104) | bool add(WT value) const override

FILE: src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/impl/RdSignal.h
  function namespace (line 16) | namespace rd
  function init (line 75) | void init(Lifetime lifetime) const override
  function on_wire_received (line 82) | void on_wire_received(Buffer buffer) const override
  function fire (line 92) | void fire(T const& value) const override
  function advise (line 114) | void advise(Lifetime lifetime, std::function<void(T const&)> handler) co...
  function IScheduler (line 134) | IScheduler* get_wire_scheduler() const override
  function friend (line 139) | friend std::string to_string(RdSignal const&)

FILE: src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/intern/InternRoot.cpp
  type rd (line 6) | namespace rd
    function IScheduler (line 13) | IScheduler* InternRoot::get_wire_scheduler() const

FILE: src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/intern/InternRoot.h
  function namespace (line 25) | namespace rd
  function namespace (line 79) | namespace rd

FILE: src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/intern/InternScheduler.cpp
  type rd (line 5) | namespace rd

FILE: src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/intern/InternScheduler.h
  function namespace (line 8) | namespace rd

FILE: src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/protocol/Buffer.cpp
  type rd (line 8) | namespace rd
    function read_wstring_spec (line 135) | std::wstring read_wstring_spec(Buffer& buffer)
    function write_wstring_spec (line 158) | void write_wstring_spec(Buffer& buffer, wstring_view value)
    function DateTime (line 205) | DateTime Buffer::read_date_time()
    function wchar_t (line 230) | wchar_t Buffer::read_char()

FILE: src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/protocol/Buffer.h
  function namespace (line 22) | namespace rd
  function write_array (line 146) | void write_array(C<T, A> const& container)

FILE: src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/protocol/Identities.cpp
  type rd (line 3) | namespace rd
    function RdId (line 12) | RdId Identities::next(const RdId& parent) const

FILE: src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/protocol/Identities.h
  function class (line 20) | class RD_FRAMEWORK_API Identities

FILE: src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/protocol/MessageBroker.cpp
  type rd (line 6) | namespace rd
    function execute (line 11) | static void execute(const IRdReactive* that, Buffer msg)

FILE: src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/protocol/MessageBroker.h
  function namespace (line 19) | namespace rd

FILE: src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/protocol/Protocol.cpp
  type rd (line 10) | namespace rd
    function SerializationCtx (line 42) | SerializationCtx& Protocol::get_serialization_context() const

FILE: src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/protocol/Protocol.h
  function string_view (line 31) | constexpr static string_view InternRootName{"ProtocolInternRoot"};

FILE: src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/protocol/RdId.cpp
  type rd (line 5) | namespace rd
    function RdId (line 7) | RdId RdId::read(Buffer& buffer)
    function to_string (line 18) | std::string to_string(RdId const& id)

FILE: src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/protocol/RdId.h
  function hash (line 21) | struct RD_FRAMEWORK_API hash<RdId>
  function hash_t (line 39) | hash_t hash{NULL_ID};

FILE: src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/scheduler/SimpleScheduler.cpp
  type rd (line 3) | namespace rd

FILE: src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/scheduler/SimpleScheduler.h
  function namespace (line 8) | namespace rd

FILE: src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/scheduler/SingleThreadScheduler.cpp
  type rd (line 7) | namespace rd

FILE: src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/scheduler/SingleThreadScheduler.h
  function namespace (line 10) | namespace rd

FILE: src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/scheduler/SynchronousScheduler.cpp
  type rd (line 5) | namespace rd
    function SynchronousScheduler (line 24) | SynchronousScheduler& SynchronousScheduler::Instance()

FILE: src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/scheduler/SynchronousScheduler.h
  function namespace (line 10) | namespace rd

FILE: src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/scheduler/base/IScheduler.cpp
  type rd (line 8) | namespace rd

FILE: src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/scheduler/base/IScheduler.h
  function namespace (line 14) | namespace rd

FILE: src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/scheduler/base/SingleThreadSchedulerBase.cpp
  type rd (line 8) | namespace rd

FILE: src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/scheduler/base/SingleThreadSchedulerBase.h
  function namespace (line 17) | namespace ctpl
  function namespace (line 22) | namespace rd

FILE: src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/serialization/AbstractPolymorphic.h
  function namespace (line 8) | namespace rd

FILE: src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/serialization/ArraySerializer.h
  function namespace (line 9) | namespace rd

FILE: src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/serialization/DefaultAbstractDeclaration.cpp
  type rd (line 3) | namespace rd

FILE: src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/serialization/DefaultAbstractDeclaration.h
  function namespace (line 9) | namespace rd

FILE: src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/serialization/ISerializable.cpp
  type rd (line 5) | namespace rd

FILE: src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/serialization/ISerializable.h
  function class (line 21) | class RD_FRAMEWORK_API ISerializable
  function virtual (line 43) | virtual size_t hashCode() const noexcept;

FILE: src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/serialization/InternedAnySerializer.h
  function namespace (line 9) | namespace rd

FILE: src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/serialization/InternedSerializer.h
  function namespace (line 8) | namespace rd

FILE: src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/serialization/NullableSerializer.h
  function namespace (line 11) | namespace rd

FILE: src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/serialization/Polymorphic.cpp
  type rd (line 3) | namespace rd

FILE: src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/serialization/Polymorphic.h
  function namespace (line 9) | namespace rd
  function write (line 51) | inline static void write(SerializationCtx& /*ctx*/, Buffer& buffer, T co...
  function write (line 66) | inline static void write(SerializationCtx& /*ctx*/, Buffer& buffer, T co...
  function write (line 99) | inline static void write(SerializationCtx& /*ctx*/, Buffer& buffer, bool...
  function write (line 114) | inline static void write(SerializationCtx& /*ctx*/, Buffer& buffer, bool...
  function write (line 149) | inline static void write(SerializationCtx& /*ctx*/, Buffer& buffer, Date...
  function write (line 164) | inline static void write(SerializationCtx& /*ctx*/, Buffer& /*buffer*/, ...
  function write (line 193) | inline static void write(SerializationCtx& /*ctx*/, Buffer& buffer, T co...
  function write (line 208) | inline static void write(SerializationCtx& ctx, Buffer& buffer, optional...

FILE: src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/serialization/RdAny.cpp
  type rd (line 3) | namespace rd
    type any (line 5) | namespace any

FILE: src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/serialization/RdAny.h
  function namespace (line 14) | namespace rd
  function value (line 100) | struct TransparentHash
  function const (line 112) | size_t operator()(wrapped_super_t const& value) const noexcept
  function const (line 117) | size_t operator()(super_t const& value) const noexcept
  function const (line 122) | size_t operator()(any::string const& value) const noexcept

FILE: src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/serialization/SerializationCtx.cpp
  type rd (line 3) | namespace rd
    function SerializationCtx (line 14) | SerializationCtx SerializationCtx::withInternRootsHere(
    function Serializers (line 28) | Serializers const& SerializationCtx::get_serializers() const

FILE: src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/serialization/SerializationCtx.h
  function namespace (line 21) | namespace rd
  function namespace (line 76) | namespace rd

FILE: src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/serialization/Serializers.cpp
  type rd (line 5) | namespace rd
    function RdId (line 9) | RdId Serializers::real_rd_id(const IUnknownInstance& value)
    function RdId (line 14) | RdId Serializers::real_rd_id(const IPolymorphicSerializable& value)
    function RdId (line 19) | RdId Serializers::real_rd_id(const std::wstring& /*value*/)

FILE: src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/serialization/Serializers.h
  function namespace (line 25) | namespace rd
  function namespace (line 77) | namespace rd

FILE: src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/task/RdCall.h
  function namespace (line 17) | namespace rd

FILE: src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/task/RdEndpoint.h
  function namespace (line 12) | namespace rd
  function init (line 86) | void init(Lifetime lifetime) const override
  function on_wire_received (line 93) | void on_wire_received(Buffer buffer) const override
  function friend (line 132) | friend std::string to_string(RdEndpoint const& /*value*/)

FILE: src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/task/RdSymmetricCall.h
  function namespace (line 7) | namespace rd

FILE: src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/task/RdTask.h
  function namespace (line 9) | namespace rd

FILE: src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/task/RdTaskImpl.h
  function namespace (line 9) | namespace rd

FILE: src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/task/RdTaskResult.h
  function namespace (line 14) | namespace rd

FILE: src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/task/WiredRdTask.h
  function namespace (line 9) | namespace rd

FILE: src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/task/WiredRdTaskImpl.h
  function namespace (line 7) | namespace rd

FILE: src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/util/framework_traits.h
  function namespace (line 9) | namespace rd

FILE: src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/util/guards.h
  function namespace (line 4) | namespace rd

FILE: src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/util/hashing.h
  function namespace (line 10) | namespace rd

FILE: src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/util/thread_util.cpp
  type tagTHREADNAME_INFO (line 9) | struct tagTHREADNAME_INFO
  function SetThreadName (line 18) | void SetThreadName(uint32_t dwThreadID, const char* threadName)
  function SetThreadName (line 35) | void SetThreadName(const char* threadName)
  function SetThreadName (line 44) | void SetThreadName(const char* threadName)
  function SetThreadName (line 53) | void SetThreadName(const char* threadName)
  type rd (line 60) | namespace rd
    type util (line 62) | namespace util
      function set_thread_name (line 64) | void set_thread_name(const char* name)

FILE: src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/util/thread_util.h
  function namespace (line 6) | namespace rd

FILE: src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/wire/ByteBufferAsyncProcessor.cpp
  type rd (line 8) | namespace rd
    function to_string (line 274) | std::string to_string(ByteBufferAsyncProcessor::StateKind state)

FILE: src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/wire/ByteBufferAsyncProcessor.h
  type class (line 28) | enum class
  function StateKind (line 49) | StateKind state{StateKind::Initialized};

FILE: src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/wire/PkgInputStream.cpp
  type rd (line 7) | namespace rd
    function Buffer (line 29) | Buffer& PkgInputStream::get_buffer()

FILE: src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/wire/PkgInputStream.h
  function namespace (line 13) | namespace rd

FILE: src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/wire/PumpScheduler.cpp
  type rd (line 5) | namespace rd
    type test (line 7) | namespace test
      type util (line 9) | namespace util

FILE: src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/wire/PumpScheduler.h
  function namespace (line 17) | namespace rd

FILE: src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/wire/SocketWire.cpp
  type rd (line 15) | namespace rd
    function CSimpleSocket (line 369) | CSimpleSocket* SocketWire::Base::get_socket_provider() const

FILE: src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/wire/SocketWire.h
  function class (line 26) | class RD_FRAMEWORK_API SocketWire

FILE: src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/wire/WireUtil.cpp
  type rd (line 11) | namespace rd
    type util (line 13) | namespace util
      function find_free_port (line 15) | uint16_t find_free_port()
      function sleep_this_thread (line 25) | void sleep_this_thread(int64_t ms)

FILE: src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/wire/WireUtil.h
  function namespace (line 8) | namespace rd

FILE: src/cpp/RiderLink/Source/RD/src/rd_gen_cpp/src/RdTextBuffer.h
  function namespace (line 4) | namespace rd

FILE: src/cpp/RiderLink/Source/RD/thirdparty/CTPL/include/ctpl_stl.h
  function namespace (line 41) | namespace ctpl {
  function pck (line 174) | auto pck = std::make_shared<std::packaged_task<decltype(f(0, rest...))(i...
  function set_thread (line 209) | void set_thread(int i) {
  function init (line 236) | void init() { this->nWaiting = 0; this->isStop = false; this->isDone = f...

FILE: src/cpp/RiderLink/Source/RD/thirdparty/clsocket/src/ActiveSocket.cpp
  type in_addr (line 57) | struct in_addr
  type sockaddr (line 96) | struct sockaddr
  type in_addr (line 137) | struct in_addr
  type sockaddr (line 176) | struct sockaddr
  type in_addr (line 196) | struct in_addr
  type sockaddr (line 234) | struct sockaddr
  type sockaddr (line 297) | struct sockaddr
  type sockaddr (line 300) | struct sockaddr
  type sockaddr (line 302) | struct sockaddr
  type sockaddr (line 304) | struct sockaddr

FILE: src/cpp/RiderLink/Source/RD/thirdparty/clsocket/src/ActiveSocket.h
  function class (line 54) | class CActiveSocket : public CSimpleSocket {

FILE: src/cpp/RiderLink/Source/RD/thirdparty/clsocket/src/Host.h
  type SOCKET (line 66) | typedef int            SOCKET;
  type iovec (line 70) | struct iovec {
  type socklen_t (line 77) | typedef int socklen_t;

FILE: src/cpp/RiderLink/Source/RD/thirdparty/clsocket/src/PassiveSocket.cpp
  type sockaddr (line 81) | struct sockaddr
  type sockaddr (line 161) | struct sockaddr
  type sockaddr (line 164) | struct sockaddr
  function CActiveSocket (line 200) | CActiveSocket *CPassiveSocket::Accept() {

FILE: src/cpp/RiderLink/Source/RD/thirdparty/clsocket/src/PassiveSocket.h
  function class (line 55) | class CPassiveSocket : public CSimpleSocket {

FILE: src/cpp/RiderLink/Source/RD/thirdparty/clsocket/src/SimpleSocket.cpp
  type timeval (line 54) | struct timeval
  type timeval (line 55) | struct timeval
  type linger (line 56) | struct linger
  function CSimpleSocket (line 117) | CSimpleSocket *CSimpleSocket::operator=(CSimpleSocket &socket)
  type in_addr (line 170) | struct in_addr
  type iovec (line 558) | struct iovec
  type iovec (line 592) | struct iovec
  type timeval (line 615) | struct timeval
  type timeval (line 624) | struct timeval
  type timeval (line 643) | struct timeval
  type timeval (line 651) | struct timeval
  type sockaddr_in (line 777) | struct sockaddr_in
  type timeval (line 1129) | struct timeval
  type timeval (line 1130) | struct timeval

FILE: src/cpp/RiderLink/Source/RD/thirdparty/clsocket/src/SimpleSocket.h
  function class (line 105) | class CSimpleSocket {
  function GetReceiveTimeoutSec (line 356) | int32_t GetReceiveTimeoutSec(void) {
  function GetReceiveTimeoutUSec (line 363) | int32_t GetReceiveTimeoutUSec(void) {
  function GetMulticast (line 388) | bool GetMulticast() {
  function GetSendTimeoutSec (line 399) | int32_t GetSendTimeoutSec(void) {
  function GetSendTimeoutUSec (line 406) | int32_t GetSendTimeoutUSec(void) {
  function CSocketError (line 419) | CSocketError GetSocketError(void) {
  function GetTotalTimeMs (line 425) | uint32_t GetTotalTimeMs() {
  function GetTotalTimeUsec (line 431) | uint32_t GetTotalTimeUsec() {
  function SOCKET (line 448) | SOCKET GetSocketDescriptor() {
  function CSocketType (line 454) | CSocketType GetSocketType() {
  function GetClientPort (line 466) | uint16_t GetClientPort() {
  function GetServerPort (line 478) | uint16_t GetServerPort() {
  function GetReceiveWindowSize (line 485) | uint32_t GetReceiveWindowSize() {
  function GetSendWindowSize (line 492) | uint32_t GetSendWindowSize() {
  function SetReceiveWindowSize (line 499) | uint32_t SetReceiveWindowSize(uint32_t nWindowSize) {
  function SetSendWindowSize (line 506) | uint32_t SetSendWindowSize(uint32_t nWindowSize) {
  function SetSocketHandle (line 532) | void SetSocketHandle(SOCKET socket) {
  type iovec (line 555) | struct iovec
  type timeval (line 571) | struct timeval
  type timeval (line 572) | struct timeval
  type timeval (line 573) | struct timeval
  type sockaddr_in (line 574) | struct sockaddr_in
  type sockaddr_in (line 575) | struct sockaddr_in
  type sockaddr_in (line 576) | struct sockaddr_in
  type linger (line 577) | struct linger

FILE: src/cpp/RiderLink/Source/RD/thirdparty/clsocket/src/StatTimer.h
  function class (line 76) | class CStatTimer {

FILE: src/cpp/RiderLink/Source/RD/thirdparty/countdownlatch/countdownlatch.hpp
  type clatch (line 10) | namespace clatch
    class countdownlatch (line 12) | class countdownlatch {
      method countdownlatch (line 45) | countdownlatch() = delete;
      method countdownlatch (line 46) | countdownlatch(const countdownlatch& other) = delete;
      method countdownlatch (line 47) | countdownlatch& operator=(const countdownlatch& opther) = delete;

FILE: src/cpp/RiderLink/Source/RD/thirdparty/optional/tl/optional.hpp
  type tl (line 65) | namespace tl {
    type detail (line 66) | namespace detail {
      type is_trivially_copy_constructible (line 68) | struct is_trivially_copy_constructible : std::is_trivially_copy_cons...
      type is_trivially_copy_constructible<std::vector<T,A>> (line 71) | struct is_trivially_copy_constructible<std::vector<T,A>>
      type conjunction (line 136) | struct conjunction : std::true_type {}
      type conjunction<B> (line 137) | struct conjunction<B> : B {}
      type is_pointer_to_non_const_member_func (line 150) | struct is_pointer_to_non_const_member_func : std::false_type{}
      type is_const_or_const_ref (line 164) | struct is_const_or_const_ref : std::false_type{}
      type is_const_or_const_ref<T const&> (line 165) | struct is_const_or_const_ref<T const&> : std::true_type{}
      type is_const_or_const_ref<T const> (line 166) | struct is_const_or_const_ref<T const> : std::true_type{}
      function invoke (line 178) | constexpr auto invoke(Fn &&f, Args &&... args) noexcept(
      function invoke (line 186) | constexpr auto invoke(Fn &&f, Args &&... args) noexcept(
      type invoke_result_impl (line 193) | struct invoke_result_impl
      type voider (line 210) | struct voider { using type = void; }
      type is_optional_impl (line 214) | struct is_optional_impl : std::false_type {}
      type is_optional_impl<optional<T>> (line 215) | struct is_optional_impl<optional<T>> : std::true_type {}
      type returns_void_impl (line 226) | struct returns_void_impl
      type is_swappable (line 283) | struct is_swappable : std::true_type {}
      type is_nothrow_swappable (line 285) | struct is_nothrow_swappable : std::true_type {}
      type swap_adl_tests (line 288) | namespace swap_adl_tests {
        type tag (line 291) | struct tag {}
        type is_std_swap_noexcept (line 310) | struct is_std_swap_noexcept
        type is_std_swap_noexcept<T[N]> (line 316) | struct is_std_swap_noexcept<T[N]> : is_std_swap_noexcept<T> {}
        type is_adl_swap_noexcept (line 319) | struct is_adl_swap_noexcept
      type is_swappable (line 324) | struct is_swappable
      type is_swappable<T[N], T[N]> (line 333) | struct is_swappable<T[N], T[N]>
      type is_nothrow_swappable (line 342) | struct is_nothrow_swappable
      type optional_storage_base (line 358) | struct optional_storage_base {
        method TL_OPTIONAL_11_CONSTEXPR (line 363) | TL_OPTIONAL_11_CONSTEXPR optional_storage_base(in_place_t, U &&... u)
        type dummy (line 373) | struct dummy {}
      type optional_storage_base<T, true> (line 383) | struct optional_storage_base<T, true> {
        type dummy (line 393) | struct dummy {}
      type optional_operations_base (line 404) | struct optional_operations_base : optional_storage_base<T> {
        method hard_reset (line 407) | void hard_reset() noexcept {
        method construct (line 412) | void construct(Args &&... args) noexcept {
        method assign (line 417) | void assign(Opt &&rhs) {
        method has_value (line 432) | bool has_value() const { return this->m_has_value; }
        method TL_OPTIONAL_11_CONSTEXPR (line 434) | TL_OPTIONAL_11_CONSTEXPR T &get() & { return this->m_value; }
        method TL_OPTIONAL_11_CONSTEXPR (line 435) | TL_OPTIONAL_11_CONSTEXPR const T &get() const & { return this->m_v...
        method TL_OPTIONAL_11_CONSTEXPR (line 436) | TL_OPTIONAL_11_CONSTEXPR T &&get() && { return std::move(this->m_v...
        method T (line 438) | constexpr const T &&get() const && { return std::move(this->m_valu...
      type optional_copy_base (line 445) | struct optional_copy_base : optional_operations_base<T> {
      type optional_copy_base<T, false> (line 451) | struct optional_copy_base<T, false> : optional_operations_base<T> {
        method optional_copy_base (line 454) | optional_copy_base() = default;
        method optional_copy_base (line 455) | optional_copy_base(const optional_copy_base &rhs) {
        method optional_copy_base (line 463) | optional_copy_base(optional_copy_base &&rhs) = default;
        method optional_copy_base (line 464) | optional_copy_base &operator=(const optional_copy_base &rhs) = def...
        method optional_copy_base (line 465) | optional_copy_base &operator=(optional_copy_base &&rhs) = default;
      type optional_move_base (line 475) | struct optional_move_base : optional_copy_base<T> {
      type optional_move_base (line 479) | struct optional_move_base
      type optional_move_base<T, false> (line 481) | struct optional_move_base<T, false> : optional_copy_base<T> {
        method optional_move_base (line 484) | optional_move_base() = default;
        method optional_move_base (line 485) | optional_move_base(const optional_move_base &rhs) = default;
        method optional_move_base (line 487) | optional_move_base(optional_move_base &&rhs) noexcept(
        method optional_move_base (line 495) | optional_move_base &operator=(const optional_move_base &rhs) = def...
        method optional_move_base (line 496) | optional_move_base &operator=(optional_move_base &&rhs) = default;
      type optional_copy_assign_base (line 503) | struct optional_copy_assign_base : optional_move_base<T> {
      type optional_copy_assign_base<T, false> (line 508) | struct optional_copy_assign_base<T, false> : optional_move_base<T> {
        method optional_copy_assign_base (line 511) | optional_copy_assign_base() = default;
        method optional_copy_assign_base (line 512) | optional_copy_assign_base(const optional_copy_assign_base &rhs) = ...
        method optional_copy_assign_base (line 514) | optional_copy_assign_base(optional_copy_assign_base &&rhs) = default;
        method optional_copy_assign_base (line 515) | optional_copy_assign_base &operator=(const optional_copy_assign_ba...
        method optional_copy_assign_base (line 519) | optional_copy_assign_base &
      type optional_move_assign_base (line 532) | struct optional_move_assign_base : optional_copy_assign_base<T> {
      type optional_move_assign_base (line 536) | struct optional_move_assign_base
      type optional_move_assign_base<T, false> (line 540) | struct optional_move_assign_base<T, false> : optional_copy_assign_ba...
        method optional_move_assign_base (line 543) | optional_move_assign_base() = default;
        method optional_move_assign_base (line 544) | optional_move_assign_base(const optional_move_assign_base &rhs) = ...
        method optional_move_assign_base (line 546) | optional_move_assign_base(optional_move_assign_base &&rhs) = default;
        method optional_move_assign_base (line 548) | optional_move_assign_base &
        method optional_move_assign_base (line 551) | optional_move_assign_base &
      type optional_delete_ctor_base (line 564) | struct optional_delete_ctor_base {
        method optional_delete_ctor_base (line 565) | optional_delete_ctor_base() = default;
        method optional_delete_ctor_base (line 566) | optional_delete_ctor_base(const optional_delete_ctor_base &) = def...
        method optional_delete_ctor_base (line 567) | optional_delete_ctor_base(optional_delete_ctor_base &&) noexcept =...
        method optional_delete_ctor_base (line 568) | optional_delete_ctor_base &
        method optional_delete_ctor_base (line 570) | optional_delete_ctor_base &
      type optional_delete_ctor_base<T, true, false> (line 574) | struct optional_delete_ctor_base<T, true, false> {
        method optional_delete_ctor_base (line 575) | optional_delete_ctor_base() = default;
        method optional_delete_ctor_base (line 576) | optional_delete_ctor_base(const optional_delete_ctor_base &) = def...
        method optional_delete_ctor_base (line 577) | optional_delete_ctor_base(optional_delete_ctor_base &&) noexcept =...
        method optional_delete_ctor_base (line 578) | optional_delete_ctor_base &
        method optional_delete_ctor_base (line 580) | optional_delete_ctor_base &
      type optional_delete_ctor_base<T, false, true> (line 584) | struct optional_delete_ctor_base<T, false, true> {
        method optional_delete_ctor_base (line 585) | optional_delete_ctor_base() = default;
        method optional_delete_ctor_base (line 586) | optional_delete_ctor_base(const optional_delete_ctor_base &) = del...
        method optional_delete_ctor_base (line 587) | optional_delete_ctor_base(optional_delete_ctor_base &&) noexcept =...
        method optional_delete_ctor_base (line 588) | optional_delete_ctor_base &
        method optional_delete_ctor_base (line 590) | optional_delete_ctor_base &
      type optional_delete_ctor_base<T, false, false> (line 594) | struct optional_delete_ctor_base<T, false, false> {
        method optional_delete_ctor_base (line 595) | optional_delete_ctor_base() = default;
        method optional_delete_ctor_base (line 596) | optional_delete_ctor_base(const optional_delete_ctor_base &) = del...
        method optional_delete_ctor_base (line 597) | optional_delete_ctor_base(optional_delete_ctor_base &&) noexcept =...
        method optional_delete_ctor_base (line 598) | optional_delete_ctor_base &
        method optional_delete_ctor_base (line 600) | optional_delete_ctor_base &
      type optional_delete_assign_base (line 611) | struct optional_delete_assign_base {
        method optional_delete_assign_base (line 612) | optional_delete_assign_base() = default;
        method optional_delete_assign_base (line 613) | optional_delete_assign_base(const optional_delete_assign_base &) =...
        method optional_delete_assign_base (line 614) | optional_delete_assign_base(optional_delete_assign_base &&) noexce...
        method optional_delete_assign_base (line 616) | optional_delete_assign_base &
        method optional_delete_assign_base (line 618) | optional_delete_assign_base &
      type optional_delete_assign_base<T, true, false> (line 622) | struct optional_delete_assign_base<T, true, false> {
        method optional_delete_assign_base (line 623) | optional_delete_assign_base() = default;
        method optional_delete_assign_base (line 624) | optional_delete_assign_base(const optional_delete_assign_base &) =...
        method optional_delete_assign_base (line 625) | optional_delete_assign_base(optional_delete_assign_base &&) noexce...
        method optional_delete_assign_base (line 627) | optional_delete_assign_base &
        method optional_delete_assign_base (line 629) | optional_delete_assign_base &
      type optional_delete_assign_base<T, false, true> (line 633) | struct optional_delete_assign_base<T, false, true> {
        method optional_delete_assign_base (line 634) | optional_delete_assign_base() = default;
        method optional_delete_assign_base (line 635) | optional_delete_assign_base(const optional_delete_assign_base &) =...
        method optional_delete_assign_base (line 636) | optional_delete_assign_base(optional_delete_assign_base &&) noexce...
        method optional_delete_assign_base (line 638) | optional_delete_assign_base &
        method optional_delete_assign_base (line 640) | optional_delete_assign_base &
      type optional_delete_assign_base<T, false, false> (line 644) | struct optional_delete_assign_base<T, false, false> {
        method optional_delete_assign_base (line 645) | optional_delete_assign_base() = default;
        method optional_delete_assign_base (line 646) | optional_delete_assign_base(const optional_delete_assign_base &) =...
        method optional_delete_assign_base (line 647) | optional_delete_assign_base(optional_delete_assign_base &&) noexce...
        method optional_delete_assign_base (line 649) | optional_delete_assign_base &
        method optional_delete_assign_base (line 651) | optional_delete_assign_base &
    class monostate (line 109) | class monostate {}
    type in_place_t (line 112) | struct in_place_t {
      method in_place_t (line 113) | explicit in_place_t() = default;
    class optional (line 119) | class optional
      method and_then (line 714) | TL_OPTIONAL_11_CONSTEXPR auto and_then(F &&f) & {
      method and_then (line 725) | TL_OPTIONAL_11_CONSTEXPR auto and_then(F &&f) && {
      method and_then (line 736) | constexpr auto and_then(F &&f) const & {
      method and_then (line 748) | constexpr auto and_then(F &&f) const && {
      method TL_OPTIONAL_11_CONSTEXPR (line 769) | TL_OPTIONAL_11_CONSTEXPR detail::invoke_result_t<F, T &> and_then(F ...
      method TL_OPTIONAL_11_CONSTEXPR (line 781) | TL_OPTIONAL_11_CONSTEXPR detail::invoke_result_t<F, T &&> and_then(F...
      method and_then (line 793) | constexpr detail::invoke_result_t<F, const T &> and_then(F &&f) cons...
      method and_then (line 806) | constexpr detail::invoke_result_t<F, const T &&> and_then(F &&f) con...
      method map (line 828) | TL_OPTIONAL_11_CONSTEXPR auto map(F &&f) & {
      method map (line 834) | TL_OPTIONAL_11_CONSTEXPR auto map(F &&f) && {
      method map (line 840) | constexpr auto map(F &&f) const & {
      method map (line 846) | constexpr auto map(F &&f) const && {
      method TL_OPTIONAL_11_CONSTEXPR (line 860) | TL_OPTIONAL_11_CONSTEXPR decltype(optional_map_impl(std::declval<opt...
      method TL_OPTIONAL_11_CONSTEXPR (line 869) | TL_OPTIONAL_11_CONSTEXPR decltype(optional_map_impl(std::declval<opt...
      method map (line 878) | constexpr decltype(optional_map_impl(std::declval<const optional &>(),
      method map (line 888) | constexpr decltype(optional_map_impl(std::declval<const optional &&>(),
      method or_else (line 923) | optional<T> or_else(F &&f) && {
      method or_else (line 940) | optional<T> or_else(F &&f) const & {
      method or_else (line 957) | optional<T> or_else(F &&f) const && {
      method or_else (line 967) | optional<T> or_else(F &&f) const && {
      method U (line 979) | U map_or(F &&f, U &&u) & {
      method U (line 985) | U map_or(F &&f, U &&u) && {
      method U (line 991) | U map_or(F &&f, U &&u) const & {
      method U (line 998) | U map_or(F &&f, U &&u) const && {
      method map_or_else (line 1014) | detail::invoke_result_t<U> map_or_else(F &&f, U &&u) & {
      method map_or_else (line 1023) | detail::invoke_result_t<U> map_or_else(F &&f, U &&u) && {
      method map_or_else (line 1032) | detail::invoke_result_t<U> map_or_else(F &&f, U &&u) const & {
      method map_or_else (line 1042) | detail::invoke_result_t<U> map_or_else(F &&f, U &&u) const && {
      method conjunction (line 1050) | constexpr optional<typename std::decay<U>::type> conjunction(U &&u) ...
      method TL_OPTIONAL_11_CONSTEXPR (line 1057) | TL_OPTIONAL_11_CONSTEXPR optional disjunction(const optional &rhs) & {
      method optional (line 1062) | constexpr optional disjunction(const optional &rhs) const & {
      method TL_OPTIONAL_11_CONSTEXPR (line 1067) | TL_OPTIONAL_11_CONSTEXPR optional disjunction(const optional &rhs) && {
      method optional (line 1073) | constexpr optional disjunction(const optional &rhs) const && {
      method TL_OPTIONAL_11_CONSTEXPR (line 1079) | TL_OPTIONAL_11_CONSTEXPR optional disjunction(optional &&rhs) & {
      method optional (line 1084) | constexpr optional disjunction(optional &&rhs) const & {
      method TL_OPTIONAL_11_CONSTEXPR (line 1089) | TL_OPTIONAL_11_CONSTEXPR optional disjunction(optional &&rhs) && {
      method optional (line 1095) | constexpr optional disjunction(optional &&rhs) const && {
      method optional (line 1102) | optional take() & {
      method optional (line 1109) | optional take() const & {
      method optional (line 1116) | optional take() && {
      method optional (line 1124) | optional take() const && {
      method optional (line 1135) | constexpr optional() noexcept = default;
      method optional (line 1138) | constexpr optional(nullopt_t) noexcept {}
      method TL_OPTIONAL_11_CONSTEXPR (line 1144) | TL_OPTIONAL_11_CONSTEXPR optional(const optional &rhs) = default;
      method TL_OPTIONAL_11_CONSTEXPR (line 1150) | TL_OPTIONAL_11_CONSTEXPR optional(optional &&rhs) = default;
      method optional (line 1156) | constexpr explicit optional(
    type detail (line 122) | namespace detail {
      type is_trivially_copy_constructible (line 68) | struct is_trivially_copy_constructible : std::is_trivially_copy_cons...
      type is_trivially_copy_constructible<std::vector<T,A>> (line 71) | struct is_trivially_copy_constructible<std::vector<T,A>>
      type conjunction (line 136) | struct conjunction : std::true_type {}
      type conjunction<B> (line 137) | struct conjunction<B> : B {}
      type is_pointer_to_non_const_member_func (line 150) | struct is_pointer_to_non_const_member_func : std::false_type{}
      type is_const_or_const_ref (line 164) | struct is_const_or_const_ref : std::false_type{}
      type is_const_or_const_ref<T const&> (line 165) | struct is_const_or_const_ref<T const&> : std::true_type{}
      type is_const_or_const_ref<T const> (line 166) | struct is_const_or_const_ref<T const> : std::true_type{}
      function invoke (line 178) | constexpr auto invoke(Fn &&f, Args &&... args) noexcept(
      function invoke (line 186) | constexpr auto invoke(Fn &&f, Args &&... args) noexcept(
      type invoke_result_impl (line 193) | struct invoke_result_impl
      type voider (line 210) | struct voider { using type = void; }
      type is_optional_impl (line 214) | struct is_optional_impl : std::false_type {}
      type is_optional_impl<optional<T>> (line 215) | struct is_optional_impl<optional<T>> : std::true_type {}
      type returns_void_impl (line 226) | struct returns_void_impl
      type is_swappable (line 283) | struct is_swappable : std::true_type {}
      type is_nothrow_swappable (line 285) | struct is_nothrow_swappable : std::true_type {}
      type swap_adl_tests (line 288) | namespace swap_adl_tests {
        type tag (line 291) | struct tag {}
        type is_std_swap_noexcept (line 310) | struct is_std_swap_noexcept
        type is_std_swap_noexcept<T[N]> (line 316) | struct is_std_swap_noexcept<T[N]> : is_std_swap_noexcept<T> {}
        type is_adl_swap_noexcept (line 319) | struct is_adl_swap_noexcept
      type is_swappable (line 324) | struct is_swappable
      type is_swappable<T[N], T[N]> (line 333) | struct is_swappable<T[N], T[N]>
      type is_nothrow_swappable (line 342) | struct is_nothrow_swappable
      type optional_storage_base (line 358) | struct optional_storage_base {
        method TL_OPTIONAL_11_CONSTEXPR (line 363) | TL_OPTIONAL_11_CONSTEXPR optional_storage_base(in_place_t, U &&... u)
        type dummy (line 373) | struct dummy {}
      type optional_storage_base<T, true> (line 383) | struct optional_storage_base<T, true> {
        type dummy (line 393) | struct dummy {}
      type optional_operations_base (line 404) | struct optional_operations_base : optional_storage_base<T> {
        method hard_reset (line 407) | void hard_reset() noexcept {
        method construct (line 412) | void construct(Args &&... args) noexcept {
        method assign (line 417) | void assign(Opt &&rhs) {
        method has_value (line 432) | bool has_value() const { return this->m_has_value; }
        method TL_OPTIONAL_11_CONSTEXPR (line 434) | TL_OPTIONAL_11_CONSTEXPR T &get() & { return this->m_value; }
        method TL_OPTIONAL_11_CONSTEXPR (line 435) | TL_OPTIONAL_11_CONSTEXPR const T &get() const & { return this->m_v...
        method TL_OPTIONAL_11_CONSTEXPR (line 436) | TL_OPTIONAL_11_CONSTEXPR T &&get() && { return std::move(this->m_v...
        method T (line 438) | constexpr const T &&get() const && { return std::move(this->m_valu...
      type optional_copy_base (line 445) | struct optional_copy_base : optional_operations_base<T> {
      type optional_copy_base<T, false> (line 451) | struct optional_copy_base<T, false> : optional_operations_base<T> {
        method optional_copy_base (line 454) | optional_copy_base() = default;
        method optional_copy_base (line 455) | optional_copy_base(const optional_copy_base &rhs) {
        method optional_copy_base (line 463) | optional_copy_base(optional_copy_base &&rhs) = default;
        method optional_copy_base (line 464) | optional_copy_base &operator=(const optional_copy_base &rhs) = def...
        method optional_copy_base (line 465) | optional_copy_base &operator=(optional_copy_base &&rhs) = default;
      type optional_move_base (line 475) | struct optional_move_base : optional_copy_base<T> {
      type optional_move_base (line 479) | struct optional_move_base
      type optional_move_base<T, false> (line 481) | struct optional_move_base<T, false> : optional_copy_base<T> {
        method optional_move_base (line 484) | optional_move_base() = default;
        method optional_move_base (line 485) | optional_move_base(const optional_move_base &rhs) = default;
        method optional_move_base (line 487) | optional_move_base(optional_move_base &&rhs) noexcept(
        method optional_move_base (line 495) | optional_move_base &operator=(const optional_move_base &rhs) = def...
        method optional_move_base (line 496) | optional_move_base &operator=(optional_move_base &&rhs) = default;
      type optional_copy_assign_base (line 503) | struct optional_copy_assign_base : optional_move_base<T> {
      type optional_copy_assign_base<T, false> (line 508) | struct optional_copy_assign_base<T, false> : optional_move_base<T> {
        method optional_copy_assign_base (line 511) | optional_copy_assign_base() = default;
        method optional_copy_assign_base (line 512) | optional_copy_assign_base(const optional_copy_assign_base &rhs) = ...
        method optional_copy_assign_base (line 514) | optional_copy_assign_base(optional_copy_assign_base &&rhs) = default;
        method optional_copy_assign_base (line 515) | optional_copy_assign_base &operator=(const optional_copy_assign_ba...
        method optional_copy_assign_base (line 519) | optional_copy_assign_base &
      type optional_move_assign_base (line 532) | struct optional_move_assign_base : optional_copy_assign_base<T> {
      type optional_move_assign_base (line 536) | struct optional_move_assign_base
      type optional_move_assign_base<T, false> (line 540) | struct optional_move_assign_base<T, false> : optional_copy_assign_ba...
        method optional_move_assign_base (line 543) | optional_move_assign_base() = default;
        method optional_move_assign_base (line 544) | optional_move_assign_base(const optional_move_assign_base &rhs) = ...
        method optional_move_assign_base (line 546) | optional_move_assign_base(optional_move_assign_base &&rhs) = default;
        method optional_move_assign_base (line 548) | optional_move_assign_base &
        method optional_move_assign_base (line 551) | optional_move_assign_base &
      type optional_delete_ctor_base (line 564) | struct optional_delete_ctor_base {
        method optional_delete_ctor_base (line 565) | optional_delete_ctor_base() = default;
        method optional_delete_ctor_base (line 566) | optional_delete_ctor_base(const optional_delete_ctor_base &) = def...
        method optional_delete_ctor_base (line 567) | optional_delete_ctor_base(optional_delete_ctor_base &&) noexcept =...
        method optional_delete_ctor_base (line 568) | optional_delete_ctor_base &
        method optional_delete_ctor_base (line 570) | optional_delete_ctor_base &
      type optional_delete_ctor_base<T, true, false> (line 574) | struct optional_delete_ctor_base<T, true, false> {
        method optional_delete_ctor_base (line 575) | optional_delete_ctor_base() = default;
        method optional_delete_ctor_base (line 576) | optional_delete_ctor_base(const optional_delete_ctor_base &) = def...
        method optional_delete_ctor_base (line 577) | optional_delete_ctor_base(optional_delete_ctor_base &&) noexcept =...
        method optional_delete_ctor_base (line 578) | optional_delete_ctor_base &
        method optional_delete_ctor_base (line 580) | optional_delete_ctor_base &
      type optional_delete_ctor_base<T, false, true> (line 584) | struct optional_delete_ctor_base<T, false, true> {
        method optional_delete_ctor_base (line 585) | optional_delete_ctor_base() = default;
        method optional_delete_ctor_base (line 586) | optional_delete_ctor_base(const optional_delete_ctor_base &) = del...
        method optional_delete_ctor_base (line 587) | optional_delete_ctor_base(optional_delete_ctor_base &&) noexcept =...
        method optional_delete_ctor_base (line 588) | optional_delete_ctor_base &
        method optional_delete_ctor_base (line 590) | optional_delete_ctor_base &
      type optional_delete_ctor_base<T, false, false> (line 594) | struct optional_delete_ctor_base<T, false, false> {
        method optional_delete_ctor_base (line 595) | optional_delete_ctor_base() = default;
        method optional_delete_ctor_base (line 596) | optional_delete_ctor_base(const optional_delete_ctor_base &) = del...
        method optional_delete_ctor_base (line 597) | optional_delete_ctor_base(optional_delete_ctor_base &&) noexcept =...
        method optional_delete_ctor_base (line 598) | optional_delete_ctor_base &
        method optional_delete_ctor_base (line 600) | optional_delete_ctor_base &
      type optional_delete_assign_base (line 611) | struct optional_delete_assign_base {
        method optional_delete_assign_base (line 612) | optional_delete_assign_base() = default;
        method optional_delete_assign_base (line 613) | optional_delete_assign_base(const optional_delete_assign_base &) =...
        method optional_delete_assign_base (line 614) | optional_delete_assign_base(optional_delete_assign_base &&) noexce...
        method optional_delete_assign_base (line 616) | optional_delete_assign_base &
        method optional_delete_assign_base (line 618) | optional_delete_assign_base &
      type optional_delete_assign_base<T, true, false> (line 622) | struct optional_delete_assign_base<T, true, false> {
        method optional_delete_assign_base (line 623) | optional_delete_assign_base() = default;
        method optional_delete_assign_base (line 624) | optional_delete_assign_base(const optional_delete_assign_base &) =...
        method optional_delete_assign_base (line 625) | optional_delete_assign_base(optional_delete_assign_base &&) noexce...
        method optional_delete_assign_base (line 627) | optional_delete_assign_base &
        method optional_delete_assign_base (line 629) | optional_delete_assign_base &
      type optional_delete_assign_base<T, false, true> (line 633) | struct optional_delete_assign_base<T, false, true> {
        method optional_delete_assign_base (line 634) | optional_delete_assign_base() = default;
        method optional_delete_assign_base (line 635) | optional_delete_assign_base(const optional_delete_assign_base &) =...
        method optional_delete_assign_base (line 636) | optional_delete_assign_base(optional_delete_assign_base &&) noexce...
        method optional_delete_assign_base (line 638) | optional_delete_assign_base &
        method optional_delete_assign_base (line 640) | optional_delete_assign_base &
      type optional_delete_assign_base<T, false, false> (line 644) | struct optional_delete_assign_base<T, false, false> {
        method optional_delete_assign_base (line 645) | optional_delete_assign_base() = default;
        method optional_delete_assign_base (line 646) | optional_delete_assign_base(const optional_delete_assign_base &) =...
        method optional_delete_assign_base (line 647) | optional_delete_assign_base(optional_delete_assign_base &&) noexce...
        method optional_delete_assign_base (line 649) | optional_delete_assign_base &
        method optional_delete_assign_base (line 651) | optional_delete_assign_base &
    type nullopt_t (line 658) | struct nullopt_t {
      type do_not_use (line 659) | struct do_not_use {}
      method nullopt_t (line 660) | constexpr explicit nullopt_t(do_not_use, do_not_use) noexcept {}
    class bad_optional_access (line 674) | class bad_optional_access : public std::exception {
      method bad_optional_access (line 676) | bad_optional_access() = default;
    class optional (line 687) | class optional : private detail::optional_move_assign_base<T>,
      method and_then (line 714) | TL_OPTIONAL_11_CONSTEXPR auto and_then(F &&f) & {
      method and_then (line 725) | TL_OPTIONAL_11_CONSTEXPR auto and_then(F &&f) && {
      method and_then (line 736) | constexpr auto and_then(F &&f) const & {
      method and_then (line 748) | constexpr auto and_then(F &&f) const && {
      method TL_OPTIONAL_11_CONSTEXPR (line 769) | TL_OPTIONAL_11_CONSTEXPR detail::invoke_result_t<F, T &> and_then(F ...
      method TL_OPTIONAL_11_CONSTEXPR (line 781) | TL_OPTIONAL_11_CONSTEXPR detail::invoke_result_t<F, T &&> and_then(F...
      method and_then (line 793) | constexpr detail::invoke_result_t<F, const T &> and_then(F &&f) cons...
      method and_then (line 806) | constexpr detail::invoke_result_t<F, const T &&> and_then(F &&f) con...
      method map (line 828) | TL_OPTIONAL_11_CONSTEXPR auto map(F &&f) & {
      method map (line 834) | TL_OPTIONAL_11_CONSTEXPR auto map(F &&f) && {
      method map (line 840) | constexpr auto map(F &&f) const & {
      method map (line 846) | constexpr auto map(F &&f) const && {
      method TL_OPTIONAL_11_CONSTEXPR (line 860) | TL_OPTIONAL_11_CONSTEXPR decltype(optional_map_impl(std::declval<opt...
      method TL_OPTIONAL_11_CONSTEXPR (line 869) | TL_OPTIONAL_11_CONSTEXPR decltype(optional_map_impl(std::declval<opt...
      method map (line 878) | constexpr decltype(optional_map_impl(std::declval<const optional &>(),
      method map (line 888) | constexpr decltype(optional_map_impl(std::declval<const optional &&>(),
      method or_else (line 923) | optional<T> or_else(F &&f) && {
      method or_else (line 940) | optional<T> or_else(F &&f) const & {
      method or_else (line 957) | optional<T> or_else(F &&f) const && {
      method or_else (line 967) | optional<T> or_else(F &&f) const && {
      method U (line 979) | U map_or(F &&f, U &&u) & {
      method U (line 985) | U map_or(F &&f, U &&u) && {
      method U (line 991) | U map_or(F &&f, U &&u) const & {
      method U (line 998) | U map_or(F &&f, U &&u) const && {
      method map_or_else (line 1014) | detail::invoke_result_t<U> map_or_else(F &&f, U &&u) & {
      method map_or_else (line 1023) | detail::invoke_result_t<U> map_or_else(F &&f, U &&u) && {
      method map_or_else (line 1032) | detail::invoke_result_t<U> map_or_else(F &&f, U &&u) const & {
      method map_or_else (line 1042) | detail::invoke_result_t<U> map_or_else(F &&f, U &&u) const && {
      method conjunction (line 1050) | constexpr optional<typename std::decay<U>::type> conjunction(U &&u) ...
      method TL_OPTIONAL_11_CONSTEXPR (line 1057) | TL_OPTIONAL_11_CONSTEXPR optional disjunction(const optional &rhs) & {
      method optional (line 1062) | constexpr optional disjunction(const optional &rhs) const & {
      method TL_OPTIONAL_11_CONSTEXPR (line 1067) | TL_OPTIONAL_11_CONSTEXPR optional disjunction(const optional &rhs) && {
      method optional (line 1073) | constexpr optional disjunction(const optional &rhs) const && {
      method TL_OPTIONAL_11_CONSTEXPR (line 1079) | TL_OPTIONAL_11_CONSTEXPR optional disjunction(optional &&rhs) & {
      method optional (line 1084) | constexpr optional disjunction(optional &&rhs) const & {
      method TL_OPTIONAL_11_CONSTEXPR (line 1089) | TL_OPTIONAL_11_CONSTEXPR optional disjunction(optional &&rhs) && {
      method optional (line 1095) | constexpr optional disjunction(optional &&rhs) const && {
      method optional (line 1102) | optional take() & {
      method optional (line 1109) | optional take() const & {
      method optional (line 1116) | optional take() && {
      method optional (line 1124) | optional take() const && {
      method optional (line 1135) | constexpr optional() noexcept = default;
      method optional (line 1138) | constexpr optional(nullopt_t) noexcept {}
      method TL_OPTIONAL_11_CONSTEXPR (line 1144) | TL_OPTIONAL_11_CONSTEXPR optional(const optional &rhs) = default;
      method TL_OPTIONAL_11_CONSTEXPR (line 1150) | TL_OPTIONAL_11_CONSTEXPR optional(optional &&rhs) = default;
      method optional (line 1156) | constexpr explicit optional(
    function optional (line 1185) | constexpr explicit optional(U &&u) : base(in_place, std::forward<U>(u)...
      method and_then (line 714) | TL_OPTIONAL_11_CONSTEXPR auto and_then(F &&f) & {
      method and_then (line 725) | TL_OPTIONAL_11_CONSTEXPR auto and_then(F &&f) && {
      method and_then (line 736) | constexpr auto and_then(F &&f) const & {
      method and_then (line 748) | constexpr auto and_then(F &&f) const && {
      method TL_OPTIONAL_11_CONSTEXPR (line 769) | TL_OPTIONAL_11_CONSTEXPR detail::invoke_result_t<F, T &> and_then(F ...
      method TL_OPTIONAL_11_CONSTEXPR (line 781) | TL_OPTIONAL_11_CONSTEXPR detail::invoke_result_t<F, T &&> and_then(F...
      method and_then (line 793) | constexpr detail::invoke_result_t<F, const T &> and_then(F &&f) cons...
      method and_then (line 806) | constexpr detail::invoke_result_t<F, const T &&> and_then(F &&f) con...
      method map (line 828) | TL_OPTIONAL_11_CONSTEXPR auto map(F &&f) & {
      method map (line 834) | TL_OPTIONAL_11_CONSTEXPR auto map(F &&f) && {
      method map (line 840) | constexpr auto map(F &&f) const & {
      method map (line 846) | constexpr auto map(F &&f) const && {
      method TL_OPTIONAL_11_CONSTEXPR (line 860) | TL_OPTIONAL_11_CONSTEXPR decltype(optional_map_impl(std::declval<opt...
      method TL_OPTIONAL_11_CONSTEXPR (line 869) | TL_OPTIONAL_11_CONSTEXPR decltype(optional_map_impl(std::declval<opt...
      method map (line 878) | constexpr decltype(optional_map_impl(std::declval<const optional &>(),
      method map (line 888) | constexpr decltype(optional_map_impl(std::declval<const optional &&>(),
      method or_else (line 923) | optional<T> or_else(F &&f) && {
      method or_else (line 940) | optional<T> or_else(F &&f) const & {
      method or_else (line 957) | optional<T> or_else(F &&f) const && {
      method or_else (line 967) | optional<T> or_else(F &&f) const && {
      method U (line 979) | U map_or(F &&f, U &&u) & {
      method U (line 985) | U map_or(F &&f, U &&u) && {
      method U (line 991) | U map_or(F &&f, U &&u) const & {
      method U (line 998) | U map_or(F &&f, U &&u) const && {
      method map_or_else (line 1014) | detail::invoke_result_t<U> map_or_else(F &&f, U &&u) & {
      method map_or_else (line 1023) | detail::invoke_result_t<U> map_or_else(F &&f, U &&u) && {
      method map_or_else (line 1032) | detail::invoke_result_t<U> map_or_else(F &&f, U &&u) const & {
      method map_or_else (line 1042) | detail::invoke_result_t<U> map_or_else(F &&f, U &&u) const && {
      method conjunction (line 1050) | constexpr optional<typename std::decay<U>::type> conjunction(U &&u) ...
      method TL_OPTIONAL_11_CONSTEXPR (line 1057) | TL_OPTIONAL_11_CONSTEXPR optional disjunction(const optional &rhs) & {
      method optional (line 1062) | constexpr optional disjunction(const optional &rhs) const & {
      method TL_OPTIONAL_11_CONSTEXPR (line 1067) | TL_OPTIONAL_11_CONSTEXPR optional disjunction(const optional &rhs) && {
      method optional (line 1073) | constexpr optional disjunction(const optional &rhs) const && {
      method TL_OPTIONAL_11_CONSTEXPR (line 1079) | TL_OPTIONAL_11_CONSTEXPR optional disjunction(optional &&rhs) & {
      method optional (line 1084) | constexpr optional disjunction(optional &&rhs) const & {
      method TL_OPTIONAL_11_CONSTEXPR (line 1089) | TL_OPTIONAL_11_CONSTEXPR optional disjunction(optional &&rhs) && {
      method optional (line 1095) | constexpr optional disjunction(optional &&rhs) const && {
      method optional (line 1102) | optional take() & {
      method optional (line 1109) | optional take() const & {
      method optional (line 1116) | optional take() && {
      method optional (line 1124) | optional take() const && {
      method optional (line 1135) | constexpr optional() noexcept = default;
      method optional (line 1138) | constexpr optional(nullopt_t) noexcept {}
      method TL_OPTIONAL_11_CONSTEXPR (line 1144) | TL_OPTIONAL_11_CONSTEXPR optional(const optional &rhs) = default;
      method TL_OPTIONAL_11_CONSTEXPR (line 1150) | TL_OPTIONAL_11_CONSTEXPR optional(optional &&rhs) = default;
      method optional (line 1156) | constexpr explicit optional(
    function optional (line 1192) | optional(const optional<U> &rhs) {
      method and_then (line 714) | TL_OPTIONAL_11_CONSTEXPR auto and_then(F &&f) & {
      method and_then (line 725) | TL_OPTIONAL_11_CONSTEXPR auto and_then(F &&f) && {
      method and_then (line 736) | constexpr auto and_then(F &&f) const & {
      method and_then (line 748) | constexpr auto and_then(F &&f) const && {
      method TL_OPTIONAL_11_CONSTEXPR (line 769) | TL_OPTIONAL_11_CONSTEXPR detail::invoke_result_t<F, T &> and_then(F ...
      method TL_OPTIONAL_11_CONSTEXPR (line 781) | TL_OPTIONAL_11_CONSTEXPR detail::invoke_result_t<F, T &&> and_then(F...
      method and_then (line 793) | constexpr detail::invoke_result_t<F, const T &> and_then(F &&f) cons...
      method and_then (line 806) | constexpr detail::invoke_result_t<F, const T &&> and_then(F &&f) con...
      method map (line 828) | TL_OPTIONAL_11_CONSTEXPR auto map(F &&f) & {
      method map (line 834) | TL_OPTIONAL_11_CONSTEXPR auto map(F &&f) && {
      method map (line 840) | constexpr auto map(F &&f) const & {
      method map (line 846) | constexpr auto map(F &&f) const && {
      method TL_OPTIONAL_11_CONSTEXPR (line 860) | TL_OPTIONAL_11_CONSTEXPR decltype(optional_map_impl(std::declval<opt...
      method TL_OPTIONAL_11_CONSTEXPR (line 869) | TL_OPTIONAL_11_CONSTEXPR decltype(optional_map_impl(std::declval<opt...
      method map (line 878) | constexpr decltype(optional_map_impl(std::declval<const optional &>(),
      method map (line 888) | constexpr decltype(optional_map_impl(std::declval<const optional &&>(),
      method or_else (line 923) | optional<T> or_else(F &&f) && {
      method or_else (line 940) | optional<T> or_else(F &&f) const & {
      method or_else (line 957) | optional<T> or_else(F &&f) const && {
      method or_else (line 967) | optional<T> or_else(F &&f) const && {
      method U (line 979) | U map_or(F &&f, U &&u) & {
      method U (line 985) | U map_or(F &&f, U &&u) && {
      method U (line 991) | U map_or(F &&f, U &&u) const & {
      method U (line 998) | U map_or(F &&f, U &&u) const && {
      method map_or_else (line 1014) | detail::invoke_result_t<U> map_or_else(F &&f, U &&u) & {
      method map_or_else (line 1023) | detail::invoke_result_t<U> map_or_else(F &&f, U &&u) && {
      method map_or_else (line 1032) | detail::invoke_result_t<U> map_or_else(F &&f, U &&u) const & {
      method map_or_else (line 1042) | detail::invoke_result_t<U> map_or_else(F &&f, U &&u) const && {
      method conjunction (line 1050) | constexpr optional<typename std::decay<U>::type> conjunction(U &&u) ...
      method TL_OPTIONAL_11_CONSTEXPR (line 1057) | TL_OPTIONAL_11_CONSTEXPR optional disjunction(const optional &rhs) & {
      method optional (line 1062) | constexpr optional disjunction(const optional &rhs) const & {
      method TL_OPTIONAL_11_CONSTEXPR (line 1067) | TL_OPTIONAL_11_CONSTEXPR optional disjunction(const optional &rhs) && {
      method optional (line 1073) | constexpr optional disjunction(const optional &rhs) const && {
      method TL_OPTIONAL_11_CONSTEXPR (line 1079) | TL_OPTIONAL_11_CONSTEXPR optional disjunction(optional &&rhs) & {
      method optional (line 1084) | constexpr optional disjunction(optional &&rhs) const & {
      method TL_OPTIONAL_11_CONSTEXPR (line 1089) | TL_OPTIONAL_11_CONSTEXPR optional disjunction(optional &&rhs) && {
      method optional (line 1095) | constexpr optional disjunction(optional &&rhs) const && {
      method optional (line 1102) | optional take() & {
      method optional (line 1109) | optional take() const & {
      method optional (line 1116) | optional take() && {
      method optional (line 1124) | optional take() const && {
      method optional (line 1135) | constexpr optional() noexcept = default;
      method optional (line 1138) | constexpr optional(nullopt_t) noexcept {}
      method TL_OPTIONAL_11_CONSTEXPR (line 1144) | TL_OPTIONAL_11_CONSTEXPR optional(const optional &rhs) = default;
      method TL_OPTIONAL_11_CONSTEXPR (line 1150) | TL_OPTIONAL_11_CONSTEXPR optional(optional &&rhs) = default;
      method optional (line 1156) | constexpr explicit optional(
    function optional (line 1202) | explicit optional(const optional<U> &rhs) {
      method and_then (line 714) | TL_OPTIONAL_11_CONSTEXPR auto and_then(F &&f) & {
      method and_then (line 725) | TL_OPTIONAL_11_CONSTEXPR auto and_then(F &&f) && {
      method and_then (line 736) | constexpr auto and_then(F &&f) const & {
      method and_then (line 748) | constexpr auto and_then(F &&f) const && {
      method TL_OPTIONAL_11_CONSTEXPR (line 769) | TL_OPTIONAL_11_CONSTEXPR detail::invoke_result_t<F, T &> and_then(F ...
      method TL_OPTIONAL_11_CONSTEXPR (line 781) | TL_OPTIONAL_11_CONSTEXPR detail::invoke_result_t<F, T &&> and_then(F...
      method and_then (line 793) | constexpr detail::invoke_result_t<F, const T &> and_then(F &&f) cons...
      method and_then (line 806) | constexpr detail::invoke_result_t<F, const T &&> and_then(F &&f) con...
      method map (line 828) | TL_OPTIONAL_11_CONSTEXPR auto map(F &&f) & {
      method map (line 834) | TL_OPTIONAL_11_CONSTEXPR auto map(F &&f) && {
      method map (line 840) | constexpr auto map(F &&f) const & {
      method map (line 846) | constexpr auto map(F &&f) const && {
      method TL_OPTIONAL_11_CONSTEXPR (line 860) | TL_OPTIONAL_11_CONSTEXPR decltype(optional_map_impl(std::declval<opt...
      method TL_OPTIONAL_11_CONSTEXPR (line 869) | TL_OPTIONAL_11_CONSTEXPR decltype(optional_map_impl(std::declval<opt...
      method map (line 878) | constexpr decltype(optional_map_impl(std::declval<const optional &>(),
      method map (line 888) | constexpr decltype(optional_map_impl(std::declval<const optional &&>(),
      method or_else (line 923) | optional<T> or_else(F &&f) && {
      method or_else (line 940) | optional<T> or_else(F &&f) const & {
      method or_else (line 957) | optional<T> or_else(F &&f) const && {
      method or_else (line 967) | optional<T> or_else(F &&f) const && {
      method U (line 979) | U map_or(F &&f, U &&u) & {
      method U (line 985) | U map_or(F &&f, U &&u) && {
      method U (line 991) | U map_or(F &&f, U &&u) const & {
      method U (line 998) | U map_or(F &&f, U &&u) const && {
      method map_or_else (line 1014) | detail::invoke_result_t<U> map_or_else(F &&f, U &&u) & {
      method map_or_else (line 1023) | detail::invoke_result_t<U> map_or_else(F &&f, U &&u) && {
      method map_or_else (line 1032) | detail::invoke_result_t<U> map_or_else(F &&f, U &&u) const & {
      method map_or_else (line 1042) | detail::invoke_result_t<U> map_or_else(F &&f, U &&u) const && {
      method conjunction (line 1050) | constexpr optional<typename std::decay<U>::type> conjunction(U &&u) ...
      method TL_OPTIONAL_11_CONSTEXPR (line 1057) | TL_OPTIONAL_11_CONSTEXPR optional disjunction(const optional &rhs) & {
      method optional (line 1062) | constexpr optional disjunction(const optional &rhs) const & {
      method TL_OPTIONAL_11_CONSTEXPR (line 1067) | TL_OPTIONAL_11_CONSTEXPR optional disjunction(const optional &rhs) && {
      method optional (line 1073) | constexpr optional disjunction(const optional &rhs) const && {
      method TL_OPTIONAL_11_CONSTEXPR (line 1079) | TL_OPTIONAL_11_CONSTEXPR optional disjunction(optional &&rhs) & {
      method optional (line 1084) | constexpr optional disjunction(optional &&rhs) const & {
      method TL_OPTIONAL_11_CONSTEXPR (line 1089) | TL_OPTIONAL_11_CONSTEXPR optional disjunction(optional &&rhs) && {
      method optional (line 1095) | constexpr optional disjunction(optional &&rhs) const && {
      method optional (line 1102) | optional take() & {
      method optional (line 1109) | optional take() const & {
      method optional (line 1116) | optional take() && {
      method optional (line 1124) | optional take() const && {
      method optional (line 1135) | constexpr optional() noexcept = default;
      method optional (line 1138) | constexpr optional(nullopt_t) noexcept {}
      method TL_OPTIONAL_11_CONSTEXPR (line 1144) | TL_OPTIONAL_11_CONSTEXPR optional(const optional &rhs) = default;
      method TL_OPTIONAL_11_CONSTEXPR (line 1150) | TL_OPTIONAL_11_CONSTEXPR optional(optional &&rhs) = default;
      method optional (line 1156) | constexpr explicit optional(
    function optional (line 1213) | optional(optional<U> &&rhs) {
      method and_then (line 714) | TL_OPTIONAL_11_CONSTEXPR auto and_then(F &&f) & {
      method and_then (line 725) | TL_OPTIONAL_11_CONSTEXPR auto and_then(F &&f) && {
      method and_then (line 736) | constexpr auto and_then(F &&f) const & {
      method and_then (line 748) | constexpr auto and_then(F &&f) const && {
      method TL_OPTIONAL_11_CONSTEXPR (line 769) | TL_OPTIONAL_11_CONSTEXPR detail::invoke_result_t<F, T &> and_then(F ...
      method TL_OPTIONAL_11_CONSTEXPR (line 781) | TL_OPTIONAL_11_CONSTEXPR detail::invoke_result_t<F, T &&> and_then(F...
      method and_then (line 793) | constexpr detail::invoke_result_t<F, const T &> and_then(F &&f) cons...
      method and_then (line 806) | constexpr detail::invoke_result_t<F, const T &&> and_then(F &&f) con...
      method map (line 828) | TL_OPTIONAL_11_CONSTEXPR auto map(F &&f) & {
      method map (line 834) | TL_OPTIONAL_11_CONSTEXPR auto map(F &&f) && {
      method map (line 840) | constexpr auto map(F &&f) const & {
      method map (line 846) | constexpr auto map(F &&f) const && {
      method TL_OPTIONAL_11_CONSTEXPR (line 860) | TL_OPTIONAL_11_CONSTEXPR decltype(optional_map_impl(std::declval<opt...
      method TL_OPTIONAL_11_CONSTEXPR (line 869) | TL_OPTIONAL_11_CONSTEXPR decltype(optional_map_impl(std::declval<opt...
      method map (line 878) | constexpr decltype(optional_map_impl(std::declval<const optional &>(),
      method map (line 888) | constexpr decltype(optional_map_impl(std::declval<const optional &&>(),
      method or_else (line 923) | optional<T> or_else(F &&f) && {
      method or_else (line 940) | optional<T> or_else(F &&f) const & {
      method or_else (line 957) | optional<T> or_else(F &&f) const && {
      method or_else (line 967) | optional<T> or_else(F &&f) const && {
      method U (line 979) | U map_or(F &&f, U &&u) & {
      method U (line 985) | U map_or(F &&f, U &&u) && {
      method U (line 991) | U map_or(F &&f, U &&u) const & {
      method U (line 998) | U map_or(F &&f, U &&u) const && {
      method map_or_else (line 1014) | detail::invoke_result_t<U> map_or_else(F &&f, U &&u) & {
      method map_or_else (line 1023) | detail::invoke_result_t<U> map_or_else(F &&f, U &&u) && {
      method map_or_else (line 1032) | detail::invoke_result_t<U> map_or_else(F &&f, U &&u) const & {
      method map_or_else (line 1042) | detail::invoke_result_t<U> map_or_else(F &&f, U &&u) const && {
      method conjunction (line 1050) | constexpr optional<typename std::decay<U>::type> conjunction(U &&u) ...
      method TL_OPTIONAL_11_CONSTEXPR (line 1057) | TL_OPTIONAL_11_CONSTEXPR optional disjunction(const optional &rhs) & {
      method optional (line 1062) | constexpr optional disjunction(const optional &rhs) const & {
      method TL_OPTIONAL_11_CONSTEXPR (line 1067) | TL_OPTIONAL_11_CONSTEXPR optional disjunction(const optional &rhs) && {
      method optional (line 1073) | constexpr optional disjunction(const optional &rhs) const && {
      method TL_OPTIONAL_11_CONSTEXPR (line 1079) | TL_OPTIONAL_11_CONSTEXPR optional disjunction(optional &&rhs) & {
      method optional (line 1084) | constexpr optional disjunction(optional &&rhs) const & {
      method TL_OPTIONAL_11_CONSTEXPR (line 1089) | TL_OPTIONAL_11_CONSTEXPR optional disjunction(optional &&rhs) && {
      method optional (line 1095) | constexpr optional disjunction(optional &&rhs) const && {
      method optional (line 1102) | optional take() & {
      method optional (line 1109) | optional take() const & {
      method optional (line 1116) | optional take() && {
      method optional (line 1124) | optional take() const && {
      method optional (line 1135) | constexpr optional() noexcept = default;
      method optional (line 1138) | constexpr optional(nullopt_t) noexcept {}
      method TL_OPTIONAL_11_CONSTEXPR (line 1144) | TL_OPTIONAL_11_CONSTEXPR optional(const optional &rhs) = default;
      method TL_OPTIONAL_11_CONSTEXPR (line 1150) | TL_OPTIONAL_11_CONSTEXPR optional(optional &&rhs) = default;
      method optional (line 1156) | constexpr explicit optional(
    function optional (line 1223) | explicit optional(optional<U> &&rhs) {
      method and_then (line 714) | TL_OPTIONAL_11_CONSTEXPR auto and_then(F &&f) & {
      method and_then (line 725) | TL_OPTIONAL_11_CONSTEXPR auto and_then(F &&f) && {
      method and_then (line 736) | constexpr auto and_then(F &&f) const & {
      method and_then (line 748) | constexpr auto and_then(F &&f) const && {
      method TL_OPTIONAL_11_CONSTEXPR (line 769) | TL_OPTIONAL_11_CONSTEXPR detail::invoke_result_t<F, T &> and_then(F ...
      method TL_OPTIONAL_11_CONSTEXPR (line 781) | TL_OPTIONAL_11_CONSTEXPR detail::invoke_result_t<F, T &&> and_then(F...
      method and_then (line 793) | constexpr detail::invoke_result_t<F, const T &> and_then(F &&f) cons...
      method and_then (line 806) | constexpr detail::invoke_result_t<F, const T &&> and_then(F &&f) con...
      method map (line 828) | TL_OPTIONAL_11_CONSTEXPR auto map(F &&f) & {
      method map (line 834) | TL_OPTIONAL_11_CONSTEXPR auto map(F &&f) && {
      method map (line 840) | constexpr auto map(F &&f) const & {
      method map (line 846) | constexpr auto map(F &&f) const && {
      method TL_OPTIONAL_11_CONSTEXPR (line 860) | TL_OPTIONAL_11_CONSTEXPR decltype(optional_map_impl(std::declval<opt...
      method TL_OPTIONAL_11_CONSTEXPR (line 869) | TL_OPTIONAL_11_CONSTEXPR decltype(optional_map_impl(std::declval<opt...
      method map (line 878) | constexpr decltype(optional_map_impl(std::declval<const optional &>(),
      method map (line 888) | constexpr decltype(optional_map_impl(std::declval<const optional &&>(),
      method or_else (line 923) | optional<T> or_else(F &&f) && {
      method or_else (line 940) | optional<T> or_else(F &&f) const & {
      method or_else (line 957) | optional<T> or_else(F &&f) const && {
      method or_else (line 967) | optional<T> or_else(F &&f) const && {
      method U (line 979) | U map_or(F &&f, U &&u) & {
      method U (line 985) | U map_or(F &&f, U &&u) && {
      method U (line 991) | U map_or(F &&f, U &&u) const & {
      method U (line 998) | U map_or(F &&f, U &&u) const && {
      method map_or_else (line 1014) | detail::invoke_result_t<U> map_or_else(F &&f, U &&u) & {
      method map_or_else (line 1023) | detail::invoke_result_t<U> map_or_else(F &&f, U &&u) && {
      method map_or_else (line 1032) | detail::invoke_result_t<U> map_or_else(F &&f, U &&u) const & {
      method map_or_else (line 1042) | detail::invoke_result_t<U> map_or_else(F &&f, U &&u) const && {
      method conjunction (line 1050) | constexpr optional<typename std::decay<U>::type> conjunction(U &&u) ...
      method TL_OPTIONAL_11_CONSTEXPR (line 1057) | TL_OPTIONAL_11_CONSTEXPR optional disjunction(const optional &rhs) & {
      method optional (line 1062) | constexpr optional disjunction(const optional &rhs) const & {
      method TL_OPTIONAL_11_CONSTEXPR (line 1067) | TL_OPTIONAL_11_CONSTEXPR optional disjunction(const optional &rhs) && {
      method optional (line 1073) | constexpr optional disjunction(const optional &rhs) const && {
      method TL_OPTIONAL_11_CONSTEXPR (line 1079) | TL_OPTIONAL_11_CONSTEXPR optional disjunction(optional &&rhs) & {
      method optional (line 1084) | constexpr optional disjunction(optional &&rhs) const & {
      method TL_OPTIONAL_11_CONSTEXPR (line 1089) | TL_OPTIONAL_11_CONSTEXPR optional disjunction(optional &&rhs) && {
      method optional (line 1095) | constexpr optional disjunction(optional &&rhs) const && {
      method optional (line 1102) | optional take() & {
      method optional (line 1109) | optional take() const & {
      method optional (line 1116) | optional take() && {
      method optional (line 1124) | optional take() const && {
      method optional (line 1135) | constexpr optional() noexcept = default;
      method optional (line 1138) | constexpr optional(nullopt_t) noexcept {}
      method TL_OPTIONAL_11_CONSTEXPR (line 1144) | TL_OPTIONAL_11_CONSTEXPR optional(const optional &rhs) = default;
      method TL_OPTIONAL_11_CONSTEXPR (line 1150) | TL_OPTIONAL_11_CONSTEXPR optional(optional &&rhs) = default;
      method optional (line 1156) | constexpr explicit optional(
    function optional (line 1235) | optional &operator=(nullopt_t) noexcept {
      method and_then (line 714) | TL_OPTIONAL_11_CONSTEXPR auto and_then(F &&f) & {
      method and_then (line 725) | TL_OPTIONAL_11_CONSTEXPR auto and_then(F &&f) && {
      method and_then (line 736) | constexpr auto and_then(F &&f) const & {
      method and_then (line 748) | constexpr auto and_then(F &&f) const && {
      method TL_OPTIONAL_11_CONSTEXPR (line 769) | TL_OPTIONAL_11_CONSTEXPR detail::invoke_result_t<F, T &> and_then(F ...
      method TL_OPTIONAL_11_CONSTEXPR (line 781) | TL_OPTIONAL_11_CONSTEXPR detail::invoke_result_t<F, T &&> and_then(F...
      method and_then (line 793) | constexpr detail::invoke_result_t<F, const T &> and_then(F &&f) cons...
      method and_then (line 806) | constexpr detail::invoke_result_t<F, const T &&> and_then(F &&f) con...
      method map (line 828) | TL_OPTIONAL_11_CONSTEXPR auto map(F &&f) & {
      method map (line 834) | TL_OPTIONAL_11_CONSTEXPR auto map(F &&f) && {
      method map (line 840) | constexpr auto map(F &&f) const & {
      method map (line 846) | constexpr auto map(F &&f) const && {
      method TL_OPTIONAL_11_CONSTEXPR (line 860) | TL_OPTIONAL_11_CONSTEXPR decltype(optional_map_impl(std::declval<opt...
      method TL_OPTIONAL_11_CONSTEXPR (line 869) | TL_OPTIONAL_11_CONSTEXPR decltype(optional_map_impl(std::declval<opt...
      method map (line 878) | constexpr decltype(optional_map_impl(std::declval<const optional &>(),
      method map (line 888) | constexpr decltype(optional_map_impl(std::declval<const optional &&>(),
      method or_else (line 923) | optional<T> or_else(F &&f) && {
      method or_else (line 940) | optional<T> or_else(F &&f) const & {
      method or_else (line 957) | optional<T> or_else(F &&f) const && {
      method or_else (line 967) | optional<T> or_else(F &&f) const && {
      method U (line 979) | U map_or(F &&f, U &&u) & {
      method U (line 985) | U map_or(F &&f, U &&u) && {
      method U (line 991) | U map_or(F &&f, U &&u) const & {
      method U (line 998) | U map_or(F &&f, U &&u) const && {
      method map_or_else (line 1014) | detail::invoke_result_t<U> map_or_else(F &&f, U &&u) & {
      method map_or_else (line 1023) | detail::invoke_result_t<U> map_or_else(F &&f, U &&u) && {
      method map_or_else (line 1032) | detail::invoke_result_t<U> map_or_else(F &&f, U &&u) const & {
      method map_or_else (line 1042) | detail::invoke_result_t<U> map_or_else(F &&f, U &&u) const && {
      method conjunction (line 1050) | constexpr optional<typename std::decay<U>::type> conjunction(U &&u) ...
      method TL_OPTIONAL_11_CONSTEXPR (line 1057) | TL_OPTIONAL_11_CONSTEXPR optional disjunction(const optional &rhs) & {
      method optional (line 1062) | constexpr optional disjunction(const optional &rhs) const & {
      method TL_OPTIONAL_11_CONSTEXPR (line 1067) | TL_OPTIONAL_11_CONSTEXPR optional disjunction(const optional &rhs) && {
      method optional (line 1073) | constexpr optional disjunction(const optional &rhs) const && {
      method TL_OPTIONAL_11_CONSTEXPR (line 1079) | TL_OPTIONAL_11_CONSTEXPR optional disjunction(optional &&rhs) & {
      method optional (line 1084) | constexpr optional disjunction(optional &&rhs) const & {
      method TL_OPTIONAL_11_CONSTEXPR (line 1089) | TL_OPTIONAL_11_CONSTEXPR optional disjunction(optional &&rhs) && {
      method optional (line 1095) | constexpr optional disjunction(optional &&rhs) const && {
      method optional (line 1102) | optional take() & {
      method optional (line 1109) | optional take() const & {
      method optional (line 1116) | optional take() && {
      method optional (line 1124) | optional take() const && {
      method optional (line 1135) | constexpr optional() noexcept = default;
      method optional (line 1138) | constexpr optional(nullopt_t) noexcept {}
      method TL_OPTIONAL_11_CONSTEXPR (line 1144) | TL_OPTIONAL_11_CONSTEXPR optional(const optional &rhs) = default;
      method TL_OPTIONAL_11_CONSTEXPR (line 1150) | TL_OPTIONAL_11_CONSTEXPR optional(optional &&rhs) = default;
      method optional (line 1156) | constexpr explicit optional(
    function optional (line 1260) | optional &operator=(U &&u) {
      method and_then (line 714) | TL_OPTIONAL_11_CONSTEXPR auto and_then(F &&f) & {
      method and_then (line 725) | TL_OPTIONAL_11_CONSTEXPR auto and_then(F &&f) && {
      method and_then (line 736) | constexpr auto and_then(F &&f) const & {
      method and_then (line 748) | constexpr auto and_then(F &&f) const && {
      method TL_OPTIONAL_11_CONSTEXPR (line 769) | TL_OPTIONAL_11_CONSTEXPR detail::invoke_result_t<F, T &> and_then(F ...
      method TL_OPTIONAL_11_CONSTEXPR (line 781) | TL_OPTIONAL_11_CONSTEXPR detail::invoke_result_t<F, T &&> and_then(F...
      method and_then (line 793) | constexpr detail::invoke_result_t<F, const T &> and_then(F &&f) cons...
      method and_then (line 806) | constexpr detail::invoke_result_t<F, const T &&> and_then(F &&f) con...
      method map (line 828) | TL_OPTIONAL_11_CONSTEXPR auto map(F &&f) & {
      method map (line 834) | TL_OPTIONAL_11_CONSTEXPR auto map(F &&f) && {
      method map (line 840) | constexpr auto map(F &&f) const & {
      method map (line 846) | constexpr auto map(F &&f) const && {
      method TL_OPTIONAL_11_CONSTEXPR (line 860) | TL_OPTIONAL_11_CONSTEXPR decltype(optional_map_impl(std::declval<opt...
      method TL_OPTIONAL_11_CONSTEXPR (line 869) | TL_OPTIONAL_11_CONSTEXPR decltype(optional_map_impl(std::declval<opt...
      method map (line 878) | constexpr decltype(optional_map_impl(std::declval<const optional &>(),
      method map (line 888) | constexpr decltype(optional_map_impl(std::declval<const optional &&>(),
      method or_else (line 923) | optional<T> or_else(F &&f) && {
      method or_else (line 940) | optional<T> or_else(F &&f) const & {
      method or_else (line 957) | optional<T> or_else(F &&f) const && {
      method or_else (line 967) | optional<T> or_else(F &&f) const && {
      method U (line 979) | U map_or(F &&f, U &&u) & {
      method U (line 985) | U map_or(F &&f, U &&u) && {
      method U (line 991) | U map_or(F &&f, U &&u) const & {
      method U (line 998) | U map_or(F &&f, U &&u) const && {
      method map_or_else (line 1014) | detail::invoke_result_t<U> map_or_else(F &&f, U &&u) & {
      method map_or_else (line 1023) | detail::invoke_result_t<U> map_or_else(F &&f, U &&u) && {
      method map_or_else (line 1032) | detail::invoke_result_t<U> map_or_else(F &&f, U &&u) const & {
      method map_or_else (line 1042) | detail::invoke_result_t<U> map_or_else(F &&f, U &&u) const && {
      method conjunction (line 1050) | constexpr optional<typename std::decay<U>::type> conjunction(U &&u) ...
      method TL_OPTIONAL_11_CONSTEXPR (line 1057) | TL_OPTIONAL_11_CONSTEXPR optional disjunction(const optional &rhs) & {
      method optional (line 1062) | constexpr optional disjunction(const optional &rhs) const & {
      method TL_OPTIONAL_11_CONSTEXPR (line 1067) | TL_OPTIONAL_11_CONSTEXPR optional disjunction(const optional &rhs) && {
      method optional (line 1073) | constexpr optional disjunction(const optional &rhs) const && {
      method TL_OPTIONAL_11_CONSTEXPR (line 1079) | TL_OPTIONAL_11_CONSTEXPR optional disjunction(optional &&rhs) & {
      method optional (line 1084) | constexpr optional disjunction(optional &&rhs) const & {
      method TL_OPTIONAL_11_CONSTEXPR (line 1089) | TL_OPTIONAL_11_CONSTEXPR optional disjunction(optional &&rhs) && {
      method optional (line 1095) | constexpr optional disjunction(optional &&rhs) const && {
      method optional (line 1102) | optional take() & {
      method optional (line 1109) | optional take() const & {
      method optional (line 1116) | optional take() && {
      method optional (line 1124) | optional take() const && {
      method optional (line 1135) | constexpr optional() noexcept = default;
      method optional (line 1138) | constexpr optional(nullopt_t) noexcept {}
      method TL_OPTIONAL_11_CONSTEXPR (line 1144) | TL_OPTIONAL_11_CONSTEXPR optional(const optional &rhs) = default;
      method TL_OPTIONAL_11_CONSTEXPR (line 1150) | TL_OPTIONAL_11_CONSTEXPR optional(optional &&rhs) = default;
      method optional (line 1156) | constexpr explicit optional(
    function optional (line 1277) | optional &operator=(const optional<U> &rhs) {
      method and_then (line 714) | TL_OPTIONAL_11_CONSTEXPR auto and_then(F &&f) & {
      method and_then (line 725) | TL_OPTIONAL_11_CONSTEXPR auto and_then(F &&f) && {
      method and_then (line 736) | constexpr auto and_then(F &&f) const & {
      method and_then (line 748) | constexpr auto and_then(F &&f) const && {
      method TL_OPTIONAL_11_CONSTEXPR (line 769) | TL_OPTIONAL_11_CONSTEXPR detail::invoke_result_t<F, T &> and_then(F ...
      method TL_OPTIONAL_11_CONSTEXPR (line 781) | TL_OPTIONAL_11_CONSTEXPR detail::invoke_result_t<F, T &&> and_then(F...
      method and_then (line 793) | constexpr detail::invoke_result_t<F, const T &> and_then(F &&f) cons...
      method and_then (line 806) | constexpr detail::invoke_result_t<F, const T &&> and_then(F &&f) con...
      method map (line 828) | TL_OPTIONAL_11_CONSTEXPR auto map(F &&f) & {
      method map (line 834) | TL_OPTIONAL_11_CONSTEXPR auto map(F &&f) && {
      method map (line 840) | constexpr auto map(F &&f) const & {
      method map (line 846) | constexpr auto map(F &&f) const && {
      method TL_OPTIONAL_11_CONSTEXPR (line 860) | TL_OPTIONAL_11_CONSTEXPR decltype(optional_map_impl(std::declval<opt...
      method TL_OPTIONAL_11_CONSTEXPR (line 869) | TL_OPTIONAL_11_CONSTEXPR decltype(optional_map_impl(std::declval<opt...
      method map (line 878) | constexpr decltype(optional_map_impl(std::declval<const optional &>(),
      method map (line 888) | constexpr decltype(optional_map_impl(std::declval<const optional &&>(),
      method or_else (line 923) | optional<T> or_else(F &&f) && {
      method or_else (line 940) | optional<T> or_else(F &&f) const & {
      method or_else (line 957) | optional<T> or_else(F &&f) const && {
      method or_else (line 967) | optional<T> or_else(F &&f) const && {
      method U (line 979) | U map_or(F &&f, U &&u) & {
      method U (line 985) | U map_or(F &&f, U &&u) && {
      method U (line 991) | U map_or(F &&f, U &&u) const & {
      method U (line 998) | U map_or(F &&f, U &&u) const && {
      method map_or_else (line 1014) | detail::invoke_result_t<U> map_or_else(F &&f, U &&u) & {
      method map_or_else (line 1023) | detail::invoke_result_t<U> map_or_else(F &&f, U &&u) && {
      method map_or_else (line 1032) | detail::invoke_result_t<U> map_or_else(F &&f, U &&u) const & {
      method map_or_else (line 1042) | detail::invoke_result_t<U> map_or_else(F &&f, U &&u) const && {
      method conjunction (line 1050) | constexpr optional<typename std::decay<U>::type> conjunction(U &&u) ...
      method TL_OPTIONAL_11_CONSTEXPR (line 1057) | TL_OPTIONAL_11_CONSTEXPR optional disjunction(const optional &rhs) & {
      method optional (line 1062) | constexpr optional disjunction(const optional &rhs) const & {
      method TL_OPTIONAL_11_CONSTEXPR (line 1067) | TL_OPTIONAL_11_CONSTEXPR optional disjunction(const optional &rhs) && {
      method optional (line 1073) | constexpr optional disjunction(const optional &rhs) const && {
      method TL_OPTIONAL_11_CONSTEXPR (line 1079) | TL_OPTIONAL_11_CONSTEXPR optional disjunction(optional &&rhs) & {
      method optional (line 1084) | constexpr optional disjunction(optional &&rhs) const & {
      method TL_OPTIONAL_11_CONSTEXPR (line 1089) | TL_OPTIONAL_11_CONSTEXPR optional disjunction(optional &&rhs) && {
      method optional (line 1095) | constexpr optional disjunction(optional &&rhs) const && {
      method optional (line 1102) | optional take() & {
      method optional (line 1109) | optional take() const & {
      method optional (line 1116) | optional take() && {
      method optional (line 1124) | optional take() const && {
      method optional (line 1135) | constexpr optional() noexcept = default;
      method optional (line 1138) | constexpr optional(nullopt_t) noexcept {}
      method TL_OPTIONAL_11_CONSTEXPR (line 1144) | TL_OPTIONAL_11_CONSTEXPR optional(const optional &rhs) = default;
      method TL_OPTIONAL_11_CONSTEXPR (line 1150) | TL_OPTIONAL_11_CONSTEXPR optional(optional &&rhs) = default;
      method optional (line 1156) | constexpr explicit optional(
    function optional (line 1300) | optional &operator=(optional<U> &&rhs) {
      method and_then (line 714) | TL_OPTIONAL_11_CONSTEXPR auto and_then(F &&f) & {
      method and_then (line 725) | TL_OPTIONAL_11_CONSTEXPR auto and_then(F &&f) && {
      method and_then (line 736) | constexpr auto and_then(F &&f) const & {
      method and_then (line 748) | constexpr auto and_then(F &&f) const && {
      method TL_OPTIONAL_11_CONSTEXPR (line 769) | TL_OPTIONAL_11_CONSTEXPR detail::invoke_result_t<F, T &> and_then(F ...
      method TL_OPTIONAL_11_CONSTEXPR (line 781) | TL_OPTIONAL_11_CONSTEXPR detail::invoke_result_t<F, T &&> and_then(F...
      method and_then (line 793) | constexpr detail::invoke_result_t<F, const T &> and_then(F &&f) cons...
      method and_then (line 806) | constexpr detail::invoke_result_t<F, const T &&> and_then(F &&f) con...
      method map (line 828) | TL_OPTIONAL_11_CONSTEXPR auto map(F &&f) & {
      method map (line 834) | TL_OPTIONAL_11_CONSTEXPR auto map(F &&f) && {
      method map (line 840) | constexpr auto map(F &&f) const & {
      method map (line 846) | constexpr auto map(F &&f) const && {
      method TL_OPTIONAL_11_CONSTEXPR (line 860) | TL_OPTIONAL_11_CONSTEXPR decltype(optional_map_impl(std::declval<opt...
      method TL_OPTIONAL_11_CONSTEXPR (line 869) | TL_OPTIONAL_11_CONSTEXPR decltype(optional_map_impl(std::declval<opt...
      method map (line 878) | constexpr decltype(optional_map_impl(std::declval<const optional &>(),
      method map (line 888) | constexpr decltype(optional_map_impl(std::declval<const optional &&>(),
      method or_else (line 923) | optional<T> or_else(F &&f) && {
      method or_else (line 940) | optional<T> or_else(F &&f) const & {
      method or_else (line 957) | optional<T> or_else(F &&f) const && {
      method or_else (line 967) | optional<T> or_else(F &&f) const && {
      method U (line 979) | U map_or(F &&f, U &&u) & {
      method U (line 985) | U map_or(F &&f, U &&u) && {
      method U (line 991) | U map_or(F &&f, U &&u) const & {
      method U (line 998) | U map_or(F &&f, U &&u) const && {
      method map_or_else (line 1014) | detail::invoke_result_t<U> map_or_else(F &&f, U &&u) & {
      method map_or_else (line 1023) | detail::invoke_result_t<U> map_or_else(F &&f, U &&u) && {
      method map_or_else (line 1032) | detail::invoke_result_t<U> map_or_else(F &&f, U &&u) const & {
      method map_or_else (line 1042) | detail::invoke_result_t<U> map_or_else(F &&f, U &&u) const && {
      method conjunction (line 1050) | constexpr optional<typename std::decay<U>::type> conjunction(U &&u) ...
      method TL_OPTIONAL_11_CONSTEXPR (line 1057) | TL_OPTIONAL_11_CONSTEXPR optional disjunction(const optional &rhs) & {
      method optional (line 1062) | constexpr optional disjunction(const optional &rhs) const & {
      method TL_OPTIONAL_11_CONSTEXPR (line 1067) | TL_OPTIONAL_11_CONSTEXPR optional disjunction(const optional &rhs) && {
      method optional (line 1073) | constexpr optional disjunction(const optional &rhs) const && {
      method TL_OPTIONAL_11_CONSTEXPR (line 1079) | TL_OPTIONAL_11_CONSTEXPR optional disjunction(optional &&rhs) & {
      method optional (line 1084) | constexpr optional disjunction(optional &&rhs) const & {
      method TL_OPTIONAL_11_CONSTEXPR (line 1089) | TL_OPTIONAL_11_CONSTEXPR optional disjunction(optional &&rhs) && {
      method optional (line 1095) | constexpr optional disjunction(optional &&rhs) const && {
      method optional (line 1102) | optional take() & {
      method optional (line 1109) | optional take() const & {
      method optional (line 1116) | optional take() && {
      method optional (line 1124) | optional take() const && {
      method optional (line 1135) | constexpr optional() noexcept = default;
      method optional (line 1138) | constexpr optional(nullopt_t) noexcept {}
      method TL_OPTIONAL_11_CONSTEXPR (line 1144) | TL_OPTIONAL_11_CONSTEXPR optional(const optional &rhs) = default;
      method TL_OPTIONAL_11_CONSTEXPR (line 1150) | TL_OPTIONAL_11_CONSTEXPR optional(optional &&rhs) = default;
      method optional (line 1156) | constexpr explicit optional(
    function T (line 1319) | T &emplace(Args &&... args) {
    function emplace (line 1331) | detail::enable_if_t<
    function swap (line 1346) | void
    function T (line 1367) | constexpr const T *operator->() const {
    function TL_OPTIONAL_11_CONSTEXPR (line 1373) | TL_OPTIONAL_11_CONSTEXPR T *operator->() {
    function TL_OPTIONAL_11_CONSTEXPR (line 1381) | TL_OPTIONAL_11_CONSTEXPR T &operator*() & { return this->m_value; }
    function T (line 1385) | constexpr const T &operator*() const & { return this->m_value; }
    function TL_OPTIONAL_11_CONSTEXPR (line 1388) | TL_OPTIONAL_11_CONSTEXPR T &&operator*() && {
    function T (line 1394) | constexpr const T &&operator*() const && { return std::move(this->m_va...
    function has_value (line 1399) | constexpr bool has_value() const noexcept { return this->m_has_value; }
    function TL_OPTIONAL_11_CONSTEXPR (line 1410) | TL_OPTIONAL_11_CONSTEXPR T &value() & {
    function TL_OPTIONAL_11_CONSTEXPR (line 1417) | TL_OPTIONAL_11_CONSTEXPR const T &value() const & {
    function TL_OPTIONAL_11_CONSTEXPR (line 1423) | TL_OPTIONAL_11_CONSTEXPR T &&value() && {
    function TL_OPTIONAL_11_CONSTEXPR (line 1431) | TL_OPTIONAL_11_CONSTEXPR const T &&value() const && {
    function T (line 1440) | constexpr T value_or(U &&u) const & {
    function TL_OPTIONAL_11_CONSTEXPR (line 1448) | TL_OPTIONAL_11_CONSTEXPR T value_or(U &&u) && {
    function reset (line 1456) | void reset() noexcept {
  type tl (line 105) | namespace tl {
    type detail (line 66) | namespace detail {
      type is_trivially_copy_constructible (line 68) | struct is_trivially_copy_constructible : std::is_trivially_copy_cons...
      type is_trivially_copy_constructible<std::vector<T,A>> (line 71) | struct is_trivially_copy_constructible<std::vector<T,A>>
      type conjunction (line 136) | struct conjunction : std::true_type {}
      type conjunction<B> (line 137) | struct conjunction<B> : B {}
      type is_pointer_to_non_const_member_func (line 150) | struct is_pointer_to_non_const_member_func : std::false_type{}
      type is_const_or_const_ref (line 164) | struct is_const_or_const_ref : std::false_type{}
      type is_const_or_const_ref<T const&> (line 165) | struct is_const_or_const_ref<T const&> : std::true_type{}
      type is_const_or_const_ref<T const> (line 166) | struct is_const_or_const_ref<T const> : std::true_type{}
      function invoke (line 178) | constexpr auto invoke(Fn &&f, Args &&... args) noexcept(
      function invoke (line 186) | constexpr auto invoke(Fn &&f, Args &&... args) noexcept(
      type invoke_result_impl (line 193) | struct invoke_result_impl
      type voider (line 210) | struct voider { using type = void; }
      type is_optional_impl (line 214) | struct is_optional_impl : std::false_type {}
      type is_optional_impl<optional<T>> (line 215) | struct is_optional_impl<optional<T>> : std::true_type {}
      type returns_void_impl (line 226) | struct returns_void_impl
      type is_swappable (line 283) | struct is_swappable : std::true_type {}
      type is_nothrow_swappable (line 285) | struct is_nothrow_swappable : std::true_type {}
      type swap_adl_tests (line 288) | namespace swap_adl_tests {
        type tag (line 291) | struct tag {}
        type is_std_swap_noexcept (line 310) | struct is_std_swap_noexcept
        type is_std_swap_noexcept<T[N]> (line 316) | struct is_std_swap_noexcept<T[N]> : is_std_swap_noexcept<T> {}
        type is_adl_swap_noexcept (line 319) | struct is_adl_swap_noexcept
      type is_swappable (line 324) | struct is_swappable
      type is_swappable<T[N], T[N]> (line 333) | struct is_swappable<T[N], T[N]>
      type is_nothrow_swappable (line 342) | struct is_nothrow_swappable
      type optional_storage_base (line 358) | struct optional_storage_base {
        method TL_OPTIONAL_11_CONSTEXPR (line 363) | TL_OPTIONAL_11_CONSTEXPR optional_storage_base(in_place_t, U &&... u)
        type dummy (line 373) | struct dummy {}
      type optional_storage_base<T, true> (line 383) | struct optional_storage_base<T, true> {
        type dummy (line 393) | struct dummy {}
      type optional_operations_base (line 404) | struct optional_operations_base : optional_storage_base<T> {
        method hard_reset (line 407) | void hard_reset() noexcept {
        method construct (line 412) | void construct(Args &&... args) noexcept {
        method assign (line 417) | void assign(Opt &&rhs) {
        method has_value (line 432) | bool has_value() const { return this->m_has_value; }
        method TL_OPTIONAL_11_CONSTEXPR (line 434) | TL_OPTIONAL_11_CONSTEXPR T &get() & { return this->m_value; }
        method TL_OPTIONAL_11_CONSTEXPR (line 435) | TL_OPTIONAL_11_CONSTEXPR const T &get() const & { return this->m_v...
        method TL_OPTIONAL_11_CONSTEXPR (line 436) | TL_OPTIONAL_11_CONSTEXPR T &&get() && { return std::move(this->m_v...
        method T (line 438) | constexpr const T &&get() const && { return std::move(this->m_valu...
      type optional_copy_base (line 445) | struct optional_copy_base : optional_operations_base<T> {
      type optional_copy_base<T, false> (line 451) | struct optional_copy_base<T, false> : optional_operations_base<T> {
        method optional_copy_base (line 454) | optional_copy_base() = default;
        method optional_copy_base (line 455) | optional_copy_base(const optional_copy_base &rhs) {
        method optional_copy_base (line 463) | optional_copy_base(optional_copy_base &&rhs) = default;
        method optional_copy_base (line 464) | optional_copy_base &operator=(const optional_copy_base &rhs) = def...
        method optional_copy_base (line 465) | optional_copy_base &operator=(optional_copy_base &&rhs) = default;
      type optional_move_base (line 475) | struct optional_move_base : optional_copy_base<T> {
      type optional_move_base (line 479) | struct optional_move_base
      type optional_move_base<T, false> (line 481) | struct optional_move_base<T, false> : optional_copy_base<T> {
        method optional_move_base (line 484) | optional_move_base() = default;
        method optional_move_base (line 485) | optional_move_base(const optional_move_base &rhs) = default;
        method optional_move_base (line 487) | optional_move_base(optional_move_base &&rhs) noexcept(
        method optional_move_base (line 495) | optional_move_base &operator=(const optional_move_base &rhs) = def...
        method optional_move_base (line 496) | optional_move_base &operator=(optional_move_base &&rhs) = default;
      type optional_copy_assign_base (line 503) | struct optional_copy_assign_base : optional_move_base<T> {
      type optional_copy_assign_base<T, false> (line 508) | struct optional_copy_assign_base<T, false> : optional_move_base<T> {
        method optional_copy_assign_base (line 511) | optional_copy_assign_base() = default;
        method optional_copy_assign_base (line 512) | optional_copy_assign_base(const optional_copy_assign_base &rhs) = ...
        method optional_copy_assign_base (line 514) | optional_copy_assign_base(optional_copy_assign_base &&rhs) = default;
        method optional_copy_assign_base (line 515) | optional_copy_assign_base &operator=(const optional_copy_assign_ba...
        method optional_copy_assign_base (line 519) | optional_copy_assign_base &
      type optional_move_assign_base (line 532) | struct optional_move_assign_base : optional_copy_assign_base<T> {
      type optional_move_assign_base (line 536) | struct optional_move_assign_base
      type optional_move_assign_base<T, false> (line 540) | struct optional_move_assign_base<T, false> : optional_copy_assign_ba...
        method optional_move_assign_base (line 543) | optional_move_assign_base() = default;
        method optional_move_assign_base (line 544) | optional_move_assign_base(const optional_move_assign_base &rhs) = ...
        method optional_move_assign_base (line 546) | optional_move_assign_base(optional_move_assign_base &&rhs) = default;
        method optional_move_assign_base (line 548) | optional_move_assign_base &
        method optional_move_assign_base (line 551) | optional_move_assign_base &
      type optional_delete_ctor_base (line 564) | struct optional_delete_ctor_base {
        method optional_delete_ctor_base (line 565) | optional_delete_ctor_base() = default;
        method optional_delete_ctor_base (line 566) | optional_delete_ctor_base(const optional_delete_ctor_base &) = def...
        method optional_delete_ctor_base (line 567) | optional_delete_ctor_base(optional_delete_ctor_base &&) noexcept =...
        method optional_delete_ctor_base (line 568) | optional_delete_ctor_base &
        method optional_delete_ctor_base (line 570) | optional_delete_ctor_base &
      type optional_delete_ctor_base<T, true, false> (line 574) | struct optional_delete_ctor_base<T, true, false> {
        method optional_delete_ctor_base (line 575) | optional_delete_ctor_base() = default;
        method optional_delete_ctor_base (line 576) | optional_delete_ctor_base(const optional_delete_ctor_base &) = def...
        method optional_delete_ctor_base (line 577) | optional_delete_ctor_base(optional_delete_ctor_base &&) noexcept =...
        method optional_delete_ctor_base (line 578) | optional_delete_ctor_base &
        method optional_delete_ctor_base (line 580) | optional_delete_ctor_base &
      type optional_delete_ctor_base<T, false, true> (line 584) | struct optional_delete_ctor_base<T, false, true> {
        method optional_delete_ctor_base (line 585) | optional_delete_ctor_base() = default;
        method optional_delete_ctor_base (line 586) | optional_delete_ctor_base(const optional_delete_ctor_base &) = del...
        method optional_delete_ctor_base (line 587) | optional_delete_ctor_base(optional_delete_ctor_base &&) noexcept =...
        method optional_delete_ctor_base (line 588) | optional_delete_ctor_base &
        method optional_delete_ctor_base (line 590) | optional_delete_ctor_base &
      type optional_delete_ctor_base<T, false, false> (line 594) | struct optional_delete_ctor_base<T, false, false> {
        method optional_delete_ctor_base (line 595) | optional_delete_ctor_base() = default;
        method optional_delete_ctor_base (line 596) | optional_delete_ctor_base(const optional_delete_ctor_base &) = del...
        method optional_delete_ctor_base (line 597) | optional_delete_ctor_base(optional_delete_ctor_base &&) noexcept =...
        method optional_delete_ctor_base (line 598) | optional_delete_ctor_base &
        method optional_delete_ctor_base (line 600) | optional_delete_ctor_base &
      type optional_delete_assign_base (line 611) | struct optional_delete_assign_base {
        method optional_delete_assign_base (line 612) | optional_delete_assign_base() = default;
        method optional_delete_assign_base (line 613) | optional_delete_assign_base(const optional_delete_assign_base &) =...
        method optional_delete_assign_base (line 614) | optional_delete_assign_base(optional_delete_assign_base &&) noexce...
        method optional_delete_assign_base (line 616) | optional_delete_assign_base &
        method optional_delete_assign_base (line 618) | optional_delete_assign_base &
      type optional_delete_assign_base<T, true, false> (line 622) | struct optional_delete_assign_base<T, true, false> {
        method optional_delete_assign_base (line 623) | optional_delete_assign_base() = default;
        method optional_delete_assign_base (line 624) | optional_delete_assign_base(const optional_delete_assign_base &) =...
        method optional_delete_assign_base (line 625) | optional_delete_assign_base(optional_delete_assign_base &&) noexce...
        method optional_delete_assign_base (line 627) | optional_delete_assign_base &
        method optional_delete_assign_base (line 629) | optional_delete_assign_base &
      type optional_delete_assign_base<T, false, true> (line 633) | struct optional_delete_assign_base<T, false, true> {
        method optional_delete_assign_base (line 634) | optional_delete_assign_base() = default;
        method optional_delete_assign_base (line 635) | optional_delete_assign_base(const optional_delete_assign_base &) =...
        method optional_delete_assign_base (line 636) | optional_delete_assign_base(optional_delete_assign_base &&) noexce...
        method optional_delete_assign_base (line 638) | optional_delete_assign_base &
        method optional_delete_assign_base (line 640) | optional_delete_assign_base &
      type optional_delete_assign_base<T, false, false> (line 644) | struct optional_delete_assign_base<T, false, false> {
        method optional_delete_assign_base (line 645) | optional_delete_assign_base() = default;
        method optional_delete_assign_base (line 646) | optional_delete_assign_base(const optional_delete_assign_base &) =...
        method optional_delete_assign_base (line 647) | optional_delete_assign_base(optional_delete_assign_base &&) noexce...
        method optional_delete_assign_base (line 649) | optional_delete_assign_base &
        method optional_delete_assign_base (line 651) | optional_delete_assign_base &
    class monostate (line 109) | class monostate {}
    type in_place_t (line 112) | struct in_place_t {
      method in_place_t (line 113) | explicit in_place_t() = default;
    class optional (line 119) | class optional
      method and_then (line 714) | TL_OPTIONAL_11_CONSTEXPR auto and_then(F &&f) & {
      method and_then (line 725) | TL_OPTIONAL_11_CONSTEXPR auto and_then(F &&f) && {
      method and_then (line 736) | constexpr auto and_then(F &&f) const & {
      method and_then (line 748) | constexpr auto and_then(F &&f) const && {
      method TL_OPTIONAL_11_CONSTEXPR (line 769) | TL_OPTIONAL_11_CONSTEXPR detail::invoke_result_t<F, T &> and_then(F ...
      method TL_OPTIONAL_11_CONSTEXPR (line 781) | TL_OPTIONAL_11_CONSTEXPR detail::invoke_result_t<F, T &&> and_then(F...
      method and_then (line 793) | constexpr detail::invoke_result_t<F, const T &> and_then(F &&f) cons...
      method and_then (line 806) | constexpr detail::invoke_result_t<F, const T &&> and_then(F &&f) con...
      method map (line 828) | TL_OPTIONAL_11_CONSTEXPR auto map(F &&f) & {
      method map (line 834) | TL_OPTIONAL_11_CONSTEXPR auto map(F &&f) && {
      method map (line 840) | constexpr auto map(F &&f) const & {
      method map (line 846) | constexpr auto map(F &&f) const && {
      method TL_OPTIONAL_11_CONSTEXPR (line 860) | TL_OPTIONAL_11_CONSTEXPR decltype(optional_map_impl(std::declval<opt...
      method TL_OPTIONAL_11_CONSTEXPR (line 869) | TL_OPTIONAL_11_CONSTEXPR decltype(optional_map_impl(std::declval<opt...
      method map (line 878) | constexpr decltype(optional_map_impl(std::declval<const optional &>(),
      method map (line 888) | constexpr decltype(optional_map_impl(std::declval<const optional &&>(),
      method or_else (line 923) | optional<T> or_else(F &&f) && {
      method or_else (line 940) | optional<T> or_else(F &&f) const & {
      method or_else (line 957) | optional<T> or_else(F &&f) const && {
      method or_else (line 967) | optional<T> or_else(F &&f) const && {
      method U (line 979) | U map_or(F &&f, U &&u) & {
      method U (line 985) | U map_or(F &&f, U &&u) && {
      method U (line 991) | U map_or(F &&f, U &&u) const & {
      method U (line 998) | U map_or(F &&f, U &&u) const && {
      method map_or_else (line 1014) | detail::invoke_result_t<U> map_or_else(F &&f, U &&u) & {
      method map_or_else (line 1023) | detail::invoke_result_t<U> map_or_else(F &&f, U &&u) && {
      method map_or_else (line 1032) | detail::invoke_result_t<U> map_or_else(F &&f, U &&u) const & {
      method map_or_else (line 1042) | detail::invoke_result_t<U> map_or_else(F &&f, U &&u) const && {
      method conjunction (line 1050) | constexpr optional<typename std::decay<U>::type> conjunction(U &&u) ...
      method TL_OPTIONAL_11_CONSTEXPR (line 1057) | TL_OPTIONAL_11_CONSTEXPR optional disjunction(const optional &rhs) & {
      method optional (line 1062) | constexpr optional disjunction(const optional &rhs) const & {
      method TL_OPTIONAL_11_CONSTEXPR (line 1067) | TL_OPTIONAL_11_CONSTEXPR optional disjunction(const optional &rhs) && {
      method optional (line 1073) | constexpr optional disjunction(const optional &rhs) const && {
      method TL_OPTIONAL_11_CONSTEXPR (line 1079) | TL_OPTIONAL_11_CONSTEXPR optional disjunction(optional &&rhs) & {
      method optional (line 1084) | constexpr optional disjunction(optional &&rhs) const & {
      method TL_OPTIONAL_11_CONSTEXPR (line 1089) | TL_OPTIONAL_11_CONSTEXPR optional disjunction(optional &&rhs) && {
      method optional (line 1095) | constexpr optional disjunction(optional &&rhs) const && {
      method optional (line 1102) | optional take() & {
      method optional (line 1109) | optional take() const & {
      method optional (line 1116) | optional take() && {
      method optional (line 1124) | optional take() const && {
      method optional (line 1135) | constexpr optional() noexcept = default;
      method optional (line 1138) | constexpr optional(nullopt_t) noexcept {}
      method TL_OPTIONAL_11_CONSTEXPR (line 1144) | TL_OPTIONAL_11_CONSTEXPR optional(const optional &rhs) = default;
      method TL_OPTIONAL_11_CONSTEXPR (line 1150) | TL_OPTIONAL_11_CONSTEXPR optional(optional &&rhs) = default;
      method optional (line 1156) | constexpr explicit optional(
    type detail (line 122) | namespace detail {
      type is_trivially_copy_constructible (line 68) | struct is_trivially_copy_constructible : std::is_trivially_copy_cons...
      type is_trivially_copy_constructible<std::vector<T,A>> (line 71) | struct is_trivially_copy_constructible<std::vector<T,A>>
      type conjunction (line 136) | struct conjunction : std::true_type {}
      type conjunction<B> (line 137) | struct conjunction<B> : B {}
      type is_pointer_to_non_const_member_func (line 150) | struct is_pointer_to_non_const_member_func : std::false_type{}
      type is_const_or_const_ref (line 164) | struct is_const_or_const_ref : std::false_type{}
      type is_const_or_const_ref<T const&> (line 165) | struct is_const_or_const_ref<T const&> : std::true_type{}
      type is_const_or_const_ref<T const> (line 166) | struct is_const_or_const_ref<T const> : std::true_type{}
      function invoke (line 178) | constexpr auto invoke(Fn &&f, Args &&... args) noexcept(
      function invoke (line 186) | constexpr auto invoke(Fn &&f, Args &&... args) noexcept(
      type invoke_result_impl (line 193) | struct invoke_result_impl
      type voider (line 210) | struct voider { using type = void; }
      type is_optional_impl (line 214) | struct is_optional_impl : std::false_type {}
      type is_optional_impl<optional<T>> (line 215) | struct is_optional_impl<optional<T>> : std::true_type {}
      type returns_void_impl (line 226) | struct returns_void_impl
      type is_swappable (line 283) | struct is_swappable : std::true_type {}
      type is_nothrow_swappable (line 285) | struct is_nothrow_swappable : std::true_type {}
      type swap_adl_tests (line 288) | namespace swap_adl_tests {
        type tag (line 291) | struct tag {}
        type is_std_swap_noexcept (line 310) | struct is_std_swap_noexcept
        type is_std_swap_noexcept<T[N]> (line 316) | struct is_std_swap_noexcept<T[N]> : is_std_swap_noexcept<T> {}
        type is_adl_swap_noexcept (line 319) | struct is_adl_swap_noexcept
      type is_swappable (line 324) | struct is_swappable
      type is_swappable<T[N], T[N]> (line 333) | struct is_swappable<T[N], T[N]>
      type is_nothrow_swappable (line 342) | struct is_nothrow_swappable
      type optional_storage_base (line 358) | struct optional_storage_base {
        method TL_OPTIONAL_11_CONSTEXPR (line 363) | TL_OPTIONAL_11_CONSTEXPR optional_storage_base(in_place_t, U &&... u)
        type dummy (line 373) | struct dummy {}
      type optional_storage_base<T, true> (line 383) | struct optional_storage_base<T, true> {
        type dummy (line 393) | struct dummy {}
      type optional_operations_base (line 404) | struct optional_operations_base : optional_storage_base<T> {
        method hard_reset (line 407) | void hard_reset() noexcept {
        method construct (line 412) | void construct(Args &&... args) noexcept {
        method assign (line 417) | void assign(Opt &&rhs) {
        method has_value (line 432) | bool has_value() const { return this->m_has_value; }
        method TL_OPTIONAL_11_CONSTEXPR (line 434) | TL_OPTIONAL_11_CONSTEXPR T &get() & { return this->m_value; }
        method TL_OPTIONAL_11_CONSTEXPR (line 435) | TL_OPTIONAL_11_CONSTEXPR const T &get() const & { return this->m_v...
        method TL_OPTIONAL_11_CONSTEXPR (line 436) | TL_OPTIONAL_11_CONSTEXPR T &&get() && { return std::move(this->m_v...
        method T (line 438) | constexpr const T &&get() const && { return std::move(this->m_valu...
      type optional_copy_base (line 445) | struct optional_copy_base : optional_operations_base<T> {
      type optional_copy_base<T, false> (line 451) | struct optional_copy_base<T, false> : optional_operations_base<T> {
        method optional_copy_base (line 454) | optional_copy_base() = default;
        method optional_copy_base (line 455) | optional_copy_base(const optional_copy_base &rhs) {
        method optional_copy_base (line 463) | optional_copy_base(optional_copy_base &&rhs) = default;
        method optional_copy_base (line 464) | optional_copy_base &operator=(const optional_copy_base &rhs) = def...
        method optional_copy_base (line 465) | optional_copy_base &operator=(optional_copy_base &&rhs) = default;
      type optional_move_base (line 475) | struct optional_move_base : optional_copy_base<T> {
      type optional_move_base (line 479) | struct optional_move_base
      type optional_move_base<T, false> (line 481) | struct optional_move_base<T, false> : optional_copy_base<T> {
        method optional_move_base (line 484) | optional_move_base() = default;
        method optional_move_base (line 485) | optional_move_base(const optional_move_base &rhs) = default;
        method optional_move_base (line 487) | optional_move_base(optional_move_base &&rhs) noexcept(
        method optional_move_base (line 495) | optional_move_base &operator=(const optional_move_base &rhs) = def...
        method optional_move_base (line 496) | optional_move_base &operator=(optional_move_base &&rhs) = default;
      type optional_copy_assign_base (line 503) | struct optional_copy_assign_base : optional_move_base<T> {
      type optional_copy_assign_base<T, false> (line 508) | struct optional_copy_assign_base<T, false> : optional_move_base<T> {
        method optional_copy_assign_base (line 511) | optional_copy_assign_base() = default;
        method optional_copy_assign_base (line 512) | optional_copy_assign_base(const optional_copy_assign_base &rhs) = ...
        method optional_copy_assign_base (line 514) | optional_copy_assign_base(optional_copy_assign_base &&rhs) = default;
        method optional_copy_assign_base (line 515) | optional_copy_assign_base &operator=(const optional_copy_assign_ba...
        method optional_copy_assign_base (line 519) | optional_copy_assign_base &
      type optional_move_assign_base (line 532) | struct optional_move_assign_base : optional_copy_assign_base<T> {
      type optional_move_assign_base (line 536) | struct optional_move_assign_base
      type optional_move_assign_base<T, false> (line 540) | struct optional_move_assign_base<T, false> : optional_copy_assign_ba...
        method optional_move_assign_base (line 543) | optional_move_assign_base() = default;
        method optional_move_assign_base (line 544) | optional_move_assign_base(const optional_move_assign_base &rhs) = ...
        method optional_move_assign_base (line 546) | optional_move_assign_base(optional_move_assign_base &&rhs) = default;
        method optional_move_assign_base (line 548) | optional_move_assign_base &
        method optional_move_assign_base (line 551) | optional_move_assign_base &
      type optional_delete_ctor_base (line 564) | struct optional_delete_ctor_base {
        method optional_delete_ctor_base (line 565) | optional_delete_ctor_base() = default;
        method optional_delete_ctor_base (line 566) | optional_delete_ctor_base(const optional_delete_ctor_base &) = def...
        method optional_delete_ctor_base (line 567) | optional_delete_ctor_base(optional_delete_ctor_base &&) noexcept =...
        method optional_delete_ctor_base (line 568) | optional_delete_ctor_base &
        method optional_delete_ctor_base (line 570) | optional_delete_ctor_base &
      type optional_delete_ctor_base<T, true, false> (line 574) | struct optional_delete_ctor_base<T, true, false> {
        method optional_delete_ctor_base (line 575) | optional_delete_ctor_base() = default;
        method optional_delete_ctor_base (line 576) | optional_delete_ctor_base(const optional_delete_ctor_base &) = def...
        method optional_delete_ctor_base (line 577) | optional_delete_ctor_base(optional_delete_ctor_base &&) noexcept =...
        method optional_delete_ctor_base (line 578) | optional_delete_ctor_base &
        method optional_delete_ctor_base (line 580) | optional_delete_ctor_base &
      type optional_delete_ctor_base<T, false, true> (line 584) | struct optional_delete_ctor_base<T, false, true> {
        method optional_delete_ctor_base (line 585) | optional_delete_ctor_base() = default;
        method optional_delete_ctor_base (line 586) | optional_delete_ctor_base(const optional_delete_ctor_base &) = del...
        method optional_delete_ctor_base (line 587) | optional_delete_ctor_base(optional_delete_ctor_base &&) noexcept =...
        method optional_delete_ctor_base (line 588) | optional_delete_ctor_base &
        method optional_delete_ctor_base (line 590) | optional_delete_ctor_base &
      type optional_delete_ctor_base<T, false, false> (line 594) | struct optional_delete_ctor_base<T, false, false> {
        method optional_delete_ctor_base (line 595) | optional_delete_ctor_base() = default;
        method optional_delete_ctor_base (line 596) | optional_delete_ctor_base(const optional_delete_ctor_base &) = del...
        method optional_delete_ctor_base (line 597) | optional_delete_ctor_base(optional_delete_ctor_base &&) noexcept =...
        method optional_delete_ctor_base (line 598) | optional_delete_ctor_base &
        method optional_delete_ctor_base (line 600) | optional_delete_ctor_base &
      type optional_delete_assign_base (line 611) | struct optional_delete_assign_base {
        method optional_delete_assign_base (line 612) | optional_delete_assign_base() = default;
        method optional_delete_assign_base (line 613) | optional_delete_assign_base(const optional_delete_assign_base &) =...
        method optional_delete_assign_base (line 614) | optional_delete_assign_base(optional_delete_assign_base &&) noexce...
        method optional_delete_assign_base (line 616) | optional_delete_assign_base &
        method optional_delete_assign_base (line 618) | optional_delete_assign_base &
      type optional_delete_assign_base<T, true, false> (line 622) | struct optional_delete_assign_base<T, true, false> {
        method optional_delete_assign_base (line 623) | optional_delete_assign_base() = default;
        method optional_delete_assign_base (line 624) | optional_delete_assign_base(const optional_delete_assign_base &) =...
        method optional_delete_assign_base (line 625) | optional_delete_assign_base(optional_delete_assign_base &&) noexce...
        method optional_delete_assign_base (line 627) | optional_delete_assign_base &
        method optional_delete_assign_base (line 629) | optional_delete_assign_base &
      type optional_delete_assign_base<T, false, true> (line 633) | struct optional_delete_assign_base<T, false, true> {
        method optional_delete_assign_base (line 634) | optional_delete_assign_base() = default;
        method optional_delete_assign_base (line 635) | optional_delete_assign_base(const optional_delete_assign_base &) =...
        method optional_delete_assign_base (line 636) | optional_delete_assign_base(optional_delete_assign_base &&) noexce...
        method optional_delete_assign_base (line 638) | optional_delete_assign_base &
        method optional_delete_assign_base (line 640) | optional_delete_assign_base &
      type optional_delete_assign_base<T, false, false> (line 644) | struct optional_delete_assign_base<T, false, false> {
        method optional_delete_assign_base (line 645) | optional_delete_assign_base() = default;
        method optional_delete_assign_base (line 646) | optional_delete_assign_base(const optional_delete_assign_base &) =...
        method optional_delete_assign_base (line 647) | optional_delete_assign_base(optional_delete_assign_base &&) noexce...
        method optional_delete_assign_base (line 649) | optional_delete_assign_base &
        method optional_delete_assign_base (line 651) | optional_delete_assign_base &
    type nullopt_t (line 658) | struct nullopt_t {
      type do_not_use (line 659) | struct do_not_use {}
      method nullopt_t (line 660) | constexpr explicit nullopt_t(do_not_use, do_not_use) noexcept {}
    class bad_optional_access (line 674) | class bad_optional_access : public std::exception {
      method bad_optional_access (line 676) | bad_optional_access() = default;
    class optional (line 687) | class optional : private detail::optional_move_assign_base<T>,
      method and_then (line 714) | TL_OPTIONAL_11_CONSTEXPR auto and_then(F &&f) & {
      method and_then (line 725) | TL_OPTIONAL_11_CONSTEXPR auto and_then(F &&f) && {
      method and_then (line 736) | constexpr auto and_then(F &&f) const & {
      method and_then (line 748) | constexpr auto and_then(F &&f) const && {
      method TL_OPTIONAL_11_CONSTEXPR (line 769) | TL_OPTIONAL_11_CONSTEXPR detail::invoke_result_t<F, T &> and_then(F ...
      method TL_OPTIONAL_11_CONSTEXPR (line 781) | TL_OPTIONAL_11_CONSTEXPR detail::invoke_result_t<F, T &&> and_then(F...
      method and_then (line 793) | constexpr detail::invoke_result_t<F, const T &> and_then(F &&f) cons...
      method and_then (line 806) | constexpr detail::invoke_result_t<F, const T &&> and_then(F &&f) con...
      method map (line 828) | TL_OPTIONAL_11_CONSTEXPR auto map(F &&f) & {
      method map (line 834) | TL_OPTIONAL_11_CONSTEXPR auto map(F &&f) && {
      method map (line 840) | constexpr auto map(F &&f) const & {
      method map (line 846) | constexpr auto map(F &&f) const && {
      method TL_OPTIONAL_11_CONSTEXPR (line 860) | TL_OPTIONAL_11_CONSTEXPR decltype(optional_map_impl(std::declval<opt...
      method TL_OPTIONAL_11_CONSTEXPR (line 869) | TL_OPTIONAL_11_CONSTEXPR decltype(optional_map_impl(std::declval<opt...
      method map (line 878) | constexpr decltype(optional_map_impl(std::declval<const optional &>(),
      method map (line 888) | constexpr decltype(optional_map_impl(std::declval<const optional &&>(),
      method or_else (line 923) | optional<T> or_else(F &&f) && {
      method or_else (line 940) | optional<T> or_else(F &&f) const & {
      method or_else (line 957) | optional<T> or_else(F &&f) const && {
      method or_else (line 967) | optional<T> or_else(F &&f) const && {
      method U (line 979) | U map_or(F &&f, U &&u) & {
      method U (line 985) | U map_or(F &&f, U &&u) && {
      method U (line 991) | U map_or(F &&f, U &&u) const & {
      method U (line 998) | U map_or(F &&f, U &&u) const && {
      method map_or_else (line 1014) | detail::invoke_result_t<U> map_or_else(F &&f, U &&u) & {
      method map_or_else (line 1023) | detail::invoke_result_t<U> map_or_else(F &&f, U &&u) && {
      method map_or_else (line 1032) | detail::invoke_result_t<U> map_or_else(F &&f, U &&u) const & {
      method map_or_else (line 1042) | detail::invoke_result_t<U> map_or_else(F &&f, U &&u) const && {
      method conjunction (line 1050) | constexpr optional<typename std::decay<U>::type> conjunction(U &&u) ...
      method TL_OPTIONAL_11_CONSTEXPR (line 1057) | TL_OPTIONAL_11_CONSTEXPR optional disjunction(const optional &rhs) & {
      method optional (line 1062) | constexpr optional disjunction(const optional &rhs) const & {
      method TL_OPTIONAL_11_CONSTEXPR (line 1067) | TL_OPTIONAL_11_CONSTEXPR optional disjunction(const optional &rhs) && {
      method optional (line 1073) | constexpr optional disjunction(const optional &rhs) const && {
      method TL_OPTIONAL_11_CONSTEXPR (line 1079) | TL_OPTIONAL_11_CONSTEXPR optional disjunction(optional &&rhs) & {
      method optional (line 1084) | constexpr optional disjunction(optional &&rhs) const & {
      method TL_OPTIONAL_11_CONSTEXPR (line 1089) | TL_OPTIONAL_11_CONSTEXPR optional disjunction(optional &&rhs) && {
      method optional (line 1095) | constexpr optional disjunction(optional &&rhs) const && {
      method optional (line 1102) | optional take() & {
      method optional (line 1109) | optional take() const & {
      method optional (line 1116) | optional take() && {
      method optional (line 1124) | optional take() const && {
      method optional (line 1135) | constexpr optional() noexcept = default;
      method optional (line 1138) | constexpr optional(nullopt_t) noexcept {}
      method TL_OPTIONAL_11_CONSTEXPR (line 1144) | TL_OPTIONAL_11_CONSTEXPR optional(const optional &rhs) = default;
      method TL_OPTIONAL_11_CONSTEXPR (line 1150) | TL_OPTIONAL_11_CONSTEXPR optional(optional &&rhs) = default;
      method optional (line 1156) | constexpr explicit optional(
    function optional (line 1185) | constexpr explicit optional(U &&u) : base(in_place, std::forward<U>(u)...
      method and_then (line 714) | TL_OPTIONAL_11_CONSTEXPR auto and_then(F &&f) & {
      method and_then (line 725) | TL_OPTIONAL_11_CONSTEXPR auto and_then(F &&f) && {
      method and_then (line 736) | constexpr auto and_then(F &&f) const & {
      method and_then (line 748) | constexpr auto and_then(F &&f) const && {
      method TL_OPTIONAL_11_CONSTEXPR (line 769) | TL_OPTIONAL_11_CONSTEXPR detail::invoke_result_t<F, T &> and_then(F ...
      method TL_OPTIONAL_11_CONSTEXPR (line 781) | TL_OPTIONAL_11_CONSTEXPR detail::invoke_result_t<F, T &&> and_then(F...
      method and_then (line 793) | constexpr detail::invoke_result_t<F, const T &> and_then(F &&f) cons...
      method and_then (line 806) | constexpr detail::invoke_result_t<F, const T &&> and_then(F &&f) con...
      method map (line 828) | TL_OPTIONAL_11_CONSTEXPR auto map(F &&f) & {
      method map (line 834) | TL_OPTIONAL_11_CONSTEXPR auto map(F &&f) && {
      method map (line 840) | constexpr auto map(F &&f) const & {
      method map (line 846) | constexpr auto map(F &&f) const && {
      method TL_OPTIONAL_11_CONSTEXPR (line 860) | TL_OPTIONAL_11_CONSTEXPR decltype(optional_map_impl(std::declval<opt...
      method TL_OPTIONAL_11_CONSTEXPR (line 869) | TL_OPTIONAL_11_CONSTEXPR decltype(optional_map_impl(std::declval<opt...
      method map (line 878) | constexpr decltype(optional_map_impl(std::declval<const optional &>(),
      method map (line 888) | constexpr decltype(optional_map_impl(std::declval<const optional &&>(),
      method or_else (line 923) | optional<T> or_else(F &&f) && {
      method or_else (line 940) | optional<T> or_else(F &&f) const & {
      method or_else (line 957) | optional<T> or_else(F &&f) const && {
      method or_else (line 967) | optional<T> or_else(F &&f) const && {
      method U (line 979) | U map_or(F &&f, U &&u) & {
      method U (line 985) | U map_or(F &&f, U &&u) && {
      method U (line 991) | U map_or(F &&f, U &&u) const & {
      method U (line 998) | U map_or(F &&f, U &&u) const && {
      method map_or_else (line 1014) | detail::invoke_result_t<U> map_or_else(F &&f, U &&u) & {
      method map_or_else (line 1023) | detail::invoke_result_t<U> map_or_else(F &&f, U &&u) && {
      method map_or_else (line 1032) | detail::invoke_result_t<U> map_or_else(F &&f, U &&u) const & {
      method map_or_else (line 1042) | detail::invoke_result_t<U> map_or_else(F &&f, U &&u) const && {
      method conjunction (line 1050) | constexpr optional<typename std::decay<U>::type> conjunction(U &&u) ...
      method TL_OPTIONAL_11_CONSTEXPR (line 1057) | TL_OPTIONAL_11_CONSTEXPR optional disjunction(const optional &rhs) & {
      method optional (line 1062) | constexpr optional disjunction(const optional &rhs) const & {
      method TL_OPTIONAL_11_CONSTEXPR (line 1067) | TL_OPTIONAL_11_CONSTEXPR optional disjunction(const optional &rhs) && {
      method optional (line 1073) | constexpr optional disjunction(const optional &rhs) const && {
      method TL_OPTIONAL_11_CONSTEXPR (line 1079) | TL_OPTIONAL_11_CONSTEXPR optional disjunction(optional &&rhs) & {
      method optional (line 1084) | constexpr optional disjunction(optional &&rhs) const & {
      method TL_OPTIONAL_11_CONSTEXPR (line 1089) | TL_OPTIONAL_11_CONSTEXPR optional disjunction(optional &&rhs) && {
      method optional (line 1095) | constexpr optional disjunction(optional &&rhs) const && {
      method optional (line 1102) | optional take() & {
      method optional (line 1109) | optional take() const & {
      method optional (line 1116) | optional take() && {
      method optional (line 1124) | optional take() const && {
      method optional (line 1135) | constexpr optional() noexcept = default;
      method optional (line 1138) | constexpr optional(nullopt_t) noexcept {}
      method TL_OPTIONAL_11_CONSTEXPR (line 1144) | TL_OPTIONAL_11_CONSTEXPR optional(const optional &rhs) = default;
      method TL_OPTIONAL_11_CONSTEXPR (line 1150) | TL_OPTIONAL_11_CONSTEXPR optional(optional &&rhs) = default;
      method optional (line 1156) | constexpr explicit optional(
    function optional (line 1192) | optional(const optional<U> &rhs) {
      method and_then (line 714) | TL_OPTIONAL_11_CONSTEXPR auto and_then(F &&f) & {
      method and_then (line 725) | TL_OPTIONAL_11_CONSTEXPR auto and_then(F &&f) && {
      method and_then (line 736) | constexpr auto and_then(F &&f) const & {
      method and_then (line 748) | constexpr auto and_then(F &&f) const && {
      method TL_OPTIONAL_11_CONSTEXPR (line 769) | TL_OPTIONAL_11_CONSTEXPR detail::invoke_result_t<F, T &> and_then(F ...
      method TL_OPTIONAL_11_CONSTEXPR (line 781) | TL_OPTIONAL_11_CONSTEXPR detail::invoke_result_t<F, T &&> and_then(F...
      method and_then (line 793) | constexpr detail::invoke_result_t<F, const T &> and_then(F &&f) cons...
      method and_then (line 806) | constexpr detail::invoke_result_t<F, const T &&> and_then(F &&f) con...
      method map (line 828) | TL_OPTIONAL_11_CONSTEXPR auto map(F &&f) & {
      method map (line 834) | TL_OPTIONAL_11_CONSTEXPR auto map(F &&f) && {
      method map (line 840) | constexpr auto map(F &&f) const & {
      method map (line 846) | constexpr auto map(F &&f) const && {
      method TL_OPTIONAL_11_CONSTEXPR (line 860) | TL_OPTIONAL_11_CONSTEXPR decltype(optional_map_impl(std::declval<opt...
      method TL_OPTIONAL_11_CONSTEXPR (line 869) | TL_OPTIONAL_11_CONSTEXPR decltype(optional_map_impl(std::declval<opt...
      method map (line 878) | constexpr decltype(optional_map_impl(std::declval<const optional &>(),
      method map (line 888) | constexpr decltype(optional_map_impl(std::declval<const optional &&>(),
      method or_else (line 923) | optional<T> or_else(F &&f) && {
      method or_else (line 940) | optional<T> or_else(F &&f) const & {
      method or_else (line 957) | optional<T> or_else(F &&f) const && {
      method or_else (line 967) | optional<T> or_else(F &&f) const && {
      method U (line 979) | U map_or(F &&f, U &&u) & {
      method U (line 985) | U map_or(F &&f, U &&u) && {
      method U (line 991) | U map_or(F &&f, U &&u) const & {
      method U (line 998) | U map_or(F &&f, U &&u) const && {
      method map_or_else (line 1014) | detail::invoke_result_t<U> map_or_else(F &&f, U &&u) & {
      method map_or_else (line 1023) | detail::invoke_result_t<U> map_or_else(F &&f, U &&u) && {
      method map_or_else (line 1032) | detail::invoke_result_t<U> map_or_else(F &&f, U &&u) const & {
      method map_or_else (line 1042) | detail::invoke_result_t<U> map_or_else(F &&f, U &&u) const && {
      method conjunction (line 1050) | constexpr optional<typename std::decay<U>::type> conjunction(U &&u) ...
      method TL_OPTIONAL_11_CONSTEXPR (line 1057) | TL_OPTIONAL_11_CONSTEXPR optional disjunction(const optional &rhs) & {
      method optional (line 1062) | constexpr optional disjunction(const optional &rhs) const & {
      method TL_OPTIONAL_11_CONSTEXPR (line 1067) | TL_OPTIONAL_11_CONSTEXPR optional disjunction(const optional &rhs) && {
      method optional (line 1073) | constexpr optional disjunction(const optional &rhs) const && {
      method TL_OPTIONAL_11_CONSTEXPR (line 1079) | TL_OPTIONAL_11_CONSTEXPR optional disjunction(optional &&rhs) & {
      method optional (line 1084) | constexpr optional disjunction(optional &&rhs) const & {
      method TL_OPTIONAL_11_CONSTEXPR (line 1089) | TL_OPTIONAL_11_CONSTEXPR optional disjunction(optional &&rhs) && {
      method optional (line 1095) | constexpr optional disjunction(optional &&rhs) const && {
      method optional (line 1102) | optional take() & {
      method optional (line 1109) | optional take() const & {
      method optional (line 1116) | optional take() && {
      method optional (line 1124) | optional take() const && {
      method optional (line 1135) | constexpr optional() noexcept = default;
      method optional (line 1138) | constexpr optional(nullopt_t) noexcept {}
      method TL_OPTIONAL_11_CONSTEXPR (line 1144) | TL_OPTIONAL_11_CONSTEXPR optional(const optional &rhs) = default;
      method TL_OPTIONAL_11_CONSTEXPR (line 1150) | TL_OPTIONAL_11_CONSTEXPR optional(optional &&rhs) = default;
      method optional (line 1156) | constexpr explicit optional(
    function optional (line 1202) | explicit optional(const optional<U> &rhs) {
      method and_then (line 714) | TL_OPTIONAL_11_CONSTEXPR auto and_then(F &&f) & {
      method and_then (line 725) | TL_OPTIONAL_11_CONSTEXPR auto and_then(F &&f) && {
      method and_then (line 736) | constexpr auto and_then(F &&f) const & {
      method and_then (line 748) | constexpr auto and_then(F &&f) const && {
      method TL_OPTIONAL_11_CONSTEXPR (line 769) | TL_OPTIONAL_11_CONSTEXPR detail::invoke_result_t<F, T &> and_then(F ...
      method TL_OPTIONAL_11_CONSTEXPR (line 781) | TL_OPTIONAL_11_CONSTEXPR detail::invoke_result_t<F, T &&> and_then(F...
      method and_then (line 793) | constexpr detail::invoke_result_t<F, const T &> and_then(F &&f) cons...
      method and_then (line 806) | constexpr detail::invoke_result_t<F, const T &&> and_then(F &&f) con...
      method map (line 828) | TL_OPTIONAL_11_CONSTEXPR auto map(F &&f) & {
      method map (line 834) | TL_OPTIONAL_11_CONSTEXPR auto map(F &&f) && {
      method map (line 840) | constexpr auto map(F &&f) const & {
      method map (line 846) | constexpr auto map(F &&f) const && {
      method TL_OPTIONAL_11_CONSTEXPR (line 860) | TL_OPTIONAL_11_CONSTEXPR decltype(optional_map_impl(std::declval<opt...
      method TL_OPTIONAL_11_CONSTEXPR (line 869) | TL_OPTIONAL_11_CONSTEXPR decltype(optional_map_impl(std::declval<opt...
      method map (line 878) | constexpr decltype(optional_map_impl(std::declval<const optional &>(),
      method map (line 888) | constexpr decltype(optional_map_impl(std::declval<const optional &&>(),
      method or_else (line 923) | optional<T> or_else(F &&f) && {
      method or_else (line 940) | optional<T> or_else(F &&f) const & {
      method or_else (line 957) | optional<T> or_else(F &&f) const && {
      method or_else (line 967) | optional<T> or_else(F &&f) const && {
      method U (line 979) | U map_or(F &&f, U &&u) & {
      method U (line 985) | U map_or(F &&f, U &&u) && {
      method U (line 991) | U map_or(F &&f, U &&u) const & {
      method U (line 998) | U map_or(F &&f, U &&u) const && {
      method map_or_else (line 1014) | detail::invoke_result_t<U> map_or_else(F &&f, U &&u) & {
      method map_or_else (line 1023) | detail::invoke_result_t<U> map_or_else(F &&f, U &&u) && {
      method map_or_else (line 1032) | detail::invoke_result_t<U> map_or_else(F &&f, U &&u) const & {
      method map_or_else (line 1042) | detail::invoke_result_t<U> map_or_else(F &&f, U &&u) const && {
      method conjunction (line 1050) | constexpr optional<typename std::decay<U>::type> conjunction(U &&u) ...
      method TL_OPTIONAL_11_CONSTEXPR (line 1057) | TL_OPTIONAL_11_CONSTEXPR optional disjunction(const optional &rhs) & {
      method optional (line 1062) | constexpr optional disjunction(const optional &rhs) const & {
      method TL_OPTIONAL_11_CONSTEXPR (line 1067) | TL_OPTIONAL_11_CONSTEXPR optional disjunction(const optional &rhs) && {
      method optional (line 1073) | constexpr optional disjunction(const optional &rhs) const && {
      method TL_OPTIONAL_11_CONSTEXPR (line 1079) | TL_OPTIONAL_11_CONSTEXPR optional disjunction(optional &&rhs) & {
      method optional (line 1084) | constexpr optional disjunction(optional &&rhs) const & {
      method TL_OPTIONAL_11_CONSTEXPR (line 1089) | TL_OPTIONAL_11_CONSTEXPR optional disjunction(optional &&rhs) && {
      method optional (line 1095) | constexpr optional disjunction(optional &&rhs) const && {
      method optional (line 1102) | optional take() & {
      method optional (line 1109) | optional take() const & {
      method optional (line 1116) | optional take() && {
      method optional (line 1124) | optional take() const && {
      method optional (line 1135) | constexpr optional() noexcept = default;
      method optional (line 1138) | constexpr optional(nullopt_t) noexcept {}
      method TL_OPTIONAL_11_CONSTEXPR (line 1144) | TL_OPTIONAL_11_CONSTEXPR optional(const optional &rhs) = default;
      method TL_OPTIONAL_11_CONSTEXPR (line 1150) | TL_OPTIONAL_11_CONSTEXPR optional(optional &&rhs) = default;
      method optional (line 1156) | constexpr explicit optional(
    function optional (line 1213) | optional(optional<U> &&rhs) {
      method and_then (line 714) | TL_OPTIONAL_11_CONSTEXPR auto and_then(F &&f) & {
      method and_then (line 725) | TL_OPTIONAL_11_CONSTEXPR auto and_then(F &&f) && {
      method and_then (line 736) | constexpr auto and_then(F &&f) const & {
      method and_then (line 748) | constexpr auto and_then(F &&f) const && {
      method TL_OPTIONAL_11_CONSTEXPR (line 769) | TL_OPTIONAL_11_CONSTEXPR detail::invoke_result_t<F, T &> and_then(F ...
      method TL_OPTIONAL_11_CONSTEXPR (line 781) | TL_OPTIONAL_11_CONSTEXPR detail::invoke_result_t<F, T &&> and_then(F...
      method and_then (line 793) | constexpr detail::invoke_result_t<F, const T &> and_then(F &&f) cons...
      method and_then (line 806) | constexpr detail::invoke_result_t<F, const T &&> and_then(F &&f) con...
      method map (line 828) | TL_OPTIONAL_11_CONSTEXPR auto map(F &&f) & {
      method map (line 834) | TL_OPTIONAL_11_CONSTEXPR auto map(F &&f) && {
      method map (line 840) | constexpr auto map(F &&f) const & {
      method map (line 846) | constexpr auto map(F &&f) const && {
      method TL_OPTIONAL_11_CONSTEXPR (line 860) | TL_OPTIONAL_11_CONSTEXPR decltype(optional_map_impl(std::declval<opt...
      method TL_OPTIONAL_11_CONSTEXPR (line 869) | TL_OPTIONAL_11_CONSTEXPR decltype(optional_map_impl(std::declval<opt...
      method map (line 878) | constexpr decltype(optional_map_impl(std::declval<const optional &>(),
      method map (line 888) | constexpr decltype(optional_map_impl(std::declval<const optional &&>(),
      method or_else (line 923) | optional<T> or_else(F &&f) && {
      method or_else (line 940) | optional<T> or_else(F &&f) const & {
      method or_else (line 957) | optional<T> or_else(F &&f) const && {
      method or_else (line 967) | optional<T> or_else(F &&f) const && {
      method U (line 979) | U map_or(F &&f, U &&u) & {
      method U (line 985) | U map_or(F &&f, U &&u) && {
      method U (line 991) | U map_or(F &&f, U &&u) const & {
      method U (line 998) | U map_or(F &&f, U &&u) const && {
      method map_or_else (line 1014) | detail::invoke_result_t<U> map_or_else(F &&f, U &&u) & {
      method map_or_else (line 1023) | detail::invoke_result_t<U> map_or_else(F &&f, U &&u) && {
      method map_or_else (line 1032) | detail::invoke_result_t<U> map_or_else(F &&f, U &&u) const & {
      method map_or_else (line 1042) | detail::invoke_result_t<U> map_or_else(F &&f, U &&u) const && {
      method conjunction (line 1050) | constexpr optional<typename std::decay<U>::type> conjunction(U &&u) ...
      method TL_OPTIONAL_11_CONSTEXPR (line 1057) | TL_OPTIONAL_11_CONSTEXPR optional disjunction(const optional &rhs) & {
      method optional (line 1062) | constexpr optional disjunction(const optional &rhs) const & {
      method TL_OPTIONAL_11_CONSTEXPR (line 1067) | TL_OPTIONAL_11_CONSTEXPR optional disjunction(const optional &rhs) && {
      method optional (line 1073) | constexpr optional disjunction(const optional &rhs) const && {
      method TL_OPTIONAL_11_CONSTEXPR (line 1079) | TL_OPTIONAL_11_CONSTEXPR optional disjunction(optional &&rhs) & {
      method optional (line 1084) | constexpr optional disjunction(optional &&rhs) const & {
      method TL_OPTIONAL_11_CONSTEXPR (line 1089) | TL_OPTIONAL_11_CONSTEXPR optional disjunction(optional &&rhs) && {
      method optional (line 1095) | constexpr optional disjunction(optional &&rhs) const && {
      method optional (line 1102) | optional take() & {
      method optional (line 1109) | optional take() const & {
      method optional (line 1116) | optional take() && {
      method optional (line 1124) | optional take() const && {
      method optional (line 1135) | constexpr optional() noexcept = default;
      method optional (line 1138) | constexpr optional(nullopt_t) noexcept {}
      method TL_OPTIONAL_11_CONSTEXPR (line 1144) | TL_OPTIONAL_11_CONSTEXPR optional(const optional &rhs) = default;
      method TL_OPTIONAL_11_CONSTEXPR (line 1150) | TL_OPTIONAL_11_CONSTEXPR optional(optional &&rhs) = default;
      method optional (line 1156) | constexpr explicit optional(
    function optional (line 1223) | explicit optional(optional<U> &&rhs) {
      method and_then (line 714) | TL_OPTIONAL_11_CONSTEXPR auto and_then(F &&f) & {
      method and_then (line 725) | TL_OPTIONAL_11_CONSTEXPR auto and_then(F &&f) && {
      method and_then (line 736) | constexpr auto and_then(F &&f) const & {
      method and_then (line 748) | constexpr auto and_then(F &&f) const && {
      method TL_OPTIONAL_11_CONSTEXPR (line 769) | TL_OPTIONAL_11_CONSTEXPR detail::invoke_result_t<F, T &> and_then(F ...
      method TL_OPTIONAL_11_CONSTEXPR (line 781) | TL_OPTIONAL_11_CONSTEXPR detail::invoke_result_t<F, T &&> and_then(F...
      method and_then (line 793) | constexpr detail::invoke_result_t<F, const T &> and_then(F &&f) cons...
      method and_then (line 806) | constexpr detail::invoke_result_t<F, const T &&> and_then(F &&f) con...
      method map (line 828) | TL_OPTIONAL_11_CONSTEXPR auto map(F &&f) & {
      method map (line 834) | TL_OPTIONAL_11_CONSTEXPR auto map(F &&f) && {
      method map (line 840) | constexpr auto map(F &&f) const & {
      method map (line 846) | constexpr auto map(F &&f) const && {
      method TL_OPTIONAL_11_CONSTEXPR (line 860) | TL_OPTIONAL_11_CONSTEXPR decltype(optional_map_impl(std::declval<opt...
      method TL_OPTIONAL_11_CONSTEXPR (line 869) | TL_OPTIONAL_11_CONSTEXPR decltype(optional_map_impl(std::declval<opt...
      method map (line 878) | constexpr decltype(optional_map_impl(std::declval<const optional &>(),
      method map (line 888) | constexpr decltype(optional_map_impl(std::declval<const optional &&>(),
      method or_else (line 923) | optional<T> or_else(F &&f) && {
      method or_else (line 940) | optional<T> or_else(F &&f) const & {
      method or_else (line 957) | optional<T> or_else(F &&f) const && {
      method or_else (line 967) | optional<T> or_else(F &&f) const && {
      method U (line 979) | U map_or(F &&f, U &&u) & {
      method U (line 985) | U map_or(F &&f, U &&u) && {
      method U (line 991) | U map_or(F &&f, U &&u) const & {
      method U (line 998) | U map_or(F &&f, U &&u) const && {
      method map_or_else (line 1014) | detail::invoke_result_t<U> map_or_else(F &&f, U &&u) & {
      method map_or_else (line 1023) | detail::invoke_result_t<U> map_or_else(F &&f, U &&u) && {
      method map_or_else (line 1032) | detail::invoke_result_t<U> map_or_else(F &&f, U &&u) const & {
      method map_or_else (line 1042) | detail::invoke_result_t<U> map_or_else(F &&f, U &&u) const && {
      method conjunction (line 1050) | constexpr optional<typename std::decay<U>::type> conjunction(U &&u) ...
      method TL_OPTIONAL_11_CONSTEXPR (line 1057) | TL_OPTIONAL_11_CONSTEXPR optional disjunction(const optional &rhs) & {
      method optional (line 1062) | constexpr optional disjunction(const optional &rhs) const & {
      method TL_OPTIONAL_11_CONSTEXPR (line 1067) | TL_OPTIONAL_11_CONSTEXPR optional disjunction(const optional &rhs) && {
      method optional (line 1073) | constexpr optional disjunction(const optional &rhs) const && {
      method TL_OPTIONAL_11_CONSTEXPR (line 1079) | TL_OPTIONAL_11_CONSTEXPR optional disjunction(optional &&rhs) & {
      method optional (line 1084) | constexpr optional disjunction(optional &&rhs) const & {
      method TL_OPTIONAL_11_CONSTEXPR (line 1089) | TL_OPTIONAL_11_CONSTEXPR optional disjunction(optional &&rhs) && {
      method optional (line 1095) | constexpr optional disjunction(optional &&rhs) const && {
      method optional (line 1102) | optional take() & {
      method optional (line 1109) | optional take() const & {
      method optional (line 1116) | optional take() && {
      method optional (line 1124) | optional take() const && {
      method optional (line 1135) | constexpr optional() noexcept = default;
      method optional (line 1138) | constexpr optional(nullopt_t) noexcept {}
      method TL_OPTIONAL_11_CONSTEXPR (line 1144) | TL_OPTIONAL_11_CONSTEXPR optional(const optional &rhs) = default;
      method TL_OPTIONAL_11_CONSTEXPR (line 1150) | TL_OPTIONAL_11_CONSTEXPR optional(optional &&rhs) = default;
      method optional (line 1156) | constexpr explicit optional(
    function optional (line 1235) | optional &operator=(nullopt_t) noexcept {
      method and_then (line 714) | TL_OPTIONAL_11_CONSTEXPR auto and_then(F &&f) & {
      method and_then (line 725) | TL_OPTIONAL_11_CONSTEXPR auto and_then(F &&f) && {
      method and_then (line 736) | constexpr auto and_then(F &&f) const & {
      method and_then (line 748) | constexpr auto and_then(F &&f) const && {
      method TL_OPTIONAL_11_CONSTEXPR (line 769) | TL_OPTIONAL_11_CONSTEXPR detail::invoke_result_t<F, T &> and_then(F ...
      method TL_OPTIONAL_11_CONSTEXPR (line 781) | TL_OPTIONAL_11_CONSTEXPR detail::invoke_result_t<F, T &&> and_then(F...
      method and_then (line 793) | constexpr detail::invoke_result_t<F, const T &> and_then(F &&f) cons...
      method and_then (line 806) | constexpr detail::invoke_result_t<F, const T &&> and_then(F &&f) con...
      method map (line 828) | TL_OPTIONAL_11_CONSTEXPR auto map(F &&f) & {
      method map (line 834) | TL_OPTIONAL_11_CONSTEXPR auto map(F &&f) && {
      method map (line 840) | constexpr auto map(F &&f) const & {
      method map (line 846) | constexpr auto map(F &&f) const && {
      method TL_OPTIONAL_11_CONSTEXPR (line 860) | TL_OPTIONAL_11_CONSTEXPR decltype(optional_map_impl(std::declval<opt...
      method TL_OPTIONAL_11_CONSTEXPR (line 869) | TL_OPTIONAL_11_CONSTEXPR decltype(optional_map_impl(std::declval<opt...
      method map (line 878) | constexpr decltype(optional_map_impl(std::declval<const optional &>(),
      method map (line 888) | constexpr decltype(optional_map_impl(std::declval<const optional &&>(),
      method or_else (line 923) | optional<T> or_else(F &&f) && {
      method or_else (line 940) | optional<T> or_else(F &&f) const & {
      method or_else (line 957) | optional<T> or_else(F &&f) const && {
      method or_else (line 967) | optional<T> or_else(F &&f) const && {
      method U (line 979) | U map_or(F &&f, U &&u) & {
      method U (line 985) | U map_or(F &&f, U &&u) && {
      method U (line 991) | U map_or(F &&f, U &&u) const & {
      method U (line 998) | U map_or(F &&f, U &&u) const && {
      method map_or_else (line 1014) | detail::invoke_result_t<U> map_or_else(F &&f, U &&u) & {
      method map_or_else (line 1023) | detail::invoke_result_t<U> map_or_else(F &&f, U &&u) && {
      method map_or_else (line 1032) | detail::invoke_result_t<U> map_or_else(F &&f, U &&u) const & {
      method map_or_else (line 1042) | detail::invoke_result_t<U> map_or_else(F &&f, U &&u) const && {
      method conjunction (line 1050) | constexpr optional<typename std::decay<U>::type> conjunction(U &&u) ...
      method TL_OPTIONAL_11_CONSTEXPR (line 1057) | TL_OPTIONAL_11_CONSTEXPR optional disjunction(const optional &rhs) & {
      method optional (line 1062) | constexpr optional disjunction(const optional &rhs) const & {
      method TL_OPTIONAL_11_CONSTEXPR (line 1067) | TL_OPTIONAL_11_CONSTEXPR optional disjunction(const optional &rhs) && {
      method optional (line 1073) | constexpr optional disjunction(const optional &rhs) const && {
      method TL_OPTIONAL_11_CONSTEXPR (line 1079) | TL_OPTIONAL_11_CONSTEXPR optional disjunction(optional &&rhs) & {
      method optional (line 1084) | constexpr optional disjunction(optional &&rhs) const & {
      method TL_OPTIONAL_11_CONSTEXPR (line 1089) | TL_OPTIONAL_11_CONSTEXPR optional disjunction(optional &&rhs) && {
      method optional (line 1095) | constexpr optional disjunction(optional &&rhs) const && {
      method optional (line 1102) | optional take() & {
      method optional (line 1109) | optional take() const & {
      method optional (line 1116) | optional take() && {
      method optional (line 1124) | optional take() const && {
      method optional (line 1135) | constexpr optional() noexcept = default;
      method optional (line 1138) | constexpr optional(nullopt_t) noexcept {}
      method TL_OPTIONAL_11_CONSTEXPR (line 1144) | TL_OPTIONAL_11_CONSTEXPR optional(const optional &rhs) = default;
      method TL_OPTIONAL_11_CONSTEXPR (line 1150) | TL_OPTIONAL_11_CONSTEXPR optional(optional &&rhs) = default;
      method optional (line 1156) | constexpr explicit optional(
    function optional (line 1260) | optional &operator=(U &&u) {
      method and_then (line 714) | TL_OPTIONAL_11_CONSTEXPR auto and_then(F &&f) & {
      method and_then (line 725) | TL_OPTIONAL_11_CONSTEXPR auto and_then(F &&f) && {
      method and_then (line 736) | constexpr auto and_then(F &&f) const & {
      method and_then (line 748) | constexpr auto and_then(F &&f) const && {
      method TL_OPTIONAL_11_CONSTEXPR (line 769) | TL_OPTIONAL_11_CONSTEXPR detail::invoke_result_t<F, T &> and_then(F ...
      method TL_OPTIONAL_11_CONSTEXPR (line 781) | TL_OPTIONAL_11_CONSTEXPR detail::invoke_result_t<F, T &&> and_then(F...
      method and_then (line 793) | constexpr detail::invoke_result_t<F, const T &> and_then(F &&f) cons...
      method and_then (line 806) | constexpr detail::invoke_result_t<F, const T &&> and_then(F &&f) con...
      method map (line 828) | TL_OPTIONAL_11_CONSTEXPR auto map(F &&f) & {
      method map (line 834) | TL_OPTIONAL_11_CONSTEXPR auto map(F &&f) && {
      method map (line 840) | constexpr auto map(F &&f) const & {
      method map (line 846) | constexpr auto map(F &&f) const && {
      method TL_OPTIONAL_11_CONSTEXPR (line 860) | TL_OPTIONAL_11_CONSTEXPR decltype(optional_map_impl(std::declval<opt...
      method TL_OPTIONAL_11_CONSTEXPR (line 869) | TL_OPTIONAL_11_CONSTEXPR decltype(optional_map_impl(std::declval<opt...
      method map (line 878) | constexpr decltype(optional_map_impl(std::declval<const optional &>(),
      method map (line 888) | constexpr decltype(optional_map_impl(std::declval<const optional &&>(),
      method or_else (line 923) | optional<T> or_else(F &&f) && {
      method or_else (line 940) | optional<T> or_else(F &&f) const & {
      method or_else (line 957) | optional<T> or_else(F &&f) const && {
      method or_else (line 967) | optional<T> or_else(F &&f) const && {
      method U (line 979) | U map_or(F &&f, U &&u) & {
      method U (line 985) | U map_or(F &&f, U &&u) && {
      method U (line 991) | U map_or(F &&f, U &&u) const & {
      method U (line 998) | U map_or(F &&f, U &&u) const && {
      method map_or_else (line 1014) | detail::invoke_result_t<U> map_or_else(F &&f, U &&u) & {
      method map_or_else (line 1023) | detail::invoke_result_t<U> map_or_else(F &&f, U &&u) && {
      method map_or_else (line 1032) | detail::invoke_result_t<U> map_or_else(F &&f, U &&u) const & {
      method map_or_else (line 1042) | detail::invoke_result_t<U> map_or_else(F &&f, U &&u) const && {
      method conjunction (line 1050) | constexpr optional<typename std::decay<U>::type> conjunction(U &&u) ...
      method TL_OPTIONAL_11_CONSTEXPR (line 1057) | TL_OPTIONAL_11_CONSTEXPR optional disjunction(const optional &rhs) & {
      method optional (line 1062) | constexpr optional disjunction(const optional &rhs) const & {
      method TL_OPTIONAL_11_CONSTEXPR (line 1067) | TL_OPTIONAL_11_CONSTEXPR optional disjunction(const optional &rhs) && {
      method optional (line 1073) | constexpr optional disjunction(const optional &rhs) const && {
      method TL_OPTIONAL_11_CONSTEXPR (line 1079) | TL_OPTIONAL_11_CONSTEXPR optional disjunction(optional &&rhs) & {
      method optional (line 1084) | constexpr optional disjunction(optional &&rhs) const & {
      method TL_OPTIONAL_11_CONSTEXPR (line 1089) | TL_OPTIONAL_11_CONSTEXPR optional disjunction(optional &&rhs) && {
      method optional (line 1095) | constexpr optional disjunction(optional &&rhs) const && {
      method optional (line 1102) | optional take() & {
      method optional (line 1109) | optional take() const & {
      method optional (line 1116) | optional take() && {
      method optional (line 1124) | optional take() const && {
      method optional (line 1135) | constexpr optional() noexcept = default;
      method optional (line 1138) | constexpr optional(nullopt_t) noexcept {}
      method TL_OPTIONAL_11_CONSTEXPR (line 1144) | TL_OPTIONAL_11_CONSTEXPR optional(const optional &rhs) = default;
      method TL_OPTIONAL_11_CONSTEXPR (line 1150) | TL_OPTIONAL_11_CONSTEXPR optional(optional &&rhs) = default;
      method optional (line 1156) | constexpr explicit optional(
    function optional (line 1277) | optional &operator=(const optional<U> &rhs) {
      method and_then (line 714) | TL_OPTIONAL_11_CONSTEXPR auto and_then(F &&f) & {
      method and_then (line 725) | TL_OPTIONAL_11_CONSTEXPR auto and_then(F &&f) && {
      method and_then (line 736) | constexpr auto and_then(F &&f) const & {
      method and_then (line 748) | constexpr auto and_then(F &&f) const && {
      method TL_OPTIONAL_11_CONSTEXPR (line 769) | TL_OPTIONAL_11_CONSTEXPR detail::invoke_result_t<F, T &> and_then(F ...
      method TL_OPTIONAL_11_CONSTEXPR (line 781) | TL_OPTIONAL_11_CONSTEXPR detail::invoke_result_t<F, T &&> and_then(F...
      method and_then (line 793) | constexpr detail::invoke_result_t<F, const T &> and_then(F &&f) cons...
      method and_then (line 806) | constexpr detail::invoke_result_t<F, const T &&> and_then(F &&f) con...
      method map (line 828) | TL_OPTIONAL_11_CONSTEXPR auto map(F &&f) & {
      method map (line 834) | TL_OPTIONAL_11_CONSTEXPR auto map(F &&f) && {
      method map (line 840) | constexpr auto map(F &&f) const & {
      method map (line 846) | constexpr auto map(F &&f) const && {
      method TL_OPTIONAL_11_CONSTEXPR (line 860) | TL_OPTIONAL_11_CONSTEXPR decltype(optional_map_impl(std::declval<opt...
      method TL_OPTIONAL_11_CONSTEXPR (line 869) | TL_OPTIONAL_11_CONSTEXPR decltype(optional_map_impl(std::declval<opt...
      method map (line 878) | constexpr decltype(optional_map_impl(std::declval<const optional &>(),
      method map (line 888) | constexpr decltype(optional_map_impl(std::declval<const optional &&>(),
      method or_else (line 923) | optional<T> or_else(F &&f) && {
      method or_else (line 940) | optional<T> or_else(F &&f) const & {
      method or_else (line 957) | optional<T> or_else(F &&f) const && {
      method or_else (line 967) | optional<T> or_else(F &&f) const && {
      method U (line 979) | U map_or(F &&f, U &&u) & {
      method U (line 985) | U map_or(F &&f, U &&u) && {
      method U (line 991) | U map_or(F &&f, U &&u) const & {
      method U (line 998) | U map_or(F &&f, U &&u) const && {
      method map_or_else (line 1014) | detail::invoke_result_t<U> map_or_else(F &&f, U &&u) & {
      method map_or_else (line 1023) | detail::invoke_result_t<U> map_or_else(F &&f, U &&u) && {
      method map_or_else (line 1032) | detail::invoke_result_t<U> map_or_else(F &&f, U &&u) const & {
      method map_or_else (line 1042) | detail::invoke_result_t<U> map_or_else(F &&f, U &&u) const && {
      method conjunction (line 1050) | constexpr optional<typename std::decay<U>::type> conjunction(U &&u) ...
      method TL_OPTIONAL_11_CONSTEXPR (line 1057) | TL_OPTIONAL_11_CONSTEXPR optional disjunction(const optional &rhs) & {
      method optional (line 1062) | constexpr optional disjunction(const optional &rhs) const & {
      method TL_OPTIONAL_11_CONSTEXPR (line 1067) | TL_OPTIONAL_11_CONSTEXPR optional disjunction(const optional &rhs) && {
      method optional (line 1073) | constexpr optional disjunction(const optional &rhs) const && {
      method TL_OPTIONAL_11_CONSTEXPR (line 1079) | TL_OPTIONAL_11_CONSTEXPR optional disjunction(optional &&rhs) & {
      method optional (line 1084) | constexpr optional disjunction(optional &&rhs) const & {
      method TL_OPTIONAL_11_CONSTEXPR (line 1089) | TL_OPTIONAL_11_CONSTEXPR optional disjunction(optional &&rhs) && {
      method optional (line 1095) | constexpr optional disjunction(optional &&rhs) const && {
      method optional (line 1102) | optional take() & {
      method optional (line 1109) | optional take() const & {
      method optional (line 1116) | optional take() && {
      method optional (line 1124) | optional take() const && {
      method optional (line 1135) | constexpr optional() noexcept = default;
      method optional (line 1138) | constexpr optional(nullopt_t) noexcept {}
      method TL_OPTIONAL_11_CONSTEXPR (line 1144) | TL_OPTIONAL_11_CONSTEXPR optional(const optional &rhs) = default;
      method TL_OPTIONAL_11_CONSTEXPR (line 1150) | TL_OPTIONAL_11_CONSTEXPR optional(optional &&rhs) = default;
      method optional (line 1156) | constexpr explicit optional(
    function optional (line 1300) | optional &operator=(optional<U> &&rhs) {
      method and_then (line 714) | TL_OPTIONAL_11_CONSTEXPR auto and_then(F &&f) & {
      method and_then (line 725) | TL_OPTIONAL_11_CONSTEXPR auto and_then(F &&f) && {
      method and_then (line 736) | constexpr auto and_then(F &&f) const & {
      method and_then (line 748) | constexpr auto and_then(F &&f) const && {
      method TL_OPTIONAL_11_CONSTEXPR (line 769) | TL_OPTIONAL_11_CONSTEXPR detail::invoke_result_t<F, T &> and_then(F ...
      method TL_OPTIONAL_11_CONSTEXPR (line 781) | TL_OPTIONAL_11_CONSTEXPR detail::invoke_result_t<F, T &&> and_then(F...
      method and_then (line 793) | constexpr detail::invoke_result_t<F, const T &> and_then(F &&f) cons...
      method and_then (line 806) | constexpr detail::invoke_result_t<F, const T &&> and_then(F &&f) con...
      method map (line 828) | TL_OPTIONAL_11_CONSTEXPR auto map(F &&f) & {
      method map (line 834) | TL_OPTIONAL_11_CONSTEXPR auto map(F &&f) && {
      method map (line 840) | constexpr auto map(F &&f) const & {
      method map (line 846) | constexpr auto map(F &&f) const && {
      method TL_OPTIONAL_11_CONSTEXPR (line 860) | TL_OPTIONAL_11_CONSTEXPR decltype(optional_map_impl(std::declval<opt...
      method TL_OPTIONAL_11_CONSTEXPR (line 869) | TL_OPTIONAL_11_CONSTEXPR decltype(optional_map_impl(std::declval<opt...
      method map (line 878) | constexpr decltype(optional_map_impl(std::declval<const optional &>(),
      method map (line 888) | constexpr decltype(optional_map_impl(std::declval<const optional &&>(),
      method or_else (line 923) | optional<T> or_else(F &&f) && {
      method or_else (line 940) | optional<T> or_else(F &&f) const & {
      method or_else (line 957) | optional<T> or_else(F &&f) const && {
      method or_else (line 967) | optional<T> or_else(F &&f) const && {
      method U (line 979) | U map_or(F &&f, U &&u) & {
      method U (line 985) | U map_or(F &&f, U &&u) && {
      method U (line 991) | U map_or(F &&f, U &&u) const & {
      method U (line 998) | U map_or(F &&f, U &&u) const && {
      method map_or_else (line 1014) | detail::invoke_result_t<U> map_or_else(F &&f, U &&u) & {
      method map_or_else (line 1023) | detail::invoke_result_t<U> map_or_else(F &&f, U &&u) && {
      method map_or_else (line 1032) | detail::invoke_result_t<U> map_or_else(F &&f, U &&u) const & {
      method map_or_else (line 1042) | detail::invoke_result_t<U> map_or_else(F &&f, U &&u) const && {
      method conjunction (line 1050) | constexpr optional<typename std::decay<U>::type> conjunction(U &&u) ...
      method TL_OPTIONAL_11_CONSTEXPR (line 1057) | TL_OPTIONAL_11_CONSTEXPR optional disjunction(const optional &rhs) & {
      method optional (line 1062) | constexpr optional disjunction(const optional &rhs) const & {
      method TL_OPTIONAL_11_CONSTEXPR (line 1067) | TL_OPTIONAL_11_CONSTEXPR optional disjunction(const optional &rhs) && {
      method optional (line 1073) | constexpr optional disjunction(const optional &rhs) const && {
      method TL_OPTIONAL_11_CONSTEXPR (line 1079) | TL_OPTIONAL_11_CONSTEXPR optional disjunction(optional &&rhs) & {
      method optional (line 1084) | constexpr optional disjunction(optional &&rhs) const & {
      method TL_OPTIONAL_11_CONSTEXPR (line 1089) | TL_OPTIONAL_11_CONSTEXPR optional disjunction(optional &&rhs) && {
      method optional (line 1095) | constexpr optional disjunction(optional &&rhs) const && {
      method optional (line 1102) | optional take() & {
      method optional (line 1109) | optional take() const & {
      method optional (line 1116) | optional take() && {
      method optional (line 1124) | optional take() const && {
      method optional (line 1135) | constexpr optional() noexcept = default;
      method optional (line 1138) | constexpr optional(nullopt_t) noexcept {}
      method TL_OPTIONAL_11_CONSTEXPR (line 1144) | TL_OPTIONAL_11_CONSTEXPR optional(const optional &rhs) = default;
      method TL_OPTIONAL_11_CONSTEXPR (line 1150) | TL_OPTIONAL_11_CONSTEXPR optional(optional &&rhs) = default;
      method optional (line 1156) | constexpr explicit optional(
    function T (line 1319) | T &emplace(Args &&... args) {
    function emplace (line 1331) | detail::enable_if_t<
    function swap (line 1346) | void
    function T (line 1367) | constexpr const T *operator->() const {
    function TL_OPTIONAL_11_CONSTEXPR (line 1373) | TL_OPTIONAL_11_CONSTEXPR T *operator->() {
    function TL_OPTIONAL_11_CONSTEXPR (line 1381) | TL_OPTIONAL_11_CONSTEXPR T &operator*() & { return this->m_value; }
    function T (line 1385) | constexpr const T &operator*() const & { return this->m_value; }
    function TL_OPTIONAL_11_CONSTEXPR (line 1388) | TL_OPTIONAL_11_CONSTEXPR T &&operator*() && {
    function T (line 1394) | constexpr const T &&operator*() const && { return std::move(this->m_va...
    function has_value (line 1399) | constexpr bool has_value() const noexcept { return this->m_has_value; }
    function TL_OPTIONAL_11_CONSTEXPR (line 1410) | TL_OPTIONAL_11_CONSTEXPR T &value() & {
    function TL_OPTIONAL_11_CONSTEXPR (line 1417) | TL_OPTIONAL_11_CONSTEXPR const T &value() const & {
    function TL_OPTIONAL_11_CONSTEXPR (line 1423) | TL_OPTIONAL_11_CONSTEXPR T &&value() && {
    function TL_OPTIONAL_11_CONSTEXPR (line 1431) | TL_OPTIONAL_11_CONSTEXPR const T &&value() const && {
    function T (line 1440) | constexpr T value_or(U &&u) const & {
    function TL_OPTIONAL_11_CONSTEXPR (line 1448) | TL_OPTIONAL_11_CONSTEXPR T value_or(U &&u) && {
    function reset (line 1456) | void reset() noexcept {
  type conjunction<B, Bs...> (line 139) | struct conjunction<B, Bs...>
  type is_pointer_to_non_const_member_func<Ret (T::*) (Args...)> (line 152) | struct is_pointer_to_non_const_member_func<Ret (T::*) (Args...)> : std::...
  type is_pointer_to_non_const_member_func<Ret (T::*) (Args...)&> (line 154) | struct is_pointer_to_non_const_member_func<Ret (T::*) (Args...)&> : std:...
  type is_pointer_to_non_const_member_func<Ret (T::*) (Args...)&&> (line 156) | struct is_pointer_to_non_const_member_func<Ret (T::*) (Args...)&&> : std...
  type is_pointer_to_non_const_member_func<Ret (T::*) (Args...) volatile> (line 158) | struct is_pointer_to_non_const_member_func<Ret (T::*) (Args...) volatile...
  type is_pointer_to_non_const_member_func<Ret (T::*) (Args...) volatile&> (line 160) | struct is_pointer_to_non_const_member_func<Ret (T::*) (Args...) volatile...
  type is_pointer_to_non_const_member_func<Ret (T::*) (Args...) volatile&&> (line 162) | struct is_pointer_to_non_const_member_func<Ret (T::*) (Args...) volatile...
  type invoke_result_impl<
    F, decltype(detail::invoke(std::declval<F>(), std::declval<Us>()...), void()),
    Us...> (line 196) | struct invoke_result_impl<
  type returns_void_impl<F, void_t<invoke_result_t<F, U...>>, U...> (line 228) | struct returns_void_impl<F, void_t<invoke_result_t<F, U...>>, U...>
  function swap (line 1640) | void swap(optional<T> &lhs,
  type detail (line 1645) | namespace detail {
    type i_am_secret (line 1646) | struct i_am_secret {}
    function optional_map_impl (line 1678) | constexpr auto optional_map_impl(Opt &&opt, F &&f) {
    function optional_map_impl (line 1688) | auto optional_map_impl(Opt &&opt, F &&f) {
    function optional_map_impl (line 1702) | constexpr auto optional_map_impl(Opt &&opt, F &&f) -> optional<Ret> {
    function optional_map_impl (line 1713) | auto optional_map_impl(Opt &&opt, F &&f) -> optional<monostate> {
  function make_optional (line 1653) | inline constexpr optional<Ret> make_optional(U &&v) {
  function make_optional (line 1658) | inline constexpr optional<T> make_optional(Args &&... args) {
  function make_optional (line 1662) | inline constexpr optional<T> make_optional(std::initializer_list<U> il,
  type detail (line 1672) | namespace detail {
    type i_am_secret (line 1646) | struct i_am_secret {}
    function optional_map_impl (line 1678) | constexpr auto optional_map_impl(Opt &&opt, F &&f) {
    function optional_map_impl (line 1688) | auto optional_map_impl(Opt &&opt, F &&f) {
    function optional_map_impl (line 1702) | constexpr auto optional_map_impl(Opt &&opt, F &&f) -> optional<Ret> {
    function optional_map_impl (line 1713) | auto optional_map_impl(Opt &&opt, F &&f) -> optional<monostate> {
  class optional<T &> (line 1746) | class optional<T &> {
    method and_then (line 1764) | TL_OPTIONAL_11_CONSTEXPR auto and_then(F &&f) & {
    method and_then (line 1775) | TL_OPTIONAL_11_CONSTEXPR auto and_then(F &&f) && {
    method and_then (line 1786) | constexpr auto and_then(F &&f) const & {
    method and_then (line 1798) | constexpr auto and_then(F &&f) const && {
    method TL_OPTIONAL_11_CONSTEXPR (line 1819) | TL_OPTIONAL_11_CONSTEXPR detail::invoke_result_t<F, T &> and_then(F &&...
    method TL_OPTIONAL_11_CONSTEXPR (line 1831) | TL_OPTIONAL_11_CONSTEXPR detail::invoke_result_t<F, T &> and_then(F &&...
    method and_then (line 1843) | constexpr detail::invoke_result_t<F, const T &> and_then(F &&f) const & {
    method and_then (line 1856) | constexpr detail::invoke_result_t<F, const T &> and_then(F &&f) const ...
    method map (line 1878) | TL_OPTIONAL_11_CONSTEXPR auto map(F &&f) & {
    method map (line 1884) | TL_OPTIONAL_11_CONSTEXPR auto map(F &&f) && {
    method map (line 1890) | constexpr auto map(F &&f) const & {
    method map (line 1896) | constexpr auto map(F &&f) const && {
    method TL_OPTIONAL_11_CONSTEXPR (line 1910) | TL_OPTIONAL_11_CONSTEXPR decltype(detail::optional_map_impl(std::declv...
    method TL_OPTIONAL_11_CONSTEXPR (line 1919) | TL_OPTIONAL_11_CONSTEXPR decltype(detail::optional_map_impl(std::declv...
    method map (line 1928) | constexpr decltype(detail::optional_map_impl(std::declval<const option...
    method map (line 1938) | constexpr decltype(detail::optional_map_impl(std::declval<const option...
    method or_else (line 1972) | optional<T> or_else(F &&f) && {
    method or_else (line 1989) | optional<T> or_else(F &&f) const & {
    method or_else (line 2006) | optional<T> or_else(F &&f) const && {
    method or_else (line 2016) | optional<T> or_else(F &&f) const && {
    method U (line 2028) | U map_or(F &&f, U &&u) & {
    method U (line 2034) | U map_or(F &&f, U &&u) && {
    method U (line 2040) | U map_or(F &&f, U &&u) const & {
    method U (line 2047) | U map_or(F &&f, U &&u) const && {
    method map_or_else (line 2063) | detail::invoke_result_t<U> map_or_else(F &&f, U &&u) & {
    method map_or_else (line 2072) | detail::invoke_result_t<U> map_or_else(F &&f, U &&u) && {
    method map_or_else (line 2081) | detail::invoke_result_t<U> map_or_else(F &&f, U &&u) const & {
    method map_or_else (line 2091) | detail::invoke_result_t<U> map_or_else(F &&f, U &&u) const && {
    method conjunction (line 2099) | constexpr optional<typename std::decay<U>::type> conjunction(U &&u) co...
    method TL_OPTIONAL_11_CONSTEXPR (line 2106) | TL_OPTIONAL_11_CONSTEXPR optional disjunction(const optional &rhs) & {
    method optional (line 2111) | constexpr optional disjunction(const optional &rhs) const & {
    method TL_OPTIONAL_11_CONSTEXPR (line 2116) | TL_OPTIONAL_11_CONSTEXPR optional disjunction(const optional &rhs) && {
    method optional (line 2122) | constexpr optional disjunction(const optional &rhs) const && {
    method TL_OPTIONAL_11_CONSTEXPR (line 2128) | TL_OPTIONAL_11_CONSTEXPR optional disjunction(optional &&rhs) & {
    method optional (line 2133) | constexpr optional disjunction(optional &&rhs) const & {
    method TL_OPTIONAL_11_CONSTEXPR (line 2138) | TL_OPTIONAL_11_CONSTEXPR optional disjunction(optional &&rhs) && {
    method optional (line 2144) | constexpr optional disjunction(optional &&rhs) const && {
    method optional (line 2151) | optional take() & {
    method optional (line 2158) | optional take() const & {
    method optional (line 2165) | optional take() && {
    method optional (line 2173) | optional take() const && {
    method optional (line 2184) | constexpr optional() noexcept : m_value(nullptr) {}
    method optional (line 2187) | constexpr optional(nullopt_t) noexcept : m_value(nullptr) {}
    method TL_OPTIONAL_11_CONSTEXPR (line 2193) | TL_OPTIONAL_11_CONSTEXPR optional(const optional &rhs) noexcept = defa...
    method TL_OPTIONAL_11_CONSTEXPR (line 2199) | TL_OPTIONAL_11_CONSTEXPR optional(optional &&rhs) = default;
    method optional (line 2206) | constexpr optional(U &&u) : m_value(std::addressof(u)) {
    method optional (line 2212) | constexpr explicit optional(const optional<U> &rhs) : optional(*rhs) {}
    method optional (line 2220) | optional &operator=(nullopt_t) noexcept {
    method optional (line 2229) | optional &operator=(const optional &rhs) = default;
    method optional (line 2238) | optional &operator=(U &&u) {
    method optional (line 2248) | optional &operator=(const optional<U> &rhs) {
    method T (line 2257) | T &emplace(Args &&... args) noexcept {
    method swap (line 2272) | void swap(optional &rhs) noexcept { std::swap(m_value, rhs.m_value); }
    method T (line 2278) | constexpr const T *operator->() const { return m_value; }
    method TL_OPTIONAL_11_CONSTEXPR (line 2282) | TL_OPTIONAL_11_CONSTEXPR T *operator->() { return m_value; }
    method TL_OPTIONAL_11_CONSTEXPR (line 2288) | TL_OPTIONAL_11_CONSTEXPR T &operator*() { return *m_value; }
    method T (line 2292) | constexpr const T &operator*() const { return *m_value; }
    method has_value (line 2296) | constexpr bool has_value() const noexcept { return m_value != nullptr; }
    method TL_OPTIONAL_11_CONSTEXPR (line 2307) | TL_OPTIONAL_11_CONSTEXPR T &value() {
    method TL_OPTIONAL_11_CONSTEXPR (line 2314) | TL_OPTIONAL_11_CONSTEXPR const T &value() const {
    method T (line 2322) | constexpr T value_or(U &&u) const & {
    method TL_OPTIONAL_11_CONSTEXPR (line 2330) | TL_OPTIONAL_11_CONSTEXPR T value_or(U &&u) && {
    method reset (line 2338) | void reset() noexcept { m_value = nullptr; }
  type std (line 2348) | namespace std {
    type hash<tl::optional<T>> (line 2350) | struct hash<tl::optional<T>> {

FILE: src/cpp/RiderLink/Source/RD/thirdparty/ordered-map/include/tsl/ordered_hash.h
  function namespace (line 82) | namespace tsl {
  function iterator (line 469) | iterator begin() noexcept {
  function const_iterator (line 473) | const_iterator begin() const noexcept {
  function iterator (line 481) | iterator end() noexcept {
  function const_iterator (line 485) | const_iterator end() const noexcept {
  function reverse_iterator (line 494) | reverse_iterator rbegin() noexcept {
  function const_reverse_iterator (line 498) | const_reverse_iterator rbegin() const noexcept {
  function reverse_iterator (line 506) | reverse_iterator rend() noexcept {
  function const_reverse_iterator (line 510) | const_reverse_iterator rend() const noexcept {
  function size_type (line 530) | size_type max_size() const noexcept {
  function iterator (line 640) | iterator erase(iterator pos) {
  function iterator (line 644) | iterator erase(const_iterator pos) {
  function iterator (line 661) | iterator erase(const_iterator first, const_iterator last) {
  function hash (line 713) | size_t hash) {
  function swap (line 717) | void swap(ordered_hash& other) {
  function typename (line 748) | typename U::value_type& at(const K& key) const {
  function typename (line 753) | typename U::value_type& at(const K& key, std::size_t hash) const {
  function max_load_factor (line 857) | void max_load_factor(float ml) {
  function rehash (line 862) | void rehash(size_type count) {
  function reserve (line 867) | void reserve(size_type count) {
  function iterator (line 890) | iterator mutable_iterator(const_iterator pos) {
  function iterator (line 894) | iterator nth(size_type index) {
  function const_iterator (line 899) | const_iterator nth(size_type index) const {
  function values_container_type (line 914) | const values_container_type& values_container() const noexcept {
  function shrink_to_fit (line 928) | void shrink_to_fit() {
  function pop_back (line 952) | void pop_back() {
  function iterator (line 962) | iterator unordered_erase(iterator pos) {
  function iterator (line 966) | iterator unordered_erase(const_iterator pos) {
  function rehash_impl (line 1077) | void rehash_impl(size_type bucket_count) {
  function reserve_space_for_values (line 1137) | reserve_space_for_values(size_type /*count*/) {
  function backward_shift (line 1144) | void backward_shift(std::size_t empty_ibucket) noexcept {
  function erase_value_from_bucket (line 1156) | void erase_value_from_bucket(typename buckets_container_type::iterator i...
  function shift_indexes_in_buckets (line 1178) | void shift_indexes_in_buckets(index_type from_ivalue, char delta) noexce...
  function insert_index (line 1304) | void insert_index(std::size_t ibucket, std::size_t dist_from_ideal_bucket,
  function grow_on_high_load (line 1369) | bool grow_on_high_load() {
  function round_up_to_power_of_two (line 1381) | static std::size_t round_up_to_power_of_two(std::size_t value) {
  function is_power_of_two (line 1398) | static constexpr bool is_power_of_two(std::size_t value) {
  function bucket_entry (line 1415) | bucket_entry* static_empty_bucket_ptr() {

FILE: src/cpp/RiderLink/Source/RD/thirdparty/ordered-map/include/tsl/ordered_map.h
  function namespace (line 40) | namespace tsl {
  function iterator (line 226) | iterator begin() noexcept { return m_ht.begin(); }
  function iterator (line 230) | iterator end() noexcept { return m_ht.end(); }
  function reverse_iterator (line 234) | reverse_iterator rbegin() noexcept { return m_ht.rbegin(); }
  function reverse_iterator (line 238) | reverse_iterator rend() noexcept { return m_ht.rend(); }
  function clear (line 253) | void clear() noexcept { m_ht.clear(); }
  function iterator (line 265) | iterator insert(const_iterator hint, const value_type& value) {
  function iterator (line 274) | iterator insert(const_iterator hint, value_type&& value) {
  function insert (line 281) | void insert(std::initializer_list<value_type> ilist) { m_ht.insert(ilist...
  function iterator (line 360) | iterator erase(iterator pos) { return m_ht.erase(pos); }
  function iterator (line 365) | iterator erase(const_iterator pos) { return m_ht.erase(pos); }
  function iterator (line 370) | iterator erase(const_iterator first, const_iterator last) { return m_ht....
  function size_type (line 375) | size_type erase(const key_type& key) { return m_ht.erase(key); }
  function size_type (line 383) | size_type erase(const key_type& key, std::size_t precalculated_hash) {
  function precalculated_hash (line 403) | size_t precalculated_hash) {
  function swap (line 409) | void swap(ordered_map& other) { other.m_ht.swap(m_ht); }
  function T (line 423) | const T& at(const Key& key) const { return m_ht.at(key); }
  function T (line 428) | const T& at(const Key& key, std::size_t precalculated_hash) const { retu...
  function size_type (line 466) | size_type count(const Key& key) const { return m_ht.count(key); }
  function size_type (line 472) | size_type count(const Key& key, std::size_t precalculated_hash) const {
  function iterator (line 496) | iterator find(const Key& key) { return m_ht.find(key); }
  function iterator (line 502) | iterator find(const Key& key, std::size_t precalculated_hash) { return m...
  function const_iterator (line 504) | const_iterator find(const Key& key) const { return m_ht.find(key); }
  function const_iterator (line 509) | const_iterator find(const Key& key, std::size_t precalculated_hash) const {
  function precalculated_hash (line 527) | size_t precalculated_hash) { return m_ht.find(key, precalculated_hash); }
  function max_load_factor (line 613) | void max_load_factor(float ml) { m_ht.max_load_factor(ml); }
  function rehash (line 615) | void rehash(size_type count) { m_ht.rehash(count); }
  function reserve (line 616) | void reserve(size_type count) { m_ht.reserve(count); }
  function iterator (line 634) | iterator mutable_iterator(const_iterator pos) {
  function iterator (line 643) | iterator nth(size_type index) { return m_ht.nth(index); }
  function const_iterator (line 648) | const_iterator nth(size_type index) const { return m_ht.nth(index); }
  function typename (line 666) | typename values_container_type::value_type* data() const noexcept { retu...
  function shrink_to_fit (line 677) | void shrink_to_fit() { m_ht.shrink_to_fit(); }
  function pop_back (line 727) | void pop_back() { m_ht.pop_back(); }
  function iterator (line 734) | iterator unordered_erase(iterator pos) { return m_ht.unordered_erase(pos...
  function iterator (line 739) | iterator unordered_erase(const_iterator pos) { return m_ht.unordered_era...
  function size_type (line 744) | size_type unordered_erase(const key_type& key) { return m_ht.unordered_e...
  function size_type (line 752) | size_type unordered_erase(const key_type& key, std::size_t precalculated...
  function precalculated_hash (line 772) | size_t precalculated_hash) {

FILE: src/cpp/RiderLink/Source/RD/thirdparty/ordered-map/include/tsl/ordered_set.h
  function namespace (line 40) | namespace tsl {
  function iterator (line 209) | iterator begin() noexcept { return m_ht.begin(); }
  function iterator (line 213) | iterator end() noexcept { return m_ht.end(); }
  function reverse_iterator (line 217) | reverse_iterator rbegin() noexcept { return m_ht.rbegin(); }
  function reverse_iterator (line 221) | reverse_iterator rend() noexcept { return m_ht.rend(); }
  function clear (line 236) | void clear() noexcept { m_ht.clear(); }
  function iterator (line 243) | iterator insert(const_iterator hint, const value_type& value) {
  function iterator (line 247) | iterator insert(const_iterator hint, value_type&& value) {
  function insert (line 253) | void insert(std::initializer_list<value_type> ilist) { m_ht.insert(ilist...
  function iterator (line 284) | iterator erase(iterator pos) { return m_ht.erase(pos); }
  function iterator (line 289) | iterator erase(const_iterator pos) { return m_ht.erase(pos); }
  function iterator (line 294) | iterator erase(const_iterator first, const_iterator last) { return m_ht....
  function size_type (line 299) | size_type erase(const key_type& key) { return m_ht.erase(key); }
  function size_type (line 307) | size_type erase(const key_type& key, std::size_t precalculated_hash) {
  function precalculated_hash (line 327) | size_t precalculated_hash) {
  function swap (line 333) | void swap(ordered_set& other) { other.m_ht.swap(m_ht); }
  function size_type (line 338) | size_type count(const Key& key) const { return m_ht.count(key); }
  function size_type (line 344) | size_type count(const Key& key, std::size_t precalculated_hash) const {
  function iterator (line 369) | iterator find(const Key& key) { return m_ht.find(key); }
  function iterator (line 375) | iterator find(const Key& key, std::size_t precalculated_hash) { return m...
  function const_iterator (line 377) | const_iterator find(const Key& key) const { return m_ht.find(key); }
  function const_iterator (line 382) | const_iterator find(const Key& key, std::size_t precalculated_hash) const {
  function precalculated_hash (line 400) | size_t precalculated_hash) { return m_ht.find(key, precalculated_hash); }
  function max_load_factor (line 485) | void max_load_factor(float ml) { m_ht.max_load_factor(ml); }
  function rehash (line 487) | void rehash(size_type count) { m_ht.rehash(count); }
  function reserve (line 488) | void reserve(size_type count) { m_ht.reserve(count); }
  function iterator (line 505) | iterator mutable_iterator(const_iterator pos) {
  function iterator (line 514) | iterator nth(size_type index) { return m_ht.nth(index); }
  function const_iterator (line 519) | const_iterator nth(size_type index) const { return m_ht.nth(index); }
  function typename (line 537) | typename values_container_type::value_type* data() const noexcept { retu...
  function shrink_to_fit (line 548) | void shrink_to_fit() { m_ht.shrink_to_fit(); }
  function pop_back (line 582) | void pop_back() { m_ht.pop_back(); }
  function iterator (line 589) | iterator unordered_erase(iterator pos) { return m_ht.unordered_erase(pos...
  function iterator (line 594) | iterator unordered_erase(const_iterator pos) { return m_ht.unordered_era...
  function size_type (line 599) | size_type unordered_erase(const key_type& key) { return m_ht.unordered_e...
  function size_type (line 607) | size_type unordered_erase(const key_type& key, std::size_t precalculated...
  function precalculated_hash (line 627) | size_t precalculated_hash) {

FILE: src/cpp/RiderLink/Source/RD/thirdparty/spdlog/include/spdlog/async.h
  function namespace (line 25) | namespace spdlog {

FILE: src/cpp/RiderLink/Source/RD/thirdparty/spdlog/include/spdlog/async_logger-inl.h
  function SPDLOG_INLINE (line 16) | SPDLOG_INLINE spdlog::async_logger::async_logger(

FILE: src/cpp/RiderLink/Source/RD/thirdparty/spdlog/include/spdlog/async_logger.h
  type class (line 27) | enum class
  function namespace (line 34) | namespace details {

FILE: src/cpp/RiderLink/Source/RD/thirdparty/spdlog/include/spdlog/cfg/argv.h
  function namespace (line 20) | namespace spdlog {

FILE: src/cpp/RiderLink/Source/RD/thirdparty/spdlog/include/spdlog/cfg/env.h
  function namespace (line 26) | namespace spdlog {

FILE: src/cpp/RiderLink/Source/RD/thirdparty/spdlog/include/spdlog/cfg/helpers-inl.h
  function namespace (line 19) | namespace spdlog {

FILE: src/cpp/RiderLink/Source/RD/thirdparty/spdlog/include/spdlog/cfg/helpers.h
  function namespace (line 9) | namespace spdlog {

FILE: src/cpp/RiderLink/Source/RD/thirdparty/spdlog/include/spdlog/cfg/log_levels.h
  function namespace (line 10) | namespace spdlog {

FILE: src/cpp/RiderLink/Source/RD/thirdparty/spdlog/include/spdlog/common-inl.h
  function namespace (line 13) | namespace spdlog {

FILE: src/cpp/RiderLink/Source/RD/thirdparty/spdlog/include/spdlog/common.h
  function namespace (line 116) | namespace sinks {
  function namespace (line 215) | namespace level {
  type class (line 261) | enum class
  type class (line 272) | enum class
  type source_loc (line 295) | struct source_loc
  function line (line 309) | int line{0}
  type file_event_handlers (line 313) | struct file_event_handlers
  function namespace (line 321) | namespace details {

FILE: src/cpp/RiderLink/Source/RD/thirdparty/spdlog/include/spdlog/details/backtracer-inl.h
  function namespace (line 10) | namespace details {

FILE: src/cpp/RiderLink/Source/RD/thirdparty/spdlog/include/spdlog/details/backtracer.h
  function namespace (line 21) | namespace spdlog {

FILE: src/cpp/RiderLink/Source/RD/thirdparty/spdlog/include/spdlog/details/circular_q.h
  function namespace (line 10) | namespace spdlog {

FILE: src/cpp/RiderLink/Source/RD/thirdparty/spdlog/include/spdlog/details/console_globals.h
  function namespace (line 9) | namespace spdlog {

FILE: src/cpp/RiderLink/Source/RD/thirdparty/spdlog/include/spdlog/details/file_helper-inl.h
  function namespace (line 20) | namespace spdlog {

FILE: src/cpp/RiderLink/Source/RD/thirdparty/spdlog/include/spdlog/details/file_helper.h
  function namespace (line 14) | namespace spdlog {

FILE: src/cpp/RiderLink/Source/RD/thirdparty/spdlog/include/spdlog/details/fmt_helper.h
  function namespace (line 17) | namespace spdlog {

FILE: src/cpp/RiderLink/Source/RD/thirdparty/spdlog/include/spdlog/details/log_msg-inl.h
  function namespace (line 12) | namespace spdlog {

FILE: src/cpp/RiderLink/Source/RD/thirdparty/spdlog/include/spdlog/details/log_msg.h
  function namespace (line 14) | namespace spdlog {

FILE: s
Condensed preview — 490 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (2,437K chars).
[
  {
    "path": ".editorconfig",
    "chars": 77,
    "preview": "root = true\n\n[*.{csproj,props,targets}]\nindent_style = space\nindent_size = 2\n"
  },
  {
    "path": ".gitattributes",
    "chars": 193,
    "preview": "# Set the default behavior, in case people don't have core.autocrlf set.\n* text=auto\n\n# Keep LF in shell scripts\n*.sh te"
  },
  {
    "path": ".github/workflows/build.yml",
    "chars": 1535,
    "preview": "name: Build UnrealLink\non:\n  push:\n    branches: [ 'net212**' ]\n    paths-ignore:\n      - src/rider/test\n      - testDat"
  },
  {
    "path": ".gitignore",
    "chars": 1057,
    "preview": "# Build artifacts\n[Bb]in/\n[Oo]bj/\nbuild\noutput\n.gradle\n.tmp\nout/*\n*.generated.*\nNuGet.Config\n\n# User-specific files\n*.su"
  },
  {
    "path": ".run/Debug backend.run.xml",
    "chars": 640,
    "preview": "<component name=\"ProjectRunConfigurationManager\">\n  <configuration default=\"false\" name=\"Debug backend\" type=\"RunNativeE"
  },
  {
    "path": ".run/UnrealLink [runIde].run.xml",
    "chars": 948,
    "preview": "<component name=\"ProjectRunConfigurationManager\">\n  <configuration default=\"false\" name=\"UnrealLink [runIde]\" type=\"Grad"
  },
  {
    "path": "CHANGELOG.md",
    "chars": 17377,
    "preview": "# Changelog\n\nAll notable changes to this project will be documented in this file.\n\nThe format is based on [Keep a Change"
  },
  {
    "path": "CODE_OF_CONDUCT.md",
    "chars": 268,
    "preview": "## Code of Conduct\n\nThis project and the corresponding community is governed by the [JetBrains Open Source and Community"
  },
  {
    "path": "License.txt",
    "chars": 11363,
    "preview": "\n                                 Apache License\n                           Version 2.0, January 2004\n                  "
  },
  {
    "path": "README.md",
    "chars": 7287,
    "preview": "[![official JetBrains project](https://jb.gg/badges/official-flat-square.svg)](https://confluence.jetbrains.com/display/"
  },
  {
    "path": "SETUP.md",
    "chars": 2062,
    "preview": "<h1>Setting up development environment</h1>\n\n<p>After cloning the repository, you need to perform some actions to set up"
  },
  {
    "path": "SdkBasedPluginEmbedding.Root",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "SubplatformsCollection.Root",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "UnrealLink.sln",
    "chars": 1538,
    "preview": "\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio Version 16\nVisualStudioVersion = 16.0.2912"
  },
  {
    "path": "build.gradle.kts",
    "chars": 19546,
    "preview": "import com.jetbrains.plugin.structure.base.utils.isFile\nimport org.apache.tools.ant.taskdefs.condition.Os\nimport org.gra"
  },
  {
    "path": "gradle/wrapper/gradle-wrapper.properties",
    "chars": 283,
    "preview": "distributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\ndistributionUrl=https\\://cache-redirector.jetbrains.com"
  },
  {
    "path": "gradle.properties",
    "chars": 1049,
    "preview": "# Properties for the build. Override on the command line with -Pprop=value\n# E.g. -PBuildConfiguration=Release\n# Note th"
  },
  {
    "path": "gradlew",
    "chars": 11587,
    "preview": "#!/bin/sh\n\n#\n# Copyright © 2015 the original authors.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\")"
  },
  {
    "path": "gradlew.bat",
    "chars": 5521,
    "preview": "@rem\r\n@rem Copyright 2015 the original author or authors.\r\n@rem\r\n@rem Licensed under the Apache License, Version 2.0 (th"
  },
  {
    "path": "protocol/build.gradle.kts",
    "chars": 5760,
    "preview": "import com.jetbrains.rd.generator.gradle.RdGenTask\n\nplugins {\n    // Version is configured in gradle.properties\n    id(\""
  },
  {
    "path": "protocol/src/main/kotlin/model/editorPlugin/LiveCodingModel.kt",
    "chars": 692,
    "preview": "package model.editorPlugin\n\nimport com.jetbrains.rd.generator.nova.*\nimport com.jetbrains.rd.generator.nova.PredefinedTy"
  },
  {
    "path": "protocol/src/main/kotlin/model/editorPlugin/RdEditorModel.kt",
    "chars": 2144,
    "preview": "package model.editorPlugin\n\nimport com.jetbrains.rd.generator.nova.*\nimport com.jetbrains.rd.generator.nova.PredefinedTy"
  },
  {
    "path": "protocol/src/main/kotlin/model/lib/ue4/UE4Library.kt",
    "chars": 7436,
    "preview": "package model.lib.ue4\n\nimport com.jetbrains.rd.generator.nova.*\nimport com.jetbrains.rd.generator.nova.PredefinedType.*\n"
  },
  {
    "path": "protocol/src/main/kotlin/model/rider/RdRiderModel.kt",
    "chars": 5009,
    "preview": "package model.rider\n\nimport com.jetbrains.rd.generator.nova.*\nimport com.jetbrains.rd.generator.nova.PredefinedType.*\nim"
  },
  {
    "path": "settings.gradle.kts",
    "chars": 1301,
    "preview": "rootProject.name = \"UnrealLink\"\n\npluginManagement {\n    val rdVersion: String by settings\n    val rdKotlinVersion: Strin"
  },
  {
    "path": "setup_unreal_plugin.cmd",
    "chars": 41,
    "preview": ".\\gradlew -q symlinkPluginToUnrealProject"
  },
  {
    "path": "src/SubplatformsCollection.Root",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "src/cpp/BuildScript/GenerateRiderLinkZip.cs",
    "chars": 3027,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Collections.Immutable;\nusing System.Linq;\nusing System.Secu"
  },
  {
    "path": "src/cpp/RiderLink/RiderLink.uplugin.template",
    "chars": 1363,
    "preview": "{\n\t\"FileVersion\": 3,\n\t\"Version\": 1,\n\t\"VersionName\": \"%PLUGIN_VERSION%\",\n\t\"FriendlyName\": \"RiderLink\",\n\t\"Description\": \"P"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/RD.Build.cs",
    "chars": 2597,
    "preview": "using System.IO;\nusing UnrealBuildTool;\n\npublic class RD : ModuleRules\n{\n\tpublic RD(ReadOnlyTargetRules Target) : base(T"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/RD.cpp",
    "chars": 179,
    "preview": "#include \"RD.h\"\n\n#include <Modules/ModuleManager.h>\n\n#define LOCTEXT_NAMESPACE \"RD\"\n\nDEFINE_LOG_CATEGORY(FLogRDModule);\n"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/RD.h",
    "chars": 337,
    "preview": "// Copyright 1998-2018 Epic Games, Inc. All Rights Reserved.\n\n#pragma once\n\n#include \"Logging/LogMacros.h\"\n#include \"Log"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_core_cpp/rd_core_export.h",
    "chars": 1981,
    "preview": "\n#ifndef RD_CORE_API_H\n#define RD_CORE_API_H\n\n#if defined(_WIN32)\n#ifdef RD_CORE_STATIC_DEFINE\n#  define RD_CORE_API\n#  "
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_core_cpp/src/main/lifetime/Lifetime.cpp",
    "chars": 988,
    "preview": "#include \"Lifetime.h\"\n\n#include <memory>\n\n#include <thirdparty.hpp>\n#include <spdlog/spdlog.h>\n#include <spdlog/sinks/st"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_core_cpp/src/main/lifetime/Lifetime.h",
    "chars": 1493,
    "preview": "#ifndef RD_CPP_CORE_LIFETIMEWRAPPER_H\n#define RD_CPP_CORE_LIFETIMEWRAPPER_H\n\n#if defined(_MSC_VER)\n#pragma warning(push)"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_core_cpp/src/main/lifetime/LifetimeDefinition.cpp",
    "chars": 988,
    "preview": "#include \"LifetimeDefinition.h\"\n\n#include <spdlog/spdlog.h>\n\nnamespace rd\n{\nLifetimeDefinition::LifetimeDefinition(bool "
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_core_cpp/src/main/lifetime/LifetimeDefinition.h",
    "chars": 1293,
    "preview": "#ifndef RD_CPP_CORE_LIFETIME_DEFINITION_H\n#define RD_CPP_CORE_LIFETIME_DEFINITION_H\n\n#include \"util/core_traits.h\"\n\n#inc"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_core_cpp/src/main/lifetime/LifetimeImpl.cpp",
    "chars": 1260,
    "preview": "#include \"LifetimeImpl.h\"\n\n#include <utility>\n\nnamespace rd\n{\n#if __cplusplus < 201703L\nLifetimeImpl::counter_t Lifetime"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_core_cpp/src/main/lifetime/LifetimeImpl.h",
    "chars": 1880,
    "preview": "#ifndef RD_CPP_CORE_LIFETIME_H\n#define RD_CPP_CORE_LIFETIME_H\n\n#if defined(_MSC_VER)\n#pragma warning(push)\n#pragma warni"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_core_cpp/src/main/lifetime/SequentialLifetimes.cpp",
    "chars": 938,
    "preview": "#include \"SequentialLifetimes.h\"\n\nnamespace rd\n{\nSequentialLifetimes::SequentialLifetimes(Lifetime parent_lifetime) : pa"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_core_cpp/src/main/lifetime/SequentialLifetimes.h",
    "chars": 1096,
    "preview": "#ifndef RD_CPP_CORE_SEQUENTIAL_LIFETIMES_H\n#define RD_CPP_CORE_SEQUENTIAL_LIFETIMES_H\n\n#if defined(_MSC_VER)\n#pragma war"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_core_cpp/src/main/reactive/Property.h",
    "chars": 1624,
    "preview": "#ifndef RD_CPP_CORE_PROPERTY_H\n#define RD_CPP_CORE_PROPERTY_H\n\n#include \"base/IProperty.h\"\n#include \"reactive/base/Signa"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_core_cpp/src/main/reactive/ViewableList.h",
    "chars": 6593,
    "preview": "#ifndef RD_CPP_CORE_VIEWABLELIST_H\n#define RD_CPP_CORE_VIEWABLELIST_H\n\n#include \"base/IViewableList.h\"\n#include \"reactiv"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_core_cpp/src/main/reactive/ViewableMap.h",
    "chars": 6977,
    "preview": "#ifndef RD_CPP_CORE_VIEWABLE_MAP_H\n#define RD_CPP_CORE_VIEWABLE_MAP_H\n\n#include \"base/IViewableMap.h\"\n#include \"reactive"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_core_cpp/src/main/reactive/ViewableSet.h",
    "chars": 5124,
    "preview": "#ifndef RD_CPP_CORE_VIEWABLESET_H\n#define RD_CPP_CORE_VIEWABLESET_H\n\n#include \"base/IViewableSet.h\"\n#include \"reactive/b"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_core_cpp/src/main/reactive/base/IProperty.h",
    "chars": 1870,
    "preview": "#ifndef RD_CPP_IPROPERTY_H\n#define RD_CPP_IPROPERTY_H\n\n#include \"SignalX.h\"\n#include \"IPropertyBase.h\"\n\n#include <lifeti"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_core_cpp/src/main/reactive/base/IPropertyBase.h",
    "chars": 1486,
    "preview": "#ifndef RD_CPP_IPROPERTYBASE_H\n#define RD_CPP_IPROPERTYBASE_H\n\n#include \"interfaces.h\"\n#include \"SignalX.h\"\n\n#include <t"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_core_cpp/src/main/reactive/base/IViewableList.h",
    "chars": 6748,
    "preview": "#ifndef RD_CPP_IVIEWABLELIST_H\n#define RD_CPP_IVIEWABLELIST_H\n\n#include \"interfaces.h\"\n#include \"viewable_collections.h\""
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_core_cpp/src/main/reactive/base/IViewableMap.h",
    "chars": 7059,
    "preview": "#ifndef RD_CPP_IVIEWABLEMAP_H\n#define RD_CPP_IVIEWABLEMAP_H\n\n#include \"lifetime/LifetimeDefinition.h\"\n#include \"util/ove"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_core_cpp/src/main/reactive/base/IViewableSet.h",
    "chars": 4182,
    "preview": "#ifndef RD_CPP_IVIEWABLESET_H\n#define RD_CPP_IVIEWABLESET_H\n\n#include \"interfaces.h\"\n#include \"viewable_collections.h\"\n\n"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_core_cpp/src/main/reactive/base/SignalCookie.cpp",
    "chars": 229,
    "preview": "#include \"SignalCookie.h\"\n\n#include <atomic>\n\nnamespace\n{\nstd::atomic<int32_t> cookie;\n}\n\nvoid rd_signal_cookie_inc()\n{\n"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_core_cpp/src/main/reactive/base/SignalCookie.h",
    "chars": 303,
    "preview": "#ifndef RD_CPP_SIGNALCOOKIE_H\n#define RD_CPP_SIGNALCOOKIE_H\n\n#include <cstdint>\n#include <rd_core_export.h>\n\nextern \"C\" "
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_core_cpp/src/main/reactive/base/SignalX.h",
    "chars": 2775,
    "preview": "#ifndef RD_CPP_CORE_SIGNAL_H\n#define RD_CPP_CORE_SIGNAL_H\n\n#include \"interfaces.h\"\n#include \"SignalCookie.h\"\n\n#include <"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_core_cpp/src/main/reactive/base/interfaces.h",
    "chars": 1935,
    "preview": "#ifndef RD_CPP_CORE_INTERFACES_H\n#define RD_CPP_CORE_INTERFACES_H\n\n#include <lifetime/Lifetime.h>\n#include <types/wrappe"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_core_cpp/src/main/reactive/base/viewable_collections.h",
    "chars": 673,
    "preview": "#ifndef RD_CPP_VIEWABLE_COLLECTIONS_H\n#define RD_CPP_VIEWABLE_COLLECTIONS_H\n\n#include <string>\n\nnamespace rd\n{\nenum clas"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_core_cpp/src/main/std/allocator.h",
    "chars": 182,
    "preview": "#ifndef RD_CPP_ALLOCATOR_H\n#define RD_CPP_ALLOCATOR_H\n\n#include <memory>\n\nnamespace rd\n{\ntemplate <typename T>\nusing all"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_core_cpp/src/main/std/hash.h",
    "chars": 275,
    "preview": "#ifndef RD_CPP_HASH_H\n#define RD_CPP_HASH_H\n\n#include <cstddef>\n#include <functional>\n\nnamespace rd\n{\ntemplate <typename"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_core_cpp/src/main/std/list.h",
    "chars": 634,
    "preview": "#ifndef RD_CPP_LIST_H\n#define RD_CPP_LIST_H\n\n#include <vector>\n#include <cstdint>\n\nnamespace rd\n{\ntemplate <typename T>\n"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_core_cpp/src/main/std/to_string.h",
    "chars": 2680,
    "preview": "// ReSharper disable CppUE4CodingStandardNamingViolationWarning\n#ifndef RD_CPP_TO_STRING_H\n#define RD_CPP_TO_STRING_H\n\n#"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_core_cpp/src/main/std/unordered_map.h",
    "chars": 392,
    "preview": "#ifndef RD_CPP_UNORDERED_MAP_H\n#define RD_CPP_UNORDERED_MAP_H\n\n#include \"hash.h\"\n\n#include <unordered_map>\n\nnamespace rd"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_core_cpp/src/main/std/unordered_set.h",
    "chars": 362,
    "preview": "#ifndef RD_CPP_UNORDERED_SET_H\n#define RD_CPP_UNORDERED_SET_H\n\n#include \"hash.h\"\n\n#include <unordered_set>\n\nnamespace rd"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_core_cpp/src/main/types/DateTime.cpp",
    "chars": 984,
    "preview": "#include \"DateTime.h\"\n\n#include <sstream>\n#include <iomanip>\n\nnamespace rd\n{\nDateTime::DateTime(time_t seconds) : second"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_core_cpp/src/main/types/DateTime.h",
    "chars": 1136,
    "preview": "#ifndef RD_CPP_DATETIME_H\n#define RD_CPP_DATETIME_H\n\n#include <std/hash.h>\n\n#include <ctime>\n#include <string>\n\n#include"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_core_cpp/src/main/types/Void.h",
    "chars": 572,
    "preview": "#ifndef RD_CPP_VOID_H\n#define RD_CPP_VOID_H\n\n#include <functional>\n#include <string>\n\nnamespace rd\n{\n/**\n * \\brief For u"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_core_cpp/src/main/types/wrapper.h",
    "chars": 6652,
    "preview": "#ifndef RD_CPP_WRAPPER_H\n#define RD_CPP_WRAPPER_H\n\n#include <util/core_traits.h>\n#include <std/allocator.h>\n#include <st"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_core_cpp/src/main/util/core_traits.h",
    "chars": 3924,
    "preview": "#ifndef RD_CORE_CPP_TRAITS_H\n#define RD_CORE_CPP_TRAITS_H\n\n#include <types/Void.h>\n\n#include <type_traits>\n#include <str"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_core_cpp/src/main/util/core_util.h",
    "chars": 2167,
    "preview": "#ifndef RD_CPP_CORE_CPP_UTIL_H\n#define RD_CPP_CORE_CPP_UTIL_H\n\n#include \"erase_if.h\"\n#include \"gen_util.h\"\n#include \"ove"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_core_cpp/src/main/util/enum.h",
    "chars": 3562,
    "preview": "#ifndef RD_CPP_ENUM_H\n#define RD_CPP_ENUM_H\n\n#include <type_traits>\n\n#define RD_DEFINE_ENUM_FLAG_OPERATORS(ENUMTYPE)    "
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_core_cpp/src/main/util/erase_if.h",
    "chars": 369,
    "preview": "#ifndef RD_CPP_ERASE_IF_H\n#define RD_CPP_ERASE_IF_H\n\nnamespace rd\n{\nnamespace util\n{\ntemplate <typename ContainerT, clas"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_core_cpp/src/main/util/gen_util.h",
    "chars": 1672,
    "preview": "#ifndef RD_CPP_GEN_UTIL_H\n#define RD_CPP_GEN_UTIL_H\n\n#include <std/hash.h>\n#include <std/allocator.h>\n\n#include <cstdlib"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_core_cpp/src/main/util/overloaded.h",
    "chars": 652,
    "preview": "#ifndef RD_CPP_OVERLOADED_H\n#define RD_CPP_OVERLOADED_H\n\nnamespace rd\n{\nnamespace util\n{\ntemplate <typename... Ts>\nstruc"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_core_cpp/src/main/util/shared_function.h",
    "chars": 855,
    "preview": "#ifndef RD_CPP_SHARED_FUNCTION_H\n#define RD_CPP_SHARED_FUNCTION_H\n\n#include <memory>\n\nnamespace rd\n{\nnamespace util\n{\nte"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/rd_framework_export.h",
    "chars": 2228,
    "preview": "\n#ifndef RD_FRAMEWORK_API_H\n#define RD_FRAMEWORK_API_H\n\n#if defined(_WIN32)\n# ifdef RD_FRAMEWORK_STATIC_DEFINE\n#  define"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/base/IProtocol.cpp",
    "chars": 937,
    "preview": "#include \"IProtocol.h\"\n\n#include \"scheduler/base/IScheduler.h\"\n#include \"protocol/Identities.h\"\n#include \"base/IWire.h\"\n"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/base/IProtocol.h",
    "chars": 1527,
    "preview": "#ifndef RD_CPP_IPROTOCOL_H\n#define RD_CPP_IPROTOCOL_H\n\n#if defined(_MSC_VER)\n#pragma warning(push)\n#pragma warning(disab"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/base/IRdBindable.h",
    "chars": 2766,
    "preview": "#ifndef RD_CPP_FRAMEWORK_IRDBINDABLE_H\n#define RD_CPP_FRAMEWORK_IRDBINDABLE_H\n\n#include \"IRdDynamic.h\"\n#include \"lifetim"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/base/IRdDynamic.h",
    "chars": 810,
    "preview": "#ifndef RD_CPP_IRDDYNAMIC_H\n#define RD_CPP_IRDDYNAMIC_H\n\n#include \"impl/RName.h\"\n\n#include <rd_framework_export.h>\n\nname"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/base/IRdReactive.h",
    "chars": 1184,
    "preview": "#ifndef RD_CPP_FRAMEWORK_IRDREACTIVE_H\n#define RD_CPP_FRAMEWORK_IRDREACTIVE_H\n\n#include \"IRdBindable.h\"\n#include \"schedu"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/base/IRdWireable.cpp",
    "chars": 42,
    "preview": "#include \"IRdWireable.h\"\n\nnamespace rd\n{\n}"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/base/IRdWireable.h",
    "chars": 340,
    "preview": "#ifndef RD_CPP_IRDWIREABLE_H\n#define RD_CPP_IRDWIREABLE_H\n\n#include \"protocol/RdId.h\"\n#include \"scheduler/base/ISchedule"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/base/ISerializersOwner.cpp",
    "chars": 252,
    "preview": "#include \"ISerializersOwner.h\"\n\nnamespace rd\n{\nvoid ISerializersOwner::registry(Serializers const& serializers) const\n{\n"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/base/ISerializersOwner.h",
    "chars": 717,
    "preview": "#ifndef RD_CPP_ISERIALIZERSOWNER_H\n#define RD_CPP_ISERIALIZERSOWNER_H\n\n#if defined(_MSC_VER)\n#pragma warning(push)\n#prag"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/base/IUnknownInstance.cpp",
    "chars": 284,
    "preview": "#include \"IUnknownInstance.h\"\n\nnamespace rd\n{\nIUnknownInstance::IUnknownInstance()\n{\n}\n\nIUnknownInstance::IUnknownInstan"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/base/IUnknownInstance.h",
    "chars": 398,
    "preview": "#ifndef RD_CPP_IUNKNOWNINSTANCE_H\n#define RD_CPP_IUNKNOWNINSTANCE_H\n\n#include \"protocol/RdId.h\"\n\n#include <rd_framework_"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/base/IWire.h",
    "chars": 1355,
    "preview": "#ifndef RD_CPP_IWIRE_H\n#define RD_CPP_IWIRE_H\n\n#if defined(_MSC_VER)\n#pragma warning(push)\n#pragma warning(disable:4251)"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/base/RdBindableBase.cpp",
    "chars": 2229,
    "preview": "#include \"RdBindableBase.h\"\n\n#include \"reactive/base/SignalX.h\"\n\nnamespace rd\n{\nstd::string RdBindableBase::toString() c"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/base/RdBindableBase.h",
    "chars": 3397,
    "preview": "#ifndef RD_CPP_RDBINDABLEBASE_H\n#define RD_CPP_RDBINDABLEBASE_H\n\n#if defined(_MSC_VER)\n#pragma warning(push)\n#pragma war"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/base/RdPropertyBase.h",
    "chars": 3603,
    "preview": "#ifndef RD_CPP_RDPROPERTYBASE_H\n#define RD_CPP_RDPROPERTYBASE_H\n\n#include \"base/RdReactiveBase.h\"\n#include \"serializatio"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/base/RdReactiveBase.cpp",
    "chars": 1330,
    "preview": "#include \"RdReactiveBase.h\"\n\n#include \"spdlog/sinks/stdout_color_sinks.h\"\n\nnamespace rd\n{\nstatic std::shared_ptr<spdlog:"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/base/RdReactiveBase.h",
    "chars": 1420,
    "preview": "#ifndef RD_CPP_RDREACTIVEBASE_H\n#define RD_CPP_RDREACTIVEBASE_H\n\n#include \"base/RdBindableBase.h\"\n#include \"base/IRdReac"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/base/WireBase.cpp",
    "chars": 183,
    "preview": "#include \"WireBase.h\"\n\nnamespace rd\n{\nvoid WireBase::advise(Lifetime lifetime, const RdReactiveBase* entity) const\n{\n\tme"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/base/WireBase.h",
    "chars": 635,
    "preview": "#ifndef RD_CPP_WIREBASE_H\n#define RD_CPP_WIREBASE_H\n\n#include \"reactive/Property.h\"\n#include \"base/IWire.h\"\n#include \"pr"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/ext/ExtWire.cpp",
    "chars": 1014,
    "preview": "#include \"ExtWire.h\"\n\n#include \"protocol/Buffer.h\"\n\nnamespace rd\n{\nExtWire::ExtWire()\n{\n\tconnected.advise(Lifetime::Eter"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/ext/ExtWire.h",
    "chars": 799,
    "preview": "#ifndef RD_CPP_EXTWIRE_H\n#define RD_CPP_EXTWIRE_H\n\n#if defined(_MSC_VER)\n#pragma warning(push)\n#pragma warning(disable:4"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/ext/RdExtBase.cpp",
    "chars": 3194,
    "preview": "#include \"RdExtBase.h\"\n\n#include \"lifetime/Lifetime.h\"\n#include \"base/RdPropertyBase.h\"\n#include \"protocol/Protocol.h\"\n#"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/ext/RdExtBase.h",
    "chars": 1384,
    "preview": "#ifndef RD_CPP_RDEXTBASE_H\n#define RD_CPP_RDEXTBASE_H\n\n#include \"base/RdReactiveBase.h\"\n#include \"ExtWire.h\"\n\n#include \""
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/impl/RName.cpp",
    "chars": 1390,
    "preview": "#include \"RName.h\"\n\n#include \"thirdparty.hpp\"\n\nnamespace rd\n{\nclass RNameImpl\n{\npublic:\n\t// region ctor/dtor\n\tRNameImpl("
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/impl/RName.h",
    "chars": 1075,
    "preview": "#ifndef RD_CPP_FRAMEWORK_RNAME_H\n#define RD_CPP_FRAMEWORK_RNAME_H\n\n#if defined(_MSC_VER)\n#pragma warning(push)\n#pragma w"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/impl/RdList.h",
    "chars": 6769,
    "preview": "#ifndef RD_CPP_RDLIST_H\n#define RD_CPP_RDLIST_H\n\n#include \"reactive/ViewableList.h\"\n#include \"base/RdReactiveBase.h\"\n#in"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/impl/RdMap.h",
    "chars": 8213,
    "preview": "#ifndef RD_CPP_RDMAP_H\n#define RD_CPP_RDMAP_H\n\n#include \"reactive/ViewableMap.h\"\n#include \"base/RdReactiveBase.h\"\n#inclu"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/impl/RdProperty.h",
    "chars": 2531,
    "preview": "#ifndef RD_CPP_RDPROPERTY_H\n#define RD_CPP_RDPROPERTY_H\n\n#include \"base/RdPropertyBase.h\"\n#include \"serialization/Polymo"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/impl/RdSet.h",
    "chars": 3567,
    "preview": "#ifndef RD_CPP_RDSET_H\n#define RD_CPP_RDSET_H\n\n#include \"reactive/ViewableSet.h\"\n#include \"base/RdReactiveBase.h\"\n#inclu"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/impl/RdSignal.h",
    "chars": 3407,
    "preview": "#ifndef RD_CPP_RDSIGNAL_H\n#define RD_CPP_RDSIGNAL_H\n\n#include \"lifetime/Lifetime.h\"\n#include \"reactive/base/interfaces.h"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/intern/InternRoot.cpp",
    "chars": 1946,
    "preview": "#include \"InternRoot.h\"\n\n#include \"serialization/AbstractPolymorphic.h\"\n#include \"serialization/InternedAnySerializer.h\""
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/intern/InternRoot.h",
    "chars": 3242,
    "preview": "#ifndef RD_CPP_INTERNROOT_H\n#define RD_CPP_INTERNROOT_H\n\n#include \"base/RdReactiveBase.h\"\n#include \"InternScheduler.h\"\n#"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/intern/InternScheduler.cpp",
    "chars": 449,
    "preview": "#include \"InternScheduler.h\"\n\n#include \"guards.h\"\n\nnamespace rd\n{\nthread_local int32_t InternScheduler::active_counts = "
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/intern/InternScheduler.h",
    "chars": 566,
    "preview": "#ifndef RD_CPP_INTERNSCHEDULER_H\n#define RD_CPP_INTERNSCHEDULER_H\n\n#include \"scheduler/base/IScheduler.h\"\n\n#include <rd_"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/protocol/Buffer.cpp",
    "chars": 5399,
    "preview": "#include <utility>\n\n#include \"protocol/Buffer.h\"\n\n#include <string>\n#include <algorithm>\n\nnamespace rd\n{\nBuffer::Buffer("
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/protocol/Buffer.h",
    "chars": 7362,
    "preview": "#ifndef RD_CPP_UNSAFEBUFFER_H\n#define RD_CPP_UNSAFEBUFFER_H\n\n#if defined(_MSC_VER)\n#pragma warning(push)\n#pragma warning"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/protocol/Identities.cpp",
    "chars": 405,
    "preview": "#include \"protocol/Identities.h\"\n\nnamespace rd\n{\nconstexpr Identities::IdKind Identities::SERVER;\nconstexpr Identities::"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/protocol/Identities.h",
    "chars": 1124,
    "preview": "#ifndef RD_CPP_FRAMEWORK_IDENTITIES_H\n#define RD_CPP_FRAMEWORK_IDENTITIES_H\n\n#if defined(_MSC_VER)\n#pragma warning(push)"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/protocol/MessageBroker.cpp",
    "chars": 3843,
    "preview": "#include \"protocol/MessageBroker.h\"\n\n#include \"base/RdReactiveBase.h\"\n#include \"spdlog/sinks/stdout_color_sinks.h\"\n\nname"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/protocol/MessageBroker.h",
    "chars": 1350,
    "preview": "#ifndef RD_CPP_MESSAGEBROKER_H\n#define RD_CPP_MESSAGEBROKER_H\n\n#if defined(_MSC_VER)\n#pragma warning(push)\n#pragma warni"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/protocol/Protocol.cpp",
    "chars": 1442,
    "preview": "#include \"protocol/Protocol.h\"\n\n#include \"serialization/SerializationCtx.h\"\n#include \"intern/InternRoot.h\"\n\n#include \"sp"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/protocol/Protocol.h",
    "chars": 1451,
    "preview": "#ifndef RD_CPP_PROTOCOL_H\n#define RD_CPP_PROTOCOL_H\n\n#if defined(_MSC_VER)\n#pragma warning(push)\n#pragma warning(disable"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/protocol/RdId.cpp",
    "chars": 526,
    "preview": "#include \"protocol/RdId.h\"\n\n#include \"protocol/Identities.h\"\n\nnamespace rd\n{\nRdId RdId::read(Buffer& buffer)\n{\n\tconst au"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/protocol/RdId.h",
    "chars": 2443,
    "preview": "#ifndef RD_CPP_FRAMEWORK_RDID_H\n#define RD_CPP_FRAMEWORK_RDID_H\n\n#include \"protocol/Buffer.h\"\n#include \"hashing.h\"\n#incl"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/scheduler/SimpleScheduler.cpp",
    "chars": 230,
    "preview": "#include \"SimpleScheduler.h\"\n\nnamespace rd\n{\nvoid SimpleScheduler::flush()\n{\n}\n\nvoid SimpleScheduler::queue(std::functio"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/scheduler/SimpleScheduler.h",
    "chars": 597,
    "preview": "#ifndef RD_CPP_TESTSCHEDULER_H\n#define RD_CPP_TESTSCHEDULER_H\n\n#include \"scheduler/base/IScheduler.h\"\n\n#include <rd_fram"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/scheduler/SingleThreadScheduler.cpp",
    "chars": 444,
    "preview": "#include \"SingleThreadScheduler.h\"\n\n#include <utility>\n\n#include \"ctpl_stl.h\"\n\nnamespace rd\n{\nSingleThreadScheduler::Sin"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/scheduler/SingleThreadScheduler.h",
    "chars": 443,
    "preview": "#ifndef RD_CPP_SINGLETHREADSCHEDULER_H\n#define RD_CPP_SINGLETHREADSCHEDULER_H\n\n#include \"base/SingleThreadSchedulerBase."
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/scheduler/SynchronousScheduler.cpp",
    "chars": 599,
    "preview": "#include \"SynchronousScheduler.h\"\n\n#include \"guards.h\"\n\nnamespace rd\n{\nstatic thread_local int32_t SynchronousScheduler_"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/scheduler/SynchronousScheduler.h",
    "chars": 791,
    "preview": "#ifndef RD_CPP_SYNCHRONOUSSCHEDULER_H\n#define RD_CPP_SYNCHRONOUSSCHEDULER_H\n\n#include \"scheduler/base/IScheduler.h\"\n\n#in"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/scheduler/base/IScheduler.cpp",
    "chars": 498,
    "preview": "#include \"IScheduler.h\"\n\n#include \"spdlog/spdlog.h\"\n\n#include <functional>\n#include <sstream>\n\nnamespace rd\n{\nvoid ISche"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/scheduler/base/IScheduler.h",
    "chars": 1158,
    "preview": "#ifndef RD_CPP_ISCHEDULER_H\n#define RD_CPP_ISCHEDULER_H\n\n#if defined(_MSC_VER)\n#pragma warning(push)\n#pragma warning(dis"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/scheduler/base/SingleThreadSchedulerBase.cpp",
    "chars": 1574,
    "preview": "#include \"SingleThreadSchedulerBase.h\"\n\n#include \"util/core_util.h\"\n\n#include \"ctpl_stl.h\"\n#include \"spdlog/include/spdl"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/scheduler/base/SingleThreadSchedulerBase.h",
    "chars": 1215,
    "preview": "#ifndef RD_CPP_SINGLETHREADSCHEDULERBASE_H\n#define RD_CPP_SINGLETHREADSCHEDULERBASE_H\n\n#if defined(_MSC_VER)\n#pragma war"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/serialization/AbstractPolymorphic.h",
    "chars": 785,
    "preview": "#ifndef RD_CPP_ABSTRACTPOLYMORPHIC_H\n#define RD_CPP_ABSTRACTPOLYMORPHIC_H\n\n#include \"types/wrapper.h\"\n#include \"serializ"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/serialization/ArraySerializer.h",
    "chars": 777,
    "preview": "#ifndef RD_CPP_ARRAYSERIALIZER_H\n#define RD_CPP_ARRAYSERIALIZER_H\n\n#include \"serialization/SerializationCtx.h\"\n#include "
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/serialization/DefaultAbstractDeclaration.cpp",
    "chars": 1023,
    "preview": "#include \"DefaultAbstractDeclaration.h\"\n\nnamespace rd\n{\nconst std::string DefaultAbstractDeclaration::not_registered_err"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/serialization/DefaultAbstractDeclaration.h",
    "chars": 860,
    "preview": "#ifndef RD_CPP_DEFAULTABSTRACTDECLARATION_H\n#define RD_CPP_DEFAULTABSTRACTDECLARATION_H\n\n#include \"types/wrapper.h\"\n#inc"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/serialization/ISerializable.cpp",
    "chars": 465,
    "preview": "#include \"serialization/ISerializable.h\"\n\n#include \"std/hash.h\"\n\nnamespace rd\n{\nsize_t IPolymorphicSerializable::hashCod"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/serialization/ISerializable.h",
    "chars": 1606,
    "preview": "#ifndef RD_CPP_ISERIALIZABLE_H\n#define RD_CPP_ISERIALIZABLE_H\n\n#include <string>\n\n#include <rd_framework_export.h>\n\nname"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/serialization/InternedAnySerializer.h",
    "chars": 637,
    "preview": "#ifndef RD_CPP_ANYSERIALIZER_H\n#define RD_CPP_ANYSERIALIZER_H\n\n#include \"serialization/SerializationCtx.h\"\n#include \"ser"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/serialization/InternedSerializer.h",
    "chars": 822,
    "preview": "#ifndef RD_CPP_INTERNEDSERIALIZER_H\n#define RD_CPP_INTERNEDSERIALIZER_H\n\n#include \"serialization/SerializationCtx.h\"\n#in"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/serialization/NullableSerializer.h",
    "chars": 1502,
    "preview": "#ifndef RD_CPP_NULLABLESERIALIZER_H\n#define RD_CPP_NULLABLESERIALIZER_H\n\n#include \"serialization/Polymorphic.h\"\n#include"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/serialization/Polymorphic.cpp",
    "chars": 60,
    "preview": "#include \"Polymorphic.h\"\n\nnamespace rd\n{\n}\t // namespace rd\n"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/serialization/Polymorphic.h",
    "chars": 5017,
    "preview": "#ifndef RD_CPP_POLYMORPHIC_H\n#define RD_CPP_POLYMORPHIC_H\n\n#include \"protocol/Buffer.h\"\n#include \"base/RdReactiveBase.h\""
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/serialization/RdAny.cpp",
    "chars": 71,
    "preview": "#include \"RdAny.h\"\n\nnamespace rd\n{\nnamespace any\n{\n}\n}\t // namespace rd"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/serialization/RdAny.h",
    "chars": 3411,
    "preview": "#ifndef RD_CPP_ANY_H\n#define RD_CPP_ANY_H\n\n#include \"util/core_util.h\"\n#include \"types/wrapper.h\"\n#include \"serializatio"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/serialization/SerializationCtx.cpp",
    "chars": 1050,
    "preview": "#include \"SerializationCtx.h\"\n\nnamespace rd\n{\n//\tSerializationCtx::SerializationCtx(const IProtocol &protocol) : seriali"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/serialization/SerializationCtx.h",
    "chars": 2809,
    "preview": "#ifndef RD_CPP_FRAMEWORK_SERIALIZATIONCTX_H\n#define RD_CPP_FRAMEWORK_SERIALIZATIONCTX_H\n\n#if defined(_MSC_VER)\n#pragma w"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/serialization/Serializers.cpp",
    "chars": 1190,
    "preview": "#include \"Serializers.h\"\n\n#include \"serialization/AbstractPolymorphic.h\"\n\nnamespace rd\n{\nconstexpr RdId STRING_PREDEFINE"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/serialization/Serializers.h",
    "chars": 4701,
    "preview": "#ifndef RD_CPP_SERIALIZERS_H\n#define RD_CPP_SERIALIZERS_H\n\n#if defined(_MSC_VER)\n#pragma warning(push)\n#pragma warning(d"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/task/RdCall.h",
    "chars": 4340,
    "preview": "#ifndef RD_CPP_RDCALL_H\n#define RD_CPP_RDCALL_H\n\n#include \"serialization/Polymorphic.h\"\n#include \"RdTask.h\"\n#include \"Rd"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/task/RdEndpoint.h",
    "chars": 3681,
    "preview": "#ifndef RD_CPP_RDENDPOINT_H\n#define RD_CPP_RDENDPOINT_H\n\n#include \"serialization/Polymorphic.h\"\n#include \"RdTask.h\"\n\n#if"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/task/RdSymmetricCall.h",
    "chars": 989,
    "preview": "#ifndef RD_CPP_RDSYMMETRICCALL_H\n#define RD_CPP_RDSYMMETRICCALL_H\n\n#include \"task/RdCall.h\"\n#include \"task/RdEndpoint.h\""
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/task/RdTask.h",
    "chars": 2381,
    "preview": "#ifndef RD_CPP_RDTASK_H\n#define RD_CPP_RDTASK_H\n\n#include \"RdTaskImpl.h\"\n#include \"serialization/Polymorphic.h\"\n\n#includ"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/task/RdTaskImpl.h",
    "chars": 500,
    "preview": "#ifndef RD_CPP_RDTASKIMPL_H\n#define RD_CPP_RDTASKIMPL_H\n\n#include \"serialization/Polymorphic.h\"\n#include \"RdTaskResult.h"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/task/RdTaskResult.h",
    "chars": 4270,
    "preview": "#ifndef RD_CPP_RDTASKRESULT_H\n#define RD_CPP_RDTASKRESULT_H\n\n#include \"serialization/Polymorphic.h\"\n#include \"util/overl"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/task/WiredRdTask.h",
    "chars": 950,
    "preview": "#ifndef RD_CPP_WIREDRDTASK_H\n#define RD_CPP_WIREDRDTASK_H\n\n#include \"RdTask.h\"\n#include \"WiredRdTaskImpl.h\"\n#include \"ba"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/task/WiredRdTaskImpl.h",
    "chars": 1995,
    "preview": "#ifndef RD_CPP_WIREDRDTASKIMPL_H\n#define RD_CPP_WIREDRDTASKIMPL_H\n\n#include \"serialization/Polymorphic.h\"\n#include \"RdTa"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/util/framework_traits.h",
    "chars": 492,
    "preview": "#ifndef RD_CPP_FRAMEWORK_TRAITS_H\n#define RD_CPP_FRAMEWORK_TRAITS_H\n\n#include \"serialization/Polymorphic.h\"\n\n#include <u"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/util/guards.h",
    "chars": 449,
    "preview": "#ifndef RD_CPP_GUARDS_H\n#define RD_CPP_GUARDS_H\n\nnamespace rd\n{\nnamespace util\n{\ntemplate <typename T>\nclass increment_g"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/util/hashing.cpp",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/util/hashing.h",
    "chars": 1471,
    "preview": "#ifndef RD_CPP_HASHING_H\n#define RD_CPP_HASHING_H\n\n#include \"nonstd/string_view.hpp\"\n\n#include <cstdint>\n#include <cstdl"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/util/thread_util.cpp",
    "chars": 1250,
    "preview": "#include \"thread_util.h\"\n\n#ifdef _WIN32\n\n#include <windows.h>\nconst DWORD MS_VC_EXCEPTION = 0x406D1388;\n\n#pragma pack(pu"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/util/thread_util.h",
    "chars": 207,
    "preview": "#ifndef RD_CPP_THREAD_UTIL_H\n#define RD_CPP_THREAD_UTIL_H\n\n#include <thread>\n\nnamespace rd\n{\nnamespace util\n{\nvoid set_t"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/wire/ByteBufferAsyncProcessor.cpp",
    "chars": 6697,
    "preview": "#include \"ByteBufferAsyncProcessor.h\"\n\n#include \"util/guards.h\"\n#include <util/thread_util.h>\n\n#include \"spdlog/sinks/st"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/wire/ByteBufferAsyncProcessor.h",
    "chars": 2279,
    "preview": "#ifndef RD_CPP_BYTEBUFFERASYNCPROCESSOR_H\n#define RD_CPP_BYTEBUFFERASYNCPROCESSOR_H\n\n#if defined(_MSC_VER)\n#pragma warni"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/wire/PkgInputStream.cpp",
    "chars": 1294,
    "preview": "#define NOMINMAX\n\n#include \"PkgInputStream.h\"\n\n#include <algorithm>\n\nnamespace rd\n{\nvoid PkgInputStream::rewind()\n{\n\tbuf"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/wire/PkgInputStream.h",
    "chars": 958,
    "preview": "#ifndef RD_CPP_PKGINPUTSTREAM_H\n#define RD_CPP_PKGINPUTSTREAM_H\n\n#if defined(_MSC_VER)\n#pragma warning(push)\n#pragma war"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/wire/PumpScheduler.cpp",
    "chars": 1126,
    "preview": "#include \"wire/PumpScheduler.h\"\n\n#include \"util/core_util.h\"\n\nnamespace rd\n{\nnamespace test\n{\nnamespace util\n{\nPumpSched"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/wire/PumpScheduler.h",
    "chars": 1049,
    "preview": "#ifndef RD_CPP_PUMPSCHEDULER_H\n#define RD_CPP_PUMPSCHEDULER_H\n\n#if defined(_MSC_VER)\n#pragma warning(push)\n#pragma warni"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/wire/SocketWire.cpp",
    "chars": 19200,
    "preview": "#include \"wire/SocketWire.h\"\n\n#include <util/thread_util.h>\n\n#include \"spdlog/sinks/stdout_color_sinks.h\"\n\n#include <Sim"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/wire/SocketWire.h",
    "chars": 4782,
    "preview": "#ifndef RD_CPP_SOCKETWIRE_H\n#define RD_CPP_SOCKETWIRE_H\n\n#if defined(_MSC_VER)\n#pragma warning(push)\n#pragma warning(dis"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/wire/WireUtil.cpp",
    "chars": 540,
    "preview": "#include \"wire/WireUtil.h\"\n\n#include \"util/core_util.h\"\n\n#include \"PassiveSocket.h\"\n#include \"Host.h\"\n\n#include <utility"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/wire/WireUtil.h",
    "chars": 308,
    "preview": "#ifndef RD_CPP_WIREUTIL_H\n#define RD_CPP_WIREUTIL_H\n\n#include <cstdint>\n\n#include <rd_framework_export.h>\n\nnamespace rd\n"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_gen_cpp/src/RdTextBuffer.cpp",
    "chars": 26,
    "preview": "#include \"RdTextBuffer.h\"\n"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/src/rd_gen_cpp/src/RdTextBuffer.h",
    "chars": 154,
    "preview": "#ifndef RD_CPP_RDTEXTBUFFER_H\n#define RD_CPP_RDTEXTBUFFER_H\n\nnamespace rd\n{\nclass RdTextBuffer\n{\n};\n}\t // namespace rd\n\n"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/thirdparty/CTPL/LICENSE",
    "chars": 10737,
    "preview": "Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licens"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/thirdparty/CTPL/README.md",
    "chars": 2467,
    "preview": "CTPL\n====\n\nModern and efficient C++ Thread Pool Library\n\n\nA thread pool is a programming pattern for parallel execution "
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/thirdparty/CTPL/include/ctpl_stl.h",
    "chars": 10061,
    "preview": "/*********************************************************\n*\n*  Copyright (C) 2014 by Vitaliy Vitsentiy\n*\n*  Licensed un"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/thirdparty/clsocket/README",
    "chars": 7567,
    "preview": "------------------------------------------------------------------------------------------\n* History\n-------------------"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/thirdparty/clsocket/src/ActiveSocket.cpp",
    "chars": 10419,
    "preview": "/*---------------------------------------------------------------------------*/\n/*                                      "
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/thirdparty/clsocket/src/ActiveSocket.h",
    "chars": 4329,
    "preview": "/*---------------------------------------------------------------------------*/\n/*                                      "
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/thirdparty/clsocket/src/Host.h",
    "chars": 8624,
    "preview": "/*---------------------------------------------------------------------------*/\n/*                                      "
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/thirdparty/clsocket/src/PassiveSocket.cpp",
    "chars": 11980,
    "preview": "/*---------------------------------------------------------------------------*/\n/*                                      "
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/thirdparty/clsocket/src/PassiveSocket.h",
    "chars": 6794,
    "preview": "/*---------------------------------------------------------------------------*/\n/*                                      "
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/thirdparty/clsocket/src/SimpleSocket.cpp",
    "chars": 37200,
    "preview": "/*---------------------------------------------------------------------------*/\n/*                                      "
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/thirdparty/clsocket/src/SimpleSocket.h",
    "chars": 26601,
    "preview": "/*---------------------------------------------------------------------------*/\n/*                                      "
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/thirdparty/clsocket/src/StatTimer.h",
    "chars": 4224,
    "preview": "/*----------------------------------------------------------------------------*/\n/*                                     "
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/thirdparty/countdownlatch/LICENSE",
    "chars": 1081,
    "preview": "The MIT License (MIT)\n\nCopyright (c) 2016 Nipun Talukdar\n\nPermission is hereby granted, free of charge, to any person ob"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/thirdparty/countdownlatch/README.md",
    "chars": 1140,
    "preview": "CountdownLatch for C++ multi-threaded programming\n================================================\n\n**CountdownLatch in "
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/thirdparty/countdownlatch/countdownlatch.cpp",
    "chars": 718,
    "preview": "#include <chrono>\n#include \"countdownlatch.hpp\"\n\nclatch::countdownlatch::countdownlatch(uint32_t count) {\n   this->count"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/thirdparty/countdownlatch/countdownlatch.hpp",
    "chars": 1382,
    "preview": "#ifndef __COUNTDOWNLATCH_NIPUN__\n#define __COUNTDOWNLATCH_NIPUN__\n\n#include <cinttypes>\n#include <cstdint>\n#include <mut"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/thirdparty/optional/COPYING",
    "chars": 7048,
    "preview": "Creative Commons Legal Code\n\nCC0 1.0 Universal\n\n    CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE\n"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/thirdparty/optional/README.md",
    "chars": 4541,
    "preview": "# optional\nSingle header implementation of `std::optional` with functional-style extensions and support for references.\n"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/thirdparty/optional/tl/optional.hpp",
    "chars": 84021,
    "preview": "\n///\n// optional - An implementation of std::optional with extensions\n// Written in 2017 by Simon Brand (tartanllama@gma"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/thirdparty/ordered-map/LICENSE",
    "chars": 1063,
    "preview": "MIT License\n\nCopyright (c) 2017 Tessil\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof "
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/thirdparty/ordered-map/README.md",
    "chars": 11468,
    "preview": "[![Build Status](https://travis-ci.org/Tessil/ordered-map.svg?branch=master)](https://travis-ci.org/Tessil/ordered-map) "
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/thirdparty/ordered-map/include/tsl/ordered_hash.h",
    "chars": 51110,
    "preview": "/**\n * MIT License\n * \n * Copyright (c) 2017 Tessil\n * \n * Permission is hereby granted, free of charge, to any person o"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/thirdparty/ordered-map/include/tsl/ordered_map.h",
    "chars": 31267,
    "preview": "/**\n * MIT License\n * \n * Copyright (c) 2017 Tessil\n * \n * Permission is hereby granted, free of charge, to any person o"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/thirdparty/ordered-map/include/tsl/ordered_set.h",
    "chars": 25872,
    "preview": "/**\n * MIT License\n * \n * Copyright (c) 2017 Tessil\n * \n * Permission is hereby granted, free of charge, to any person o"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/thirdparty/spdlog/LICENSE",
    "chars": 1322,
    "preview": "The MIT License (MIT)\n\nCopyright (c) 2016 Gabi Melman.                                       \n\nPermission is hereby gran"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/thirdparty/spdlog/README.md",
    "chars": 15689,
    "preview": "# spdlog\n\nVery fast, header-only/compiled, C++ logging library. [![Build Status](https://app.travis-ci.com/gabime/spdlog"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/thirdparty/spdlog/cmake/ide.cmake",
    "chars": 1190,
    "preview": "# ---------------------------------------------------------------------------------------\n# IDE support for headers\n# --"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/thirdparty/spdlog/cmake/spdlog.pc.in",
    "chars": 376,
    "preview": "prefix=@CMAKE_INSTALL_PREFIX@\nexec_prefix=${prefix}\nincludedir=${prefix}/include\nlibdir=${exec_prefix}/@CMAKE_INSTALL_LI"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/thirdparty/spdlog/cmake/spdlogCPack.cmake",
    "chars": 2716,
    "preview": "set(CPACK_GENERATOR \"TGZ;ZIP\" CACHE STRING \"Semicolon separated list of generators\")\n\nset(CPACK_INCLUDE_TOPLEVEL_DIRECTO"
  },
  {
    "path": "src/cpp/RiderLink/Source/RD/thirdparty/spdlog/cmake/spdlogConfig.cmake.in",
    "chars": 530,
    "preview": "# Copyright(c) 2019 spdlog authors\n# Distributed under the MIT License (http://opensource.org/licenses/MIT)\n\n@PACKAGE_IN"
  }
]

// ... and 290 more files (download for full content)

About this extraction

This page contains the full source code of the JetBrains/UnrealLink GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 490 files (2.2 MB), approximately 607.1k tokens, and a symbol index with 1872 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!