File: group__m17nObject.html

package info (click to toggle)
m17n-docs 1.8.4-1
  • links: PTS, VCS
  • area: main
  • in suites: sid, trixie
  • size: 53,736 kB
  • sloc: javascript: 7,609; sh: 1,256; makefile: 351; ansic: 206
file content (250 lines) | stat: -rw-r--r-- 16,806 bytes parent folder | download
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 ライブラリ
   &#160;<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&amp;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&amp;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> &#124;
<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&#45;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 &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structM17NObjectHead.html">M17NObjectHead</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">管理下オブジェクトの最初のメンバ.  <a href="structM17NObjectHead.html#details">[詳解]</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</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 *&#160;</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">&#160;</td></tr>
<tr class="memitem:ga690cd4bb0e346846bb82d8ab1d18fdee"><td class="memItemLeft" align="right" valign="top">int&#160;</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">&#160;</td><td class="mdescRight">管理下オブジェクトの参照数を 1 増やす.  <a href="group__m17nObject.html#ga690cd4bb0e346846bb82d8ab1d18fdee">[詳解]</a><br /></td></tr>
<tr class="separator:ga690cd4bb0e346846bb82d8ab1d18fdee"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga248ba287a615a2cf3cdb99c13275453b"><td class="memItemLeft" align="right" valign="top">int&#160;</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">&#160;</td><td class="mdescRight">管理下オブジェクトの参照数を 1 減らす.  <a href="group__m17nObject.html#ga248ba287a615a2cf3cdb99c13275453b">[詳解]</a><br /></td></tr>
<tr class="separator:ga248ba287a615a2cf3cdb99c13275453b"><td class="memSeparator" colspan="2">&#160;</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">&#9670;&nbsp;</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&#160;</td>
          <td class="paramname"><em>size</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">void(*)(void *)&#160;</td>
          <td class="paramname"><em>freer</em>&#160;</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)-&gt;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-&gt;mem1 = num;</div>
<div class="line">  st-&gt;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">&#9670;&nbsp;</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 *&#160;</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">&#9670;&nbsp;</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 *&#160;</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".
-->