libs-base/Headers/Foundation/NSIndexSet.h
thebeing a5c6cfa9f7 Detect the presence of libdispatch and, if available, use it for collection
enumeration methods that take blocks as arguments. This allows us to implement
the NSEnumerationConcurrent option of those methods with minimal effort.

The searching methods on NSIndexSet and all the sorting methods are still
missing.



git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@35010 72102866-910b-0410-8b05-ffd578937521
2012-03-27 17:05:19 +00:00

250 lines
6.7 KiB
Objective-C

/** Interface for NSIndexSet, NSMutableIndexSet for GNUStep
Copyright (C) 2004 Free Software Foundation, Inc.
Written by: Richard Frith-Macdonald <rfm@gnu.org>
Created: Feb 2004
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 Lesser 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 Lesser General Public
License along with this library; if not, write to the Free
Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02111 USA.
AutogsdocSource: NSIndexSet.m
*/
#ifndef _NSIndexSet_h_GNUSTEP_BASE_INCLUDE
#define _NSIndexSet_h_GNUSTEP_BASE_INCLUDE
#import <GNUstepBase/GSVersionMacros.h>
#import <GNUstepBase/GSBlocks.h>
#if OS_API_VERSION(GS_API_MACOSX, GS_API_LATEST)
#import <Foundation/NSObject.h>
#import <Foundation/NSRange.h>
#if defined(__cplusplus)
extern "C" {
#endif
/**
* Instances of this class are collections of unsigned integers in the
* range 0 to NSNotFound-1.<br />
* Each integer can appear in a collection only once.
*/
@interface NSIndexSet : NSObject <NSCopying, NSMutableCopying, NSCoding>
{
#if GS_EXPOSE(NSIndexSet)
void *_data;
#endif
}
/**
* Return an empty set.
*/
+ (id) indexSet;
/**
* Return a set containing the single value anIndex, or returns nil if
* anIndex is NSNotFound.
*/
+ (id) indexSetWithIndex: (NSUInteger)anIndex;
/**
* Return a set containing all the values in aRange, or returns nil if
* aRange contains NSNotFound.
*/
+ (id) indexSetWithIndexesInRange: (NSRange)aRange;
/**
* Returns YES if the receiver contains anIndex, NO otherwise.
*/
- (BOOL) containsIndex: (NSUInteger)anIndex;
/**
* Returns YES if the receiver contains all the index values present
* in aSet, NO otherwise.
*/
- (BOOL) containsIndexes: (NSIndexSet*)aSet;
/**
* Returns YES if the receiver contains all the index values present
* in aRange, NO otherwise.
*/
- (BOOL) containsIndexesInRange: (NSRange)aRange;
/**
* Returns the number of index values present in the receiver.
*/
- (NSUInteger) count;
#if OS_API_VERSION(100500,GS_API_LATEST)
/** Not implemented
* Returns the number of indexes set within the specified range.
*/
- (NSUInteger) countOfIndexesInRange: (NSRange)range;
#endif
#if OS_API_VERSION(100600,GS_API_LATEST)
DEFINE_BLOCK_TYPE(GSIndexSetEnumerationBlock, void, NSUInteger, BOOL*);
- (void)enumerateIndexesInRange: (NSRange)range
options: (NSEnumerationOptions)opts
usingBlock: (GSIndexSetEnumerationBlock)aBlock;
/**
* Enumerate all indices in the set by applying a block to them.
*/
- (void)enumerateIndexesUsingBlock: (GSIndexSetEnumerationBlock)aBlock;
- (void)enumerateIndexesWithOptions: (NSEnumerationOptions)opts
usingBlock: (GSIndexSetEnumerationBlock)aBlock;
#endif
/**
* Returns the first index value in the receiver or NSNotFound if the
* receiver is empty.
*/
- (NSUInteger) firstIndex;
/**
* Copies index values into aBuffer until there are no index values left or
* aBuffer is full (assuming that the size of aBuffer is given by aCount).<br />
* Only copies index values present in aRange and copies them in order.<br />
* Returns the number of index values placed in aBuffer.<br />
* Modifies aRange to start after the last index value copied.<br />
* If aRange is a null pointer, this method attempts to get <em>all</em>
* index values from the set (and of course no range can be returned in it).
*/
- (NSUInteger) getIndexes: (NSUInteger*)aBuffer
maxCount: (NSUInteger)aCount
inIndexRange: (NSRangePointer)aRange;
/**
* Return the first index value in the receiver which is greater than
* anIndex.
*/
- (NSUInteger) indexGreaterThanIndex: (NSUInteger)anIndex;
/**
* Return the first index value in the receiver which is greater than
* or equal to anIndex.
*/
- (NSUInteger) indexGreaterThanOrEqualToIndex: (NSUInteger)anIndex;
/**
* Return the first index value in the receiver which is less than
* anIndex.
*/
- (NSUInteger) indexLessThanIndex: (NSUInteger)anIndex;
/**
* Return the first index value in the receiver which is less than
* or equal to anIndex.
*/
- (NSUInteger) indexLessThanOrEqualToIndex: (NSUInteger)anIndex;
/**
* Initialise the receiver to contain anIndex. Returns the initialised
* object or nil if anIndex is NSNotFound.
*/
- (id) initWithIndex: (NSUInteger)anIndex;
/** <init />
* Initialise the receiver to contain all index values in aRange.
* Returns the initialised object or nil if aRange contains NSNotFound.
*/
- (id) initWithIndexesInRange: (NSRange)aRange;
/**
* Initialises the receiver with the index values from aSet.
*/
- (id) initWithIndexSet: (NSIndexSet*)aSet;
/**
* Returns YES if the receiver contains any index values which lie in aRange,
* No otherwise.
*/
- (BOOL) intersectsIndexesInRange: (NSRange)aRange;
/**
* Tests two index sets for equality and returns either YES or NO.
*/
- (BOOL) isEqualToIndexSet: (NSIndexSet*)aSet;
/**
* Returns the last index value in the receiver or NSNotFound if the
* receiver is empty.
*/
- (NSUInteger) lastIndex;
@end
@interface NSMutableIndexSet : NSIndexSet
/**
* Adds anIndex to the set of indexes stored in the receiver.
*/
- (void) addIndex: (NSUInteger)anIndex;
/**
* Adds all the indexes from aSet to the set of indexes stored in the receiver.
*/
- (void) addIndexes: (NSIndexSet*)aSet;
/**
* Adds all the indexes in aRange to the set of indexes stored in the receiver.
*/
- (void) addIndexesInRange: (NSRange)aRange;
/**
* Removes all indexes stored in the receiver.
*/
- (void) removeAllIndexes;
/**
* Removes anIndex from the set of indexes stored in the receiver.
*/
- (void) removeIndex: (NSUInteger)anIndex;
/**
* Removes all the indexes in aSet from the set of indexes
* stored in the receiver.
*/
- (void) removeIndexes: (NSIndexSet*)aSet;
/**
* Removes all the indexes in aRange from the set of indexes
* stored in the receiver.
*/
- (void) removeIndexesInRange: (NSRange)aRange;
/**
* Moves all the indexes from anIndex upwards by the amount specified.<br />
* If amount is negative, index values below anIndex will be overwritten
* by the shifted values.<br />
* If amount is positive, a 'hole' will be left in the index range after
* anIndex.
*/
- (void) shiftIndexesStartingAtIndex: (NSUInteger)anIndex
by: (NSInteger)amount;
@end
#if defined(__cplusplus)
}
#endif
#endif
#endif