iceoryx - true zero-copy inter-process-communication

Overview

iceoryx - true zero-copy inter-process-communication

Build & Test Integrationtests Gitter License Codecov Sanitize

Introduction

Great that you've made it to this little Eclipse project! Let's get you started by providing a quick background tour, introducing the project scope and all you need for installation and a first running example.

So first off: What is iceoryx?

iceoryx is an inter-process-communication (IPC) middleware for various operating systems (currently we support Linux, MacOS and QNX). It has its origins in the automotive industry, where large amounts of data have to be transferred between different processes when it comes to driver assistance or automated driving systems. However, the efficient communication mechanisms can also be applied to a wider range of use cases, e.g. in the field of robotics or game development.

iceoryx uses a true zero-copy, shared memory approach that allows to transfer data from publishers to subscribers without a single copy. This ensures data transmissions with constant latency, regardless of the size of the payload. For more information have a look at the 1000 words iceoryx introduction

You're right, middleware is a cluttered term and can somehow be all or nothing, so let's talk about the goals and non-goals of iceoryx.

It's all about the API?!

Don't get too frightened of the API when strolling through the codebase. Think of the untyped C++ and the C API as a "plumbing" one ("plumbing" as defined in Git, which means low-level). We're not using the "plumbing" APIs ourselves, but instead the typed C++ API. The normal use case is that iceoryx is integrated as high-performance IPC transport layer in a bigger framework with additional API layers. An example for such a "porcelain" API would be ROS 2. Others are listed in the next section.

You can find the full API documentation on 🌐 https://iceoryx.io.

Where is Eclipse iceoryx used?

Framework Description
ROS 2 Eclipse iceoryx can be used inside the Robot Operating System with rmw_iceoryx
eCAL Open-source framework from Continental AG supporting pub/sub and various message protocols
RTA-VRTE Adaptive AUTOSAR platform software framework for vehicle computer from ETAS GmbH
Cyclone DDS Performant and robust open-source DDS implementation maintained by ADLINK Technology Inc.
Apex.OS Safe and certified software framework for autonomous mobility systems from Apex.AI

Build and install

You can find the build and installation guidelines here.

Examples

After you've built all the necessary things, you can continue playing around with the examples.

Build and run in a Docker environment

If you want to avoid installing anything on your host machine but you have Docker installed, it is possible to use it to build and run iceoryx applications.

Please see the dedicated README.md for information on how to do this.

Documentation

Targeted quality levels & platforms

Quality level are 5 to 1+, where 1+ is highest level.

CMake project/target QNX Linux, Windows, MacOS Comment
iceoryx_hoofs 1+ 2
iceoryx_posh 1+, 2 2 Will be split into separate targets
iceoryx_binding_c 2 2
iceoryx_examples 5 5 All example code in this folder
iceoryx_dds 4 4
iceoryx_introspection 5 5
iceoryx_meta 5 5

Is something missing or you've got ideas for other nifty examples? Jump right away to the next section!

Contribute

Please refer to the CONTRIBUTING.md for a quick read-up about what to consider if you want to contribute.

Planned features

Get to know the upcoming features and the project scope in PLANNED_FEATURES.md.

Innovations enabled by iceoryx

Name Description Technologies
Larry.Robotics An iceoryx demonstrator for tinker, thinker and toddler Demonstrator
iceoryx-rs Experimental Rust wrapper for iceoryx Rust
IceRay An iceoryx introspection client written in Rust Rust

Governance & maintainers

Please have a look at the GOVERNANCE.md.

