This file contains a list of all templates provided in OSE. With each
template you will find an accompanying list giving the names of other
templates used either in the interface or implementation of the template.
The files in which the template declaration and implementation are
contained, and whether you need to mark the template in an ObjectStore
schema file is also given. The lack of an implementation file for a
template indicates that it is totally inline.

The format for each entry is:

  template name

    template header file
    template code file [if template class is not inline]

    templates used

Where a template is being used by another template class and the name is
followed by a '*', it indicates that it will need to be listed in an
ObjectStore schema file in addition to the template it is being used in.
Where a template is being used only in transient memory, you will still
need to mark, if used by a template, in the schema file the templates:

  OTC_Bucket
  OTC_Holder

This is needed so that the 'get_os_typespec()' static member functions are
generated. In OSE 4.1, it is no longer necessary to mark in the schema
file, for each set of template arguments, the templates:

  OTC_Cursor
  OTC_ItemCursor
  OTC_KeyCursor
  OTC_KeyItemCursor
  OTC_PairCursor

These templates should be marked only once, with the appropriate number of
arguments set to 'void'. These will be marked in the OSE schema file, so
there should be no need to mark them in your own schema file.

Where a template is followed by a '+', it indicates that the template is
not completely inline. If expanding templates explicitly using whatever
syntax is available with your compiler, you will need to expand only those
templates marked with a '+'. This is in addition to the template they
are being used in, if the template they are being used in also needs
to be expanded. You should be careful, in case the user has provided
specialisations, of explictly expanding the templates:

  OTC_BaseActions
  OTC_CopyActions
  OTC_HashActions
  OTC_RankActions

Specialisations are provided for a number of classes in the library and
builtin types for these templates. These are:

  OTC_CopyActions<char>
  OTC_HashActions<char*>
  OTC_HashActions<char const*>
  OTC_HashActions<OTC_BitSetC>
  OTC_HashActions<OTC_String>
  OTC_HashActions<OTC_Symbol>
  OTC_HashActions<OTC_Pathname>
  OTC_HashActions<OUX_Group>
  OTC_HashActions<OUX_Pathname>
  OTC_HashActions<OUX_User>
  OTC_RankActions<char*>
  OTC_RankActions<char const*>
  OTC_RankActions<OTC_BitSetC>
  OTC_RankActions<OTC_String>
  OTC_RankActions<OTC_Symbol>
  OTC_RankActions<OTC_Pathname>
  OTC_RankActions<OUX_Group>
  OTC_RankActions<OUX_Pathname>
  OTC_RankActions<OUX_User>

