3#ifndef _poplar_InOutTypes_hpp_
4#define _poplar_InOutTypes_hpp_
6#include <poplar/Iterators.hpp>
7#include <poplar/QuarterFloat.hpp>
11template <
typename T>
struct IOBase {
void *p; };
13template <>
struct IOBase<quarter> {
20#define NO_INSTRUMENT __attribute__((no_instrument_function))
22template <
typename T>
class InputBase :
public IOBase<T> {
25 using baseT =
const T;
28 operator const T &()
const {
return *((T *)IOBase<T>::p); }
31 const T &operator*()
const {
return *((T *)IOBase<T>::p); }
34 const T *operator->()
const {
return (T *)IOBase<T>::p; }
37template <
typename T>
class OutputBase :
public IOBase<T> {
42 operator T &()
const {
return *((T *)IOBase<T>::p); }
45 T &operator*()
const {
return *((T *)IOBase<T>::p); }
48 T *operator->()
const {
return (T *)IOBase<T>::p; }
51template <
typename T>
class InOutBase :
public IOBase<T> {
56 operator T &()
const {
return *((T *)IOBase<T>::p); }
59 T &operator*()
const {
return *((T *)IOBase<T>::p); }
62 T *operator->()
const {
return (T *)IOBase<T>::p; }
66template <
typename T>
class Input :
public InputBase<T> {};
69template <>
class Input<quarter> :
public InputBase<quarter> {
72 const MetadataType *getMetadata()
const {
return (
const MetadataType *)meta; }
76template <
typename T>
class Output :
public OutputBase<T> {};
79template <>
class Output<quarter> :
public OutputBase<quarter> {
82 const MetadataType *getMetadata()
const {
return (MetadataType *)meta; }
86template <
typename T>
class InOut :
public InOutBase<T> {};
89template <>
class InOut<quarter> :
public InOutBase<quarter> {
92 const MetadataType *getMetadata()
const {
return (MetadataType *)meta; }
Input.
Definition: InOutTypes.hpp:86
Output.
Definition: InOutTypes.hpp:76
Poplar classes and functions.
Definition: ArrayRef.hpp:14