1
0
mirror of https://github.com/TREX-CoE/qmckl.git synced 2024-11-03 12:43:57 +01:00
qmckl/qmckl_context.html
2020-10-28 23:57:26 +00:00

740 lines
22 KiB
HTML

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<title>Context</title>
<!-- 2020-10-28 Wed 23:57 -->
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<meta name="generator" content="Org-mode" />
<style type="text/css">
<!--/*--><![CDATA[/*><!--*/
.title { text-align: center; }
.todo { font-family: monospace; color: red; }
.done { color: green; }
.tag { background-color: #eee; font-family: monospace;
padding: 2px; font-size: 80%; font-weight: normal; }
.timestamp { color: #bebebe; }
.timestamp-kwd { color: #5f9ea0; }
.right { margin-left: auto; margin-right: 0px; text-align: right; }
.left { margin-left: 0px; margin-right: auto; text-align: left; }
.center { margin-left: auto; margin-right: auto; text-align: center; }
.underline { text-decoration: underline; }
#postamble p, #preamble p { font-size: 90%; margin: .2em; }
p.verse { margin-left: 3%; }
pre {
border: 1px solid #ccc;
box-shadow: 3px 3px 3px #eee;
padding: 8pt;
font-family: monospace;
overflow: auto;
margin: 1.2em;
}
pre.src {
position: relative;
overflow: visible;
padding-top: 1.2em;
}
pre.src:before {
display: none;
position: absolute;
background-color: white;
top: -10px;
right: 10px;
padding: 3px;
border: 1px solid black;
}
pre.src:hover:before { display: inline;}
pre.src-sh:before { content: 'sh'; }
pre.src-bash:before { content: 'sh'; }
pre.src-emacs-lisp:before { content: 'Emacs Lisp'; }
pre.src-R:before { content: 'R'; }
pre.src-perl:before { content: 'Perl'; }
pre.src-java:before { content: 'Java'; }
pre.src-sql:before { content: 'SQL'; }
table { border-collapse:collapse; }
caption.t-above { caption-side: top; }
caption.t-bottom { caption-side: bottom; }
td, th { vertical-align:top; }
th.right { text-align: center; }
th.left { text-align: center; }
th.center { text-align: center; }
td.right { text-align: right; }
td.left { text-align: left; }
td.center { text-align: center; }
dt { font-weight: bold; }
.footpara:nth-child(2) { display: inline; }
.footpara { display: block; }
.footdef { margin-bottom: 1em; }
.figure { padding: 1em; }
.figure p { text-align: center; }
.inlinetask {
padding: 10px;
border: 2px solid gray;
margin: 10px;
background: #ffffcc;
}
#org-div-home-and-up
{ text-align: right; font-size: 70%; white-space: nowrap; }
textarea { overflow-x: auto; }
.linenr { font-size: smaller }
.code-highlighted { background-color: #ffff00; }
.org-info-js_info-navigation { border-style: none; }
#org-info-js_console-label
{ font-size: 10px; font-weight: bold; white-space: nowrap; }
.org-info-js_search-highlight
{ background-color: #ffff00; color: #000000; font-weight: bold; }
/*]]>*/-->
</style>
<link rel="stylesheet" type="text/css" href="http://www.pirilampo.org/styles/readtheorg/css/htmlize.css"/>
<link rel="stylesheet" type="text/css" href="http://www.pirilampo.org/styles/readtheorg/css/readtheorg.css"/>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js"></script>
<script type="text/javascript" src="http://www.pirilampo.org/styles/lib/js/jquery.stickytableheaders.js"></script>
<script type="text/javascript" src="http://www.pirilampo.org/styles/readtheorg/js/readtheorg.js"></script>
<script type="text/javascript">
/*
@licstart The following is the entire license notice for the
JavaScript code in this tag.
Copyright (C) 2012-2013 Free Software Foundation, Inc.
The JavaScript code in this tag is free software: you can
redistribute it and/or modify it under the terms of the GNU
General Public License (GNU GPL) as published by the Free Software
Foundation, either version 3 of the License, or (at your option)
any later version. The code is distributed WITHOUT ANY WARRANTY;
without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the GNU GPL for more details.
As additional permission under GNU GPL version 3 section 7, you
may distribute non-source (e.g., minimized or compacted) forms of
that code without the copy of the GNU GPL normally required by
section 4, provided you include this license notice and a URL
through which recipients can access the Corresponding Source.
@licend The above is the entire license notice
for the JavaScript code in this tag.
*/
<!--/*--><![CDATA[/*><!--*/
function CodeHighlightOn(elem, id)
{
var target = document.getElementById(id);
if(null != target) {
elem.cacheClassElem = elem.className;
elem.cacheClassTarget = target.className;
target.className = "code-highlighted";
elem.className = "code-highlighted";
}
}
function CodeHighlightOff(elem, id)
{
var target = document.getElementById(id);
if(elem.cacheClassElem)
elem.className = elem.cacheClassElem;
if(elem.cacheClassTarget)
target.className = elem.cacheClassTarget;
}
/*]]>*///-->
</script>
</head>
<body>
<div id="content">
<h1 class="title">Context</h1>
<div id="table-of-contents">
<h2>Table of Contents</h2>
<div id="text-table-of-contents">
<ul>
<li><a href="#sec-1">1. Context</a>
<ul>
<li>
<ul>
<li><a href="#sec-1-0-1">1.0.1. Source</a></li>
</ul>
</li>
<li><a href="#sec-1-1">1.1. <code>qmckl_context_check</code></a>
<ul>
<li><a href="#sec-1-1-1">1.1.1. Header</a></li>
<li><a href="#sec-1-1-2">1.1.2. Source</a></li>
</ul>
</li>
<li><a href="#sec-1-2">1.2. <code>qmckl_context_create</code></a>
<ul>
<li><a href="#sec-1-2-1">1.2.1. Header</a></li>
<li><a href="#sec-1-2-2">1.2.2. Source</a></li>
</ul>
</li>
<li><a href="#sec-1-3">1.3. <code>qmckl_context_copy</code></a>
<ul>
<li><a href="#sec-1-3-1">1.3.1. Header</a></li>
<li><a href="#sec-1-3-2">1.3.2. Source</a></li>
</ul>
</li>
<li><a href="#sec-1-4">1.4. <code>qmckl_context_previous</code></a>
<ul>
<li><a href="#sec-1-4-1">1.4.1. Header</a></li>
<li><a href="#sec-1-4-2">1.4.2. Source</a></li>
</ul>
</li>
<li><a href="#sec-1-5">1.5. <code>qmckl_context_destroy</code></a>
<ul>
<li><a href="#sec-1-5-1">1.5.1. Header</a></li>
<li><a href="#sec-1-5-2">1.5.2. Source</a></li>
</ul>
</li>
</ul>
</li>
<li><a href="#sec-2">2. Precision</a>
<ul>
<li><a href="#sec-2-1">2.1. <code>qmckl_context_update_precision</code></a>
<ul>
<li><a href="#sec-2-1-1">2.1.1. Source</a></li>
</ul>
</li>
<li><a href="#sec-2-2">2.2. <code>qmckl_context_update_range</code></a>
<ul>
<li><a href="#sec-2-2-1">2.2.1. Source</a></li>
</ul>
</li>
<li><a href="#sec-2-3">2.3. <code>qmckl_context_set_precision</code></a>
<ul>
<li><a href="#sec-2-3-1">2.3.1. Source</a></li>
</ul>
</li>
<li><a href="#sec-2-4">2.4. <code>qmckl_context_set_range</code></a>
<ul>
<li><a href="#sec-2-4-1">2.4.1. Source</a></li>
</ul>
</li>
<li><a href="#sec-2-5">2.5. <code>qmckl_context_get_precision</code></a>
<ul>
<li><a href="#sec-2-5-1">2.5.1. Source</a></li>
</ul>
</li>
<li><a href="#sec-2-6">2.6. <code>qmckl_context_get_range</code></a>
<ul>
<li><a href="#sec-2-6-1">2.6.1. Source</a></li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
</div>
<p>
This file is written in C because it is more natural to express the context in
C than in Fortran.
</p>
<p>
3 files are produced:
</p>
<ul class="org-ul">
<li>a header file : <code>qmckl_context.h</code>
</li>
<li>a source file : <code>qmckl_context.c</code>
</li>
<li>a test file : <code>test_qmckl_context.c</code>
</li>
</ul>
<div id="outline-container-sec-1" class="outline-2">
<h2 id="sec-1"><span class="section-number-2">1</span> Context</h2>
<div class="outline-text-2" id="text-1">
<p>
The context variable is a handle for the state of the library, and
is stored in the following data structure, which can't be seen
outside of the library. To simplify compatibility with other
languages, the pointer to the internal data structure is converted
into a 64-bit signed integer, defined in the <code>qmckl_context</code> type.
A value of 0 for the context is equivalent to a <code>NULL</code> pointer.
</p>
</div>
<div id="outline-container-sec-1-0-1" class="outline-4">
<h4 id="sec-1-0-1"><span class="section-number-4">1.0.1</span> Source</h4>
<div class="outline-text-4" id="text-1-0-1">
<div class="org-src-container">
<pre class="src src-C">typedef struct qmckl_context_struct {
struct qmckl_context_struct * prev;
uint32_t tag;
int32_t precision;
int32_t range;
} qmckl_context_struct;
#define VALID_TAG 0xBEEFFACE
#define INVALID_TAG 0xDEADBEEF
</pre>
</div>
<p>
The tag is used internally to check if the memory domain pointed by
a pointer is a valid context.
</p>
</div>
</div>
<div id="outline-container-sec-1-1" class="outline-3">
<h3 id="sec-1-1"><span class="section-number-3">1.1</span> <code>qmckl_context_check</code></h3>
<div class="outline-text-3" id="text-1-1">
<p>
Checks if the domain pointed by the pointer is a valid context.
Returns the input <code>qmckl_context</code> if the context is valid, 0 otherwise.
</p>
</div>
<div id="outline-container-sec-1-1-1" class="outline-4">
<h4 id="sec-1-1-1"><span class="section-number-4">1.1.1</span> Header</h4>
<div class="outline-text-4" id="text-1-1-1">
<div class="org-src-container">
<pre class="src src-C">qmckl_context qmckl_context_check(const qmckl_context context) ;
</pre>
</div>
</div>
</div>
<div id="outline-container-sec-1-1-2" class="outline-4">
<h4 id="sec-1-1-2"><span class="section-number-4">1.1.2</span> Source</h4>
<div class="outline-text-4" id="text-1-1-2">
<div class="org-src-container">
<pre class="src src-C">qmckl_context qmckl_context_check(const qmckl_context context) {
qmckl_context_struct * ctx;
if (context == (qmckl_context) 0) return (qmckl_context) 0;
ctx = (qmckl_context_struct*) context;
if (ctx-&gt;tag != VALID_TAG) return (qmckl_context) 0;
return context;
}
</pre>
</div>
</div>
</div>
</div>
<div id="outline-container-sec-1-2" class="outline-3">
<h3 id="sec-1-2"><span class="section-number-3">1.2</span> <code>qmckl_context_create</code></h3>
<div class="outline-text-3" id="text-1-2">
<p>
To create a new context, use <code>qmckl_context_create()</code>.
</p>
<ul class="org-ul">
<li>On success, returns a pointer to a context using the <code>qmckl_context</code> type
</li>
<li>Returns 0 upon failure to allocate the internal data structure
</li>
</ul>
</div>
<div id="outline-container-sec-1-2-1" class="outline-4">
<h4 id="sec-1-2-1"><span class="section-number-4">1.2.1</span> Header</h4>
<div class="outline-text-4" id="text-1-2-1">
<div class="org-src-container">
<pre class="src src-C">qmckl_context qmckl_context_create();
</pre>
</div>
</div>
</div>
<div id="outline-container-sec-1-2-2" class="outline-4">
<h4 id="sec-1-2-2"><span class="section-number-4">1.2.2</span> Source</h4>
<div class="outline-text-4" id="text-1-2-2">
<div class="org-src-container">
<pre class="src src-C">qmckl_context qmckl_context_create() {
qmckl_context_struct* context;
context = (qmckl_context_struct*) qmckl_malloc ((qmckl_context) 0, sizeof(qmckl_context_struct));
if (context == NULL) {
return (qmckl_context) 0;
}
context-&gt;prev = NULL;
context-&gt;precision = QMCKL_DEFAULT_PRECISION;
context-&gt;range = QMCKL_DEFAULT_RANGE;
context-&gt;tag = VALID_TAG;
return (qmckl_context) context;
}
</pre>
</div>
</div>
</div>
</div>
<div id="outline-container-sec-1-3" class="outline-3">
<h3 id="sec-1-3"><span class="section-number-3">1.3</span> <code>qmckl_context_copy</code></h3>
<div class="outline-text-3" id="text-1-3">
<p>
This function makes a shallow copy of the current context.
</p>
<ul class="org-ul">
<li>Copying the 0-valued context returns 0
</li>
<li>On success, returns a pointer to the new context using the <code>qmckl_context</code> type
</li>
<li>Returns 0 upon failure to allocate the internal data structure
for the new context
</li>
</ul>
</div>
<div id="outline-container-sec-1-3-1" class="outline-4">
<h4 id="sec-1-3-1"><span class="section-number-4">1.3.1</span> Header</h4>
<div class="outline-text-4" id="text-1-3-1">
<div class="org-src-container">
<pre class="src src-C">qmckl_context qmckl_context_copy(const qmckl_context context);
</pre>
</div>
</div>
</div>
<div id="outline-container-sec-1-3-2" class="outline-4">
<h4 id="sec-1-3-2"><span class="section-number-4">1.3.2</span> Source</h4>
<div class="outline-text-4" id="text-1-3-2">
<div class="org-src-container">
<pre class="src src-C">qmckl_context qmckl_context_copy(const qmckl_context context) {
qmckl_context_struct* old_context;
qmckl_context_struct* new_context;
qmckl_context checked_context;
checked_context = qmckl_context_check(context);
if (checked_context == (qmckl_context) 0) {
return (qmckl_context) 0;
}
new_context = (qmckl_context_struct*) qmckl_malloc (context, sizeof(qmckl_context_struct));
if (new_context == NULL) {
return (qmckl_context) 0;
}
old_context = (qmckl_context_struct*) checked_context;
new_context-&gt;prev = old_context;
new_context-&gt;precision = old_context-&gt;precision;
new_context-&gt;range = old_context-&gt;range;
new_context-&gt;tag = VALID_TAG;
return (qmckl_context) new_context;
}
</pre>
</div>
</div>
</div>
</div>
<div id="outline-container-sec-1-4" class="outline-3">
<h3 id="sec-1-4"><span class="section-number-3">1.4</span> <code>qmckl_context_previous</code></h3>
<div class="outline-text-3" id="text-1-4">
<p>
Returns the previous context
</p>
<ul class="org-ul">
<li>On success, returns the ancestor of the current context
</li>
<li>Returns 0 for the initial context
</li>
<li>Returns 0 for the 0-valued context
</li>
</ul>
</div>
<div id="outline-container-sec-1-4-1" class="outline-4">
<h4 id="sec-1-4-1"><span class="section-number-4">1.4.1</span> Header</h4>
<div class="outline-text-4" id="text-1-4-1">
<div class="org-src-container">
<pre class="src src-C">qmckl_context qmckl_context_previous(const qmckl_context context);
</pre>
</div>
</div>
</div>
<div id="outline-container-sec-1-4-2" class="outline-4">
<h4 id="sec-1-4-2"><span class="section-number-4">1.4.2</span> Source</h4>
<div class="outline-text-4" id="text-1-4-2">
<div class="org-src-container">
<pre class="src src-C">qmckl_context qmckl_context_previous(const qmckl_context context) {
qmckl_context checked_context;
qmckl_context_struct* ctx;
checked_context = qmckl_context_check(context);
if (checked_context == (qmckl_context) 0) {
return (qmckl_context) 0;
}
ctx = (qmckl_context_struct*) checked_context;
return qmckl_context_check((qmckl_context) ctx-&gt;prev);
}
</pre>
</div>
</div>
</div>
</div>
<div id="outline-container-sec-1-5" class="outline-3">
<h3 id="sec-1-5"><span class="section-number-3">1.5</span> <code>qmckl_context_destroy</code></h3>
<div class="outline-text-3" id="text-1-5">
<p>
Destroys the current context, leaving the ancestors untouched.
</p>
<ul class="org-ul">
<li>Succeeds if the current context is properly destroyed
</li>
<li>Fails otherwise
</li>
<li>Fails if the 0-valued context is given in argument
</li>
<li>Fails if the the pointer is not a valid context
</li>
</ul>
</div>
<div id="outline-container-sec-1-5-1" class="outline-4">
<h4 id="sec-1-5-1"><span class="section-number-4">1.5.1</span> Header</h4>
<div class="outline-text-4" id="text-1-5-1">
<div class="org-src-container">
<pre class="src src-C">qmckl_exit_code qmckl_context_destroy(qmckl_context context);
</pre>
</div>
</div>
</div>
<div id="outline-container-sec-1-5-2" class="outline-4">
<h4 id="sec-1-5-2"><span class="section-number-4">1.5.2</span> Source</h4>
<div class="outline-text-4" id="text-1-5-2">
<div class="org-src-container">
<pre class="src src-C">qmckl_exit_code qmckl_context_destroy(qmckl_context context) {
qmckl_context_struct* ctx;
qmckl_context checked_context;
checked_context = qmckl_context_check(context);
if (checked_context == (qmckl_context) 0) return QMCKL_FAILURE;
ctx = (qmckl_context_struct*) context;
if (ctx == NULL) return QMCKL_FAILURE;
ctx-&gt;tag = INVALID_TAG;
qmckl_free(ctx);
return QMCKL_SUCCESS;
}
</pre>
</div>
</div>
</div>
</div>
</div>
<div id="outline-container-sec-2" class="outline-2">
<h2 id="sec-2"><span class="section-number-2">2</span> Precision</h2>
<div class="outline-text-2" id="text-2">
<p>
The following functions set and get the expected required precision
and range. <code>precision</code> should be an integer between 2 and 53, and
<code>range</code> should be an integer between 2 and 11.
</p>
<p>
The setter functions functions return a new context as a 64-bit integer.
The getter functions return the value, as a 32-bit integer.
The update functions return <code>QMCKL_SUCCESS</code> or <code>QMCKL_FAILURE</code>.
</p>
</div>
<div id="outline-container-sec-2-1" class="outline-3">
<h3 id="sec-2-1"><span class="section-number-3">2.1</span> <code>qmckl_context_update_precision</code></h3>
<div class="outline-text-3" id="text-2-1">
</div><div id="outline-container-sec-2-1-1" class="outline-4">
<h4 id="sec-2-1-1"><span class="section-number-4">2.1.1</span> Source</h4>
<div class="outline-text-4" id="text-2-1-1">
<div class="org-src-container">
<pre class="src src-C">qmckl_exit_code qmckl_context_update_precision(const qmckl_context context, const int precision);
</pre>
</div>
<div class="org-src-container">
<pre class="src src-C">qmckl_exit_code qmckl_context_update_precision(const qmckl_context context, const int precision) {
qmckl_context_struct* ctx;
if (precision &lt; 2) return QMCKL_FAILURE;
if (precision &gt; 53) return QMCKL_FAILURE;
ctx = (qmckl_context_struct*) context;
if (ctx == NULL) return QMCKL_FAILURE;
ctx-&gt;precision = precision;
return QMCKL_SUCCESS;
}
</pre>
</div>
</div>
</div>
</div>
<div id="outline-container-sec-2-2" class="outline-3">
<h3 id="sec-2-2"><span class="section-number-3">2.2</span> <code>qmckl_context_update_range</code></h3>
<div class="outline-text-3" id="text-2-2">
</div><div id="outline-container-sec-2-2-1" class="outline-4">
<h4 id="sec-2-2-1"><span class="section-number-4">2.2.1</span> Source</h4>
<div class="outline-text-4" id="text-2-2-1">
<div class="org-src-container">
<pre class="src src-C">qmckl_exit_code qmckl_context_update_range(const qmckl_context context, const int range);
</pre>
</div>
<div class="org-src-container">
<pre class="src src-C">qmckl_exit_code qmckl_context_update_range(const qmckl_context context, const int range) {
qmckl_context_struct* ctx;
if (range &lt; 2) return QMCKL_FAILURE;
if (range &gt; 11) return QMCKL_FAILURE;
ctx = (qmckl_context_struct*) context;
if (ctx == NULL) return QMCKL_FAILURE;
ctx-&gt;range = range;
return QMCKL_SUCCESS;
}
</pre>
</div>
</div>
</div>
</div>
<div id="outline-container-sec-2-3" class="outline-3">
<h3 id="sec-2-3"><span class="section-number-3">2.3</span> <code>qmckl_context_set_precision</code></h3>
<div class="outline-text-3" id="text-2-3">
</div><div id="outline-container-sec-2-3-1" class="outline-4">
<h4 id="sec-2-3-1"><span class="section-number-4">2.3.1</span> Source</h4>
<div class="outline-text-4" id="text-2-3-1">
<div class="org-src-container">
<pre class="src src-C">qmckl_context qmckl_context_set_precision(const qmckl_context context, const int precision);
</pre>
</div>
<div class="org-src-container">
<pre class="src src-C">qmckl_context qmckl_context_set_precision(const qmckl_context context, const int precision) {
qmckl_context new_context;
new_context = qmckl_context_copy(context);
if (new_context == 0) return 0;
if (qmckl_context_update_precision(context, precision) == QMCKL_FAILURE) return 0;
return new_context;
}
</pre>
</div>
</div>
</div>
</div>
<div id="outline-container-sec-2-4" class="outline-3">
<h3 id="sec-2-4"><span class="section-number-3">2.4</span> <code>qmckl_context_set_range</code></h3>
<div class="outline-text-3" id="text-2-4">
</div><div id="outline-container-sec-2-4-1" class="outline-4">
<h4 id="sec-2-4-1"><span class="section-number-4">2.4.1</span> Source</h4>
<div class="outline-text-4" id="text-2-4-1">
<div class="org-src-container">
<pre class="src src-C">qmckl_context qmckl_context_set_range(const qmckl_context context, const int range);
</pre>
</div>
<div class="org-src-container">
<pre class="src src-C">qmckl_context qmckl_context_set_range(const qmckl_context context, const int range) {
qmckl_context new_context;
new_context = qmckl_context_copy(context);
if (new_context == 0) return 0;
if (qmckl_context_update_range(context, range) == QMCKL_FAILURE) return 0;
return new_context;
}
</pre>
</div>
</div>
</div>
</div>
<div id="outline-container-sec-2-5" class="outline-3">
<h3 id="sec-2-5"><span class="section-number-3">2.5</span> <code>qmckl_context_get_precision</code></h3>
<div class="outline-text-3" id="text-2-5">
</div><div id="outline-container-sec-2-5-1" class="outline-4">
<h4 id="sec-2-5-1"><span class="section-number-4">2.5.1</span> Source</h4>
<div class="outline-text-4" id="text-2-5-1">
<div class="org-src-container">
<pre class="src src-C">int qmckl_context_get_precision(const qmckl_context context);
</pre>
</div>
<div class="org-src-container">
<pre class="src src-C">int qmckl_context_get_precision(const qmckl_context context) {
qmckl_context_struct* ctx;
ctx = (qmckl_context_struct*) context;
return ctx-&gt;precision;
}
</pre>
</div>
</div>
</div>
</div>
<div id="outline-container-sec-2-6" class="outline-3">
<h3 id="sec-2-6"><span class="section-number-3">2.6</span> <code>qmckl_context_get_range</code></h3>
<div class="outline-text-3" id="text-2-6">
</div><div id="outline-container-sec-2-6-1" class="outline-4">
<h4 id="sec-2-6-1"><span class="section-number-4">2.6.1</span> Source</h4>
<div class="outline-text-4" id="text-2-6-1">
<div class="org-src-container">
<pre class="src src-C">int qmckl_context_get_range(const qmckl_context context);
</pre>
</div>
<div class="org-src-container">
<pre class="src src-C">int qmckl_context_get_range(const qmckl_context context) {
qmckl_context_struct* ctx;
ctx = (qmckl_context_struct*) context;
return ctx-&gt;range;
}
</pre>
</div>
</div>
</div>
</div>
</div>
</div>
<div id="postamble" class="status">
<p class="date">Created: 2020-10-28 Wed 23:57</p>
<p class="creator"><a href="http://www.gnu.org/software/emacs/">Emacs</a> 25.2.2 (<a href="http://orgmode.org">Org</a> mode 8.2.10)</p>
<p class="validation"><a href="http://validator.w3.org/check?uri=referer">Validate</a></p>
</div>
</body>
</html>