00001 // -*- C++ -*- 00002 00003 // Copyright (C) 2007 Free Software Foundation, Inc. 00004 // 00005 // This file is part of the GNU ISO C++ Library. This library is free 00006 // software; you can redistribute it and/or modify it under the terms 00007 // of the GNU General Public License as published by the Free Software 00008 // Foundation; either version 2, or (at your option) any later 00009 // version. 00010 00011 // This library is distributed in the hope that it will be useful, but 00012 // WITHOUT ANY WARRANTY; without even the implied warranty of 00013 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00014 // General Public License for more details. 00015 00016 // You should have received a copy of the GNU General Public License 00017 // along with this library; see the file COPYING. If not, write to 00018 // the Free Software Foundation, 59 Temple Place - Suite 330, Boston, 00019 // MA 02111-1307, USA. 00020 00021 // As a special exception, you may use this file as part of a free 00022 // software library without restriction. Specifically, if other files 00023 // instantiate templates or use macros or inline functions from this 00024 // file, or you compile this file and link it with other files to 00025 // produce an executable, this file does not by itself cause the 00026 // resulting executable to be covered by the GNU General Public 00027 // License. This exception does not however invalidate any other 00028 // reasons why the executable file might be covered by the GNU General 00029 // Public License. 00030 00031 /** 00032 * @file parallel/tags.h 00033 * @brief Tags for compile-time selection. 00034 * This file is a GNU parallel extension to the Standard C++ Library. 00035 */ 00036 00037 // Written by Johannes Singler and Felix Putze. 00038 00039 #ifndef _GLIBCXX_PARALLEL_TAGS_H 00040 #define _GLIBCXX_PARALLEL_TAGS_H 1 00041 00042 namespace __gnu_parallel 00043 { 00044 /** @brief Forces sequential execution at compile time. */ 00045 struct sequential_tag { }; 00046 00047 /** @brief Recommends parallel execution at compile time. */ 00048 struct parallel_tag { }; 00049 00050 /** @brief Recommends parallel execution using dynamic 00051 load-balancing at compile time. */ 00052 struct balanced_tag : public parallel_tag { }; 00053 00054 /** @brief Recommends parallel execution using static 00055 load-balancing at compile time. */ 00056 struct unbalanced_tag : public parallel_tag { }; 00057 00058 /** @brief Recommends parallel execution using OpenMP dynamic 00059 load-balancing at compile time. */ 00060 struct omp_loop_tag : public parallel_tag { }; 00061 00062 /** @brief Recommends parallel execution using OpenMP static 00063 load-balancing at compile time. */ 00064 struct omp_loop_static_tag : public parallel_tag { }; 00065 00066 00067 struct find_tag { }; 00068 00069 /** @brief Selects the growing block size variant for std::find(). 00070 @see _GLIBCXX_FIND_GROWING_BLOCKS */ 00071 struct growing_blocks_tag : public find_tag { }; 00072 00073 /** @brief Selects the constant block size variant for std::find(). 00074 @see _GLIBCXX_FIND_CONSTANT_SIZE_BLOCKS */ 00075 struct constant_size_blocks_tag : public find_tag { }; 00076 00077 /** @brief Selects the equal splitting variant for std::find(). 00078 @see _GLIBCXX_FIND_EQUAL_SPLIT */ 00079 struct equal_split_tag : public find_tag { }; 00080 } 00081 00082 #endif /* _GLIBCXX_PARALLEL_TAGS_H */