PLCnext API Documentation 25.0.2.69
IoBuffer.hpp
1
2//
3// Copyright Phoenix Contact GmbH & Co. KG
4//
6#pragma once
8#include "Arp/System/Core/PimplPtr.hxx"
9#include "Arp/System/Core/Endianness.hpp"
10#include <memory>
11
12// forwards
13namespace Arp::Plc::Commons::Internal::Gds::Buffer
14{
15class IGdsBuffer;
16} // end of namespace Arp::Plc::Commons::Internal::Gds::Buffer
17
18namespace Arp::Io::Commons
19{
20
25class ARP_EXPORT IoBuffer
26{
27public: // Impl forward declaration
28 class Impl;
29
30public: // usings
31 using Ptr = std::shared_ptr<IoBuffer>;
32 using IGdsBuffer = Arp::Plc::Commons::Internal::Gds::Buffer::IGdsBuffer;
33 using IGdsBufferPtr = std::shared_ptr<IGdsBuffer>;
34
35public: // canonical construction/destruction/assignment
36 IoBuffer(const IoBuffer& arg) = delete;
37 IoBuffer(IoBuffer&& arg)noexcept;
38 IoBuffer& operator=(const IoBuffer& arg) = delete;
39 IoBuffer& operator=(IoBuffer&& arg)noexcept;
40 ~IoBuffer(void);
41
42public: // construction
43 explicit IoBuffer(IGdsBufferPtr gdsBufferPtr);
44
45public: // setter/getter operations
46 size_t GetSize(void) const;
47 Endianness GetEndianness() const;
48 void SetDataValid(bool isValid = true);
49
50public: // operations
51 bool BeginRead(byte*& currentReadData);
52 void EndRead(void);
53 void BeginWrite(byte*& currentWriteData);
54 void EndWrite(bool isValid = true);
55
56public: // Impl operations
57 Impl& GetImpl(void);
58 const Impl& GetImpl(void)const;
59
60private: // Impl usings
61 using Pimpl = PimplPtr<Impl>;
62
63private: // Impl fields
64 Pimpl pimpl;
65};
66
67} // end of namespace Arp::Io::Commons
Adapter class to implement PImpl idiom.
Definition: PimplPtr.hxx:15
This class is used to get access to buffer memory
Definition: IoBuffer.hpp:26
IoBuffer(IoBuffer &&arg) noexcept
Default move constructor.
~IoBuffer(void)
Default destructor.
IoBuffer & operator=(IoBuffer &&arg) noexcept
Default move-assignment operator.
Namespace for interface types of the IO domain