anatomist 6.0.4
3D neuroimaging data viewer
objectutils_d.h
Go to the documentation of this file.
1/* This software and supporting documentation are distributed by
2 * Institut Federatif de Recherche 49
3 * CEA/NeuroSpin, Batiment 145,
4 * 91191 Gif-sur-Yvette cedex
5 * France
6 *
7 * This software is governed by the CeCILL-B license under
8 * French law and abiding by the rules of distribution of free software.
9 * You can use, modify and/or redistribute the software under the
10 * terms of the CeCILL-B license as circulated by CEA, CNRS
11 * and INRIA at the following URL "http://www.cecill.info".
12 *
13 * As a counterpart to the access to the source code and rights to copy,
14 * modify and redistribute granted by the license, users are provided only
15 * with a limited warranty and the software's author, the holder of the
16 * economic rights, and the successive licensors have only limited
17 * liability.
18 *
19 * In this respect, the user's attention is drawn to the risks associated
20 * with loading, using, modifying and/or developing or reproducing the
21 * software by the user in light of its specific status of free software,
22 * that may mean that it is complicated to manipulate, and that also
23 * therefore means that it is reserved for developers and experienced
24 * professionals having in-depth computer knowledge. Users are therefore
25 * encouraged to load and test the software's suitability as regards their
26 * requirements in conditions enabling the security of their systems and/or
27 * data to be ensured and, more generally, to use and operate it in the
28 * same conditions as regards security.
29 *
30 * The fact that you are presently reading this means that you have had
31 * knowledge of the CeCILL-B license and that you accept its terms.
32 */
33
34
35#ifndef ANA_OBJECT_OBJECTUTILS_D_H
36#define ANA_OBJECT_OBJECTUTILS_D_H
37
38
41
42
43namespace anatomist
44{
45
46 template <typename iterator>
48 const iterator & begin, const iterator & end, size_t limit,
49 const std::set<AObject *> & setobj )
50 {
51 iterator obj;
52 std::string cat_name;
53 AObject::ParentList::const_iterator ip, fp;
54 bool first = true;
55
56 std::set<AObject *> setobj2;
57 const std::set<AObject *> *psetobj = &setobj;
58 if( setobj.empty() )
59 {
60 for( obj=begin; obj!=end; ++obj )
61 setobj2.insert( *obj );
62 psetobj = &setobj2;
63 }
64 std::set<AObject *>::const_iterator soe = psetobj->end();
65
66 for( obj=begin; obj!=end; ++obj )
67 {
68 for( ip=(*obj)->Parents().begin(), fp=(*obj)->Parents().end();
69 ip!=fp && psetobj->find( *ip ) == soe; ++ip ) {}
70 if( ip == fp ) // no parent in list
71 {
72 if( first )
73 first = false;
74 else
75 cat_name += ", ";
76 switch( (*obj)->type() )
77 {
80 {
81 MObject::iterator io, fo = ((MObject *) *obj)->end();
82 cat_name += "(";
83 io=((MObject *) *obj)->begin();
84 if( !(*io)->name().empty() )
85 cat_name += (*io)->name();
86 else
87 cat_name += "<unnamed>";
88 for( ++io; io!=fo; ++io )
89 {
90 cat_name += ",";
91 if( !(*io)->name().empty() )
92 cat_name += (*io)->name();
93 else
94 cat_name += "<unnamed>";
95 }
96 cat_name += ")";
97 }
98 break;
99 default:
100 if( !(*obj)->name().empty() )
101 cat_name += (*obj)->name();
102 else
103 cat_name += "<unnamed>";
104 break;
105 }
106 }
107 if( limit != 0 && cat_name.length() >= limit )
108 {
109 cat_name.replace( limit, cat_name.length(), " ..." );
110 break;
111 }
112 }
113
114 return cat_name;
115 }
116
117}
118
119#endif
120
T * iterator
Multi-object : base abstract class for objects that contain others.
Definition MObject.h:235
AIterator iterator
Definition MObject.h:238
static std::string catObjectNames(const std::set< AObject * > &setobj, size_t limit=0)