This is the mail archive of the
libstdc++@gcc.gnu.org
mailing list for the libstdc++ project.
Re: First patch to simplify <algorithm>
- From: Gabriel Dos Reis <gdr at integrable-solutions dot net>
- To: caj <caj at cs dot york dot ac dot uk>
- Cc: libstdc++ at gcc dot gnu dot org
- Date: 05 Dec 2004 15:43:42 +0100
- Subject: Re: First patch to simplify <algorithm>
- Organization: Integrable Solutions
- References: <41B3163C.4030401@cs.york.ac.uk> <41B316B3.6080202@cs.york.ac.uk>
caj <caj@cs.york.ac.uk> writes:
| Woops, missed a file I should have attached. Sorry.
|
| // Default predicates for use in algorithm -*- C++ -*-.
|
| // Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004
| // Free Software Foundation, Inc.
| //
| // This file is part of the GNU ISO C++ Library. This library is free
| // software; you can redistribute it and/or modify it under the
| // terms of the GNU General Public License as published by the
| // Free Software Foundation; either version 2, or (at your option)
| // any later version.
|
| // This library is distributed in the hope that it will be useful,
| // but WITHOUT ANY WARRANTY; without even the implied warranty of
| // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
| // GNU General Public License for more details.
|
| // You should have received a copy of the GNU General Public License along
| // with this library; see the file COPYING. If not, write to the Free
| // Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
| // USA.
|
| // As a special exception, you may use this file as part of a free software
| // library without restriction. Specifically, if other files instantiate
| // templates or use macros or inline functions from this file, or you compile
| // this file and link it with other files to produce an executable, this
| // file does not by itself cause the resulting executable to be covered by
| // the GNU General Public License. This exception does not however
| // invalidate any other reasons why the executable file might be covered by
| // the GNU General Public License.
|
| // Written by Chris Jefferson <chris@bubblescope.net>
|
| /** @file default_preds.h
I would suggest predefined_ops.h. The reason this is more about
language built-in operators turned into that function objects than
mere predicates.
| * This is an internal header file, included by other library headers.
| * You should not attempt to use it directly.
| */
|
| #ifndef _DEFAULT_PREDS_H
| #define _DEFAULT_PREDS_H 1
|
| #pragma GCC system_header
|
| namespace std
| {
| template<typename _Tp1, typename _Tp2 = _Tp1>
| struct __default_eq_pred
| {
| bool
| operator()(const _Tp1& __t1, const _Tp2& __t2)
| { return __t1 == __t2; }
| };
I have a slight preference for
(1) putting the stuff in __gnu_cxx::
(2) using standard names, e.g. equal, less, greater, ...
They are already reserved for implementation.
(3) making the operator a member template, instead of parameterizing
the whole class; they should be const-members.
E.g.
namespace __gnu_cxx
{
struct less {
template<class _Tp1, class _Tp2>
bool operator()(const _Tp1& __lrhs, const _Tp2& __rhs) const
{ return __lhs < __rhs; }
}
There might arise some issues with associated types, though they are
easily dealt with.
-- Gaby