xo-arena: annex cmpresult.*pp from xo-alloc2
This commit is contained in:
parent
c4734e2960
commit
5f882ca19d
3 changed files with 1 additions and 126 deletions
|
|
@ -1,87 +0,0 @@
|
|||
/** @file cmpresult.hpp
|
||||
*
|
||||
* @author Roland Conybeare, Dec 2025
|
||||
**/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <iostream>
|
||||
#include <cstdint>
|
||||
|
||||
namespace xo {
|
||||
namespace mm {
|
||||
enum class comparison : int32_t {
|
||||
invalid = -1,
|
||||
comparable = 0,
|
||||
incomparable = +1,
|
||||
};
|
||||
|
||||
extern const char * comparison2str(comparison x);
|
||||
|
||||
inline std::ostream &
|
||||
operator<<(std::ostream & os, comparison x) {
|
||||
os << comparison2str(x);
|
||||
return os;
|
||||
}
|
||||
|
||||
/** Result of a generic comparison operation
|
||||
**/
|
||||
struct cmpresult {
|
||||
/** @defgroup mm-cmpresult-ctors cmpresult ctors **/
|
||||
///@{
|
||||
cmpresult() : err_{comparison::invalid}, cmp_{0} {}
|
||||
cmpresult(comparison err, std::int16_t cmp) : err_{err}, cmp_{cmp} {}
|
||||
|
||||
static cmpresult incomparable() { return cmpresult(comparison::incomparable, 0); }
|
||||
static cmpresult lesser() { return cmpresult(comparison::comparable, -1); }
|
||||
static cmpresult equal() { return cmpresult(comparison::comparable, 0); }
|
||||
static cmpresult greater() { return cmpresult(comparison::comparable, +1); }
|
||||
template<typename T>
|
||||
static cmpresult from_cmp(T && x, T && y) {
|
||||
if (x < y)
|
||||
return cmpresult::lesser();
|
||||
else if (x == y)
|
||||
return cmpresult::equal();
|
||||
else
|
||||
return cmpresult::greater();
|
||||
}
|
||||
|
||||
///@}
|
||||
|
||||
/** @defgroup mm-cmpresult-methods cmpresult methods **/
|
||||
///@{
|
||||
|
||||
/** print to stream **/
|
||||
void display(std::ostream & os) const;
|
||||
|
||||
bool is_lesser() const {
|
||||
return (err_ == comparison::comparable) && (cmp_ < 0);
|
||||
}
|
||||
bool is_equal() const {
|
||||
return (err_ == comparison::comparable) && (cmp_ == 0);
|
||||
}
|
||||
///@}
|
||||
|
||||
/** @defgroup mm-cmpresult-instance-vars cmpresult instance vars **/
|
||||
///@{
|
||||
/** -1 -> invalid (sentinel)
|
||||
* 0 -> comparable
|
||||
* +1 -> incomparable (e.g. iterators from different arenas)
|
||||
**/
|
||||
comparison err_ = comparison::invalid;
|
||||
/** <0 -> lesser; 0 -> equal, >0 -> greater **/
|
||||
std::int16_t cmp_ = 0;
|
||||
///@}
|
||||
};
|
||||
|
||||
inline std::ostream & operator<<(std::ostream & os,
|
||||
const cmpresult & x)
|
||||
{
|
||||
x.display(os);
|
||||
return os;
|
||||
}
|
||||
|
||||
} /*namespace mm*/
|
||||
} /*namespace xo*/
|
||||
|
||||
/* end cmpresult.hpp */
|
||||
|
|
@ -5,7 +5,7 @@ set(SELF_SRCS
|
|||
|
||||
# AllocError.cpp
|
||||
# AllocInfo.cpp
|
||||
cmpresult.cpp
|
||||
# cmpresult.cpp
|
||||
|
||||
AAllocator.cpp
|
||||
# ArenaConfig.cpp
|
||||
|
|
|
|||
|
|
@ -1,38 +0,0 @@
|
|||
/** @file cmpresult.cpp
|
||||
*
|
||||
* @author Roland Conybeare, Dec 2025
|
||||
**/
|
||||
|
||||
#include "cmpresult.hpp"
|
||||
#include <xo/indentlog/print/tag.hpp>
|
||||
#include <iostream>
|
||||
|
||||
namespace xo {
|
||||
namespace mm {
|
||||
const char *
|
||||
comparison2str(comparison x)
|
||||
{
|
||||
switch (x) {
|
||||
case comparison::invalid:
|
||||
break;
|
||||
case comparison::comparable:
|
||||
return "cmp";
|
||||
case comparison::incomparable:
|
||||
return "!cmp";
|
||||
}
|
||||
|
||||
return "?comparison";
|
||||
}
|
||||
|
||||
void
|
||||
cmpresult::display(std::ostream & os) const
|
||||
{
|
||||
os << "<cmpresult "
|
||||
<< xtag("err", err_)
|
||||
<< xtag("cmp", cmp_)
|
||||
<< ">";
|
||||
}
|
||||
} /*namespace mm*/
|
||||
} /*namespace xo*/
|
||||
|
||||
/* end cmpresult.cpp */
|
||||
Loading…
Add table
Add a link
Reference in a new issue