60 lines
789 B
C++
Executable File
60 lines
789 B
C++
Executable File
// License: Modified MIT (NON-AI)
|
|
// See the LICENSE file in the root directory for license information.
|
|
// Copyright 2025 Timothy Prepscius
|
|
|
|
#pragma once
|
|
|
|
#include "PtrOrValue.h"
|
|
|
|
namespace tjp::core {
|
|
|
|
template<typename T>
|
|
struct PtrOnly {
|
|
const T *p = nullptr;
|
|
|
|
const T *get() const {
|
|
return p;
|
|
}
|
|
|
|
PtrOnly(const T *p_) :
|
|
p(p_)
|
|
{}
|
|
|
|
PtrOnly(const PtrOnly &rhs) :
|
|
p(rhs.p)
|
|
{}
|
|
|
|
PtrOnly(PtrOnly &&rhs) :
|
|
p(std::move(rhs.p))
|
|
{}
|
|
|
|
auto *operator ->() const
|
|
{
|
|
return get();
|
|
}
|
|
|
|
const T &operator *() const
|
|
{
|
|
return *get();
|
|
}
|
|
|
|
operator const T&() const
|
|
{
|
|
return *get();
|
|
}
|
|
} ;
|
|
|
|
template<typename T>
|
|
PtrOnly<T> makePtrOnly(const T *t)
|
|
{
|
|
return PtrOnly<T>(t);
|
|
}
|
|
|
|
template<typename T>
|
|
PtrOnly<T> makePtrOnly(const T &t)
|
|
{
|
|
return PtrOnly<T>(t);
|
|
}
|
|
|
|
} // namespace
|