[PATCH] iterator_range rebinding
Aaron Ballman
aaron at aaronballman.com
Fri Mar 7 13:56:02 PST 2014
I have a situation that comes up fairly frequently in clang where we
have an iterator, and then a templated "specific" version of the
iterator. For instance decl_iterator and specific_decl_iterator,
attr_iterator and specific_attr_iterator, etc.
This patch is proposing a template constructor for iterator_range that
allows you to rebind an existing iterator_range of a different type.
This would allow me to do things like:
// In DeclBase.h
template <typename SpecificDecl>
using specific_decl_range =
llvm::iterator_range<specific_decl_iterator<SpecificDecl>>;
decl_range decls() const;
// In Decl.h
typedef specific_decl_range<EnumConstantDecl> enumerator_range;
enumerator_range enumerators() const {
const EnumDecl *E = getDefinition();
if (!E)
E = this;
return enumerator_range(E->decls());
}
Is this a reasonable approach, or is there a better way? Thanks!
~Aaron
-------------- next part --------------
A non-text attachment was scrubbed...
Name: iterator_range.h.patch
Type: application/octet-stream
Size: 610 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20140307/2e5c1a36/attachment.obj>
More information about the llvm-commits
mailing list