Definitions
===========

item refers to any thing from classes to friends.
classes refer to classes and structs
spaces refer to all C++ types which may hold a class
  including namespace, class, or union

Functions with a Name:: in front are object methods and
are applied to an object.  

Ex:
   $obj->public();

Useful functions for writting pce2 modules:

Members
=======

The following are members of the class they can be accessed directly
or used for reporting.  Some of the accessors are reduntant to there.

Ex.  

   print "virtual" if $$obj{virtual};
   print "$$obj{name}"

  name - name of item without path
  fullname - name of item including path

  const - method is constant
  explicit - ctor is explicit
  static - function or method is static

  space - namespace or class in which this item lives (type Object)

  shortComment - a 50 char description of the function for indexes
  longComment - a longer more general description of the function


Accessors
=========

These just provide access to a internal field.  Some are actual
fields and some are simulated.

  Object::name - name of item without path
  Object::fullname - name of item including path

  Object::type_name - word describing type of this item.
  Object::access_name - word describing access of this item.

  Object::is_known - true if item was encountered in source; false if
    pce2 assumed its existance from class definitions or calls.

  Object::is_namespace 
  Object::is_class 
  Object::is_union 
  Object::is_function 
  Object::is_typedef 
  Object::is_friend 
  Object::is_template 

List retrievers 
===============

All return a list from objects contained within an object.
Use these to extract subsets of the items in a space.

  Object::children - all classes derived from this class
  Object::parents  - immediate base classes of this class

  Object::all - all items in all subtrees (recursive) 
  Object::items - items in this space
  Object::spaces - classes and namespaces in this space
  Object::classes - classes in this space
  Object::unions - unions in this space
  Object::namespaces - namespaces in this space
  Object::friends - friends in this space
  Object::typedefs - typedefs in this space
  Object::macros - macros in this space

  Object::public - public items in this space
  Object::private - private  items in this space
  Object::protected - protected items in this space

  Object::get_by_type(type) - uses type index number
  Object::get_by_access(access) - uses access index number

Sorters
=======

Sorters are mini functions used to sort lists

Ex.  @list= sort byname $obj->get_public();

  byname  - sorts by name



Perl Notes 
==========

$obj->{foo} is equivelent to $$obj{foo}
$obj->foo() is equivelent to foo($obj) 

$_ is local scope in nature and thus can be used one inside another.

  foreach ($object->spaces()) {
    print "start $$_{name};\n";  # prints space name
    foreach ($_->functions()) {
      print "$$_{name}\n";       # prints functions in space
    }
    print "end $$_{name};\n\n";  # prints space name
  }
      
Often doing a "perl myplugin.plg" will turn up errors not caught 
otherwise in perl.  Plugins use an eval which does not check
as carefully as one would like.



