mirror of
https://github.com/dlang/phobos.git
synced 2025-04-29 14:40:30 +03:00
Update module & TypeTuple doc
Set module name = std.meta.list Add example of TypeTuple with non-type arguments Change usage of typetuple -> list Fix using 'type' where non-types are acceptable
This commit is contained in:
parent
40f4796d55
commit
70fb65af0c
2 changed files with 39 additions and 30 deletions
|
@ -1,14 +1,16 @@
|
||||||
// Written in the D programming language.
|
// Written in the D programming language.
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Templates with which to manipulate type tuples (also known as type lists).
|
* Templates with which to manipulate
|
||||||
|
* $(LINK2 ../template.html#TemplateArgumentList, $(I TemplateArgumentList))s.
|
||||||
|
* Such lists are known as type lists when they only contain types.
|
||||||
*
|
*
|
||||||
* Some operations on type tuples are built in to the language,
|
* Some operations on template argument lists are built in to the language,
|
||||||
* such as TL[$(I n)] which gets the $(I n)th type from the
|
* such as $(D Args[$(I n)]) which gets the $(I n)th element from the
|
||||||
* type tuple. TL[$(I lwr) .. $(I upr)] returns a new type
|
* _list. $(D Args[$(I lwr) .. $(I upr)]) returns a new
|
||||||
* list that is a slice of the old one.
|
* _list that is a slice of the old one. This is analogous to array slicing syntax.
|
||||||
*
|
*
|
||||||
* Several templates in this module use or operate on eponymous templates that
|
* Several templates in this module use or operate on enum templates that
|
||||||
* take a single argument and evaluate to a boolean constant. Such templates
|
* take a single argument and evaluate to a boolean constant. Such templates
|
||||||
* are referred to as $(I template predicates).
|
* are referred to as $(I template predicates).
|
||||||
*
|
*
|
||||||
|
@ -18,29 +20,26 @@
|
||||||
* Modern C++ Design),
|
* Modern C++ Design),
|
||||||
* Andrei Alexandrescu (Addison-Wesley Professional, 2001)
|
* Andrei Alexandrescu (Addison-Wesley Professional, 2001)
|
||||||
* Macros:
|
* Macros:
|
||||||
* WIKI = Phobos/StdTypeTuple
|
* WIKI = Phobos/StdMeta
|
||||||
*
|
*
|
||||||
* Copyright: Copyright Digital Mars 2005 - 2009.
|
* Copyright: Copyright Digital Mars 2005 - 2009.
|
||||||
* License: $(WEB www.boost.org/LICENSE_1_0.txt, Boost License 1.0).
|
* License: $(WEB www.boost.org/LICENSE_1_0.txt, Boost License 1.0).
|
||||||
* Authors:
|
* Authors:
|
||||||
* $(WEB digitalmars.com, Walter Bright),
|
* $(WEB digitalmars.com, Walter Bright),
|
||||||
* $(WEB klickverbot.at, David Nadlinger)
|
* $(WEB klickverbot.at, David Nadlinger)
|
||||||
* Source: $(PHOBOSSRC std/_typetuple.d)
|
* Source: $(PHOBOSSRC std/meta/_list.d)
|
||||||
*/
|
*/
|
||||||
/* Copyright Digital Mars 2005 - 2009.
|
/* Copyright Digital Mars 2005 - 2009.
|
||||||
* Distributed under the Boost Software License, Version 1.0.
|
* Distributed under the Boost Software License, Version 1.0.
|
||||||
* (See accompanying file LICENSE_1_0.txt or copy at
|
* (See accompanying file LICENSE_1_0.txt or copy at
|
||||||
* http://www.boost.org/LICENSE_1_0.txt)
|
* http://www.boost.org/LICENSE_1_0.txt)
|
||||||
*/
|
*/
|
||||||
module std.typetuple;
|
module std.meta.list;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a typetuple out of a sequence of zero or more types.
|
* Aliases the given compile-time list of template arguments.
|
||||||
*/
|
*/
|
||||||
template TypeTuple(TList...)
|
alias TypeTuple(Args...) = Args;
|
||||||
{
|
|
||||||
alias TypeTuple = TList;
|
|
||||||
}
|
|
||||||
|
|
||||||
///
|
///
|
||||||
unittest
|
unittest
|
||||||
|
@ -52,10 +51,20 @@ unittest
|
||||||
{
|
{
|
||||||
return td[0] + cast(int)td[1];
|
return td[0] + cast(int)td[1];
|
||||||
}
|
}
|
||||||
|
assert(foo(2, 3.5) == 5);
|
||||||
}
|
}
|
||||||
|
|
||||||
///
|
///
|
||||||
unittest
|
unittest
|
||||||
|
{
|
||||||
|
alias numbers = TypeTuple!(1, 2, 3);
|
||||||
|
static int[3] arr = [numbers];
|
||||||
|
|
||||||
|
assert(arr == [1, 2, 3]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Lists do not nest:
|
||||||
|
unittest
|
||||||
{
|
{
|
||||||
alias TL = TypeTuple!(int, double);
|
alias TL = TypeTuple!(int, double);
|
||||||
|
|
||||||
|
@ -64,8 +73,8 @@ unittest
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the index of the first occurrence of type T in the
|
* Returns the index of the first occurrence of T in the
|
||||||
* sequence of zero or more types TList.
|
* sequence of zero or more elements TList.
|
||||||
* If not found, -1 is returned.
|
* If not found, -1 is returned.
|
||||||
*/
|
*/
|
||||||
template staticIndexOf(T, TList...)
|
template staticIndexOf(T, TList...)
|
||||||
|
@ -82,7 +91,7 @@ template staticIndexOf(alias T, TList...)
|
||||||
///
|
///
|
||||||
unittest
|
unittest
|
||||||
{
|
{
|
||||||
import std.typetuple;
|
import std.meta.list;
|
||||||
import std.stdio;
|
import std.stdio;
|
||||||
|
|
||||||
void foo()
|
void foo()
|
||||||
|
@ -147,7 +156,7 @@ unittest
|
||||||
alias IndexOf = staticIndexOf;
|
alias IndexOf = staticIndexOf;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns a typetuple created from TList with the first occurrence,
|
* Returns a list created from TList with the first occurrence,
|
||||||
* if any, of T removed.
|
* if any, of T removed.
|
||||||
*/
|
*/
|
||||||
template Erase(T, TList...)
|
template Erase(T, TList...)
|
||||||
|
@ -205,7 +214,7 @@ unittest
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns a typetuple created from TList with the all occurrences,
|
* Returns a list created from TList with all occurrences,
|
||||||
* if any, of T removed.
|
* if any, of T removed.
|
||||||
*/
|
*/
|
||||||
template EraseAll(T, TList...)
|
template EraseAll(T, TList...)
|
||||||
|
@ -265,8 +274,8 @@ unittest
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns a typetuple created from TList with the all duplicate
|
* Returns a list created from TList with all duplicate
|
||||||
* types removed.
|
* elements removed.
|
||||||
*/
|
*/
|
||||||
template NoDuplicates(TList...)
|
template NoDuplicates(TList...)
|
||||||
{
|
{
|
||||||
|
@ -296,8 +305,8 @@ unittest
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns a typetuple created from TList with the first occurrence
|
* Returns a list created from TList with the first occurrence
|
||||||
* of type T, if found, replaced with type U.
|
* of T, if found, replaced with U.
|
||||||
*/
|
*/
|
||||||
template Replace(T, U, TList...)
|
template Replace(T, U, TList...)
|
||||||
{
|
{
|
||||||
|
@ -376,8 +385,8 @@ unittest
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns a typetuple created from TList with all occurrences
|
* Returns a list created from TList with each occurrence
|
||||||
* of type T, if found, replaced with type U.
|
* of T, if found, replaced with U.
|
||||||
*/
|
*/
|
||||||
template ReplaceAll(T, U, TList...)
|
template ReplaceAll(T, U, TList...)
|
||||||
{
|
{
|
||||||
|
@ -456,7 +465,7 @@ unittest
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns a typetuple created from TList with the order reversed.
|
* Returns a list created from TList with the order reversed.
|
||||||
*/
|
*/
|
||||||
template Reverse(TList...)
|
template Reverse(TList...)
|
||||||
{
|
{
|
||||||
|
@ -509,7 +518,7 @@ unittest
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the typetuple TList with the types sorted so that the most
|
* Returns the list TList with the types sorted so that the most
|
||||||
* derived types come first.
|
* derived types come first.
|
||||||
*/
|
*/
|
||||||
template DerivedToFront(TList...)
|
template DerivedToFront(TList...)
|
||||||
|
@ -652,8 +661,8 @@ unittest
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Filters a $(D TypeTuple) using a template predicate. Returns a
|
* Filters a list using a template predicate. Returns a
|
||||||
* $(D TypeTuple) of the elements which satisfy the predicate.
|
* list of the elements which satisfy the predicate.
|
||||||
*/
|
*/
|
||||||
template Filter(alias pred, TList...)
|
template Filter(alias pred, TList...)
|
||||||
{
|
{
|
||||||
|
|
|
@ -54,7 +54,7 @@ version(unittest) {
|
||||||
* $(D TypeList)s are passed to other templates as alias parameters
|
* $(D TypeList)s are passed to other templates as alias parameters
|
||||||
* To create an empty list use $(D TypeList!())
|
* To create an empty list use $(D TypeList!())
|
||||||
*
|
*
|
||||||
* $(D TypeList) efines several "methods":
|
* $(D TypeList) defines several "methods":
|
||||||
*
|
*
|
||||||
* $(D_PARAM toTuple), $(D_PARAM head), $(D_PARAM tail), $(D_PARAM length), $(D_PARAM isEmpty)
|
* $(D_PARAM toTuple), $(D_PARAM head), $(D_PARAM tail), $(D_PARAM length), $(D_PARAM isEmpty)
|
||||||
*
|
*
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue