Which tag loop is faster?

THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

On 20/09/2006 at 01:23, xxxxxxxx wrote:

User Information:
Cinema 4D Version:   9.102 
Platform:   Windows  ;   Mac OSX  ; 
Language(s) :     C++  ;

---------
Which of these loops to get a particular type of tag on an object is faster (if there's any difference)?

for (pt = obj->GetFirstTag(); pt; pt = pt->GetNext())  
{  
     if (!pt->IsInstanceOf(ID_IPPDIALTAG))     continue;

- OR -

for (LONG nr = 0; pt = obj->GetTag(ID_IPPDIALTAG, nr); nr++)  
{

Thanks,

THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

On 24/09/2006 at 01:31, xxxxxxxx wrote:

The second one is kind of misused. The GetTag command will loop internally until it finds a tag of this type, so there´s no need for a loop.

It should therefore also be faster than the first one.

THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

On 24/09/2006 at 02:01, xxxxxxxx wrote:

Well, there is a need for a loop if you are getting 'all' of the similar tags on an object. 🙂 That's why I ask since the most expedience in traversing a set of particular tags is required.

In this case, do you think that the first or second is more expedient?

Thanks,

THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

On 24/09/2006 at 13:02, xxxxxxxx wrote:

I'd guess that the first is O(n) and the second O(n^2). So the first one should win.

THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

On 24/09/2006 at 14:03, xxxxxxxx wrote:

Is this because GetTag() initiates its own loop to traverse up to the next valid tag? If so, then time for some updating. 🙂

Thanks!

THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

On 26/09/2006 at 21:55, xxxxxxxx wrote:

That seems to settle it. There were something like 90+ of the GetTag() loops and all were replaced with the other type. The results definitely showed an improvement in speed.

Thank you very much - sometimes purile, but it is easier to ask and take advice than to change large areas of code blindly. 🙂

Robert

THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

On 29/09/2006 at 07:02, xxxxxxxx wrote:

IT would be great if GetTag() would return the location of the found tag. That way one could go on from this position+1 to get the next tag in the row of the same type.

Take this as a suggestion Mikael 😉