
// @(#) 1.2 nt/src/utils/tpll.idl, odutils, od96nt, odnt9712d 11/1/96 19:08:04 [ 3/21/97 17:37:35 ]
//
//   Copyright  1988, 1989 Apple Computer, Inc. All rights reserved.

/*
 *
 * DESCRIPTION: This class describes a primitive linked list, a sequence on 0
 *              or more items, with a link from one item to it's following
 *              item.
 *
 */
#ifndef TPLL_idl
#define TPLL_idl

#include <somobj.idl>

interface somf_MLinkable;

interface somf_TPrimitiveLinkedList : SOMObject
{

  unsigned long somfCount();

  // Return the number of objects in this.

  void somfRemove(in somf_MLinkable aLink);

  // Remove the somf_MLinkable object from the List.

  void somfRemoveAll();

  // Remove all of the objects from this.

  somf_MLinkable somfRemoveFirst();

  // Remove the first object in the List.

  somf_MLinkable somfRemoveLast();

  // Remove the last object in the List.

  void somfAddBefore(in somf_MLinkable existing,
		    in somf_MLinkable obj);

  // Add the obj object into the List before the existing object.

  void somfAddAfter(in somf_MLinkable existing,
		   in somf_MLinkable obj);

  // Add the obj object into the List after the existing object.

  void somfAddFirst(in somf_MLinkable obj);

  // Add the obj object as the first object in the List.

  void somfAddLast(in somf_MLinkable obj);

  // Add the obj object as the last object in the List.

  somf_MLinkable somfAfter(in somf_MLinkable existingobj);

  // Return the object that comes after the existingobj object in the List.

  somf_MLinkable somfBefore(in somf_MLinkable existingobj);

  // Return the object that comes before the existingobj object in the List.

  somf_MLinkable somfFirst();

  // Return the first object in the List.

  somf_MLinkable somfLast();

  // Return the last object in the List.

#ifdef __SOMIDL__
  implementation {

    releaseorder: somfCount,somfRemove,somfRemoveAll,somfRemoveFirst,somfRemoveLast,
		  somfAddBefore,somfAddAfter,somfAddFirst,somfAddLast,
		  somfAfter,somfBefore,somfFirst,somfLast;

    majorversion = 2;
    minorversion = 1;
    filestem = tpll;
    dllname = "somuc.dll";

    passthru C_xh_after =  ""
""
"#include <mlink.xh>"
"";

    passthru C_h_after =  ""
""
"#include <mlink.h>"
"";

    somf_MLinkable fSentinel;

    somInit: override;
    somUninit: override;
    somfCount: nomodify;
    somfAfter: nomodify;
    somfBefore: nomodify;
    somfFirst: nomodify;
    somfLast: nomodify;

  };
#endif /* __SOMIDL__ */
};

#endif  /* TPLL_idl */
