1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.9.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>m17n ライブラリ: 管理下オブジェクト</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">m17n ライブラリ
 <span id="projectnumber">1.8.4</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- 構築: Doxygen 1.9.1 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'検索','.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','検索');
$(document).ready(function() { init_search(); });
});
/* @license-end */</script>
<div id="main-nav"></div>
</div><!-- top -->
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div class="header">
<div class="summary">
<a href="#nested-classes">データ構造</a> |
<a href="#func-members">関数</a> </div>
<div class="headertitle">
<div class="title">管理下オブジェクト<div class="ingroups"><a class="el" href="group__m17nCore.html">コア API</a></div></div> </div>
</div><!--header-->
<div class="contents">
<p>参照回数で管理されるオブジェクト
<a href="#details">[詳解]</a></p>
<div class="dynheader">
管理下オブジェクト 連携図</div>
<div class="dyncontent">
<div class="center"><img src="group__m17nObject.png" border="0" usemap="#agroup____m17nObject" alt=""/></div>
<map name="agroup____m17nObject" id="agroup____m17nObject">
<area shape="rect" href="group__m17nCore.html" title="libm17n-core.so が提供する API" alt="" coords="5,5,77,31"/>
<area shape="rect" title="参照回数で管理されるオブジェクト" alt="" coords="125,5,264,31"/>
</map>
</div>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
データ構造</h2></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structM17NObjectHead.html">M17NObjectHead</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">管理下オブジェクトの最初のメンバ. <a href="structM17NObjectHead.html#details">[詳解]</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
関数</h2></td></tr>
<tr class="memitem:ga90d6c570a21d615b60c2551b756e2de6"><td class="memItemLeft" align="right" valign="top">void * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__m17nObject.html#ga90d6c570a21d615b60c2551b756e2de6">m17n_object</a> (int size, void(*freer)(void *))</td></tr>
<tr class="separator:ga90d6c570a21d615b60c2551b756e2de6"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:ga690cd4bb0e346846bb82d8ab1d18fdee"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__m17nObject.html#ga690cd4bb0e346846bb82d8ab1d18fdee">m17n_object_ref</a> (void *object)</td></tr>
<tr class="memdesc:ga690cd4bb0e346846bb82d8ab1d18fdee"><td class="mdescLeft"> </td><td class="mdescRight">管理下オブジェクトの参照数を 1 増やす. <a href="group__m17nObject.html#ga690cd4bb0e346846bb82d8ab1d18fdee">[詳解]</a><br /></td></tr>
<tr class="separator:ga690cd4bb0e346846bb82d8ab1d18fdee"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:ga248ba287a615a2cf3cdb99c13275453b"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__m17nObject.html#ga248ba287a615a2cf3cdb99c13275453b">m17n_object_unref</a> (void *object)</td></tr>
<tr class="memdesc:ga248ba287a615a2cf3cdb99c13275453b"><td class="mdescLeft"> </td><td class="mdescRight">管理下オブジェクトの参照数を 1 減らす. <a href="group__m17nObject.html#ga248ba287a615a2cf3cdb99c13275453b">[詳解]</a><br /></td></tr>
<tr class="separator:ga248ba287a615a2cf3cdb99c13275453b"><td class="memSeparator" colspan="2"> </td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">詳解</h2>
<p>参照回数で管理されるオブジェクト </p>
<p>管理下オブジェクトとは参照数によって管理されているオブジェクトである.</p>
<p>m17n オブジェクトのある型のものは、参照数によって管理されている。 それらのオブジェクトは <em>管理下オブジェクト</em> と呼ばれる。生成された時点での参照数は 1 に初期化されている。関数 <a class="el" href="group__m17nObject.html#ga690cd4bb0e346846bb82d8ab1d18fdee" title="管理下オブジェクトの参照数を 1 増やす.">m17n_object_ref()</a> は管理下オブジェクトの参照数を 1 増やし、関数m17n_object_unref() は 1 減らす。参照数が 0 になった管理下オブジェクトは自動的に解放される。</p>
<p>キーが管理キーであるプロパティは、値として管理下オブジェクトだけを取る。 関数 <a class="el" href="group__m17nSymbol.html#ga9b90027677f183f65d85dac0d7d5bb9c" title="シンボルプロパティに値を設定する.">msymbol_put()</a> や <a class="el" href="group__m17nPlist.html#gafbfabe7a3e97e3dc6968263f61a3bee3" title="プロパティリスト中のプロパティの値を設定する.">mplist_put()</a> などはそれらのプロパティを特別扱いする。</p>
<p>定義済み管理下オブジェクトタイプの他に、ユーザは必要な管理下オブジェクトタイプを自分で定義することができる。詳細は <a class="el" href="group__m17nObject.html#ga90d6c570a21d615b60c2551b756e2de6">m17n_object()</a> の説明を参照。 </p>
<h2 class="groupheader">関数詳解</h2>
<a id="ga90d6c570a21d615b60c2551b756e2de6"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga90d6c570a21d615b60c2551b756e2de6">◆ </a></span>m17n_object()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void* m17n_object </td>
<td>(</td>
<td class="paramtype">int </td>
<td class="paramname"><em>size</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">void(*)(void *) </td>
<td class="paramname"><em>freer</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<pre class="fragment">@brief 管理下オブジェクトを割り当てる.
関数 m17n_object() は@b size バイトの新しい管理下オブジェクトを割り当て、その参照数を
1 とする。 @b freer は参照数が 0
になった際にそのオブジェクトを解放するために用いられる関数である。@b freer
が NULLならば、オブジェクトは関数 free() によって解放される。
割り当てられたオブジェクト冒頭のバイトは、#M17NObjectHead
が占める。この領域は m17n ライブラリが使用するので、アプリケーションプログラムは触れてはならない。
@par 戻り値:
この関数は新しく割り当てられたオブジェクトを返す。
@par エラー:
この関数は失敗しない。
</pre><dl class="section user"><dt>例: </dt><dd><div class="fragment"><div class="line"><span class="keyword">typedef</span> <span class="keyword">struct</span></div>
<div class="line">{</div>
<div class="line"> <a class="code" href="structM17NObjectHead.html">M17NObjectHead</a> head;</div>
<div class="line"> <span class="keywordtype">int</span> mem1;</div>
<div class="line"> <span class="keywordtype">char</span> *mem2;</div>
<div class="line">} MYStruct;</div>
<div class="line"> </div>
<div class="line"><span class="keywordtype">void</span></div>
<div class="line">my_freer (<span class="keywordtype">void</span> *obj)</div>
<div class="line">{</div>
<div class="line"> free (((MYStruct *) obj)->mem2);</div>
<div class="line"> free (obj);</div>
<div class="line">}</div>
<div class="line"> </div>
<div class="line"><span class="keywordtype">void</span></div>
<div class="line">my_func (<a class="code" href="structMText.html">MText</a> *mt, MSymbol key, <span class="keywordtype">int</span> num, <span class="keywordtype">char</span> *str)</div>
<div class="line">{</div>
<div class="line"> MYStruct *st = <a class="code" href="group__m17nObject.html#ga90d6c570a21d615b60c2551b756e2de6">m17n_object</a> (<span class="keyword">sizeof</span> (MYStruct), my_freer);</div>
<div class="line"> </div>
<div class="line"> st->mem1 = num;</div>
<div class="line"> st->mem2 = strdup (str);</div>
<div class="line"> <span class="comment">/* KEY must be a managing key. */</span></div>
<div class="line"> <a class="code" href="group__m17nTextProperty.html#ga0ebfee8b550cc5ccaefd6f091fc5695f">mtext_put_prop</a> (mt, 0, <a class="code" href="group__m17nMtext.html#ga28ea3879a9dae45127bd62499645c7c3">mtext_len</a> (mt), key, st);</div>
<div class="line"> <span class="comment">/* This sets the reference count of ST back to 1. */</span></div>
<div class="line"> <a class="code" href="group__m17nObject.html#ga248ba287a615a2cf3cdb99c13275453b">m17n_object_unref</a> (st);</div>
<div class="line">}</div>
<div class="ttc" id="agroup__m17nMtext_html_ga28ea3879a9dae45127bd62499645c7c3"><div class="ttname"><a href="group__m17nMtext.html#ga28ea3879a9dae45127bd62499645c7c3">mtext_len</a></div><div class="ttdeci">int mtext_len(MText *mt)</div><div class="ttdoc">M-text 中の文字の数.</div><div class="ttdef"><b>Definition:</b> mtext.c:1412</div></div>
<div class="ttc" id="agroup__m17nObject_html_ga248ba287a615a2cf3cdb99c13275453b"><div class="ttname"><a href="group__m17nObject.html#ga248ba287a615a2cf3cdb99c13275453b">m17n_object_unref</a></div><div class="ttdeci">int m17n_object_unref(void *object)</div><div class="ttdoc">管理下オブジェクトの参照数を 1 減らす.</div><div class="ttdef"><b>Definition:</b> m17n-core.c:586</div></div>
<div class="ttc" id="agroup__m17nObject_html_ga90d6c570a21d615b60c2551b756e2de6"><div class="ttname"><a href="group__m17nObject.html#ga90d6c570a21d615b60c2551b756e2de6">m17n_object</a></div><div class="ttdeci">void * m17n_object(int size, void(*freer)(void *))</div><div class="ttdef"><b>Definition:</b> m17n-core.c:522</div></div>
<div class="ttc" id="agroup__m17nTextProperty_html_ga0ebfee8b550cc5ccaefd6f091fc5695f"><div class="ttname"><a href="group__m17nTextProperty.html#ga0ebfee8b550cc5ccaefd6f091fc5695f">mtext_put_prop</a></div><div class="ttdeci">int mtext_put_prop(MText *mt, int from, int to, MSymbol key, void *val)</div><div class="ttdef"><b>Definition:</b> textprop.c:1290</div></div>
<div class="ttc" id="astructM17NObjectHead_html"><div class="ttname"><a href="structM17NObjectHead.html">M17NObjectHead</a></div><div class="ttdoc">管理下オブジェクトの最初のメンバ.</div><div class="ttdef"><b>Definition:</b> m17n-core.h:59</div></div>
<div class="ttc" id="astructMText_html"><div class="ttname"><a href="structMText.html">MText</a></div><div class="ttdoc">MText の型宣言.</div><div class="ttdef"><b>Definition:</b> internal.h:287</div></div>
</div><!-- fragment --> </dd></dl>
</div>
</div>
<a id="ga690cd4bb0e346846bb82d8ab1d18fdee"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga690cd4bb0e346846bb82d8ab1d18fdee">◆ </a></span>m17n_object_ref()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int m17n_object_ref </td>
<td>(</td>
<td class="paramtype">void * </td>
<td class="paramname"><em>object</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>管理下オブジェクトの参照数を 1 増やす. </p>
<p>関数 <a class="el" href="group__m17nObject.html#ga690cd4bb0e346846bb82d8ab1d18fdee" title="管理下オブジェクトの参照数を 1 増やす.">m17n_object_ref()</a> は <b>object</b> で指される管理下オブジェクトの参照数を 1 増やす。</p>
<dl class="section user"><dt>戻り値: </dt><dd>この関数は、増やした参照数が 16 ビットの符号無し整数値(すなわち 0x10000 未満)におさまれば、それを返す。そうでなければ -1 を返す。</dd></dl>
<dl class="section user"><dt>エラー:</dt><dd>この関数は失敗しない。 </dd></dl>
</div>
</div>
<a id="ga248ba287a615a2cf3cdb99c13275453b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga248ba287a615a2cf3cdb99c13275453b">◆ </a></span>m17n_object_unref()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int m17n_object_unref </td>
<td>(</td>
<td class="paramtype">void * </td>
<td class="paramname"><em>object</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>管理下オブジェクトの参照数を 1 減らす. </p>
<p>関数 <a class="el" href="group__m17nObject.html#ga248ba287a615a2cf3cdb99c13275453b" title="管理下オブジェクトの参照数を 1 減らす.">m17n_object_unref()</a> は <b>object</b> で指される管理下オブジェクトの参照数を 1 減らす。参照数が 0 になれば、オブジェクトは解放関数によって解放される。</p>
<dl class="section user"><dt>戻り値: </dt><dd>この関数は、減らした参照数が 16 ビットの符号無し整数値(すなわち 0x10000 未満)におさまれば、それを返す。そうでなければ -1 を返す。つまり、0 が返って来た場合は<b>object</b> は解放されている。</dd></dl>
<dl class="section user"><dt>エラー:</dt><dd>この関数は失敗しない。 </dd></dl>
</div>
</div>
</div><!-- contents -->
<!-- -*- coding: utf-8; -*- -->
<hr>
<ADDRESS>
<a href="http://www.m17n.org/m17n-lib-ja/index.html" target="mulewindow"><img src="parrot.png" align=bottom alt="m17n-lib Home" border=0></a>
</ADDRESS>
</body>
</HTML>
<!-- Copyright information
Copyright (C) 2001 Information-technology Promotion Agency (IPA)
Copyright (C) 2001-2011
National Institute of Advanced Industrial Science and Technology (AIST)
This file is part of the m17n library documentation.
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.2 or
any later version published by the Free Software Foundation; with no
Invariant Section, no Front-Cover Texts,
and no Back-Cover Texts. A copy of the license is included in the
appendix entitled "GNU Free Documentation License".
-->
|