Main Page | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Class Members | File Members

SExpressionCons Class Reference

#include <sexpress.hpp>

Inheritance diagram for SExpressionCons:

Inheritance graph
[legend]
Collaboration diagram for SExpressionCons:

Collaboration graph
[legend]
List of all members.

Detailed Description

A cons (a dotted pair).

The class represents a dotted pair ("cons")

Definition at line 606 of file sexpress.hpp.

Public Member Functions

 SExpressionCons (const SReference &acar, const SReference &acdr)
 ~SExpressionCons ()
SReferenceCar ()
SReferenceCdr ()
const SReferenceCar () const
const SReferenceCdr () const
virtual SExpressionClone () const
 Clone a changeable object.
SString CoreTextRepresentation (const char *delim, const char *dotdelim, SString(*repfun)(const SReference &)=0) const
virtual SString TextRepresentation () const
const IntelibTypeIdTermType () const
 Actual S-expression type.
bool IsChangeable () const
 Can it be changed during the lifetime of the object?
virtual bool SpecificEql (const SExpression *) const
 Are the two objects EQL (while not EQ).

Static Public Attributes

static IntelibTypeId TypeId
 Identifier for the set of all possible S-expressions.

Protected Member Functions

 SExpressionCons (const SReference &acar, const SReference &acdr, const IntelibTypeId &tid)
bool CanDie ()
 Is it OK to delete the object now?


Constructor & Destructor Documentation

SExpressionCons::SExpressionCons const SReference acar,
const SReference acdr,
const IntelibTypeId tid
[protected]
 

Definition at line 612 of file sexpress.hpp.

SExpressionCons::SExpressionCons const SReference acar,
const SReference acdr
 

Definition at line 618 of file sexpress.hpp.

References TypeId.

SExpressionCons::~SExpressionCons  ) 
 

Definition at line 620 of file sexpress.hpp.


Member Function Documentation

SReference& SExpressionCons::Car  ) 
 

Definition at line 622 of file sexpress.hpp.

Referenced by LispLambdaBody::DoAnalyseLambdaList(), SExpressionHashTable::FindItem(), SExpressionHashTable::GetItemPosition(), SchReference::IsEqual(), LReference::IsEqual(), pretty_print(), SExpressionHashTable::RemoveItem(), RetrieveFunctionObject(), SchReference::TextRepresentation(), and LReference::TextRepresentation().

SReference& SExpressionCons::Cdr  ) 
 

Definition at line 623 of file sexpress.hpp.

Referenced by SQueue::Append(), SExpressionBacklink::ConnectBack(), SExpressionBacklink::DisconnectBack(), LispLambdaBody::DoAnalyseLambdaList(), SExpressionHashTable::FindItem(), SExpressionHashTable::GetItemPosition(), SExpressionBacklink::InsertAfter(), SchReference::IsEqual(), LReference::IsEqual(), SExpressionBacklink::Next(), SBacklinkRef::operator++(), SBacklinkRef::operator,(), pretty_print(), SExpressionBacklink::RemoveNext(), RetrieveFunctionObject(), SQueue::SQueue(), SchReference::TextRepresentation(), LReference::TextRepresentation(), and SExpressionBacklink::~SExpressionBacklink().

const SReference& SExpressionCons::Car  )  const
 

Definition at line 624 of file sexpress.hpp.

const SReference& SExpressionCons::Cdr  )  const
 

Definition at line 625 of file sexpress.hpp.

virtual SExpression* SExpressionCons::Clone  )  const [virtual]
 

Clone a changeable object.

The method should return the pointer created with new

Note:
It can (and should) return null pointer for non-changeables
Warning:
This method will hang your program being called for a looped data structure, including looped lists, a hash table which references a list in which it is a member, etc.

If you create a changeable S-expression, you MUST make sure this method duplicates your object in such a way that nothing is shared between the old and new objects, that is, changing the new object can not in any way change the old object.

Reimplemented from SExpression.

Reimplemented in SExpressionBacklink.

SString SExpressionCons::CoreTextRepresentation const char *  delim,
const char *  dotdelim,
SString(*)(const SReference &)  repfun = 0
const
 

Used as a subroutine of TextRepresentation() to implement a representation of a part of a list

delim is the string to delimit the list's elements
(" " is used by TextRepresentation())
dotdelim is the string to delimit an irregular (dotted)
list's termination element (" . " is used by TextRepresentation())
repfun If given, this function is used to create
representation of each element. If repfun remains null, then generic TextRepresentation is used for all but unbound SReferences, and the stirng "#<UNBOUND>" is used for unbounds.

Referenced by SchReference::TextRepresentation(), and LReference::TextRepresentation().

virtual SString SExpressionCons::TextRepresentation  )  const [virtual]
 

List and dotted lists are represented just like in a real Lisp, that is, with traditional Lisp syntax.

Implements SExpression.

const IntelibTypeId& SExpression::TermType  )  const [inherited]
 

Actual S-expression type.

Definition at line 195 of file sexpress.hpp.

Referenced by SReference::DynamicCastGetPtr(), SchReference::IsEql(), LReference::IsEql(), SReference::SimpleCastGetPtr(), SchReference::TextRepresentation(), and LReference::TextRepresentation().

bool SExpression::IsChangeable  )  const [inherited]
 

Can it be changed during the lifetime of the object?

Definition at line 198 of file sexpress.hpp.

References IntelibTypeId::IsChangeable().

virtual bool SExpression::SpecificEql const SExpression  )  const [virtual, inherited]
 

Are the two objects EQL (while not EQ).

This function is overriden by those SExpressions able to be EQL while being not EQ.

Warning:
It is not demanded that this function return true if it's arguments are the same SExpression (that is, they're EQ). It is only called by the EQL predicate implementation when it has been checked that the operands are not the same object.

Reimplemented in SExpressionInt, SExpressionFloat, SExpressionChar, and SExpressionString.

Definition at line 235 of file sexpress.hpp.

Referenced by SchReference::IsEql(), and LReference::IsEql().

bool GarbageSafe::CanDie  )  [protected, inherited]
 

Is it OK to delete the object now?

Our children have no access to the private attribute RefCount and should never need it except when checking if the destruction is not an error. This solves the problem.

Definition at line 53 of file refcount.hpp.


Member Data Documentation

IntelibTypeId SExpressionCons::TypeId [static]
 

Identifier for the set of all possible S-expressions.

Note:
It never can be the value of term_type_id because SExpression is an abstract class. SExpression::TypeId is used for unification, to identify the whole world of S-expressions.

IntelibTypeId::IsSubtypeOf(SExpression::TypeId) is true for all objects of IntelibTypeId class. Guess why.

Reimplemented from SExpression.

Reimplemented in SExpressionBacklink.

Referenced by SExpressionCons().


The documentation for this class was generated from the following files:
Generated on Tue Dec 18 00:41:06 2007 for InteLib by  doxygen 1.4.1