ae.utils.meta

Metaprogramming

Modules

binding
module ae.utils.meta.binding

Method binding - using alias inference patch

binding_v1
module ae.utils.meta.binding_v1

Method binding - before alias inference

caps
module ae.utils.meta.caps

Compiler capability detection

proxy
module ae.utils.meta.proxy

Proxy objects

reference
module ae.utils.meta.reference

Reference type abstraction

x
module ae.utils.meta.x

An implementation of Timon Gehr's X template

Members

Aliases

ExpandNumericType
alias ExpandNumericType(T, uint additionalBits) = ResizeNumericType!(T, valueBits!T + additionalBits)

Expand to a built-in numeric type of the same kind (signed integer / unsigned integer / floating-point) with at least additionalBits more bits of precision.

I
alias I(alias A) = A

Shorter synonym for std.traits.Identity. Can be used to UFCS-chain static methods and nested functions.

Manifest constants

isDebug
enum isDebug;

Were we built with -debug?

Mixin templates

FieldList
mixin template FieldList(Fields...)

Like std.typecons.Tuple, but a template mixin. Unlike std.typecons.Tuple, names may not be omitted - but repeating types may be.

GenerateContructorProxies
mixin template GenerateContructorProxies()

Generate constructors that simply call the parent class constructors. Based on http://forum.dlang.org/post/i3hpj0$2vc6$1@digitalmars.com

Properties

enumIota
auto enumIota [@property getter]

A range that iterates over all members of an enum.

isHomogenous
bool isHomogenous [@property getter]

Return true if all of T's fields are the same type.

singleton
T singleton [@property getter]

Generate a @property function which creates/returns a thread-local singleton of a class with the given arguments.

structFields
string[] structFields [@property getter]

Evaluates to array of strings with name for each field.

Static functions

findParameter
size_t findParameter()
size_t findParameter(string[] searchedNames, string soughtNames, string funName)

Returns the index of fun's parameter with the name matching "names", or asserts if the parameter is not found. "names" can contain multiple names separated by slashes.

Templates

CTIterate
template CTIterate(alias A)

Return something to foreach over optimally. If A is known at compile-time, return a tuple, so the foreach is unrolled at compile-time. Otherwise, return A for a regular runtime foreach.

RangeTuple
template RangeTuple(size_t N)

Generate a tuple containing integers from 0 to N-1. Useful for static loop unrolling. (staticIota)

ResizeNumericType
template ResizeNumericType(T, uint bits)

Expand to a built-in numeric type of the same kind (signed integer / unsigned integer / floating-point) with at least the indicated number of bits of precision.

UnsignedBitsType
template UnsignedBitsType(uint bits)

Unsigned integer type big enough to fit N bits of precision.

ValueTuple
template ValueTuple(T...)

Same as TypeTuple, but meant to be used with values.

enumLength
template enumLength(T)

One past the biggest element of the enum T.

isVersion
template isVersion(string versionName)

Is a specific version on?

structFun
template structFun(S)

Generates a function which passes its arguments to a struct, which is returned. Preserves field names (as parameter names) and default values.

thisOf
template thisOf(alias f)

Get f's ancestor which represents its "this" pointer. Skips template and mixin ancestors until it finds a struct or class.

valueBits
template valueBits(T)

Return the number of bits used to store the value part, i.e. T.sizeof*8 for integer parts and the mantissa size for floating-point types.

Meta

Authors

Vladimir Panteleev <vladimir@thecybershadow.net>

License

This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/.