On Oct 29, 2011, at 9:06 PM, Kelvin Chung wrote: > I have this Objective-C container which I want to use in an algorithm that > only takes STL iterators. Is there a generic adapter for NSEnumerator or > id<NSFastEnumeration> that will provide appropriate STL iterators?
I don't think there is, and there are two alternatives you can choose from to solve this task: Try to implement a C++ iterator yourself. You may take a look at the boost iterator library: <http://www.boost.org/doc/libs/1_47_0/libs/iterator/doc/index.html>. At least for NSArrays, this seems pretty easy. For NSDictionaries and other containers there is simply no low level API which would be helpful to implement an efficient C++ iterator adaptor and you probably have to use NSEnumerator, which is suboptimal. The second approach is to use a "block-based enumeration" and provide the algorithm implemented in C++ as a block. (please take a look at "Using Block-Based Enumeration"). > > Also, is there a way to tell the difference between two NSEnumerators (a la > STL iterator difference)? You probably meant "distance" - no, there is nothing like this in the Cocoa API. But once you have implemented a proper C++ iterator adapter around a Cocoa container and corresponding iterators, you just call std::distance(). But I can imagine only one use case where this really makes sense: when using NSArrays. In this case, you can evaluate the distance easily using the index. > Is equality defined for NSEnumerators? NSEnumerator is an abstract class inherited from NSObject. NSObject conforms to the protocol NSObject, which requires a method isEqual:. So, from this, is Equal: shall be "defined". What it actually returns, sorry, I don't know - it's not documented in those methods which return a concrete instance. In the usual use case, there is no need to send a message isEqual: to instances of NSEnumerator. > Is it possible to clone an NSEnumerator? Why want you do that? You may retain it. Well, please let me note this: I have the impression that you try to mix Objective-C and C++ at a too fine grained level. You should probably invest some effort to separate them more distinctly. Andreas > > _______________________________________________ > > Cocoa-dev mailing list (Cocoa-dev@lists.apple.com) > > Please do not post admin requests or moderator comments to the list. > Contact the moderators at cocoa-dev-admins(at)lists.apple.com > > Help/Unsubscribe/Update your Subscription: > http://lists.apple.com/mailman/options/cocoa-dev/agrosam%40onlinehome.de > > This email sent to agro...@onlinehome.de _______________________________________________ Cocoa-dev mailing list (Cocoa-dev@lists.apple.com) Please do not post admin requests or moderator comments to the list. Contact the moderators at cocoa-dev-admins(at)lists.apple.com Help/Unsubscribe/Update your Subscription: http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com This email sent to arch...@mail-archive.com