• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
Re: STL algorithms and NSEnumerator/NSFastEnumeration
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: STL algorithms and NSEnumerator/NSFastEnumeration


  • Subject: Re: STL algorithms and NSEnumerator/NSFastEnumeration
  • From: Andreas Grosam <email@hidden>
  • Date: Mon, 31 Oct 2011 09:39:55 +0100

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 (email@hidden)
>
> 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:
>
> This email sent to email@hidden

_______________________________________________

Cocoa-dev mailing list (email@hidden)

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:

This email sent to email@hidden

References: 
 >STL algorithms and NSEnumerator/NSFastEnumeration (From: Kelvin Chung <email@hidden>)

  • Prev by Date: Re: Write to file Entitlement
  • Next by Date: Re: How to draw over a control in an NSView
  • Previous by thread: STL algorithms and NSEnumerator/NSFastEnumeration
  • Next by thread: NSOutlineView drag and drop: how to prevent parent being dropped on one of its children
  • Index(es):
    • Date
    • Thread