ftp.nice.ch/Attic/openStep/implementation/gnustep/sources/gstep-base-0.2.7.tgz#/gstep-base-0.2.7/src/NSGSet.m

This is NSGSet.m in view mode; [Download] [Up]

/* Concrete implementation of NSSet based on GNU Set class
   Copyright (C) 1995, 1996 Free Software Foundation, Inc.
   
   Written by:  Andrew Kachites McCallum <mccallum@gnu.ai.mit.edu>
   Created: September 1995
   
   This file is part of the GNUstep Base 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.
   */

#include <Foundation/NSGSet.h>
#include <gnustep/base/NSSet.h>
#include <gnustep/base/behavior.h>
#include <gnustep/base/Set.h>
#include <Foundation/NSUtilities.h>
#include <Foundation/NSString.h>

@interface NSGSetEnumerator : NSEnumerator
{
  NSSet *set;
  void *enum_state;
}
@end

@implementation NSGSetEnumerator

- initWithSet: (NSSet*)d
{
  [super init];
  set = d;
  [set retain];
  enum_state = [set newEnumState];
  return self;
}

- nextObject
{
  return [set nextObjectWithEnumState: &enum_state];
}

- (void) dealloc
{
  [set release];
  [super dealloc];
}

@end


@implementation NSGSet

+ (void) initialize
{
  static int done = 0;

  if (!done)
    {
      done = 1;
      class_add_behavior([NSGSet class], [Set class]);
    }
}


/* This is the designated initializer 
   - initWithObjects: (id*)objects
   count: (unsigned)count
   Implemented by behavior. */

- member: anObject
{
  return ([self containsObject: anObject] ? anObject : nil);
}

- (NSEnumerator*) objectEnumerator
{
  return [[[NSGSetEnumerator alloc] initWithSet:self]
	  autorelease];
}

/* To deal with behavior over-enthusiasm.  Will be fixed later. */
- (BOOL) isEqual: other
{
#if 1
  return [self isEqualToSet: other];
#else
  /* xxx What is the correct behavior here?
     If we end up calling [NSSet -isEqualToSet:] we end up in
     an infinite loop, since that method enumerates the set, and
     the set enumerator asks if things are equal...
     [Huh? What am I saying here?] */
  return (self == other);
#endif
}
@end

@implementation NSGMutableSet

+ (void) initialize
{
  static int done = 0;

  if (!done)
    {
      done = 1;
      class_add_behavior([NSGMutableSet class], [NSGSet class]);
    }
}

/* This is the designated initializer
   - initWithCapacity: (unsigned)numItems
   implemented by behavior. */

/* Implemented by behavior:
   - (void) addObject: newObject;
   - (void) removeObject: anObject
   */

- (void) removeAllObjects
{
  [self empty];
}

/* To deal with behavior over-enthusiasm.  Will be fixed later. */
- (BOOL) isEqual: other
{
  return [super isEqual:other];
}

@end

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