ftp.nice.ch/pub/next/developer/resources/libraries/libcoll.930521.s.tar.gz#/libcoll-930521/coll/Collecting.h

This is Collecting.h in view mode; [Download] [Up]

/* Protocol for Objective-C objects that hold collections of elements.

   Copyright (C) 1993 R. Andrew McCallum <mccallum@cs.rochester.edu>
   Dept. of Computer Science, U. of Rochester, Rochester, NY  14627

   This file is part of the GNU Objective-C Collection library.

   This library is free software; you can redistribute it and/or
   modify it under the terms of the GNU Library General Public
   License as published by the Free Software Foundation; either
   version 2 of the License, or (at your option) any later version.
   
   This library is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   Library General Public License for more details.

   You should have received a copy of the GNU Library General Public
   License along with this library; if not, write to the Free
   Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/ 

/* The <Collecting> protocol is root of the collection protocol heirarchy. 

   The <Collecting> protocol defines the most general interface to a
   collection of elements.  Elements can be added, removed, and replaced.
   The contents can be tested, enumerated, and copied with various
   modifications.  Elements may be objects, or any C type included in the 
   "elt" union given below, but all elements of a collection must be of
   the same C type.
*/

#ifndef __Collecting_h_INCLUDE_GNU
#define __Collecting_h_INCLUDE_GNU

#include <objc/Object.h>
#include <limits.h>

typedef union _elt
{
  id id_t;
  SEL SEL_t; 
  int int_t;
  unsigned int unsigned_int_t;
  char char_t;			/* remove these smaller ones? 
				   Not now handled anyway. */
  unsigned char unsigned_char_t;
  short int short_int_t;
  unsigned short int unsigned_short_int_t;
  long int long_int_t;
  unsigned long int unsigned_long_int_t;
  float float_t;
  const void *void_ptr_t;
  char *char_ptr_t;
} elt;

/* defined in Collection.m as (~0L) */
extern const elt COLL_NO_ELEMENT; 

#define COLL_NO_OBJECT (COLL_NO_ELEMENT.id_t)

@protocol Collecting

// INITIALIZING AND FREEING;
- init;
- initWith: (unsigned)count, ...;
- free;
- freeContents;

// ADDING;
- addObject: newObject;
- addObjectIfAbsent: newObject;
- addContentsOf: (id <Collecting>)aCollection;
- addContentsOfIfAbsent: (id <Collecting>)aCollection;
- addCount: (unsigned)count, ...;

// REMOVING AND REPLACING;
- removeObject: oldObject;
- removeAllOccurrencesOfObject: oldObject;
- replaceObject: oldObject with: newObject;
- replaceAllOccurrencesOfObject: oldObject with: newObject;
- removeContentsIn: (id <Collecting>)aCollection;
- removeContentsNotIn: (id <Collecting>)aCollection;
- uniqueContents;
- empty;

// TESTING;
- (BOOL) isEmpty;
- (BOOL) includesObject: anObject;
- (BOOL) includesSubsetOf: (id <Collecting>)aCollection;
- (BOOL) includesSameContents: (id <Collecting>)aCollection;
- (BOOL) isEqual: anObject;
- (BOOL) isDisjointFrom: (id <Collecting>)aCollection;
- (unsigned) count;
- (unsigned) occurrencesOfObject: anObject;
- (BOOL) containsObjects;

- (BOOL) trueForAllByPerforming: (SEL)aBoolSel;
- (BOOL) trueForAllByPerforming: (SEL)aBoolSel with: argObject;
- (BOOL) trueForAllByPerforming: (SEL)aBoolSel in: selObject;
- (BOOL) trueForAllByPerforming: (SEL)aBoolSel in: selObject with: argObject;

- (BOOL) trueForAnyByPerforming: (SEL)aBoolSel;
- (BOOL) trueForAnyByPerforming: (SEL)aBoolSel with: argObject;
- (BOOL) trueForAnyByPerforming: (SEL)aBoolSel in: selObject;
- (BOOL) trueForAnyByPerforming: (SEL)aBoolSel in: selObject with: argObject;

// ENUMERATING
- nextObject: (void**)enumState;
- makeObjectsPerform: (SEL)aSel;
- makeObjectsPerform: (SEL)aSel with: argObject;
- withObjectsPerform: (SEL)aSel in: selObject;
- withObjectsPerform: (SEL)aSel in: selObject with: argObject;
- withObjectsCall: (void(*)(id))aFunc;
- withObjectsCall: (void(*)(id))aFunc whileTrue:(BOOL *)flag;

