This is the mail archive of the libstdc++@gcc.gnu.org mailing list for the libstdc++ project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: First patch to simplify <algorithm>


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]