Issues
  • Interested in conanfile.py ?

    Interested in conanfile.py ?

    Hello iceoryx group,

    great work! never saw such impressive performance powered project. I am currently working on a conanfile.py (https://github.com/dotChris90/iceoryx/blob/master/conanfile.py) for iceoryx so that cross compilation and dependency management works better "out of the box" (plus was thinking that depending projects like eclipse DDS would get benefit from it).

    Today was first "try out how good it works" but the cmake build is very good and self explaining so was just some lines to add in conanfile and had first shoot.

    My question would be now if you guys interest in a conan package and would accept such pull requests (after finished my work) or if dependency / package management is not in focus of this project now (then i would maybe better contribute to conan-center).

    question tooling 
    opened by dotChris90 41
  • Reserved chunkinfo user payload header

    Reserved chunkinfo user payload header

    Brief feature description

    When sending a payload chunk via publishers sendChunk method a user can pass the payload memory pointer and it's size to transfer it with zero copy behavior to the subscribers side. If there is any additional content that needs to be transferred too (like counter, user timestamp, hash values ..) there is no option to apply this information additionally into the chunk header. So the only way to transport the payload data and some additional header information as single chunk is to do an extra memory copy in a new payload memory block before sending it as one chunk. So for this use case the amazing zero memory concept is broken.

    Possible solution

    Provide a reserved space in the ChunkInfo header to hold / transfer a user specific payload header that is not in the same linear memory like the payload data.


    edited by @elBoberido

    Progress Tracking

    • [x] Design Document
    • [x] Extend the current ChunkHeader and write test for the new functionality
    • [x] remove ChunkInfo and use the refactored ChunkHeader in the code base
    • extend the API to access the new functionality
      • [x] typed API
      • [x] untyped API
      • [x] C API
    • [x] restrict access to ChunkHeader members and hand out references instead of pointer
    • [x] documentation and examples
    • cleanup
      • [x] remove all TODOs
      • [x] remove chunk_mock_dds.hpp and user chunk_mock.hpp instead
      • [x] in order to reduce ambiguity don't use just payload but chunkPayload and userPayload. The chunkPayload consists of the customHeader/userHeader and userPayload
    enhancement 
    opened by rex-schilasky 34
  • Iox #285 added unit test for roudi memory block manager provider

    Iox #285 added unit test for roudi memory block manager provider

    Pre-Review Checklist for the PR Author

    1. [ ] Branch follows the naming format (iox-#123-this-is-a-branch)
    2. [ ] Commits messages are according to this guideline
      • [ ] Commit messages have the issue ID (iox-#123 commit text)
      • [ ] Commit messages are signed (git commit -s)
      • [ ] Commit author matches Eclipse Contributor Agreement (and ECA is signed)
    3. [ ] Update the PR title
      • Follow the same conventions as for commit messages
      • Link to the relevant issue
    4. [ ] Relevant issues are linked
    5. [ ] Add sensible notes for the reviewer
    6. [ ] All checks have passed
    7. [ ] Assign PR to reviewer

    Notes for Reviewer

    code contributed by @JimmyBch created draft PR as contributor has open points to discuss (commented code)

    Checklist for the PR Reviewer

    • [ ] Commits are properly organized and messages are according to the guideline
    • [x] Code according to our coding style and naming conventions
    • [x] Unit tests have been written for new behavior
    • [x] Public API changes are documented via doxygen
    • [x] Copyright owner are updated in the changed files
    • [ ] PR title describes the changes

    Post-review Checklist for the PR Author

    1. [ ] All open points are addressed and tracked via issues

    Post-review Checklist for the Eclipse Committer

    1. [ ] All checkboxes in the PR checklist are checked or crossed out
    2. [ ] Merge

    References

    • Partly closes #454
    test 
    opened by nihalchari 33
  • Iox #337 deprecate posix timer

    Iox #337 deprecate posix timer

    Pre-Review Checklist for the PR Author

    1. [x] Branch follows the naming format (iox-#123-this-is-a-branch)
    2. [x] Commits messages are according to this guideline
      • [x] Commit messages have the issue ID (iox-#123 commit text)
      • [x] Commit messages are signed (git commit -s)
      • [x] Commit author matches Eclipse Contributor Agreement (and ECA is signed)
    3. [x] Update the PR title
      • Follow the same conventions as for commit messages
      • Link to the relevant issue
    4. [x] Relevant issues are linked
    5. [x] Add sensible notes for the reviewer
    6. [x] All checks have passed
    7. [x] Assign PR to reviewer

    Notes for Reviewer

    code contributed by @shankar-bosch

    Checklist for the PR Reviewer

    • [x] Commits are properly organized and messages are according to the guideline
    • [x] Code according to our coding style and naming conventions
    • [x] Unit tests have been written for new behavior
    • [x] Public API changes are documented via doxygen
    • [x] Copyright owner are updated in the changed files
    • [x] PR title describes the changes

    Post-review Checklist for the PR Author

    1. [x] All open points are addressed and tracked via issues

    Post-review Checklist for the Eclipse Committer

    1. [x] All checkboxes in the PR checklist are checked or crossed out
    2. [x] Merge

    References

    • Partly closes #337
    enhancement 
    opened by nihalchari 30
  • service registry as a built-in topic

    service registry as a built-in topic

    Brief feature description

    The discovery requests from user side are currently transferred via the message queue connection. This has some drawbacks

    • The message queue is not only used for registration and creation of resources during startup but also during runtime
    • If an application polls the discovery information with a high frequency the message queue becomes a bottleneck
    • We have a message size limitation on the message queue or unix domain socket, i.e. we need some transport protocol to split the response to several messages if there are a lot services. Currently it is a limitation as we do not have such a protocol
    • The findService() is very close to AUTOSAR ara::com and maybe cannot be used in a reasonable way in other frameworks
    • If someone wants to use ara::com service discovery callbacks, having only a polling based interface is a big drawback

    Detailed information

    The proposal is to have a service registry that provides it's content as a built-in topic, similar to the introspection topics. Then a subscriber could be created to get the information either in a polling way or event-driven by using the subscriber in combination with a waitset. The service registry publisher would use a history with size 1. Then every subscriber gets the current state on subscribe if desired. By providing the full CaPro ID information and not only service and instance IDs, this built-in topic could also be used for non AUTOSAR use cases. With this approach having a large service registry is fine as we don't have to send the content over the message queue and it's distributed with iceoryx' finest true zero-copy. I guess we can then also get rid of getServiceRegistryChangeCounter() which smells like workaround

    Todo

    • [x] Create design decision document
    • [x] Introduce poor mans cxx::map (Will be done in #829)
    • [x] Refactor ServiceDescription
      • [x] Remove the two argument c'tor in ServiceDescription
      • [x] Remove three integers in ServiceDescription
      • [x] ~~Forbid creating Pub/Sub with ServiceDescription(AnyServiceString, AnyInstanceString, "foo") and forbid adding such a invalid ServiceDescription to the registry~~
      • [x] ~~Add ServiceDescriptionBuilder~~ Moved to #1141
    • [x] Refactor ServiceRegistry to use the whole ServiceDescription
    • [x] Error handling in ServiceDescription(const cxx::Serialization& serial) like client_options.cpp
    • [x] Create example for new user-facing DiscoveryInfo class and move getServiceRegistryChangeCounter, findService, ~~offerService and stopOfferService~~ to this class
      • [x] Extend icediscovery
      • [x] Write README.md for icediscovery
    • ~~[ ] Introduce new StatusPorts~~ Moved to #982
    • [ ] ~~Built-in topic for service registry based onBroadcastPorts~~ Moved to #1135
      • [ ] ~~User facing API~~
    • ~~[ ] Replace InterfacePorts with StatusPorts~~ Moved to #982
    • [ ] ~~Mapping to Autosar Adaptive and APIs to work on an Autosar service level~~ Moved to #1103
    • ~~[ ] Usage of #830~~
      • ~~[ ] Adaption of ServiceRegistry::add() (remove duplicate search)~~ (not needed, we basically have a multiset with counters)
    • [x] ServiceRegistry::remove() should use same algorithm as find() to locate the entry (and then remove it)

    Discussions:

    • [x] Consider ServiceRegistry::find("Foo", Wildcard, [] (auto& serviceDescription) { }) API
    • [x] Can ServiceDescription::isValid() be avoided?
    • [x] When ManyToManyPolicy is used, would a user be interested in the number of offers? This is stored in the ServiceRegistry as ServiceDescriptionEntry::referenceCounter but currently not passed up to the user API.
    • [ ] ~~Does the ServiceRegistry belong to roudi or runtime? Somehow, it sits in-between, currently it is in source/roudi/service_registry.cpp~~ Moved to #1200

    Stretch goals:

    • [ ] ~~Naming of the CaPro ID members, consider comment from @ithier~~ Moved to #1200
    • [ ] ~~Storage of IDs in service registry and ports (short IDs that are references to the string-based IDs, dictionary)~~ Moved to #1200
    • [ ] ~~Decision on whether to remove wildcard in Cyclone DDS gateway~~ Moved to #1200
    • [x] Check if FindServiceError::UNABLE_TO_WRITE_TO_ROUDI_CHANNEL can be removed
    • [x] Check if CaproMessageSubType can be removed
    enhancement 
    opened by budrus 29
  • compile error: duration.inl - duration literals are not found

    compile error: duration.inl - duration literals are not found

    seems like the duration literals are not resolved during compilation of iceoryx_hoofs/internal/units/duration.inl in vs

    e.g iceoryx_hoofs/internal/units/duration.inl(79,23): error C3861: '_ns': identifier not found

    they are defined later in the header (inline namespace duration_literals)

    bug 
    opened by niclar 22
  • popo/user_trigger.hpp:33:5: error: exception specification of explicitly defaulted default constructor does not match the calculated one

    popo/user_trigger.hpp:33:5: error: exception specification of explicitly defaulted default constructor does not match the calculated one

    Required information

    Operating system: Mac OS Mojave

    Compiler version: Apple clang version 11.0.0 (clang-1100.0.33.12) Target: x86_64-apple-darwin18.6.0

    Observed result or behaviour: iceoryx/iceoryx_posh/include/iceoryx_posh/popo/user_trigger.hpp:33:5: error: exception specification of explicitly defaulted default constructor does not match the calculated one UserTrigger() noexcept = default; ^ 1 error generated. gmake[2]: *** [posh/CMakeFiles/iceoryx_posh.dir/build.make:577: posh/CMakeFiles/iceoryx_posh.dir/source/popo/user_trigger.cpp.o] Error 1 gmake[1]: *** [CMakeFiles/Makefile2:384: posh/CMakeFiles/iceoryx_posh.dir/all] Error 2 gmake: *** [Makefile:172: all] Error 2

    Expected result or behaviour: no build error

    Conditions where it occurred / Performed steps: git commit id: commit f1c4b31c54cc7fccb352fc3cdda562d9a22fe638

    bug 
    opened by BH1SCW 22
  • Not able to compile for QNX

    Not able to compile for QNX

    Required information

    Operating system: Ubuntu 18.04 LTS

    Compiler version: QCC 5.4.0

    I am trying to build Iceoryx for QNX by sourcing QNX SDP 7.0 in my terminal, through the provided script and the toolchain file for x86_64. But I am getting the following error /home/indramani/iceoryx/iceoryx_hoofs/platform/qnx/source/grp.cpp:21:53: error: 'getgrouplist' was not declared in this scope

    bug 
    opened by Indra5196 18
  • Refine modern pub/sub API

    Refine modern pub/sub API

    Originally posted by @budrus in https://github.com/eclipse/iceoryx/pull/360#discussion_r535725529

    How do we prevent this? With the old API people were more aware that they should not copy pointers that are coming from the middleware. In ara::com it's a unique ptr to make this even harder. I guess our Sample is also just an advanced unique_ptr but when I look at this code I fear that people think they must call sample.get() to be able to work with the payload. But in fact get() is the most dangerous method.

    We need get for frameworks where you get a Sample from the iceoryx API and have to pass e.g. a void* to the next layer (like in ROS). Then this layer has to return the pointer and the sample must be released with the iceoryx API. How would this look like? @elBoberido @ithier

    • take a sample
    • get the raw pointer with sample.get()
    • release the sample for not releasing the chunk when it goes out of scope, sample.release()
    • pass the raw pointer to the next layer
    • something happens
    • raw pointer is returned from the next layer
    • create a Sample with the raw pointer
    • let the Sample go out of scope for releasing the chunk

    Shoud we make an example for this? This is a use case a lot people have. Would it be better to have a release() that releases the ownersip but additionally returns the pointer like in the STL and to remove the get() method? Having a get() that gives you a pointer to a shared memory chunk which is released when the Sample goes out of scope is a dangerous thing . The STL unique_ptr also has it but maybe people are more aware there

    Here in iceperf we want to copy the payload. How can we do something like auto receivedSample = *(static_cast<const PerfTopic*>(receivedChunk));?

    With the Sample class, the get method and the fact that the subscriber has no releaseChunk method any more, the lifetime and ownership question has some complexity. This must be well documented in the new API docu @elfenpiff @FerdinandSpitzschnueffler @MatthiasKillat

    To-do:

    • [x] Add offerAndSubscribeOnCreate to PublisherOptions and enable it as default (will close #575)
    • [x] Remove Sample from untyped API and make it feel similar to the C-API (releaseChunk called by user)
    • [x] Simplify the typed API, but not returning an expected but instead an optional and do the error handling for the user under the hood (fail fast & hard)
    • [x] ~~Rename CaPro strings and add terminology table in overview.md~~
    • [x] Create a follow up issue that covers open points
      • ~~define a payload_t or use void*?~~
      • using the header with the C API -> follow-up #585
      • [x ]add a releaseChunk to the untyped publisher?
    refactoring 
    opened by elBoberido 18
  • Sending dynamic data types

    Sending dynamic data types

    Brief feature description

    Dynamic containers like a std::vector, std::map, and std::list should be transmittable via shared memory without data copy.

    Data type wish list

    • std::vector
    • std::map

    Requirements

    • The data type should be able to grow dynamically and its size should not be determined on creation.

    A partial solution for this issue will come with issue #911

    At the moment the conclusion is that dynamic STL containers will most likely never be supported by iceoryx in a zero copy way.

    feature request 
    opened by elfenpiff 16
  • Iox #391 static memory alternative for std function

    Iox #391 static memory alternative for std function

    Pre-Review Checklist for the PR Author

    1. [x] Branch follows the naming format (iox-#123-this-is-a-branch)
    2. [x] Commits messages are according to this guideline
      • [x] Commit messages have the issue ID (iox-#123 commit text)
      • [x] Commit messages are signed (git commit -s)
      • [x] Commit author matches Eclipse Contributor Agreement (and ECA is signed)
    3. [x] Update the PR title
      • Follow the same conventions as for commit messages
      • Link to the relevant issue
    4. [x] Relevant issues are linked
    5. [x] Add sensible notes for the reviewer
    6. [x] All checks have passed
    7. [x] Assign PR to reviewer

    Notes for Reviewer

    Checklist for the PR Reviewer

    • [x] Commits are properly organized and messages are according to the guideline
    • [x] Code according to our coding style and naming conventions
    • [x] Unit tests have been written for new behavior
    • [x] Public API changes are documented via doxygen
    • [x] Copyright owner are updated in the changed files
    • [x] PR title describes the changes

    Post-review Checklist for the PR Author

    1. [x] All open points are addressed and tracked via issues

    Post-review Checklist for the Eclipse Committer

    1. [x] All checkboxes in the PR checklist are checked or crossed out
    2. [x] Merge

    References

    • Closes #391

    Summary

    Added a static storage alternative for std::function including tests. This is supposed to store any callable up to a given storage size. As is also the case for sd::function, it cannot e used in shared memory (this cannot be avoided due to the fact that pointers to e.g. free functions but also lambdas are stored which will usually not be valid in another process).

    The implementation uses cxx::function_ref, otherwise parts of those functionality would have been rewritten/duplicated. It is important to note that much of the complications arise due to the fact that information about the underlying stored type is lost but it still must be ensured that it is copied/moved properly (according to RAII). Naturally these problems do NOT arise when only a reference is stored (as in function_ref).

    Fixed an issue that function_ref was not constructible from function pointers of free functions (only function names, but those are not function pointers but are converted to them). There is still an open point of a conversion from something potentially not convertible to a void pointer in the function_ref ctor (existed before as well, as it would take a universal reference to anything callable). For function_pointers this is compliant with the POSIX standard, but in general it is not (function pointers cannot be converted to void pointers in general).

    This requires some further investigation. A potential fix could be added here as well.

    enhancement 
    opened by MatthiasKillat 16
  • Iox-#1345 Refactor logger [Stacked PR 1]

    Iox-#1345 Refactor logger [Stacked PR 1]

    Pre-Review Checklist for the PR Author

    1. [ ] Code follows the coding style of CONTRIBUTING.md
    2. [ ] Tests follow the best practice for testing
    3. [ ] Changelog updated in the unreleased section including API breaking changes
    4. [ ] Branch follows the naming format (iox-123-this-is-a-branch)
    5. [ ] Commits messages are according to this guideline
      • [ ] Commit messages have the issue ID (iox-#123 commit text)
      • [ ] Commit messages are signed (git commit -s)
      • [ ] Commit author matches Eclipse Contributor Agreement (and ECA is signed)
    6. [ ] Update the PR title
      • Follow the same conventions as for commit messages
      • Link to the relevant issue
    7. [ ] Relevant issues are linked
    8. [ ] Add sensible notes for the reviewer
    9. [ ] All checks have passed (except task-list-completed)
    10. [ ] All touched (C/C++) source code files are added to ./clang-tidy-diff-scans.txt
    11. [ ] Assign PR to reviewer

    Notes for Reviewer

    Checklist for the PR Reviewer

    • [ ] Commits are properly organized and messages are according to the guideline
    • [ ] Code according to our coding style and naming conventions
    • [ ] Unit tests have been written for new behavior
    • [ ] Public API changes are documented via doxygen
    • [ ] Copyright owner are updated in the changed files
    • [ ] All touched (C/C++) source code files have been added to ./clang-tidy-diff-scans.txt
    • [ ] PR title describes the changes

    Post-review Checklist for the PR Author

    1. [ ] All open points are addressed and tracked via issues

    References

    • Closes TBD
    refactoring 
    opened by elBoberido 1
  • iox-#1564 Move DDS gateway

    iox-#1564 Move DDS gateway

    Pre-Review Checklist for the PR Author

    1. [x] Code follows the coding style of CONTRIBUTING.md
    2. [x] Tests follow the best practice for testing
    3. [x] Changelog updated in the unreleased section including API breaking changes
    4. [x] Branch follows the naming format (iox-123-this-is-a-branch)
    5. [x] Commits messages are according to this guideline
      • [x] Commit messages have the issue ID (iox-#123 commit text)
      • [x] Commit messages are signed (git commit -s)
      • [x] Commit author matches Eclipse Contributor Agreement (and ECA is signed)
    6. [x] Update the PR title
      • Follow the same conventions as for commit messages
      • Link to the relevant issue
    7. [x] Relevant issues are linked
    8. [x] Add sensible notes for the reviewer
    9. [x] All checks have passed (except task-list-completed)
    10. [x] All touched (C/C++) source code files are added to ./clang-tidy-diff-scans.txt
    11. [x] Assign PR to reviewer

    Notes for Reviewer

    Checklist for the PR Reviewer

    • [x] Commits are properly organized and messages are according to the guideline
    • [x] Code according to our coding style and naming conventions
    • [x] Unit tests have been written for new behavior
    • [x] Public API changes are documented via doxygen
    • [x] Copyright owner are updated in the changed files
    • [x] All touched (C/C++) source code files have been added to ./clang-tidy-diff-scans.txt
    • [x] PR title describes the changes

    Post-review Checklist for the PR Author

    1. [x] All open points are addressed and tracked via issues

    References

    • Closes #1564
    refactoring 
    opened by mossmaurice 2
  • Move Cyclone DDS Gateway to Separate Repository

    Move Cyclone DDS Gateway to Separate Repository

    Brief feature description

    The Cyclone DDS Gateway is not a first-class citizen and therefore shall be moved to a separate repository.

    Detailed information

    • Pro:

      • Independently maintainable from iceoryx core
      • Leading to shorter release cycles of iceoryx core
        • DDS Gateway can stay at a older version if no one in the community request an update
    • Con:

      • More cumbersome handling due to increased number of repositories

    References

    • Comes from #590
    refactoring 
    opened by mossmaurice 0
  • Cleanup helplets

    Cleanup helplets

    Brief feature description

    The cxx/helplets.hpp contains many unrelated or even unused code.

    Detailed information

    The unused code should be removed and at least functions which can be grouped together could be moved to a separate file

    Tasks

    • [x] remove functions which are unused or only used in one location
    • [ ] move function groups to a separate file when it makes sense
    refactoring technical debt globex 
    opened by elBoberido 0
  • Enable `Wsign-compare` compiler warning in tests

    Enable `Wsign-compare` compiler warning in tests

    Brief feature description

    Currently the test code in posh and hoofs has certain cases where int types with a wrong sign are compared. By enabling the compiler warning we can get rid of them.

    • [ ] Remove set(TEST_CXX_FLAGS -Wno-sign-compare) in CMakeLists.txt files from iceoryx posh and hoofs test folder
    • [ ] Add -Wsign-compare to the ICEORYX_C_WARNINGS in IceoryxPlatform.cmake
    • [ ] Fix all warnings

    Acceptance criteria:

    • [ ] BUILD_STRICT Mode does not fail when building a complete iceoryx
    good first issue refactoring test 
    opened by dkroenke 0
  • iox-#1554 Add `Arithmetic` and `{In,De}crementable` to `NewType`

    iox-#1554 Add `Arithmetic` and `{In,De}crementable` to `NewType`

    Pre-Review Checklist for the PR Author

    1. [x] Code follows the coding style of CONTRIBUTING.md
    2. [x] Tests follow the best practice for testing
    3. [x] Changelog updated in the unreleased section including API breaking changes
    4. [x] Branch follows the naming format (iox-123-this-is-a-branch)
    5. [x] Commits messages are according to this guideline
      • [x] Commit messages have the issue ID (iox-#123 commit text)
      • [x] Commit messages are signed (git commit -s)
      • [x] Commit author matches Eclipse Contributor Agreement (and ECA is signed)
    6. [x] Update the PR title
      • Follow the same conventions as for commit messages
      • Link to the relevant issue
    7. [x] Relevant issues are linked
    8. [x] Add sensible notes for the reviewer
    9. [x] All checks have passed (except task-list-completed)
    10. [ ] All touched (C/C++) source code files are added to ./clang-tidy-diff-scans.txt
    11. [x] Assign PR to reviewer

    Notes for Reviewer

    • Extend NewType pattern with Arithmetic, Incrementable and Decrementable

    Checklist for the PR Reviewer

    • [ ] Commits are properly organized and messages are according to the guideline
    • [ ] Code according to our coding style and naming conventions
    • [ ] Unit tests have been written for new behavior
      • [ ] Each unit test case has a unique UUID
    • [ ] Public API changes are documented via doxygen
    • [ ] Copyright owner are updated in the changed files
    • [ ] All touched (C/C++) source code files have been added to ./clang-tidy-diff-scans.txt
    • [ ] PR title describes the changes

    Post-review Checklist for the PR Author

    1. [ ] All open points are addressed and tracked via issues

    References

    • Closes #1554 (partly)
    enhancement 
    opened by mossmaurice 1
Releases(v2.0.2)
  • v2.0.2(Apr 19, 2022)

  • v1.0.3(Apr 20, 2022)

    This is the third bugfix release for Eclipse iceoryx 1.0.0 (Almond). We added several patches.

    Compared to the feature content of the previous release, the following bug tickets were resolved:

    • CMake warning: empty command-line option https://github.com/eclipse-iceoryx/iceoryx/issues/1311
    • Double build issue in ROS2 build farm https://github.com/eclipse-iceoryx/iceoryx/issues/1323
    Source code(tar.gz)
    Source code(zip)
  • v2.0.1(Apr 4, 2022)

    This is the first bugfix release for Eclipse iceoryx 2.0.0 (Blueberry). Compared to the feature content of the previous release, the following bug tickets were resolved:

    • CMake warning: empty command-line option #1311 thanks to @clalancette
    • iox-#743 Fixes to make docs exportable #1289
    • Don't exclude implementations of public classes in Doxygen #1293

    Full Changelog

    Source code(tar.gz)
    Source code(zip)
  • v2.0.0(Mar 14, 2022)

    Major release that closes the remaining gaps to make iceoryx feature complete for being used as an inter-process-communication binding in AUTOSAR Adaptive. This includes request/response communication and a complete refactoring of the service discovery capabilities

    • request/response communication So far iceoryx only supported publish/subscribe communication. Now also request/response is supported (aka "services" in ROS 2 and aka "methods" in ara::com and SOME/IP) #27
    • Refactoring of service discovery The iceoryx runtime already supported service discovery. But the functionality was limited. Now it is more flexible and supports event-driven discovery #415
    • Windows and FreeBSD support After Linux, QNX and MacOS, iceoryx now also supports Windows and FreeBSD #33 #1054
    • Clang-Tidy support The Clang-Tidy linter runs as github action #299

    For more details you can check the v2.0.0 changelog

    Source code(tar.gz)
    Source code(zip)
  • v1.0.2(Apr 20, 2022)

    This is the second bugfix release for Eclipse iceoryx 1.0.0 (Almond). We added support for GCC 11.2 used in Ubuntu Jammy.

    Compared to the feature content of the previous release, the following bug ticket was resolved:

    • Backporting Bugfixes for GCC 11https://github.com/eclipse-iceoryx/iceoryx/issues/1092
    Source code(tar.gz)
    Source code(zip)
  • v1.0.1(Jun 16, 2021)

    This is the first bugfix release for Eclipse iceoryx 1.0.0 (Almond). We made minor changes in the documentation and added several patches.

    Compared to the feature content of the previous release, the following bug tickets were resolved:

    • Github CI Integrationtests failing #825
    • Segmentation Fault in FileLock #808
    • Cpptoml cannot be build due to failing examples #791
    • Missing template parameter for user-header in typed C++ API #768
    • Fix issues with generating website documentation #743
    • Starting an application after RouDi was terminated floods the cmd line with error messages #654
    Source code(tar.gz)
    Source code(zip)
  • v1.0.0(Apr 15, 2021)

    New features:

    • C API So far iceoryx only had a C++ API. With the C API, we want to support easier integration in frameworks written in C (e.g. ROS rmw layer or Cyclone DDS) and also enable other language bindings like Python that could be based on the C API
    • Support for n:m publish/subscribe communication So far iceoryx only supported 1:m communication. I.e. one publisher can send data to several subscribers. But a subscriber could not receive data from more than one publisher. With the n:m feature this limitation is resolved
    • MacOS support So far iceoryx supported Linux and QNX as underlying operating systems. We now introduce a platform abstraction layer and support for MacOS
    • Refactoring of public API iceoryx is normally used within a bigger framework that provides user APIs. To better support users that are using iceoryx directly and to further simplify the integration of iceoryx in other frameworks, we do a refactoring of the API
    • Bridge to Eclipse Cyclone DDS iceoryx is a technology for inter-process-communication. It has to be extended when it is used in a framework that shall also support network communication. We have building blocks that allow developing bridges to protocols for network communication. The first bridge we implemented is the one to Eclipse Cyclone DDS
    Source code(tar.gz)
    Source code(zip)
  • v0.99.2(Apr 6, 2021)

  • v0.90.0(Dec 22, 2020)

    This is a pre-release for our first long-term-support release that is coming soon (will be iceoryx_1.0.0).

    We had a major refactoring of the iceoryx communication infrastructure which allows to do n:m communication now and provides a flexible history functionality for late joining subscribers.

    This new infrastructure is also made to support request/response communication as a next step (#27). The C++ API has been completely reworked and a new C API has been added.

    We will give the API draft some weeks for finalizing the features and to incorporate feedback from the community. There's an issue in which we collect and discuss the final modifications (#408).

    Major new features:

    • Complete refactoring of publishers and subscribers from shared memory data structures to user APIs, #252
    • First versions of new APIs for C++ and C, #252
    • n:m publish/subscribe communication now possible, #25
    • First version of a DDS gateway. Cyclone DDS already integrated, FastDDS on it's way, #64, #65
    • New github actions for Mac OS and colcon build #175, #276. #328

    Note: QNX build was not tested.

    Source code(tar.gz)
    Source code(zip)
  • v0.17.0(Aug 27, 2020)

    Packages:

    • iceoryx_posh (Quality level 4)
    • iceoryx_utils (Quality level 4)
    • iceoryx_examples (Quality level 5)

    Major new features:

    • MacOS support #32
    • Major RouDi refactorings #70 #59 #78
    • Preparations for new iceoryx API #25

    Major bugfixes:

    • POSIX timer improvements #167 #120
    • Roudi MessageQueue thread startup #171
    • Destructor fix MessageQueue and UnixDomainSocket #150
    • RouDi ressource clean-up #113
    Source code(tar.gz)
    Source code(zip)
  • v0.16.1(Mar 2, 2020)

    Packages:

    • POSH (POSIX Shared Memory)
    • Utils
    • Iceoryx examples

    Features:

    • Capability to cleanup shared memory resources during process lifetime #51

    Bugfixes:

    • compile error with clang #43

    Known limitations:

    • RouDi --version shows 0.16.0.1 instead of 0.16.1
    Source code(tar.gz)
    Source code(zip)
  • v0.16.0(Dec 16, 2019)

    Packages:

    • POSH (POSIX Shared Memory)
    • Utils
    • Iceoryx examples

    Features:

    • Introspection client for live debugging of iceoryx #21
    • Flexible mapping of shared memory in virtual address spaces #19
    • Performance test to measure inter-process latency #17
    • Docker build #15 (Thanks to @Mr-Slippery )

    Bugfixes:

    • Payload size not updated by allocateChunk #10
    • Failure in runnable creation #23
    Source code(tar.gz)
    Source code(zip)
  • v0.15.0(Oct 28, 2019)

    Initial iceoryx release

    Packages:

    • POSH (POSIX Shared Memory)
    • Utils
    • Iceoryx examples

    Two issues resolved:

    • Typos in documentation #3 (https://github.com/eclipse/iceoryx/issues/3)
    • Compilation error with GCC 9.1.0 #1 (https://github.com/eclipse/iceoryx/issues/1)
    Source code(tar.gz)
    Source code(zip)
Implementation of System V shared memory (a type of inter process communication) in xv6 operating system.

NOTE: we have stopped maintaining the x86 version of xv6, and switched our efforts to the RISC-V version (https://github.com/mit-pdos/xv6-riscv.git)

Viraj Jadhav 5 Feb 21, 2022
Inter-process communication library to enable allocation between processes/threads and send/receive of allocated regions between producers/consumer processes or threads using this ipc buffer.

This is a relatively simple IPC buffer that allows multiple processes and threads to share a dynamic heap allocator, designate "channels" between processes, and share that memory between producer/consumer pairs on those channels.

RaftLib 7 May 24, 2022
This is a study on how to do create a queue via IPC (inter-process communication)

IPC queue This is a study on how to do create a queue via IPC (inter-process communication). Please take a look at the examples of producer and consum

Tarcísio Zotelli Ferraz 2 Jan 10, 2022
"Zero-copy" Linux screen capture plugin for OBS that uses libdrm and dmabuf

linux-kmsgrab plugin for OBS Introduction This plugin is a proof-of-concept libdrm-based screen capture for OBS. It uses DMA-BUF to import CRTC frameb

Ivan Avdeev 51 Jun 19, 2022
Cista is a simple, high-performance, zero-copy C++ serialization & reflection library.

Simple C++ Serialization & Reflection. Cista++ is a simple, open source (MIT license) C++17 compatible way of (de-)serializing C++ data structures. Si

Felix Gündling 926 Aug 8, 2022
The C++ Core Guidelines are a set of tried-and-true guidelines, rules, and best practices about coding in C++

The C++ Core Guidelines are a collaborative effort led by Bjarne Stroustrup, much like the C++ language itself. They are the result of many person-years of discussion and design across a number of organizations. Their design encourages general applicability and broad adoption but they can be freely copied and modified to meet your organization's needs.

Standard C++ Foundation 35k Aug 8, 2022
Table maker, true color, nested table, unicode, xterm & markdown syntax, ...

tabulate Source for the above image can be found here Table of Contents tabulate Table of Contents Quick Start Formatting Options Word Wrapping Font A

Kiran Nowak 8 Jul 31, 2022
PikaScript is an ultra-lightweight Python engine with zero dependencies and zero-configuration, that can run with 4KB of RAM (such as STM32G030C8 and STM32F103C8), and is very easy to deploy and expand.

PikaScript 中文页| Star please~ 1. Abstract PikaScript is an ultra-lightweight Python engine with zero dependencies and zero-configuration, that can run

Lyon 814 Aug 9, 2022
oZKS (Ordered Zero-Knowledge Set) is a library that provides an implementation of an Ordered (and Append Only) Zero-Knowledge Set.

Ordered Zero-Knowledge Set - oZKS Introduction oZKS is a library that provides an implementation of an Ordered (and Append Only) Zero Knowledge Set. A

Microsoft 8 Aug 10, 2022
Embed read-only filesystems into any C++11 program w. a single header, zero dependencies and zero modifications to your code

c-embed Embed read-only filesystems into any C++11 program w. a single header, zero dependencies and zero modifications to your code. Usage c-embed al

Nick McDonald 5 Jun 24, 2022
CredBandit - Proof of concept Beacon Object File (BOF) that uses static x64 syscalls to perform a complete in memory dump of a process and send that back through your already existing Beacon communication channel

CredBandit CredBandit is a proof of concept Beacon Object File (BOF) that uses static x64 syscalls to perform a complete in memory dump of a process a

anthemtotheego 161 Aug 5, 2022
Stealthy way to hijack the existing game process handle within the game launcher (currently supports Steam and Battle.net). Achieve external game process read/write with minimum footprint.

Launcher Abuser Stealthy way to hijack the existing game process handle within the game launcher (currently supports Steam and Battle.net). Achieve ex

Ricardo Nacif 76 Jul 28, 2022
Process Ghosting - a PE injection technique, similar to Process Doppelgänging, but using a delete-pending file instead of a transacted file

Process Ghosting This is my implementation of the technique presented by Gabriel Landau: https://www.elastic.co/blog/process-ghosting-a-new-executable

hasherezade 470 Aug 7, 2022
EarlyBird process hollowing technique (BOF) - Spawns a process in a suspended state, inject shellcode, hijack main thread with APC, and execute shellcode

HOLLOW - Cobalt Strike BOF Authors: Bobby Cooke (@0xBoku) Justin Hamilton (@JTHam0) Octavio Paguaga (@OakTree__) Matt Kingstone (@n00bRage) Beacon Obj

Bobby Cooke 190 Jul 27, 2022
ByteCopy , or BCP, intends to copy files accurately (down to the bytes) in a simple , safe and efficient manner.

ByteCopy v3.6 About ByteCopy , or BCP, intends to copy files accurately (down to the bytes) in a simple , safe and efficient manner. It's functionalit

A.P. Jo. 16 Jun 22, 2022
CLIp is a clipboard emulator for a command line interface written in 100% standard C only. Pipe to it to copy, pipe from it to paste.

CLIp v2 About CLIp is a powerful yet easy to use and minimal clipboard manager for a command line environment, with no dependencies or bloat. Usage Sy

A.P. Jo. 12 Sep 18, 2021
Use to copy a file from an NTFS partitioned volume by reading the raw volume and parsing the NTFS structures.

ntfsDump Use to copy a file from an NTFS partitioned volume by reading the raw volume and parsing the NTFS structures. Similar to https://github.com/P

null 41 Jul 17, 2022
Fast unidirectional synchronization - make or efficiently update a copy of a database, without slow dumping & reloading

Fast unidirectional synchronization - make or efficiently update a copy of a database, without slow dumping & reloading

Will Bryant 263 Jul 18, 2022
Part copy from the Google Code repository by Shiru, part fork of SNES Game Sound System by Shiru

Part copy from the Google Code repository by Shiru, part fork of SNES Game Sound System by Shiru

null 4 Dec 10, 2021
This project is a copy of the original printf function of C langage.

ft_printf This project is a copy of the original printf function of C langage. Ft_printf (42cursus) 2021-2022 Actual Status : finished. Result : 100%

NABIL ATTIA 2 Dec 11, 2021
DO NOT DIRECTLY COPY&SUBMIT THANK YOU

GDUT Programming Project (2021 fall semester) Sorry for no annotations because my friends ask me for uploading this and I have no time to write them.

null 2 Jun 16, 2022
Clip - Cross-platform C++ library to copy/paste clipboard content

Clip Library Copyright (c) 2015-2021 David Capello Library to copy/retrieve content to/from the clipboard/pasteboard. Features Available features on W

Aseprite 15 Jun 18, 2022
Short copy-pasteable CMake snippets ::: ${✂️}

CMake Snippets ${✂️} Short copy-pasteable "Modern" CMake snippets. These snippets are not comprehensive and are not a replacement for documentation. U

Adi Shavit 48 Jul 11, 2022
I was tired of copy-pasting the same boilerplate code over and over across my projects.

Gui Since I was tired of copy-pasting the same boilerplate code over and over across my projects, I decided to make this wrapper that actually also ad

Simone Coco 5 Jan 10, 2022
Highly efficent, caching, copy-on-write lua vector math library

lua-vec Table constructions in Lua are expensive, creating and destroying thousands of "vector" tables frame to frame in an engine can cause serious p

Dale Weiler 4 Jul 23, 2022
Optimized primitives for collective multi-GPU communication

NCCL Optimized primitives for inter-GPU communication. Introduction NCCL (pronounced "Nickel") is a stand-alone library of standard communication rout

NVIDIA Corporation 1.8k Aug 4, 2022
eCAL - enhanced Communication Abstraction Layer

eCAL - enhanced Communication Abstraction Layer Copyright (c) 2020, Continental Corporation. ?? http://ecal.io License Build States Preface The enhanc

Continental 1 Aug 1, 2022
The C++ REST SDK is a Microsoft project for cloud-based client-server communication in native code using a modern asynchronous C++ API design. This project aims to help C++ developers connect to and interact with services.

Welcome! The C++ REST SDK is a Microsoft project for cloud-based client-server communication in native code using a modern asynchronous C++ API design

Microsoft 7k Aug 6, 2022
The C++ REST SDK is a Microsoft project for cloud-based client-server communication in native code using a modern asynchronous C++ API design. This project aims to help C++ developers connect to and interact with services.

Welcome! The C++ REST SDK is a Microsoft project for cloud-based client-server communication in native code using a modern asynchronous C++ API design

Microsoft 7k Aug 8, 2022