NeKernel dev
Loading...
Searching...
No Matches
IO.h
Go to the documentation of this file.
1/* -------------------------------------------
2
3 Copyright (C) 2024-2025, Amlal El Mahrouss, all rights reserved.
4
5------------------------------------------- */
6
7#pragma once
8
9#include <ArchKit/ArchKit.h>
10#include <NeKit/Array.h>
11#include <NeKit/Defines.h>
12#include <NeKit/Ref.h>
13
14namespace Kernel {
15template <SizeT Sz>
16class IOArray final {
17 public:
18 IOArray() = delete;
19
20 IOArray(nullPtr) = delete;
21
22 explicit IOArray(Array<UShort, Sz>& ports) : fPorts(ports) {}
23
25
26 IOArray& operator=(const IOArray&) = default;
27
28 IOArray(const IOArray&) = default;
29
30 operator bool() { return !fPorts.Empty(); }
31
32 public:
33 template <typename T>
34 T In(SizeT index);
35
36 template <typename T>
37 void Out(SizeT index, T value);
38
39 private:
41};
42
43inline constexpr UInt16 kMaxPorts = 16;
44
46
47template <SizeT Sz>
50
51 for (UShort i = 0; i < Sz; ++i) {
52 ports[i] = base + i;
53 }
54
55 return ports;
56}
57} // namespace Kernel
58
59#ifdef __NE_AMD64__
61#else
62#error Please provide platform specific code for the I/O
63#endif // ifdef __NE_AMD64__
Definition Array.h:15
Definition IO.h:16
IOArray & operator=(const IOArray &)=default
IOArray()=delete
IOArray(nullPtr)=delete
Array< UShort, Sz > fPorts
Definition IO.h:40
T In(SizeT index)
Definition IOArray+AMD64.inl:18
IOArray(Array< UShort, Sz > &ports)
Definition IO.h:22
void Out(SizeT index, T value)
Definition IOArray+AMD64.inl:35
IOArray(const IOArray &)=default
~IOArray()
Definition IO.h:24
USER_PROCESS inline definitions.
Definition Qr.h:793
constexpr UInt16 kMaxPorts
Definition IO.h:43
__SIZE_TYPE__ SizeT
Definition Defines.h:58
decltype(nullptr) nullPtr
Definition Defines.h:34
IOArray< kMaxPorts > IOArray16
Definition IO.h:45
unsigned short UShort
Definition Defines.h:39
unsigned short UInt16
Definition Defines.h:40
Array< UShort, Sz > make_ports(UShort base)
Definition IO.h:48