Note that you do not need to include the template code files directly. When
the symbol EXPAND_TEMPLATES is defined, the template code files will be
included by the template header file. The build environment (makeit) will
automatically define EXPAND_TEMPLATES when it is required. If you are not
using makeit, you will need to define EXPAND_TEMPLATES while the file into
which you want templates expanded, is being compiled. This can either be
done on the command line, or inside the file using a #define. When doing it
in the file using a #define, the definition should be placed in the file
such that it occurs before any header files are included. This procedure
may need to be modified a little bit depending on which compiler you are
using.

  include/OTC/ostore

    OTC_TypeSpec<T> [ ObjectStore Only ]

      <OTC/ostore/typespec.hh>
      <OTC/ostore/typespec.c>

  include/OTC/memory

    OTC_Ptr<T>

      <OTC/memory.ptr.hh>

    OTC_Reaper<T>

      <OTC/memory/reaper.hh>

    OTC_VecReaper<T>

      <OTC/memory/vcreaper.hh>

    OTC_VecPtr<T>

      <OTC/memory/vecptr.hh>


  include/OTC/refcnt

    OTC_CCtrPtr<T>

      <OTC/refcnt/cctrptr.hh>
      <OTC/refcnt/cctrptr.c>

    OTC_CCtrVecPtr<T>

      <OTC/refcnt/cctrvptr.hh>
      <OTC/refcnt/cctrvptr.c>

    OTC_CResPtr<T>

      <OTC/refcnt/cresptr.hh>
      <OTC/refcnt/cresptr.c>

    OTC_CtrPtr<T>

      <OTC/refcnt/ctrptr.hh>

      OTC_CCtrPtr<T>

    OTC_CtrVecPtr<T>

      <OTC/refcnt/ctrvptr.hh>

      OTC_CCtrVecPtr<T>

    OTC_ResPtr<T>

      <OTC/refcnt/resptr.hh>

      OTC_CResPtr<T>


  include/OTC/collctn

    OTC_AscendingQueue<T>

      <OTC/collctn/ascqueue.hh>
      <OTC/collctn/ascqueue.c>

      OTC_Holder<T> +*
      OTC_PriorityQueue<T> +*
      OTC_RankActions<T>

    OTC_Bag<T>

      <OTC/collctn/bag.hh>
      <OTC/collctn/bag.c>

      OTC_BaseActions<T>
      OTC_Bucket<T> +*
      OTC_Cursor<T> +
      OTC_HashActions<T>
      OTC_ItemCursor< T,OTC_Bucket<T> > +
      OTC_Iterator<T>
      OTC_RankActions<T>
      OTC_Visitor<T>

    OTC_BaseActions<T>

      <OTC/collctn/baseactn.hh>

    OTC_BoundedQueue<T>

      <OTC/collctn/bndqueue.hh>
      <OTC/collctn/bndqueue.c>

      OTC_Holder<T> +*

    OTC_BoundedStack<T>

      <OTC/collctn/bndstack.hh>
      <OTC/collctn/bndstack.c>

      OTC_Holder<T> +*

    OTC_Bucket<T>

      <OTC/collctn/bucket.hh>
      <OTC/collctn/bucket.c>

      OTC_BaseActions<T>
 
    OTC_CopyActions<T>

      <OTC/collctn/copyactn.hh>
      <OTC/collctn/copyactn.c>

    OTC_Cursor<T>

      <OTC/collctn/cursor.hh>
      <OTC/collctn/cursor.c>

    OTC_Deque<T>

      <OTC/collctn/deque.hh>
      <OTC/collctn/deque.c>

      OTC_BaseActions<T>
      OTC_Bucket<T> +*
      OTC_Cursor<T> +
      OTC_ItemCursor< T,OTC_Bucket<T> > +
      OTC_Iterator<T>
      OTC_Modifier<T>
      OTC_Visitor<T>
      OTC_Worker<T>

    OTC_DescendingQueue<T>

      <OTC/collctn/dscqueue.hh>
      <OTC/collctn/dscqueue.c>

      OTC_Holder<T> +*
      OTC_PriorityQueue<T> +*
      OTC_RankActions<T>

    OTC_HashActions<T>

      <OTC/collctn/hashactn.hh>

    OTC_Holder<T>

      <OTC/collctn/holder.hh>
      <OTC/collctn/holder.c>

    OTC_Index<T>

      <OTC/collctn/index.hh>
      <OTC/collctn/index.c>

      OTC_IndexNode<T> +*
      OTC_RankActions<T>

    OTC_IndexNode<T>

      <OTC/collctn/indxnode.hh>
      <OTC/collctn/indxnode.c>

      OTC_BaseActions<T>

    OTC_ItemCursor<T,L>

      <OTC/collctn/icursor.hh>
      <OTC/collctn/icursor.c>

      OTC_Cursor<T>

    OTC_IList<T>

      <OTC/collctn/ilist.hh>
      <OTC/collctn/ilist.c>

      OTC_BaseActions<T>
      OTC_Bucket<T> +*
      OTC_Visitor<T>
      OTC_Worker<T>

    OTC_IMap<T1,T2>

      <OTC/collctn/imap.hh>
      <OTC/collctn/imap.c>

      OTC_BaseActions<T1>
      OTC_BaseActions<T2>
      OTC_HashActions<T1>
      OTC_PairBucket<T1,T2> +*
      OTC_PairVisitor<T1,T2>
      OTC_PairWorker<T1,T2>
      OTC_RankActions<T1>
      OTC_Visitor<T1>
      OTC_Visitor<T2>
      OTC_Worker<T2>

    OTC_Iterator<T>

      <OTC/collctn/iterator.hh>

      OTC_Cursor<T> +
      OTC_Visitor<T>
      OTC_Worker<T>

    OTC_KeyCursor<T,L>

      <OTC/collctn/kcursor.hh>
      <OTC/collctn/kcursor.c>

      OTC_Cursor<T> +

    OTC_KeyItemCursor<T1,T2,L>

      <OTC/collctn/kicursor.hh>
      <OTC/collctn/kicursor.c>

      OTC_PairCursor<T2,T2> +

    OTC_List<T>

      <OTC/collctn/list.hh>
      <OTC/collctn/list.c>

      OTC_BaseActions<T>
      OTC_Bucket<T> +*
      OTC_Cursor<T> +
      OTC_ItemCursor<T> +
      OTC_Iterator<T>
      OTC_Modifier<T>
      OTC_Visitor<T>
      OTC_Worker<T>

    OTC_Map<T1,T2>

      <OTC/collctn/map.hh>
      <OTC/collctn/map.c>

      OTC_BaseActions<T1>
      OTC_BaseActions<T2>
      OTC_Cursor<T1> +
      OTC_Cursor<T2> +
      OTC_HashActions<T1>
      OTC_ItemCursor< T2,OTC_PairBucket<T1,T2> > +
      OTC_Iterator<T1>
      OTC_Iterator<T2>
      OTC_KeyCursor< T1,OTC_PairBucket<T1,T2> > +
      OTC_KeyItemCursor< T1,T2,OTC_PairBucket<T1,T2> > +
      OTC_Modifier<T2>
      OTC_PairBucket<T1,T2> +*
      OTC_PairCursor<T1,T2> +
      OTC_PairIterator<T1,T2>
      OTC_PairModifier<T1,T2>
      OTC_PairVisitor<T1,T2>
      OTC_PairWorker<T1,T2>
      OTC_RankActions<T1>
      OTC_Visitor<T1>
      OTC_Visitor<T2>
      OTC_Worker<T2>

    OTC_MList<T>

      <OTC/collctn/mlist.hh>
      <OTC/collctn/mlist.c>

      OTC_BaseActions<T>
      OTC_Bucket<T> +*
      OTC_MListIterator<T>
      OTC_MListModifier<T>
      OTC_Visitor<T>
      OTC_Worker<T>

    OTC_MListIterator<T>

      <OTC/collctn/mlstiter.hh>

    OTC_MListModifier<T>

      <OTC/collctn/mlstmdfr.hh>

    OTC_Modifier<T>

      <OTC/collctn/modifier.hh>

      OTC_Cursor<T> +
      OTC_Visitor<T>
      OTC_Worker<T>

    OTC_OrderedList<T>

      <OTC/collctn/ordlist.hh>
      <OTC/collctn/ordlist.c>

      OTC_BaseActions<T>
      OTC_Bucket<T> +*
      OTC_Cursor<T> +
      OTC_ItemCursor<T> +
      OTC_Iterator<T>
      OTC_RankActions<T>
      OTC_Visitor<T>

    OTC_Pair<T1,T2>

      <OTC/collctn/pair.hh>

    OTC_PairBucket<T1,T2>

      <OTC/collctn/prbucket.hh>
      <OTC/collctn/prbucket.c>

      OTC_BaseActions<T1>
      OTC_BaseActions<T2>
      OTC_Bucket<T2> +*

    OTC_PairCursor<T1,T2>

      <OTC/collctn/prcursor.hh>
      <OTC/collctn/prcursor.c>

    OTC_PriorityQueue<T>

      <OTC/collctn/priqueue.hh>
      <OTC/collctn/priqueue.c>

      OTC_Holder<T> +*
      OTC_RankActions<T>

    OTC_PairIterator<T1,T2>

      <OTC/collctn/pritertr.hh>

      OTC_PairCursor<T1,T2> +
      OTC_PairVisitor<T1,T2>
      OTC_PairWorker<T1,T2>

    OTC_PairModifier<T1,T2>

      <OTC/collctn/prmodifr.hh>

      OTC_PairCursor<T1,T2> +
      OTC_PairVisitor<T1,T2>
      OTC_PairWorker<T1,T2>

    OTC_PairVisitor<T1,T2>

      <OTC/collctn/prvisitr.hh>

    OTC_PairWorker<T1,T2>

      <OTC/collctn/prworker.hh>

    OTC_Queue<T>

      <OTC/collctn/queue.hh>
      <OTC/collctn/queue.c>

      OTC_Holder<T> +*

    OTC_RankActions<T>

      <OTC/collctn/rankactn.hh>

    OTC_Set<T>

      <OTC/collctn/set.hh>
      <OTC/collctn/set.c>

      OTC_BaseActions<T>
      OTC_Bucket<T> +*
      OTC_Cursor<T> +
      OTC_HashActions<T>
      OTC_ItemCursor< T,OTC_Bucket<T> > +
      OTC_Iterator<T>
      OTC_RankActions<T>
      OTC_Visitor<T>

    OTC_Single<T>

      <OTC/collctn/single.hh>

    OTC_Stack<T>

      <OTC/collctn/queue.hh>
      <OTC/collctn/queue.c>

      OTC_Holder<T> +*

    OTC_Triple<T1,T2,T3>

      <OTC/collctn/triple.hh>

    OTC_UniqMap<T1,T2>

      <OTC/collctn/uniqmap.hh>
      <OTC/collctn/uniqmap.c>

      OTC_BaseActions<T1>
      OTC_BaseActions<T2>
      OTC_Cursor<T1> +
      OTC_Cursor<T2> +
      OTC_HashActions<T1>
      OTC_HashActions<T2>
      OTC_ItemCursor< T2,OTC_PairBucket<T1,T2> > +
      OTC_Iterator<T1>
      OTC_Iterator<T2>
      OTC_KeyCursor< T1,OTC_PairBucket<T1,T2> > +
      OTC_KeyItemCursor< T1,T2,OTC_PairBucket<T1,T2> > +
      OTC_PairBucket<T1,T2> +*
      OTC_PairCursor<T1,T2> +
      OTC_PairIterator<T1,T2>
      OTC_PairVisitor<T1,T2>
      OTC_RankActions<T1>
      OTC_Visitor<T1>
      OTC_Visitor<T2>

    OTC_Vector<T>

      <OTC/collctn/vector.hh>
      <OTC/collctn/vector.c>

      OTC_CopyActions<T>
      OTC_TypeSpec<T> + [ ObjectStore Only ]

    OTC_Visitor<T>

      <OTC/collctn/visitor.hh>

    OTC_Worker<T>

      <OTC/collctn/worker.hh>
