## Public API Reference

- Main Page
- Modules
- Namespaces
- Classes
- Files
- Related Pages

- File List
- File Members

# csutil/algorithms.h

Go to the documentation of this file.

    00001 /*
    00002   Crystal Space General Algorithms
    00003   Copyright (C)2005 by Marten Svanfeldt
    00004
    00005   This library is free software; you can redistribute it and/or
    00006   modify it under the terms of the GNU Library General Public
    00007   License as published by the Free Software Foundation; either
    00008   version 2 of the License, or (at your option) any later version.
    00009
    00010   This library is distributed in the hope that it will be useful,
    00011   but WITHOUT ANY WARRANTY; without even the implied warranty of
    00012   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    00013   Library General Public License for more details.
    00014
    00015   You should have received a copy of the GNU Library General Public
    00016   License along with this library; if not, write to the Free
    00017   Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
    00018 */
    00019
    00020 #ifndef __CSUTIL_ALGORITHMS_H__
    00021 #define __CSUTIL_ALGORITHMS_H__
    00022
    00027 namespace CrystalSpace
    00028 {
    00039   template <class T, class Fn>
    00040   inline Fn& ForEach (T it, Fn& Func)
    00041   {
    00042     while (it.HasNext ())
    00043     {
    00044       Func (it.Next ());
    00045     }
    00046     return Func;
    00047   }
    00048
    00050   template <class T1, class T2>
    00051   struct ConditionAnd
    00052   {
    00053     ConditionAnd (T1 op1, T2 op2)
    00054     { }
    00055
    00056     template<class T>
    00057     bool operator () (T obj)
    00058     {
    00059       return (op1 (obj) && op2 (obj));
    00060     }
    00061   private:
    00062     T1 op1;
    00063     T2 op2;
    00064   };
    00065 }
    00066
    00067 #endif