Study::Guts Class Reference

#include <StudyGuts.h>

List of all members.


Detailed Description

This is the declaration for the Study::Guts class, the abstract object to which a Study handle points.

This is in a separate header file from Study because only people who are extending the Study class to make their own Studies need to be aware of the details. End users access only methods from the Study class and classes derived from Study, never anything from Study::Guts or its derived classes.

Below is the physical layout of memory for a Study, and which portions are allocated by the client program and which by the binary library code. For binary compatiblity, only the side which allocated a piece of memory can access it. So for example, the client code can use the C++ Study::Guts Virtual Function Table (VFT) to call the concrete Guts methods. But the library side, when calling those same methods, must go through its own explicitly- managed VFT since it can't know what ordering was used for the methods in the VFT on the client side.

CLIENT SIDE . LIBRARY SIDE Study Study::Guts . Study::Guts::GutsRep --------------- ------------------ . ------------- | Study::Guts* | --> | Study::GutsRep* | --> | GutsRep | --------------- ------------------ . | | ^ | Concrete Guts | . | Position | | | class data and | . | independent | =============== | client-side VFT | . | Guts VFT | Concrete Study ------------------ . | | adds no data . | Other opaque| members . | stuff | . -------------

If the concrete Study::Guts class also has an opaque implementation, as it will for concrete Studies provided by the SimTK Core, then the Study author should expose only the data-free handle class derived from Study.


Public Member Functions

 Guts (const String &name="<UNNAMED STUDY>", const String &version="0.0.0")
virtual ~Guts ()
const StringgetName () const
const StringgetVersion () const
const StudygetStudy () const
StudyupdStudy ()
void setOwnerHandle (Study &)
bool hasOwnerHandle () const
 Guts (class GutsRep *r)
bool hasRep () const
const GutsRep & getRep () const
GutsRep & updRep () const
Study::Gutsclone () const

Static Public Member Functions

static void destruct (Study::Guts *)

Protected Member Functions

 Guts (const Guts &)
virtual Study::GutscloneImpl () const =0

Friends

class GutsRep
void systemDestructImplLocator (Study::Guts *)
Study::GutssystemCloneImplLocator (const Study::Guts &)


Constructor & Destructor Documentation

Guts ( const String name = "<UNNAMED STUDY>",
const String version = "0.0.0" 
) [inline, explicit]

virtual ~Guts (  )  [inline, virtual]

Guts ( class GutsRep *  r  )  [inline, explicit]

Guts ( const Guts  )  [protected]


Member Function Documentation

Study::Guts* clone (  )  const

virtual Study::Guts* cloneImpl (  )  const [protected, pure virtual]

static void destruct ( Study::Guts  )  [static]

const String& getName (  )  const

const GutsRep& getRep (  )  const [inline]

const Study& getStudy (  )  const

const String& getVersion (  )  const

bool hasOwnerHandle (  )  const

bool hasRep (  )  const [inline]

void setOwnerHandle ( Study  ) 

GutsRep& updRep (  )  const [inline]

Study& updStudy (  ) 


Friends And Related Function Documentation

friend class GutsRep [friend]

Study::Guts* systemCloneImplLocator ( const Study::Guts  )  [friend]

void systemDestructImplLocator ( Study::Guts  )  [friend]


The documentation for this class was generated from the following file:
Generated on Thu Feb 28 01:34:36 2008 for SimTKcommon by  doxygen 1.4.7