Move iterator_range to a new iterator-utils.h file

A later patch will add more iterator-related utilities.  Rather than
putting them all directly in coretypes.h, it seemed better to add a
new header file, here called "iterator-utils.h".  This preliminary
patch moves the existing iterator_range class there too.

I used the same copyright date range as coretypes.h “just to be sure”.

gcc/
	* coretypes.h (iterator_range): Move to...
	* iterator-utils.h: ...this new file.
This commit is contained in:
Richard Sandiford 2020-12-13 10:41:08 +00:00
parent 6ad972ece1
commit 1751a78eca
2 changed files with 45 additions and 17 deletions

View File

@ -367,23 +367,6 @@ struct kv_pair
const ValueType value; /* the value of the name */
};
/* Iterator pair used for a collection iteration with range-based loops. */
template<typename T>
struct iterator_range
{
public:
iterator_range (const T &begin, const T &end)
: m_begin (begin), m_end (end) {}
T begin () const { return m_begin; }
T end () const { return m_end; }
private:
T m_begin;
T m_end;
};
#else
struct _dont_use_rtx_here_;
@ -491,6 +474,7 @@ typedef unsigned char uchar;
#include "align.h"
/* Most host source files will require the following headers. */
#if !defined (GENERATOR_FILE)
#include "iterator-utils.h"
#include "real.h"
#include "fixed-value.h"
#include "hash-table.h"

44
gcc/iterator-utils.h Normal file
View File

@ -0,0 +1,44 @@
// Iterator-related utilities.
// Copyright (C) 2002-2020 Free Software Foundation, Inc.
//
// This file is part of GCC.
//
// GCC 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 3, or (at your option) any later
// version.
//
// GCC 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 GCC; see the file COPYING3. If not see
// <http://www.gnu.org/licenses/>.
#ifndef GCC_ITERATOR_UTILS_H
#define GCC_ITERATOR_UTILS_H 1
// A half-open [begin, end) range of iterators.
template<typename T>
struct iterator_range
{
public:
using const_iterator = T;
iterator_range () = default;
iterator_range (const T &begin, const T &end)
: m_begin (begin), m_end (end) {}
T begin () const { return m_begin; }
T end () const { return m_end; }
explicit operator bool () const { return m_begin != m_end; }
private:
T m_begin;
T m_end;
};
#endif