<html>
<head>
<meta name="viewport" content="width=device-width" />
<base href="https://wiki.asterisk.org/wiki" />
<style type="text/css">
body, #email-content, #email-content-inner { font-family: Arial,FreeSans,Helvetica,sans-serif; }
body, p, blockquote, pre, code, td, th, li, dt, dd { font-size: 13px; }
small { font-size: 11px; }
body { width:100% !important; -webkit-font-smoothing: antialiased; }
body,
#email-wrapper { background-color: #f0f0f0; }
#email-wrapper-inner { padding: 20px; text-align: center; }
#email-content-inner { background-color: #fff; border: 1px solid #bbb; color: $menuTxtColour; padding:20px; text-align:left; }
#email-wrapper-inner > table { width: 100%; }
#email-wrapper-inner.thin > table { margin: 0 auto; width: 50%; }
#email-footer { padding: 0 16px 32px 16px; margin: 0; }
.email-indent { margin: 8px 0 16px 0; }
.email-comment { margin: 0 0 0 56px; }
.email-comment.removed { background-color: #ffe7e7; border: 1px solid #df9898; padding: 0 8px;}
#email-title-avatar { text-align: left; vertical-align: top; width: 48px; padding-right: 8px; }
#email-title-flavor { margin: 0; padding: 0 0 4px 0; }
#email-title-heading { font-size: 16px; line-height: 20px; min-height: 20px; margin: 0; padding: 0; }
#email-title .icon { border: 0; padding: 0 5px 0 0; text-align: left; vertical-align: middle; }
#email-actions { border-top: 1px solid #bbb; color: #505050; margin: 8px 0 0 0; padding: 0; }
#email-actions td { padding-top: 8px; }
#email-actions .left { max-width: 45%; text-align: left; }
#email-actions .right { text-align: right; }
.email-reply-divider { border-top: 1px solid #bbb; color: #505050; margin: 32px 0 8px 0; padding: 8px 0; }
.email-section-title { border-bottom: 1px solid #bbb; margin: 8px 0; padding: 8px 0 0 0; }
.email-metadata { color: #505050; }
a { color: #326ca6; text-decoration: none; }
a:hover { color: #336ca6; text-decoration: underline; }
a:active {color: #326ca6; }
a.email-footer-link { color: #505050; font-size: 11px; }
.email-item-list { list-style: none; margin: 4px 0; padding-left: 0; }
.email-item-list li { list-style: none; margin: 0; padding: 4px 0; }
.email-list-divider { color: #505050; padding: 0 0.35em; }
.email-operation-icon { padding-right: 5px; }
.avatar { -ms-interpolation-mode: bicubic; border-radius: 3px;}
.avatar-link { margin: 2px; }
.tableview th { border-bottom: 1px solid #69C; font-weight: bold; text-align: left; }
.tableview td { border-bottom: 1px solid #bbbbbb; text-align: left; padding: 4px 16px 4px 0; }
.aui-message { margin: 1em 0; padding: 8px; }
.aui-message.info { background-color: #e0f0ff; border: 1px solid #9eb6d4; }
.aui-message.success { background-color: #ddfade; border: 1px solid #93c49f; }
.aui-message.error,
.aui-message.removed { background-color: #ffe7e7; border: 1px solid #df9898; color: #000; }
.call-to-action-table { margin: 10px 1px 1px 1px;}
.call-to-cancel-container, .call-to-action-container { padding: 5px 20px; }
.call-to-cancel-container { border: 1px solid #aaa; background-color: #eee; border-radius: 3px; }
.call-to-cancel-container a.call-to-cancel-button { background-color: #eee; font-size: 14px; line-height: 1; padding: 0; margin: 0; color: #666; font-family: sans-serif;}
.call-to-action-container { border: 1px solid #486582; background-color: #3068A2; border-radius: 3px; padding: 4px 10px; }
.call-to-action-container a.call-to-action-button { background-color: #3068A2; font-size: 14px; line-height: 1; padding: 0; margin: 0; color: #fff; font-weight: bold; font-family: sans-serif; }
/** The span around the inline task checkbox image */
.diff-inline-task-overlay {
display: inline-block;
text-align: center;
height: 1.5em;
padding: 5px 0px 1px 5px;
margin-right: 5px;
/** Unfortunately, the negative margin-left is stripped out in gmail */
margin-left: -5px;
}
@media handheld, only screen and (max-device-width: 480px) {
div, a, p, td, th, li, dt, dd { -webkit-text-size-adjust: auto; }
small, small a { -webkit-text-size-adjust: 90%; }
td[id=email-wrapper-inner] { padding: 2px !important; }
td[id=email-content-inner] { padding: 8px !important; }
td[id="email-wrapper-inner"][class="thin"] > table { text-align: left !important; width: 100% !important; }
td[id=email-footer] { padding: 8px 12px !important; }
div[class=email-indent] { margin: 8px 0px !important; }
div[class=email-comment] { margin: 0 !important; }
p[id=email-title-flavor] a { display: block; } /* puts the username and the action on separate lines */
p[id=email-permalink] { padding: 4px 0 0 0 !important; }
table[id=email-actions] td { padding-top: 0 !important; }
table[id=email-actions] td.right { text-align: right !important; }
table[id=email-actions] .email-list-item { display: block; margin: 1em 0 !important; word-wrap: normal !important; }
span[class=email-list-divider] { display: none; }
}
</style>
</head>
<body style="font-family: Arial, FreeSans, Helvetica, sans-serif; font-size: 13px; width: 100%; -webkit-font-smoothing: antialiased; background-color: #f0f0f0">
<table id="email-wrapper" width="100%" cellspacing="0" cellpadding="0" border="0" style="background-color: #f0f0f0">
<tbody>
<tr valign="middle">
<td id="email-wrapper-inner" style="font-size: 13px; padding: 20px; text-align: center">
<table id="email-content" cellspacing="0" cellpadding="0" border="0" style="font-family: Arial, FreeSans, Helvetica, sans-serif; width: 100%">
<tbody>
<tr valign="top">
<td id="email-content-inner" align="left" style="font-family: Arial, FreeSans, Helvetica, sans-serif; font-size: 13px; background-color: #fff; border: 1px solid #bbb; padding: 20px; text-align: left">
<table id="email-title" cellpadding="0" cellspacing="0" border="0" width="100%">
<tbody>
<tr>
<td id="email-title-avatar" rowspan="2" style="font-size: 13px; text-align: left; vertical-align: top; width: 48px; padding-right: 8px"> <img class="avatar" src="cid:avatar_ce51dcf276530e4a4b00548e2a6d0905" border="0" height="48" width="48" style="-ms-interpolation-mode: bicubic; border-radius: 3px" /> </td>
<td valign="top" style="font-size: 13px">
<div id="email-title-flavor" class="email-metadata" style="margin: 0; padding: 0 0 4px 0; color: #505050">
<a href=" https://wiki.asterisk.org/wiki/display/~mjordan " style="color:#326ca6;text-decoration:none;; color: #326ca6; text-decoration: none">Matt Jordan</a> edited the page:
</div> </td>
</tr>
<tr>
<td valign="top" style="font-size: 13px"> <h2 id="email-title-heading" style="font-size: 16px; line-height: 20px; min-height: 20px; margin: 0; padding: 0"> <a href="https://wiki.asterisk.org/wiki/pages/viewpage.action?pageId=25919686" style="color: #326ca6; text-decoration: none"> <img class="icon" src="cid:page-icon" alt="" style="border: 0; padding: 0 5px 0 0; text-align: left; vertical-align: middle" /> <strong style="font-size:16px;line-height:20px;vertical-align:top;">Templates for ao2 hash, sort, and callback functions.</strong> </a> </h2> </td>
</tr>
</tbody>
</table>
<div class="email-indent" style="margin: 8px 0 16px 0">
<div class="email-diff">
<div id="page-diffs" class="wiki-content">
<p class="diff-block-target diff-block-context" style="font-size: 13px">The container comparison functions historically only had the following flag to optimize a container search: <code style="font-size: 13px"><span class="diff-html-changed" id="changed-diff-0" style="background-color: #d6f0ff;">OBJ_POINTER</span></code>. Asterisk 11 added the additional flag to simplify places that requested code searches: <code style="font-size: 13px"><span class="diff-html-changed" id="changed-diff-1" style="background-color: #d6f0ff;">OBJ_KEY</span></code>. Now with the ability to have sorted containers <span class="diff-html-added" id="added-diff-0" style="font-size: 100%; background-color: #ddfade;">- such as red-black trees - </span>a third flag is available: <code style="font-size: 13px"><span class="diff-html-changed" id="changed-diff-2" style="background-color: #d6f0ff;">OBJ_PARTIAL_KEY</span></code>. These three flags cannot be used at the same time.</p>
<p class="diff-block-target" style="font-size: 13px"> <span class="diff-html-removed" id="removed-diff-0" style="font-size: 100%; background-color: #ffe7e7; text-decoration: line-through;"> </span> </p>
<p class="diff-block-target diff-block-context" style="font-size: 13px">There is a lot of historical code that does simple bit tests and sets. This code needs to be changed to take into account the fact that there are new search flags and must guard against their use if they are not supported by the container. Most of the adjustments are needed by the <code style="font-size: 13px"><span class="diff-html-changed" id="changed-diff-3" style="background-color: #d6f0ff;">ao2_hash_fn</span></code><span class="diff-html-removed" style="font-size: 100%; background-color: #ffe7e7; text-decoration: line-through;"> </span><span class="diff-html-removed" id="removed-diff-1" style="font-size: 100%; background-color: #ffe7e7; text-decoration: line-through;">and </span><span class="diff-html-added" id="added-diff-1" style="font-size: 100%; background-color: #ddfade;"> and </span><code style="font-size: 13px"><span class="diff-html-changed" id="changed-diff-4" style="background-color: #d6f0ff;">ao2_callback_fn</span></code><span class="diff-html-removed" style="font-size: 100%; background-color: #ffe7e7; text-decoration: line-through;"> </span><span class="diff-html-removed" id="removed-diff-2" style="font-size: 100%; background-color: #ffe7e7; text-decoration: line-through;">functions </span><span class="diff-html-added" id="added-diff-2" style="font-size: 100%; background-color: #ddfade;"> functions </span>of the containers.</p>
<p class="diff-block-target diff-block-context" style="font-size: 13px"> <span class="diff-html-removed" id="removed-diff-3" style="font-size: 100%; background-color: #ffe7e7; text-decoration: line-through;"> </span> </p>
<p class="diff-block-target diff-block-context" style="font-size: 13px">The following code templates should be used to implement the container callback functions. <span class="diff-html-removed" id="removed-diff-4" style="font-size: 100%; background-color: #ffe7e7; text-decoration: line-through;"> The </span><span class="diff-html-added" id="added-diff-3" style="font-size: 100%; background-color: #ddfade;"> The </span>templates use string keys but can be adapted for different types of keys.</p>
<h3 id="Templatesforao2hash,sort,andcallbackfunctions.-HashFunction" class="diff-block-target"> <span class="diff-html-added" id="added-diff-4" style="font-size: 100%; background-color: #ddfade;">Hash Function</span> </h3>
<table class="diff-macro diff-block-target diff-block-context" style="background-color: #f0f0f0;border: 1px solid #dddddd;margin: 10px 1px;padding: 0 2px 2px;width: 100%;">
<thead>
<tr>
<th class="diff-macro-title" style="background-color: transparent; text-align: left; font-weight: normal;padding: 5px;; font-size: 13px"><span class="icon macro-placeholder-icon" style="background-color: ;line-height: 20px;"><img src="https://wiki.asterisk.org/wiki/s/en_GB-1988229788/4109/76e0dbb30bc8580e459c201f3535d84f9283a9ac.25/_/plugins/servlet/confluence/placeholder/macro-icon?name=code" style="padding-right: 5px; vertical-align: text-bottom;" /> </span>Code Block</th>
</tr>
</thead>
<tbody>
<tr>
<td class="diff-macro-body" style="background-color: #fff;border: 1px solid #dddddd;padding: 10px;; font-size: 13px"> <pre style="font-size: 13px">int ao2_hash_fn(const void *obj, int flags)
{
const struct my_object *object;
const char *key;
switch (flags & (OBJ_POINTER | OBJ_KEY | OBJ_PARTIAL_KEY)) {
case OBJ_KEY:
key = obj;
return ast_str_hash(key);
case OBJ_POINTER:
object = obj;
return ast_str_hash(my_object->key);
default:
/* Hash can only work on something with a full key. */
ast_assert(0);
return 0;
}
}<span class="diff-html-removed" id="removed-diff-5" style="font-size: 100%; background-color: #ffe7e7; text-decoration: line-through;">
</span>
</pre> </td>
</tr>
</tbody>
</table>
<h3 id="Templatesforao2hash,sort,andcallbackfunctions.-SortFunction" class="diff-block-target diff-block-context"> <span class="diff-html-added" style="font-size: 100%; background-color: #ddfade;">Sort Function</span> </h3>
<table class="diff-macro diff-html-added diff-block-target diff-block-context" style="background-color: #f0f0f0;border: 1px solid #dddddd;margin: 10px 1px;padding: 0 2px 2px;width: 100%;background-color: #ddfade;border-color: #93c49f;">
<thead>
<tr>
<th class="diff-macro-title" style="background-color: transparent; text-align: left; font-weight: normal;padding: 5px;; font-size: 13px"><span class="diff-html-added" style="font-size: 100%; background-color: #ddfade;"><span class="icon macro-placeholder-icon" style="background-color: ;line-height: 20px;"><img src="https://wiki.asterisk.org/wiki/s/en_GB-1988229788/4109/76e0dbb30bc8580e459c201f3535d84f9283a9ac.25/_/plugins/servlet/confluence/placeholder/macro-icon?name=code" style="padding-right: 5px; vertical-align: text-bottom;" /> </span>Code Block</span></th>
</tr>
</thead>
<tbody>
<tr>
<td class="diff-macro-body" style="background-color: #fff;border: 1px solid #dddddd;padding: 10px;; font-size: 13px"> <pre style="font-size: 13px">int ao2_sort_fn(const void *obj_left, const void *obj_right, int flags)
{
const struct my_object *object_left = obj_left;
const struct my_object *object_right = obj_right;
const char *right_key = obj_right;
int cmp;
switch (flags & (OBJ_POINTER | OBJ_KEY | OBJ_PARTIAL_KEY)) {
case OBJ_POINTER:
right_key = object_right->username;
/* Fall through */
case OBJ_KEY:
cmp = strcmp(object_left->username, right_key);
break;
case OBJ_PARTIAL_KEY:
/*
* We could also use a partial key struct containing a length
* so strlen() does not get called for every comparison instead.
*/
cmp = strncmp(object_left->username, right_key, strlen(right_key));
break;
default:
/* Sort can only work on something with a full or partial key. */
ast_assert(0);
cmp = 0;
break;
}
return cmp;
}</pre> </td>
</tr>
</tbody>
</table>
<p class="diff-context-placeholder" style="font-size: 13px">...</p>
<h3 id="Templatesforao2hash,sort,andcallbackfunctions.-Sortedvs.UnsortedContainerSearching" class="diff-block-target"> <span class="diff-html-added" id="added-diff-6" style="font-size: 100%; background-color: #ddfade;">Sorted vs. Unsorted Container Searching</span> </h3>
<p class="diff-block-target diff-block-context" style="font-size: 13px">The sort/hash comparison functions act as a filter before the <code style="font-size: 13px"><span class="diff-html-changed" id="changed-diff-6" style="background-color: #d6f0ff;">ao2_callback_fn</span></code><span class="diff-html-removed" style="font-size: 100%; background-color: #ffe7e7; text-decoration: line-through;"> </span><span class="diff-html-removed" id="removed-diff-7" style="font-size: 100%; background-color: #ffe7e7; text-decoration: line-through;">function </span><span class="diff-html-added" id="added-diff-7" style="font-size: 100%; background-color: #ddfade;"> function </span>is called. Every object is matched first by the sort/hash functions. This callback just adds additional discrimination between otherwise equal matches. For most sorted container searches you won't need a special callback and can use the default to match everything by passing NULL for this function.</p>
<p class="diff-block-target" style="font-size: 13px"> <span class="diff-html-removed" id="removed-diff-8" style="font-size: 100%; background-color: #ffe7e7; text-decoration: line-through;"> </span> </p>
<p class="diff-block-context" style="font-size: 13px">However, with OBJ_CONTINUE, the sort/hash functions are only used to find the starting point in a container traversal of all objects.</p>
<p class="diff-block-target" style="font-size: 13px"> <span class="diff-html-removed" id="removed-diff-9" style="font-size: 100%; background-color: #ffe7e7; text-decoration: line-through;"> </span> </p>
<p class="diff-block-context" style="font-size: 13px">This function should not return CMP_STOP unless you never want a container search to find multiple objects with the OBJ_MULTIPLE flag.</p>
<p class="diff-context-placeholder" style="font-size: 13px">...</p>
<table class="diff-macro diff-block-context" style="background-color: #f0f0f0;border: 1px solid #dddddd;margin: 10px 1px;padding: 0 2px 2px;width: 100%;">
<thead>
<tr>
<th class="diff-macro-title" style="background-color: transparent; text-align: left; font-weight: normal;padding: 5px;; font-size: 13px"><span class="icon macro-placeholder-icon" style="background-color: ;line-height: 20px;"><img src="https://wiki.asterisk.org/wiki/s/en_GB-1988229788/4109/76e0dbb30bc8580e459c201f3535d84f9283a9ac.25/_/plugins/servlet/confluence/placeholder/macro-icon?name=code" style="padding-right: 5px; vertical-align: text-bottom;" /> </span>Code Block</th>
</tr>
</thead>
<tbody>
<tr>
<td class="diff-macro-body" style="background-color: #fff;border: 1px solid #dddddd;padding: 10px;; font-size: 13px"> <pre style="font-size: 13px">int ao2_callback_fn_unsorted(void *obj, void *arg, int flags)
{
const struct my_object *object_left = obj;
const struct my_object *object_right = arg;
const char *right_key = arg;
int cmp;
switch (flags & (OBJ_POINTER | OBJ_KEY | OBJ_PARTIAL_KEY)) {
case OBJ_POINTER:
right_key = object_right->username;
/* Fall through */
case OBJ_KEY:
cmp = strcmp(object_left->username, right_key);
break;
case OBJ_PARTIAL_KEY:
/*
* We could also use a partial key struct containing a length
* so strlen() does not get called for every comparison instead.
*/
cmp = strncmp(object_left->username, right_key, strlen(right_key));
break;
default:
/*
* What arg points to is specific to this traversal callback
* and has no special meaning to astobj2.
*/
cmp = 0;
break;
}
if (cmp) {
return 0;
}
/*
* At this point the traversal callback is identical to a sorted
* container.
*/
return ao2_callback_fn_sorted(obj, arg, flags);
}</pre> </td>
</tr>
</tbody>
</table>
<p class="diff-block-context" style="font-size: 13px"> <span style="line-height: 1.4285715;"> <br /> </span> </p>
<h3 id="Templatesforao2hash,sort,andcallbackfunctions.-FutureImprovementstoMake" class="diff-block-target"> <span style="line-height: 1.4285715;"><span class="diff-html-added" id="added-diff-8" style="font-size: 100%; background-color: #ddfade;">Future Improvements to Make</span></span> </h3>
<p class="diff-block-target diff-block-context" style="font-size: 13px"> <span style="line-height: 1.4285715;">An additional improvement to astobj2 is to formally make these flags an enumerated flag field like the <code style="font-size: 13px"><span class="diff-html-changed" id="changed-diff-7" style="background-color: #d6f0ff;">OBJ_ORDER_xxx</span></code><span class="diff-html-removed" style="font-size: 100%; background-color: #ffe7e7; text-decoration: line-through;"> </span><span class="diff-html-removed" id="removed-diff-10" style="font-size: 100%; background-color: #ffe7e7; text-decoration: line-through;">field </span><span class="diff-html-added" id="added-diff-9" style="font-size: 100%; background-color: #ddfade;"> field </span>so the names can indicate they are related to each other. The following is the proposed new names:</span> </p>
<p class="diff-block-target diff-block-context" style="font-size: 13px"> <span class="diff-html-removed" id="removed-diff-11" style="font-size: 100%; background-color: #ffe7e7; text-decoration: line-through;"> </span> </p>
<p class="diff-context-placeholder" style="font-size: 13px">...</p>
<ul class="diff-block-target diff-block-context">
<li style="font-size: 13px"> <code style="font-size: 13px"><span class="diff-html-changed" id="changed-diff-8" style="background-color: #d6f0ff;">OBJ_SEARCH_MASK</span></code><span class="diff-html-added" id="added-diff-10" style="font-size: 100%; background-color: #ddfade;"> </span><span class="diff-html-changed" id="changed-diff-9" style="background-color: #d6f0ff;">- Bit mask to isolate the bit field in the flags.</span> </li>
</ul>
<p class="diff-context-placeholder" style="font-size: 13px">...</p>
<ul class="diff-block-target diff-block-context">
<li style="font-size: 13px"> <code style="font-size: 13px"><span class="diff-html-changed" id="changed-diff-10" style="background-color: #d6f0ff;">OBJ_SEARCH_NONE</span></code><span class="diff-html-added" id="added-diff-11" style="font-size: 100%; background-color: #ddfade;"> </span><span class="diff-html-changed" id="changed-diff-11" style="background-color: #d6f0ff;">- The arg pointer has no meaning to the astobj2 code.</span> </li>
</ul>
<p class="diff-context-placeholder" style="font-size: 13px">...</p>
<ul class="diff-block-target diff-block-context">
<li style="font-size: 13px"> <code style="font-size: 13px"><span class="diff-html-changed" id="changed-diff-12" style="background-color: #d6f0ff;">OBJ_SEARCH_OBJECT</span></code><span class="diff-html-added" id="added-diff-12" style="font-size: 100%; background-color: #ddfade;"> </span><span class="diff-html-changed" id="changed-diff-13" style="background-color: #d6f0ff;">- The arg pointer points to an object that can be stored in the container.</span> </li>
</ul>
<p class="diff-context-placeholder" style="font-size: 13px">...</p>
<ul class="diff-block-target diff-block-context">
<li style="font-size: 13px"> <code style="font-size: 13px"><span class="diff-html-changed" id="changed-diff-14" style="background-color: #d6f0ff;">OBJ_SEARCH_KEY</span></code><span class="diff-html-added" id="added-diff-13" style="font-size: 100%; background-color: #ddfade;"> </span><span class="diff-html-changed" id="changed-diff-15" style="background-color: #d6f0ff;">- The arg pointer points to a key value used by the container.</span> </li>
</ul>
<p class="diff-context-placeholder" style="font-size: 13px">...</p>
<ul class="diff-block-target diff-block-context">
<li style="font-size: 13px"> <code style="font-size: 13px"><span class="diff-html-changed" id="changed-diff-16" style="background-color: #d6f0ff;">OBJ_SEARCH_PARTIAL_KEY</span></code><span class="diff-html-added" id="added-diff-14" style="font-size: 100%; background-color: #ddfade;"> </span><span class="diff-html-changed" id="changed-diff-17" style="background-color: #d6f0ff;">- The arg pointer points to a partial key value used by the container.</span> </li>
</ul>
<p class="diff-block-target diff-block-context" style="font-size: 13px"> <span class="diff-html-removed" id="removed-diff-16" style="font-size: 100%; background-color: #ffe7e7; text-decoration: line-through;"> </span> </p>
<p class="diff-block-target diff-block-context" style="font-size: 13px"> <code style="font-size: 13px"><span class="diff-html-changed" id="changed-diff-18" style="background-color: #d6f0ff;">OBJ_POINTER</span></code><span class="diff-html-removed" style="font-size: 100%; background-color: #ffe7e7; text-decoration: line-through;"> </span><span class="diff-html-removed" id="removed-diff-17" style="font-size: 100%; background-color: #ffe7e7; text-decoration: line-through;">will </span><span class="diff-html-added" id="added-diff-15" style="font-size: 100%; background-color: #ddfade;"> will </span>be defined <span class="diff-html-removed" id="removed-diff-18" style="font-size: 100%; background-color: #ffe7e7; text-decoration: line-through;">as </span><span class="diff-html-added" id="added-diff-16" style="font-size: 100%; background-color: #ddfade;">as </span><code style="font-size: 13px"><span class="diff-html-changed" id="changed-diff-19" style="background-color: #d6f0ff;">OBJ_SEARCH_OBJECT</span></code> </p>
<p class="diff-block-target diff-block-context" style="font-size: 13px"> <code style="font-size: 13px"><span class="diff-html-changed" id="changed-diff-20" style="background-color: #d6f0ff;">OBJ_KEY</span></code><span class="diff-html-removed" style="font-size: 100%; background-color: #ffe7e7; text-decoration: line-through;"> </span><span class="diff-html-removed" id="removed-diff-19" style="font-size: 100%; background-color: #ffe7e7; text-decoration: line-through;">will </span><span class="diff-html-added" id="added-diff-17" style="font-size: 100%; background-color: #ddfade;"> will </span>be defined <span class="diff-html-removed" id="removed-diff-20" style="font-size: 100%; background-color: #ffe7e7; text-decoration: line-through;">as </span><span class="diff-html-added" id="added-diff-18" style="font-size: 100%; background-color: #ddfade;">as </span><code style="font-size: 13px"><span class="diff-html-changed" id="changed-diff-21" style="background-color: #d6f0ff;">OBJ_SEARCH_KEY</span></code> </p>
<p class="diff-block-target diff-block-context" style="font-size: 13px"> <code style="font-size: 13px"><span class="diff-html-changed" id="changed-diff-22" style="background-color: #d6f0ff;">OBJ_PARTIAL_KEY</span></code><span class="diff-html-removed" style="font-size: 100%; background-color: #ffe7e7; text-decoration: line-through;"> </span><span class="diff-html-removed" id="removed-diff-21" style="font-size: 100%; background-color: #ffe7e7; text-decoration: line-through;">will </span><span class="diff-html-added" id="added-diff-19" style="font-size: 100%; background-color: #ddfade;"> will </span>be defined <span class="diff-html-removed" id="removed-diff-22" style="font-size: 100%; background-color: #ffe7e7; text-decoration: line-through;">as </span><span class="diff-html-added" id="added-diff-20" style="font-size: 100%; background-color: #ddfade;">as </span><code style="font-size: 13px"><span class="diff-html-changed" id="changed-diff-23" style="background-color: #d6f0ff;">OBJ_SEARCH_PARTIAL_KEY</span></code> </p>
<p class="diff-block-context" style="font-size: 13px"> </p>
<p class="diff-block-context" style="font-size: 13px"> </p>
</div>
</div>
</div>
<table id="email-actions" class="email-metadata" cellspacing="0" cellpadding="0" border="0" width="100%" style="border-top: 1px solid #bbb; color: #505050; margin: 8px 0 0 0; padding: 0; color: #505050">
<tbody>
<tr>
<td class="left" valign="top" style="font-size: 13px; padding-top: 8px; max-width: 45%; text-align: left"> <span class="email-list-item"><a href="https://wiki.asterisk.org/wiki/pages/viewpage.action?pageId=25919686" style="color: #326ca6; text-decoration: none">View Online</a> </span> <span class="email-list-divider" style="color: #505050; padding: 0 0.350em">·</span> <span class="email-list-item"><a href="https://wiki.asterisk.org/wiki/plugins/likes/like.action?contentId=25919686" style="color: #326ca6; text-decoration: none">Like</a> </span> <span class="email-list-divider" style="color: #505050; padding: 0 0.350em">·</span> <span class="email-list-item"><a href="https://wiki.asterisk.org/wiki/pages/diffpagesbyversion.action?pageId=25919686&revisedVersion=4&originalVersion=3" style="color: #326ca6; text-decoration: none">View Changes</a> </span> <span class="email-list-divider" style="color: #505050; padding: 0 0.350em">·</span> <span class="email-list-item"><a href="https://wiki.asterisk.org/wiki/pages/viewpage.action?pageId=25919686&showComments=true&showCommentArea=true#addcomment" style="color: #326ca6; text-decoration: none">Add Comment</a> </span> </td>
<td class="right" width="50%" valign="top" style="font-size: 13px; padding-top: 8px; text-align: right"> <span class="email-list-item"><a href="https://wiki.asterisk.org/wiki/users/removespacenotification.action?spaceKey=AST" style="color: #326ca6; text-decoration: none">Stop watching space</a> </span> <span class="email-list-divider" style="color: #505050; padding: 0 0.350em">·</span> <span class="email-list-item"><a href="https://wiki.asterisk.org/wiki/users/editmyemailsettings.action" style="color: #326ca6; text-decoration: none">Manage Notifications</a> </span> </td>
</tr>
</tbody>
</table> </td>
</tr>
</tbody>
</table> </td>
</tr>
<tr>
<td id="email-footer" align="center" style="font-size: 13px; padding: 0 16px 32px 16px; margin: 0"> <small style="font-size: 11px"> This message was sent by <a class="email-footer-link" style="color:#505050;font-size:11px;text-decoration:none;; color: #326ca6; text-decoration: none; color: #505050; font-size: 11px" href="http://www.atlassian.com/software/confluence">Atlassian Confluence</a> 5.0.3, <a class="email-footer-link" style="color:#505050;font-size:11px;text-decoration:none;; color: #326ca6; text-decoration: none; color: #505050; font-size: 11px" href="http://www.atlassian.com/software/confluence/overview/team-collaboration-software?utm_source=email-footer">Team Collaboration Software</a> </small> </td>
</tr>
</tbody>
</table>
</body>
</html>