namespace CCL::Persistence

namespace Persistence {

// typedefs

typedef int64 ObjectID;
typedef CompareExpression <IExpression::kEquals> EqualsExpression;
typedef CompareExpression <IExpression::kNonEquals> NonEqualsExpression;
typedef CompareExpression <IExpression::kGreaterThan> GreaterExpression;
typedef CompareExpression <IExpression::kGreaterOrEqual> GreaterOrEqualExpression;
typedef CompareExpression <IExpression::kLessThan> LessThanExpression;
typedef CompareExpression <IExpression::kLessOrEqual> LessOrEqualExpression;
typedef CompareExpression <IExpression::kLike> LikeExpression;
typedef CompareExpression <IExpression::kContains> ContainsExpression;

// enums

enum
{
    kInvalidOID = -1,
};

enum MemberFlags;
enum TableMapping;

// structs

struct IExpression;
struct IObjectState;
struct IPersistentObject;
struct IPersistentOwner;
struct IPersistentStore;
struct Transaction;

// classes

class AndExpression;

template <IExpression::Type exprType>
class CompareExpression;

class CompoundExpression;
class Expression;
class ExpressionImpl;
class InExpression;
class Member;
class NotExpression;

template <class T>
class ObjectQuery;

class OrExpression;

template <class BaseUnknown>
class PersistentObject;

// global variables

 IExpression;
 IPersistentStore;
 IPersistentOwner;
 IPersistentObject;

// global functions

bool isValid (ObjectID oid);

} // namespace Persistence