| <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> |
| <html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"> |
| <title>tbb::interface5::enumerable_thread_specific< T, Allocator, ETS_key_type > Class Template Reference</title> |
| <link href="doxygen.css" rel="stylesheet" type="text/css"> |
| <link href="tabs.css" rel="stylesheet" type="text/css"> |
| </head><body> |
| <!-- Generated by Doxygen 1.4.7 --> |
| <div class="tabs"> |
| <ul> |
| <li><a href="index.html"><span>Main Page</span></a></li> |
| <li><a href="modules.html"><span>Modules</span></a></li> |
| <li><a href="namespaces.html"><span>Namespaces</span></a></li> |
| <li id="current"><a href="annotated.html"><span>Classes</span></a></li> |
| <li><a href="files.html"><span>Files</span></a></li> |
| <li><a href="pages.html"><span>Related Pages</span></a></li> |
| </ul></div> |
| <div class="tabs"> |
| <ul> |
| <li><a href="annotated.html"><span>Class List</span></a></li> |
| <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li> |
| <li><a href="functions.html"><span>Class Members</span></a></li> |
| </ul></div> |
| <div class="nav"> |
| <a class="el" href="a00267.html">tbb</a>::<b>interface5</b>::<a class="el" href="a00164.html">enumerable_thread_specific</a></div> |
| <h1>tbb::interface5::enumerable_thread_specific< T, Allocator, ETS_key_type > Class Template Reference<br> |
| <small> |
| [<a class="el" href="a00275.html">Containers</a>]</small> |
| </h1><!-- doxytag: class="tbb::interface5::enumerable_thread_specific" -->The <a class="el" href="a00164.html">enumerable_thread_specific</a> container. |
| <a href="#_details">More...</a> |
| <p> |
| <code>#include <<a class="el" href="a00353.html">enumerable_thread_specific.h</a>></code> |
| <p> |
| <a href="a00031.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0"> |
| <tr><td></td></tr> |
| <tr><td colspan="2"><br><h2>Public Types</h2></td></tr> |
| <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="da7721b6c35d333ec89a37b63d0d82d3"></a><!-- doxytag: member="tbb::interface5::enumerable_thread_specific::allocator_type" ref="da7721b6c35d333ec89a37b63d0d82d3" args="" --> |
| typedef Allocator </td><td class="memItemRight" valign="bottom"><a class="el" href="a00164.html#da7721b6c35d333ec89a37b63d0d82d3">allocator_type</a></td></tr> |
| |
| <tr><td class="mdescLeft"> </td><td class="mdescRight">Basic types. <br></td></tr> |
| <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="976852701d9d4018bca74907c80422af"></a><!-- doxytag: member="tbb::interface5::enumerable_thread_specific::value_type" ref="976852701d9d4018bca74907c80422af" args="" --> |
| typedef T </td><td class="memItemRight" valign="bottom"><b>value_type</b></td></tr> |
| |
| <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ca057d1cd23e99fb9d391d4af32ea3c3"></a><!-- doxytag: member="tbb::interface5::enumerable_thread_specific::reference" ref="ca057d1cd23e99fb9d391d4af32ea3c3" args="" --> |
| typedef T & </td><td class="memItemRight" valign="bottom"><b>reference</b></td></tr> |
| |
| <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="518d24e759a14ed3d4b5ad13abc54b4c"></a><!-- doxytag: member="tbb::interface5::enumerable_thread_specific::const_reference" ref="518d24e759a14ed3d4b5ad13abc54b4c" args="" --> |
| typedef const T & </td><td class="memItemRight" valign="bottom"><b>const_reference</b></td></tr> |
| |
| <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="68d25e2e57106ce3805f8f14b9c13d8c"></a><!-- doxytag: member="tbb::interface5::enumerable_thread_specific::pointer" ref="68d25e2e57106ce3805f8f14b9c13d8c" args="" --> |
| typedef T * </td><td class="memItemRight" valign="bottom"><b>pointer</b></td></tr> |
| |
| <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="dc48472e808339c40eb55c3fa4e68dc5"></a><!-- doxytag: member="tbb::interface5::enumerable_thread_specific::const_pointer" ref="dc48472e808339c40eb55c3fa4e68dc5" args="" --> |
| typedef const T * </td><td class="memItemRight" valign="bottom"><b>const_pointer</b></td></tr> |
| |
| <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="5c822bff644fb5245386486cc1ddaf7c"></a><!-- doxytag: member="tbb::interface5::enumerable_thread_specific::size_type" ref="5c822bff644fb5245386486cc1ddaf7c" args="" --> |
| typedef internal_collection_type::size_type </td><td class="memItemRight" valign="bottom"><b>size_type</b></td></tr> |
| |
| <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="5e3fa161ff14516769519d3a555ccfb3"></a><!-- doxytag: member="tbb::interface5::enumerable_thread_specific::difference_type" ref="5e3fa161ff14516769519d3a555ccfb3" args="" --> |
| typedef internal_collection_type::difference_type </td><td class="memItemRight" valign="bottom"><b>difference_type</b></td></tr> |
| |
| <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="00c3c2708bf7618b80060c2703aaf261"></a><!-- doxytag: member="tbb::interface5::enumerable_thread_specific::iterator" ref="00c3c2708bf7618b80060c2703aaf261" args="" --> |
| typedef internal::enumerable_thread_specific_iterator<<br> |
| <a class="el" href="a00162.html">internal_collection_type</a>,<br> |
| value_type > </td><td class="memItemRight" valign="bottom"><b>iterator</b></td></tr> |
| |
| <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="c575f3574d5d82b98e6a07314dcdc17f"></a><!-- doxytag: member="tbb::interface5::enumerable_thread_specific::const_iterator" ref="c575f3574d5d82b98e6a07314dcdc17f" args="" --> |
| typedef internal::enumerable_thread_specific_iterator<<br> |
| <a class="el" href="a00162.html">internal_collection_type</a>,<br> |
| const value_type > </td><td class="memItemRight" valign="bottom"><b>const_iterator</b></td></tr> |
| |
| <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b914933105a8b56b961dd87c35908077"></a><!-- doxytag: member="tbb::interface5::enumerable_thread_specific::range_type" ref="b914933105a8b56b961dd87c35908077" args="" --> |
| typedef generic_range_type<<br> |
| iterator > </td><td class="memItemRight" valign="bottom"><b>range_type</b></td></tr> |
| |
| <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="c914d5e2d64af34ae7399010057999c9"></a><!-- doxytag: member="tbb::interface5::enumerable_thread_specific::const_range_type" ref="c914d5e2d64af34ae7399010057999c9" args="" --> |
| typedef generic_range_type<<br> |
| const_iterator > </td><td class="memItemRight" valign="bottom"><b>const_range_type</b></td></tr> |
| |
| <tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr> |
| <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ca9994099ebd88e92be061452687422e"></a><!-- doxytag: member="tbb::interface5::enumerable_thread_specific::enumerable_thread_specific" ref="ca9994099ebd88e92be061452687422e" args="()" --> |
| </td><td class="memItemRight" valign="bottom"><a class="el" href="a00164.html#ca9994099ebd88e92be061452687422e">enumerable_thread_specific</a> ()</td></tr> |
| |
| <tr><td class="mdescLeft"> </td><td class="mdescRight">Default constructor, which leads to default construction of local copies. <br></td></tr> |
| <tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="724ed4c846493da62b4efe032e16eb4a"></a><!-- doxytag: member="tbb::interface5::enumerable_thread_specific::enumerable_thread_specific" ref="724ed4c846493da62b4efe032e16eb4a" args="(Finit _finit)" --> |
| template<typename Finit> </td></tr> |
| <tr><td class="memTemplItemLeft" nowrap align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00164.html#724ed4c846493da62b4efe032e16eb4a">enumerable_thread_specific</a> (Finit _finit)</td></tr> |
| |
| <tr><td class="mdescLeft"> </td><td class="mdescRight">construction with initializer method <br></td></tr> |
| <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="105a6487c8c4113ba89891b75243780c"></a><!-- doxytag: member="tbb::interface5::enumerable_thread_specific::enumerable_thread_specific" ref="105a6487c8c4113ba89891b75243780c" args="(const T &_exemplar)" --> |
| </td><td class="memItemRight" valign="bottom"><a class="el" href="a00164.html#105a6487c8c4113ba89891b75243780c">enumerable_thread_specific</a> (const T &_exemplar)</td></tr> |
| |
| <tr><td class="mdescLeft"> </td><td class="mdescRight">Constuction with exemplar, which leads to copy construction of local copies. <br></td></tr> |
| <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="7f6e5b3654712ea003cbb7ebaffa8dd9"></a><!-- doxytag: member="tbb::interface5::enumerable_thread_specific::~enumerable_thread_specific" ref="7f6e5b3654712ea003cbb7ebaffa8dd9" args="()" --> |
| </td><td class="memItemRight" valign="bottom"><a class="el" href="a00164.html#7f6e5b3654712ea003cbb7ebaffa8dd9">~enumerable_thread_specific</a> ()</td></tr> |
| |
| <tr><td class="mdescLeft"> </td><td class="mdescRight">Destructor. <br></td></tr> |
| <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="8bcc55bfecc81937872b13f6db962b16"></a><!-- doxytag: member="tbb::interface5::enumerable_thread_specific::local" ref="8bcc55bfecc81937872b13f6db962b16" args="()" --> |
| reference </td><td class="memItemRight" valign="bottom"><a class="el" href="a00164.html#8bcc55bfecc81937872b13f6db962b16">local</a> ()</td></tr> |
| |
| <tr><td class="mdescLeft"> </td><td class="mdescRight">returns reference to local, discarding exists <br></td></tr> |
| <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="34423652c3add42563b1d5d44ca78158"></a><!-- doxytag: member="tbb::interface5::enumerable_thread_specific::local" ref="34423652c3add42563b1d5d44ca78158" args="(bool &exists)" --> |
| reference </td><td class="memItemRight" valign="bottom"><a class="el" href="a00164.html#34423652c3add42563b1d5d44ca78158">local</a> (bool &exists)</td></tr> |
| |
| <tr><td class="mdescLeft"> </td><td class="mdescRight">Returns reference to calling thread's local copy, creating one if necessary. <br></td></tr> |
| <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="101ecd32efae3ce1331c3d8a791c645b"></a><!-- doxytag: member="tbb::interface5::enumerable_thread_specific::size" ref="101ecd32efae3ce1331c3d8a791c645b" args="() const " --> |
| size_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00164.html#101ecd32efae3ce1331c3d8a791c645b">size</a> () const </td></tr> |
| |
| <tr><td class="mdescLeft"> </td><td class="mdescRight">Get the number of local copies. <br></td></tr> |
| <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="af91306d8e10e093226788a733ee59b4"></a><!-- doxytag: member="tbb::interface5::enumerable_thread_specific::empty" ref="af91306d8e10e093226788a733ee59b4" args="() const " --> |
| bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00164.html#af91306d8e10e093226788a733ee59b4">empty</a> () const </td></tr> |
| |
| <tr><td class="mdescLeft"> </td><td class="mdescRight">true if there have been no local copies created <br></td></tr> |
| <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="efd1e3d008ec5cd69c6b10c6dcac1e2c"></a><!-- doxytag: member="tbb::interface5::enumerable_thread_specific::begin" ref="efd1e3d008ec5cd69c6b10c6dcac1e2c" args="()" --> |
| iterator </td><td class="memItemRight" valign="bottom"><a class="el" href="a00164.html#efd1e3d008ec5cd69c6b10c6dcac1e2c">begin</a> ()</td></tr> |
| |
| <tr><td class="mdescLeft"> </td><td class="mdescRight">begin iterator <br></td></tr> |
| <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="3156594e622924c094c45faa261dba5a"></a><!-- doxytag: member="tbb::interface5::enumerable_thread_specific::end" ref="3156594e622924c094c45faa261dba5a" args="()" --> |
| iterator </td><td class="memItemRight" valign="bottom"><a class="el" href="a00164.html#3156594e622924c094c45faa261dba5a">end</a> ()</td></tr> |
| |
| <tr><td class="mdescLeft"> </td><td class="mdescRight">end iterator <br></td></tr> |
| <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="5f94cdb3a743e8b57c70dcb1041cfdf9"></a><!-- doxytag: member="tbb::interface5::enumerable_thread_specific::begin" ref="5f94cdb3a743e8b57c70dcb1041cfdf9" args="() const " --> |
| const_iterator </td><td class="memItemRight" valign="bottom"><a class="el" href="a00164.html#5f94cdb3a743e8b57c70dcb1041cfdf9">begin</a> () const </td></tr> |
| |
| <tr><td class="mdescLeft"> </td><td class="mdescRight">begin const iterator <br></td></tr> |
| <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="9909c01ec91ef10908c5155d6350db2d"></a><!-- doxytag: member="tbb::interface5::enumerable_thread_specific::end" ref="9909c01ec91ef10908c5155d6350db2d" args="() const " --> |
| const_iterator </td><td class="memItemRight" valign="bottom"><a class="el" href="a00164.html#9909c01ec91ef10908c5155d6350db2d">end</a> () const </td></tr> |
| |
| <tr><td class="mdescLeft"> </td><td class="mdescRight">end const iterator <br></td></tr> |
| <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ab3f04b8d355b5d311e955d3bb63562c"></a><!-- doxytag: member="tbb::interface5::enumerable_thread_specific::range" ref="ab3f04b8d355b5d311e955d3bb63562c" args="(size_t grainsize=1)" --> |
| range_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00164.html#ab3f04b8d355b5d311e955d3bb63562c">range</a> (size_t grainsize=1)</td></tr> |
| |
| <tr><td class="mdescLeft"> </td><td class="mdescRight">Get range for parallel algorithms. <br></td></tr> |
| <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="48f5ab20db3c77faa7219deb28076e6c"></a><!-- doxytag: member="tbb::interface5::enumerable_thread_specific::range" ref="48f5ab20db3c77faa7219deb28076e6c" args="(size_t grainsize=1) const " --> |
| const_range_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00164.html#48f5ab20db3c77faa7219deb28076e6c">range</a> (size_t grainsize=1) const </td></tr> |
| |
| <tr><td class="mdescLeft"> </td><td class="mdescRight">Get const range for parallel algorithms. <br></td></tr> |
| <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e7be0d504ba71ae6c7479eb373a361ab"></a><!-- doxytag: member="tbb::interface5::enumerable_thread_specific::clear" ref="e7be0d504ba71ae6c7479eb373a361ab" args="()" --> |
| void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00164.html#e7be0d504ba71ae6c7479eb373a361ab">clear</a> ()</td></tr> |
| |
| <tr><td class="mdescLeft"> </td><td class="mdescRight">Destroys local copies. <br></td></tr> |
| <tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a2f7ac9445823125ad1df2aaa06b5b92"></a><!-- doxytag: member="tbb::interface5::enumerable_thread_specific::enumerable_thread_specific" ref="a2f7ac9445823125ad1df2aaa06b5b92" args="(const enumerable_thread_specific< U, Alloc, Cachetype > &other)" --> |
| template<typename U, typename Alloc, ets_key_usage_type Cachetype> </td></tr> |
| <tr><td class="memTemplItemLeft" nowrap align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><b>enumerable_thread_specific</b> (const <a class="el" href="a00164.html">enumerable_thread_specific</a>< U, Alloc, Cachetype > &other)</td></tr> |
| |
| <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="8efb1e66e999d19e293964876da6414c"></a><!-- doxytag: member="tbb::interface5::enumerable_thread_specific::enumerable_thread_specific" ref="8efb1e66e999d19e293964876da6414c" args="(const enumerable_thread_specific &other)" --> |
| </td><td class="memItemRight" valign="bottom"><b>enumerable_thread_specific</b> (const <a class="el" href="a00164.html">enumerable_thread_specific</a> &other)</td></tr> |
| |
| <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a9b097f10dc5f035c73a0393b1820f4d"></a><!-- doxytag: member="tbb::interface5::enumerable_thread_specific::operator=" ref="a9b097f10dc5f035c73a0393b1820f4d" args="(const enumerable_thread_specific &other)" --> |
| <a class="el" href="a00164.html">enumerable_thread_specific</a> & </td><td class="memItemRight" valign="bottom"><b>operator=</b> (const <a class="el" href="a00164.html">enumerable_thread_specific</a> &other)</td></tr> |
| |
| <tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="f96ff60333760809cbf29850ed31cae3"></a><!-- doxytag: member="tbb::interface5::enumerable_thread_specific::operator=" ref="f96ff60333760809cbf29850ed31cae3" args="(const enumerable_thread_specific< U, Alloc, Cachetype > &other)" --> |
| template<typename U, typename Alloc, ets_key_usage_type Cachetype> </td></tr> |
| <tr><td class="memTemplItemLeft" nowrap align="right" valign="top"><a class="el" href="a00164.html">enumerable_thread_specific</a> & </td><td class="memTemplItemRight" valign="bottom"><b>operator=</b> (const <a class="el" href="a00164.html">enumerable_thread_specific</a>< U, Alloc, Cachetype > &other)</td></tr> |
| |
| <tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="8203013705240cba76052ec7b828aaa8"></a><!-- doxytag: member="tbb::interface5::enumerable_thread_specific::combine" ref="8203013705240cba76052ec7b828aaa8" args="(combine_func_t f_combine)" --> |
| template<typename combine_func_t> </td></tr> |
| <tr><td class="memTemplItemLeft" nowrap align="right" valign="top">T </td><td class="memTemplItemRight" valign="bottom"><b>combine</b> (combine_func_t f_combine)</td></tr> |
| |
| <tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="665463cc7bb56143d9cdbb35fc3616b0"></a><!-- doxytag: member="tbb::interface5::enumerable_thread_specific::combine_each" ref="665463cc7bb56143d9cdbb35fc3616b0" args="(combine_func_t f_combine)" --> |
| template<typename combine_func_t> </td></tr> |
| <tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>combine_each</b> (combine_func_t f_combine)</td></tr> |
| |
| <tr><td colspan="2"><br><h2>Friends</h2></td></tr> |
| <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="45364b2f249ceb935cff05c29fcfcf5c"></a><!-- doxytag: member="tbb::interface5::enumerable_thread_specific::enumerable_thread_specific" ref="45364b2f249ceb935cff05c29fcfcf5c" args="" --> |
| class </td><td class="memItemRight" valign="bottom"><b>enumerable_thread_specific</b></td></tr> |
| |
| <tr><td colspan="2"><br><h2>Classes</h2></td></tr> |
| <tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><b>generic_range_type</b></td></tr> |
| |
| <tr><td class="mdescLeft"> </td><td class="mdescRight">A generic range, used to create range objects from the iterators. <br></td></tr> |
| </table> |
| <hr><a name="_details"></a><h2>Detailed Description</h2> |
| <h3>template<typename T, typename Allocator = cache_aligned_allocator<T>, ets_key_usage_type ETS_key_type = ets_no_key><br> |
| class tbb::interface5::enumerable_thread_specific< T, Allocator, ETS_key_type ></h3> |
| |
| The <a class="el" href="a00164.html">enumerable_thread_specific</a> container. |
| <p> |
| <a class="el" href="a00164.html">enumerable_thread_specific</a> has the following properties:<ul> |
| <li>thread-local copies are lazily created, with default, exemplar or function initialization.</li><li>thread-local copies do not move (during lifetime, and excepting <a class="el" href="a00164.html#e7be0d504ba71ae6c7479eb373a361ab">clear()</a>) so the address of a copy is invariant.</li><li>the contained objects need not have operator=() defined if combine is not used.</li><li><a class="el" href="a00164.html">enumerable_thread_specific</a> containers may be copy-constructed or assigned.</li><li>thread-local copies can be managed by hash-table, or can be accessed via TLS storage for speed.</li><li>outside of parallel contexts, the contents of all thread-local copies are accessible by iterator or using combine or combine_each methods</li></ul> |
| <p> |
| <dl compact><dt><b>Segmented iterator</b></dt><dd>When the thread-local objects are containers with input_iterators defined, a segmented iterator may be used to iterate over all the elements of all thread-local copies.</dd></dl> |
| <dl compact><dt><b>combine and combine_each</b></dt><dd><ul> |
| <li>Both methods are defined for <a class="el" href="a00164.html">enumerable_thread_specific</a>.</li><li>combine() requires the the type T have operator=() defined.</li><li>neither method modifies the contents of the object (though there is no guarantee that the applied methods do not modify the object.)</li><li>Both are evaluated in serial context (the methods are assumed to be non-benign.) </li></ul> |
| </dd></dl> |
| |
| <p> |
| <hr>The documentation for this class was generated from the following file:<ul> |
| <li><a class="el" href="a00353.html">enumerable_thread_specific.h</a></ul> |
| <hr> |
| <p></p> |
| Copyright © 2005-2010 Intel Corporation. All Rights Reserved. |
| <p></p> |
| Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are |
| registered trademarks or trademarks of Intel Corporation or its |
| subsidiaries in the United States and other countries. |
| <p></p> |
| * Other names and brands may be claimed as the property of others. |