anatomist  5.1.2
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 
43 namespace 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  {
78  case AObject::FUSION2D:
79  case AObject::FUSION3D:
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 generic iterator.
Definition: MObject.h:115
Multi-object : base abstract class for objects that contain others.
Definition: MObject.h:235
static std::string catObjectNames(const std::set< AObject * > &setobj, size_t limit=0)