// COPYING 
- shallowCopy;
- shallowCopyAs: (id <Collecting>)aCollectionClass;
- emptyCopyAs: aCollectionClass;
- deepen;
- species;

// COPYING ENUMERATORS;
- shallowCopySelectByPerforming: (SEL)aBoolSel in: selObject;
- shallowCopySelectByPerforming: (SEL)aBoolSel in: selObject with: argObject;
- shallowCopySelectByPerforming: (SEL)aBoolSel;
- shallowCopySelectByPerforming: (SEL)aBoolSel with: argObject;

- shallowCopyRejectByPerforming: (SEL)aBoolSel in: selObject;
- shallowCopyRejectByPerforming: (SEL)aBoolSel in: selObject with: argObject;
- shallowCopyRejectByPerforming: (SEL)aBoolSel;
- shallowCopyRejectByPerforming: (SEL)aBoolSel with: argObject;

- shallowCopyCollectByPerforming: (SEL)aSel in: selObject;
- shallowCopyCollectByPerforming: (SEL)aSel in: selObject with: argObject;
- shallowCopyCollectByPerforming: (SEL)aSel;
- shallowCopyCollectByPerforming: (SEL)aSel with: argObject;

// NON-COPYING ENUMERATORS;
- detectByPerforming: (SEL)aBoolSel;
- detectByPerforming: (SEL)aBoolSel with: argObject;
- detectByPerforming: (SEL)aBoolSel in: selObject;
- detectByPerforming: (SEL)aBoolSel in: selObject with: argObject;
- detectObjectByCalling: (BOOL(*)(id))aFunc;

- inject: initialArgObject byPerforming: (SEL)aSel in: selObject;

- maxByPerforming: (SEL)aSortingSel;
- maxByPerforming: (SEL)aSortingSel in: selObject;
- maxObjectByCalling: (int(*)(id,id))aFunc;
- minByPerforming: (SEL)aSortingSel;
- minByPerforming: (SEL)aSortingSel in: selObject;
- minObjectByCalling: (int(*)(id,id))aFunc;

// ARCHIVING... something like this?;
/****
- readFrom:aStream;
- readContentsFrom:aStream;
- writeOn:aStream;
- writeContentsOn:aStream;
- printOn:aStream;
****/

// NON-OBJECT ELEMENT METHOD NAMES;

// INITIALIZING;
- initDescription:(const char *)type;
- initDescription:(const char *)type with: (unsigned)count, ...;

// ADDING;
- addElement: (elt)newElement;
- addElementIfAbsent: (elt)newElement;

// REMOVING AND REPLACING;
- (elt) removeElement: (elt)oldElement;
- (elt) removeAllOccurrencesOfElement: (elt)oldElement;
- (elt) replaceElement: (elt)oldElement with: (elt)newElement;
- (elt) replaceAllOccurrencesOfElement: (elt)oldElement with: (elt)newElement;

// TESTING;
- (BOOL) includesElement: (elt)anElement;
- (unsigned) occurrencesOfElement: (elt)anElement;
- (BOOL) trueForAllByCalling: (BOOL(*)(elt))aFunc;
- (BOOL) trueForAnyByCalling: (BOOL(*)(elt))aFunc;
- (const char *) contentsDescription;

// ENUMERATING;
- (BOOL) getNextElement:(elt *)anElementPtr withEnumState: (void**)enumState;
- withElementsCall: (void(*)(elt))aFunc;
- withElementsCall: (void(*)(elt))aFunc whileTrue: (BOOL*)flag;

// COPYING ENUMERATORS;
- shallowCopySelectByCalling: (BOOL(*)(elt))aFunc;
- shallowCopyRejectByCalling: (BOOL(*)(elt))aFunc;
- shallowCopyCollectByCalling: (elt (*)(elt))aFunc;

// NON-COPYING ENUMERATORS;
- (elt) detectElementByCalling: (BOOL(*)(elt))aFunc;
- (elt) maxElementByCalling: (int(*)(elt,elt))aFunc;
- (elt) minElementByCalling: (int(*)(elt,elt))aFunc;
- inject: (void *)initialData byCalling: (void* (*)(void*,elt))aFunc;

@end

#endif /* __Collecting_h_INCLUDE_GNU */

These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.