Comments (6)
template <typename D>
struct consume_Windows_Foundation_IMemoryBufferReference
{
/* existing code unchanged */
auto view() const
{
uint8_t* data{};
uint32_t capacity{};
check_hresult(static_cast<D const&>(*this).template as<IMemoryBufferByteAccess>()->GetBuffer(&data, &capacity));
return array_view(data, capacity);
}
};
template <typename D>
struct consume_Windows_Storage_Streams_IBuffer
{
/* existing code unchanged */
auto view() const
{
uint8_t* data{};
check_hresult(static_cast<D const&>(*this).template as<IBufferByteAccess>()->Buffer(&data));
return array_view(data, Length());
}
};
Now you can write
IBuffer buffer = get_some_buffer_from_somewhere();
auto view = buffer.view(); // returns an array_view<uint8_t>
IMemoryBufferReference ref = memorybuffer.CreateReference();
auto view = ref.view(); // returns an array_view<uint8_t>
This is much safer than using data()
, which gives you a pointer to the start of the data but no information about how much data there is.
from wil.
I've tagged a few project maintainers. If one of them is available to offer guidance and mentorship for this issue, they will reach out according to the contributing guide to discuss and agree on an approach.
@microsoft/cppwinrt-maintainers
from wil.
@JaiganeshKumaran can you write a little sample code showing what you'd like to see?
from wil.
Not really a fan of having a separate view
member function - it is not how the standard library does things. An implicit conversion operator also has the advantage of passing an IBuffer
directly to a function taking array_view<uint8_t const>
(pass-array in WinRT). Now for safety, the rvalue-qualified conversion operator should be deleted. This does, however, prevent some valid code eg: FunctionTakingArrayView(FunctionReturningBuffer())
.
Another thing to consider is allowing to take a std::span<std::byte>
from buffers, in addition to array_view/span<uint8_t>
.
from wil.
I don't think it should be deleted, as you've shown there are valid usages of r-values.
from wil.
If the operator is explicit, then it actually gets worse because you have to perform the wordy conversion explicitly.
- With explicit conversion:
FunctionTakingArrayView(array_view<uint8_t>(FunctionReturningBuffer()))
. (You don't get any help from CTAD here.FunctionTakingArrayView(array_view(FunctionReturningBuffer()))
does not compile.) - With
view
member:FunctionTakingArrayView(FunctionReturningBuffer().view()))
.
The explicit conversion from hstring
to wstring_view
suffers from this same problem.
from wil.
Related Issues (20)
- Add support for different inputs to wil::reg::set_value_binary HOT 3
- Add a typedef for wil::unique_wdf_any<WDFQUEUE>? HOT 1
- Async cancellation bridge between coroutine and synchronous code HOT 2
- Add a helper to support map semantics on a constexpr std::array HOT 2
- wil::com_task does not propagate thread-local restricted error information across thread boundaries
- registry enumeration has a bug with the key name field size and m_name_length getting out of sync.
- clang-format instructions are incomplete HOT 1
- Return failed HRESULT, log failure but don't send telemetry HOT 1
- Standard facility to convert between ANSI and UNICODE. Similar to ATL::CA2W and ATL::CW2A HOT 2
- WI_FAIL_FAST_ASSERT missing semicolon HOT 1
- [prefast:Warning] C26495 wil::details::folder_change_reader_state::{ctor} HOT 1
- [prefast:Warning] C6387 wil::details::ProcessHeapAlloc HOT 1
- Accessing 32-bit registry view from 64-bit process
- Feature request: Add functions to enumerate Toolhelp32Snapshot
- Helpers for implementing Out Of Proc COM server in cppwinrt, without WRL
- key_iterator_data string corruption HOT 2
- CreateFileW helpers are marked noexcept but throw HOT 3
- try_copy_to should be noexcept?
- Compilation error with Microsoft.Windows.ImplementationLibrary.1.0.240122.1 HOT 2
- Output Stream for OutputDebugString
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from wil.