FUnknown/FObject Containers
[Template Containers]

This group contains some classes and macros that allow collecting instances of FUnknown or FObject in template containers. More...

Collaboration diagram for FUnknown/FObject Containers:

Data Structures

class  FSortablePtr< I >
 Extends IPtr to allow sorted containers. More...
class  FComparablePtr< I >
 Extends IPtr to allow comparison in containers. More...

Defines

#define FOREACH_O(type, varName, cont)
 Iterates a IPtr container.
#define FOREACH_O_REVERSE(type, varName, cont)
 Iterates a IPtr container reverse.
#define FOREACH_CAST(baseType, type, varName, cont)
 Iterates a template container - used with a basic item type that can be converted to another type using Steinberg::FCast.
#define FOREACH_CAST_REVERSE(baseType, type, varName, cont)
 Just like /ref FOREACH_CAST only in reverse order.
#define ARRAY_FOR_EACH_CAST(type, obj, containter)
 Special array iteration macro - can be used instead of FOREACH_CAST.
#define ARRAY_FOR_EACH_REVERSE_CAST(type, obj, containter)
 Special array iteration macro - can be used instead of FOREACH_CAST_REVERSE.

Typedefs

typedef TArray< IPtr< FUnknown > > FArray
 Array holding FUnknown pointers.
typedef TLinkedList< IPtr
< FUnknown > > 
FLinkedList
 Linked List holding FUnknown pointers.
typedef TContainer< IPtr
< FUnknown > > 
FContainer
 Template container holding FUnknown pointers - can be used as function parameter.

Detailed Description

This group contains some classes and macros that allow collecting instances of FUnknown or FObject in template containers.

When instances of FUnknown or FObject should be stored in one of the template collection classes and reference counting is required, this can be handled using the smart pointer class IPtr like this:

TLinkedList <IPtr <StringObject> > stringList;
StringObject* test = new StringObject ("test");
stringList.add (test);
test->release ();

String tmp;
FOREACH_O (StringObject, str, stringList)
   tmp += str->text ();
ENDFOR

Define Documentation

#define FOREACH_O ( type,
varName,
cont   ) 
Value:
{ \
   Steinberg::TIterator<IPtr<type > >* iter = (cont).newIterator (); \
   Steinberg::FDeleter <Steinberg::TIterator<IPtr<type > > > iterDeleter (iter);\
   while (!iter->done ()) { \
      type* varName = iter->next ();

Iterates a IPtr container.

This macro does not support casting.

#define FOREACH_O_REVERSE ( type,
varName,
cont   ) 
Value:
{ \
   Steinberg::TIterator<IPtr<type > >* iter = (cont).newIterator (); \
   Steinberg::FDeleter <Steinberg::TIterator<IPtr<type > > > iterDeleter (iter);\
   iter->last (); \
   while (!iter->done ()) { \
      type* varName = iter->previous ();

Iterates a IPtr container reverse.

This macro does not support casting.

#define FOREACH_CAST ( baseType,
type,
varName,
cont   ) 
Value:
{ \
   Steinberg::TIterator<baseType >* iter = (cont).newIterator (); \
   Steinberg::FDeleter <Steinberg::TIterator<baseType > > iterDeleter (iter);\
   while (!iter->done ()) { \
      type* varName = Steinberg::FCast<type >(iter->next ()); \
      if (varName == 0) continue;

Iterates a template container - used with a basic item type that can be converted to another type using Steinberg::FCast.

When the cast fails, the object is skipped. Example:

   TLinkedList <IPtr <FUnknown> > stringList;
   StringObject* test = new StringObject ("test");
   stringList.add (test->unknownCast ());
   test->release ();

   String tmp;
   FOREACH_CAST (IPtr <FUnknown>, StringObject, str, stringList)
      tmp += str->text ();
   ENDFOR
#define FOREACH_CAST_REVERSE ( baseType,
type,
varName,
cont   ) 
Value:
{ \
   Steinberg::TIterator<baseType >* iter = (cont).newIterator (); \
   Steinberg::FDeleter <Steinberg::TIterator<baseType > > iterDeleter (iter);\
   iter->last (); \
   while (!iter->done ()) { \
      type* varName = Steinberg::FCast<type >(iter->previous ()); \
      if (varName == 0) continue;

Just like /ref FOREACH_CAST only in reverse order.

#define ARRAY_FOR_EACH_CAST ( type,
obj,
containter   ) 
Value:
{ for (int32 i = 0; i < containter.total (); i++)                      \
{ type* obj = Steinberg::FCast<type > (containter.at (i));                      \
if (!obj) continue;

Special array iteration macro - can be used instead of FOREACH_CAST.

#define ARRAY_FOR_EACH_REVERSE_CAST ( type,
obj,
containter   ) 
Value:
{ for (int32 i = containter.total () - 1; i >= 0 ; i--)                \
{ type* obj = Steinberg::FCast<type > (containter.at (i));                      \
if (!obj) continue;

Special array iteration macro - can be used instead of FOREACH_CAST_REVERSE.


Typedef Documentation

typedef TArray<IPtr <FUnknown> > FArray

Array holding FUnknown pointers.

typedef TLinkedList<IPtr <FUnknown> > FLinkedList

Linked List holding FUnknown pointers.

typedef TContainer<IPtr <FUnknown> > FContainer

Template container holding FUnknown pointers - can be used as function parameter.

 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Defines
Empty

Copyright ©2013 Steinberg Media Technologies GmbH. All Rights Reserved.