00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
#ifndef _util_ref_identity_h
00029
#define _util_ref_identity_h
00030
00031
#ifdef __GNUG__
00032
#pragma interface
00033
#endif
00034
00035
#include <iostream>
00036
00037
#include <scconfig.h>
00038
00039
namespace sc {
00040
00041
class Identity;
00042
00050 class Identifier {
00051
private:
00052
const void*
id;
00053
public:
00055 Identifier(): id(0) {}
00057 Identifier(
const Identity* i): id((void*)i) {}
00059 Identifier(
const Identifier& i): id(i.id) {}
00061 ~Identifier() {}
00062
00064 void operator = (
const Identifier& i) {
id = i.
id; }
00065
00067 int operator < (
const Identifier&i)
const {
return id < i.
id; }
00069 int operator > (
const Identifier&i)
const {
return id > i.
id; }
00071 int operator == (
const Identifier&i)
const {
return id == i.
id; }
00073 int operator <= (
const Identifier&i)
const {
return id <= i.
id; }
00075 int operator >= (
const Identifier&i)
const {
return id >= i.
id; }
00077 int operator != (
const Identifier&i)
const {
return id != i.
id; }
00078
00079
void print(std::ostream&) const;
00080 };
00081
00082 std::ostream & operator << (std::ostream &o, const
Identifier &i);
00083
00089 class
Identity {
00090
public:
00091
virtual ~Identity();
00094 Identifier identifier() {
return this; }
00095 };
00097
inline int lt(
const Identity*i,
const Identity*j) {
return i < j; }
00099
inline int gt(
const Identity*i,
const Identity*j) {
return i > j; }
00101
inline int le(
const Identity*i,
const Identity*j) {
return i <= j; }
00103
inline int ge(
const Identity*i,
const Identity*j) {
return i >= j; }
00105
inline int eq(
const Identity*i,
const Identity*j) {
return i == j; }
00107
inline int ne(
const Identity*i,
const Identity*j) {
return i != j; }
00110
inline int cmp(
const Identity*i,
const Identity*j)
00111 {
00112
return (i==j)?0:((i<j)?-1:1);
00113 }
00114
00115 }
00116
00117
#endif
00118
00119
00120
00121
00122