Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Cleanup stream read method guards #288

Merged
merged 6 commits into from
Apr 21, 2019
Merged

Conversation

DanRStevens
Copy link
Member

@DanRStevens DanRStevens commented Mar 25, 2019

This is the read update corresponding to PR #287. Tagging Issue #278 as related. Tagging PR #281 as related for simplifying the template parameters.

There was one slight difference to the write case. I didn't collapse one of the string read methods into the generalized container form, since the string.data() method didn't have a non-const overload until C++17. Reference:
https://en.cppreference.com/w/cpp/string/basic_string/data

The current Linux flags are set for C++14. I'm uncertain if there are blocking issues with the Windows project, particularly regarding the Google Test unit test project. If it's fine to update to C++17, then we can collapse those two methods into one.

Matches style used for stream write code.
Guard against the container itself being trivial to avoid ambiguous
calls. This excludes `std::array`, which is served by the other method
taking trivial types. A trivial container of trivial types is itself
trivial.

Note: Technically, this should guard for types with `.data()` and
`.size()` members. Such members imply a contiguous container.
These methods are basically identical, and may be combined into a single
method at some point.
It could potentially be collapsed with the method above, but needs C++17
flags set to allow that.

Reference:
https://en.cppreference.com/w/cpp/string/basic_string/data
This can potentially handle the size prefix part of any container read,
including containers we don't yet support serialization for. Currently
we simply delegate for the details of reading the actual container
contents.
This is now served by the more general size prefixed container read
case.
@Brett208
Copy link
Member

If PR #290 is merged, this branch can use C++17 features for MSVC builds.

@DanRStevens
Copy link
Member Author

I just took another look at this. It should be fine to merge now.

Once we enable C++17 on all systems we could then remove the one largely redundant method. If we want to do the method removal as part of this PR, then we should wait until the other changes are merged first.

@Brett208
Copy link
Member

Unless we plan to update to requiring C++17 now on all Linux compilers, I would prefer merging and writing up an issue for later work. Better to close this branch out instead of letting it grow stale over time.

We could create a C++17 tag for issues as a reminder on which ones are waiting on C++17 as standard to complete.

@DanRStevens
Copy link
Member Author

Ok, very good suggestion. I wrote up an issue. I'll merge this now.

@DanRStevens DanRStevens merged commit b7397fe into master Apr 21, 2019
@DanRStevens DanRStevens deleted the cleanupStreamReadMethodGuards branch April 21, 2019 06:39
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants