111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// -*- C++ -*- 211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// Copyright (C) 2007-2014 Free Software Foundation, Inc. 411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// 511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// This file is part of the GNU ISO C++ Library. This library is free 611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// software; you can redistribute it and/or modify it under the terms 711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// of the GNU General Public License as published by the Free Software 811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// Foundation; either version 3, or (at your option) any later 911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// version. 1011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 1111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// This library is distributed in the hope that it will be useful, but 1211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// WITHOUT ANY WARRANTY; without even the implied warranty of 1311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 1411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// General Public License for more details. 1511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 1611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// Under Section 7 of GPL version 3, you are granted additional 1711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// permissions described in the GCC Runtime Library Exception, version 1811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// 3.1, as published by the Free Software Foundation. 1911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 2011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// You should have received a copy of the GNU General Public License and 2111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// a copy of the GCC Runtime Library Exception along with this program; 2211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see 2311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// <http://www.gnu.org/licenses/>. 2411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 2511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/** @file parallel/checkers.h 2611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * @brief Routines for checking the correctness of algorithm results. 2711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * This file is a GNU parallel extension to the Standard C++ Library. 2811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert */ 2911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 3011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// Written by Johannes Singler. 3111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 3211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#ifndef _GLIBCXX_PARALLEL_CHECKERS_H 3311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define _GLIBCXX_PARALLEL_CHECKERS_H 1 3411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 3511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <cstdio> 3611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <bits/stl_algobase.h> 3711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <bits/stl_function.h> 3811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 3911cd02dfb91661c65134cac258cf5924270e9d2Dan Albertnamespace __gnu_parallel 4011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{ 4111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert /** 4211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * @brief Check whether @c [__begin, @c __end) is sorted according 4311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * to @c __comp. 4411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * @param __begin Begin iterator of sequence. 4511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * @param __end End iterator of sequence. 4611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * @param __comp Comparator. 4711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * @return @c true if sorted, @c false otherwise. 4811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert */ 4911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert template<typename _IIter, typename _Compare> 5011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert bool 5111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __is_sorted(_IIter __begin, _IIter __end, _Compare __comp) 5211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { 5311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert if (__begin == __end) 5411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return true; 5511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 5611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _IIter __current(__begin), __recent(__begin); 5711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 5811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert unsigned long long __position = 1; 5911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert for (__current++; __current != __end; __current++) 6011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { 6111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert if (__comp(*__current, *__recent)) 6211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { 6311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return false; 6411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 6511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __recent = __current; 6611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __position++; 6711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 6811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 6911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return true; 7011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 7111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert} 7211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 7311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif /* _GLIBCXX_PARALLEL_CHECKERS_H */ 74