Skip to content

Instantly share code, notes, and snippets.

@schancel
Created October 19, 2014 01:43
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save schancel/49aa7b488bc20b71c4c9 to your computer and use it in GitHub Desktop.
Save schancel/49aa7b488bc20b71c4c9 to your computer and use it in GitHub Desktop.
Std.concepts
<!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