Created
October 19, 2014 01:43
-
-
Save schancel/49aa7b488bc20b71c4c9 to your computer and use it in GitHub Desktop.
Std.concepts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" | |
"http://www.w3.org/TR/html4/loose.dtd"> | |
<html lang='en-US'> | |
<!-- | |
Copyright (c) 1999-2010 by Digital Mars | |
All Rights Reserved Written by Walter Bright | |
http://www.digitalmars.com | |
--> | |
<head> | |
<meta http-equiv="content-type" content="text/html; charset=utf-8" > | |
<title>std.concepts - D Programming Language - Digital Mars</title> | |
<link rel="stylesheet" type="text/css" href="http://dlang.org/css/codemirror.css" /> | |
<link rel="stylesheet" type="text/css" href="http://dlang.org/css/style.css"> | |
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js" type="text/javascript"></script> | |
<script src="http://dlang.org/js/codemirror-compressed.js"></script> | |
<script src="http://dlang.org/js/run.js" type="text/javascript"></script> | |
<script type="text/javascript"> | |
function listanchors() | |
{ | |
if (typeof inhibitQuickIndex !== 'undefined') return; | |
var a = document.getElementById("quickindex"); | |
if (!a) return; | |
var lastName = function(a){ | |
var li = a.lastIndexOf('.'); | |
return a.slice(li + 1); | |
} | |
var hash = new Array; | |
var n = 0; | |
var values = new Array; | |
// List all anchors. | |
for (var i = 0; i < document.anchors.length; i++) | |
{ | |
var a = document.anchors[i]; | |
var text = a.name; | |
// ignore anchors from DDOC_PSYMBOL | |
if (text[0] != '.') continue; | |
// ignore name.2 anchors | |
if (!isNaN(lastName(text))) continue; | |
// ignore any remaining duplicates | |
if (hash[text] > 0) continue; | |
hash[text] = 1; | |
values[n++] = a.name | |
} | |
// we won't display the qualifying names to save space, so sort by last name | |
values.sort(function(a,b){ | |
return function(aa, bb){ | |
return aa == bb ? 0 : (aa < bb ? -1 : 1); | |
}(lastName(a).toLowerCase(), lastName(b).toLowerCase()); | |
}); | |
var newText = ""; | |
for(var i = 0; i < values.length; i++) { | |
var a = values[i]; | |
var text = lastName(a); | |
newText += ' \x3Ca href="\x23' + a + | |
'"\x3E\x3Cspan class="d_psymbol"\x3E' + text + '\x3C/span\x3E\x3C/a\x3E'; | |
} | |
if (newText != "") newText = "\x3Cp\x3E\x3Cb\x3EJump to:\x3C/b\x3E" + newText + "\x3C/p\x3E"; | |
var a = document.getElementById("quickindex"); | |
a.innerHTML = newText; | |
} | |
jQuery(document).ready(listanchors); | |
</script> | |
</head> | |
<body class='hyphenate'> | |
<div id="top"> | |
<div id="search-box"> | |
<form method="get" action="http://google.com/search"> | |
<img src="http://dlang.org/images/search-left.gif" width="11" height="22" alt=""><input id="q" name="q"><input type="image" id="search-submit" name="submit" src="http://dlang.org/images/search-button.gif"> | |
<input type="hidden" id="domains" name="domains" value="dlang.org"> | |
<input type="hidden" id="sourceid" name="sourceid" value="google-search"> | |
<div id="search-dropdown"> | |
<select id="sitesearch" name="sitesearch" size="1"> | |
<option value="dlang.org">Entire D Site</option> | |
<option value="dlang.org/phobos">Library Reference</option> | |
<option value="www.digitalmars.com/d/archives">Newsgroup Archives</option> | |
</select> | |
</div> | |
</form> | |
</div> | |
<div id="header"> | |
<a href="/"><img id="logo" width="125" height="95" border="0" alt="D Logo" src="http://dlang.org/images/dlogo.png"></a> | |
<a id="d-language" href="/">D Programming Language </a> | |
</div> | |
</div> | |
<h1>std.concepts</h1> | |
<div id=quickindex class=quickindex></div> | |
<!-- Generated by Ddoc from std/concepts.d --> | |
Functions and types that manipulate built-in arrays. | |
<p></p> | |
<b>License:</b><br><a href="http://boost.org/LICENSE_1_0.txt">Boost License 1.0</a>. | |
<p></p> | |
<b>Authors:</b><br>Shammah Chancellor | |
<p></p> | |
<b>Source:</b><br> | |
<a href="https://github.com/D-Programming-Language/phobos/blob/master/std/concepts.d">std/concepts.d</a><p></p> | |
<dl><dt class="d_decl"><a name=".isConcept"></a>bool <a name="isConcept"></a><span class="ddoc_psymbol">isConcept</span>(T, C, bool diagnostics = false, string errorPrefix = "")(); | |
</dt> | |
<dd>Returns <span class="d_inlinecode"><b>true</b></span> if <span class="d_inlinecode">T</span> supports the concept <span class="d_inlinecode">C</span>. Note, templated member functions are not supported currently. | |
<p></p> | |
Concepts should be defined as in the following example: | |
<pre class="d_code"><span class="d_keyword">class</span> CInputRange(E) : Concept | |
{ | |
<span class="d_keyword">abstract</span> <span class="d_keyword">void</span> popFront(); | |
@property <span class="d_keyword">abstract</span> E front(); | |
<span class="d_keyword">bool</span> empty; | |
<span class="d_comment">//Optional Axioms function. This will be checked if it compiles, and that it returns true if it does. | |
</span> <span class="d_keyword">static</span> <span class="d_keyword">bool</span> Axioms(T)() | |
{ | |
<span class="d_keyword">return</span> <span class="d_keyword">true</span>; | |
} | |
} | |
<span class="d_keyword">class</span> CInfinite() : Concept | |
{ | |
<span class="d_keyword">static</span> <span class="d_keyword">bool</span> Axioms(T)() { | |
<span class="d_keyword">enum</span> empty = T.empty; | |
<span class="d_keyword">return</span> !empty; | |
} | |
} | |
<span class="d_keyword">class</span> CInfiniteInputRange(E) : CInputRange!E | |
{ | |
<span class="d_keyword">mixin</span> CInfinite; | |
} | |
</pre> | |
<p></p> | |
</dd> | |
<dt class="d_decl"><a name=".conceptDiagnostic"></a>template <a name="conceptDiagnostic"></a><span class="ddoc_psymbol">conceptDiagnostic</span>(R, string F, int L, C...)</dt> | |
<dd>Prints error messages for why template instantiation failed. | |
<p></p> | |
<b>Examples:</b><br><pre class="d_code"><span class="d_keyword">bool</span> DoStuff(R)(R infRange) <span class="d_keyword">if</span> ( isConcept!(R, CInfiniteInputRange!string)) | |
{ | |
<span class="d_keyword">return</span> <span class="d_keyword">true</span>; | |
} | |
<span class="d_keyword">bool</span> DoStuff(R)(R infRange) <span class="d_keyword">if</span> ( isConcept!(R, COutputRange!string)) | |
{ | |
<span class="d_keyword">return</span> <span class="d_keyword">true</span>; | |
} | |
<span class="d_comment">//Example of using conceptDiagnostic | |
</span><span class="d_keyword">bool</span> DoStuff(R, string F = <span class="d_keyword">__FILE__</span>, size_t L = <span class="d_keyword">__LINE__</span> )(R infRange) | |
{ | |
<span class="d_keyword">mixin</span> <span class="d_psymbol">conceptDiagnostic</span>!(R, F, L, COutputRange!string, CInfiniteInputRange!string); | |
<span class="d_keyword">return</span> <span class="d_keyword">false</span>; | |
} | |
</pre> | |
<p></p> | |
</dd> | |
<dt class="d_decl"><a name=".Concept"></a>class <a name="Concept"></a><span class="ddoc_psymbol">Concept</span>; | |
</dt> | |
<dd>Base class for Concepts. All Concepts should derive from this, or another concept.<p></p> | |
</dd> | |
</dl> | |
</div><!--/content--> | |
<div id="copyright"> | |
Copyright Shammah Chancellor 2014- . | |
| | |
Page generated by <a href="http://www.digitalmars.com/d/2.0/ddoc.html">Ddoc</a>. | |
</div> | |
</body> | |
</html> | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment