34 #ifndef AIMS_IO_READER_D_H 35 #define AIMS_IO_READER_D_H 48 #define localMsg( message ) cartoCondMsg( 4, message, "AIMS::READER" ) 50 #define AIMS_INSTANTIATE_READER( T ) \ 52 template class aims::Reader< T >; \ 55 template class soma::FormatDictionary< T >; \ 56 template class soma::Reader< T >; \ 58 #define AIMS_INSTANTIATE_AIMS_READER( T ) \ 60 template class aims::Reader< T >; \ 68 : _mode(
carto::AllocatorStrategy::Memory )
73 : _filename( filename ), _mode(
carto::AllocatorStrategy::Memory )
85 case carto::AllocatorStrategy::Memory:
87 case carto::AllocatorStrategy::CopyMap:
88 _alloccontext.setAccessMode( carto::AllocatorStrategy::InternalModif );
90 case carto::AllocatorStrategy::ReadOnlyMap:
91 _alloccontext.setAccessMode( carto::AllocatorStrategy::ReadOnly );
93 case carto::AllocatorStrategy::ReadWriteMap:
94 _alloccontext.setAccessMode( carto::AllocatorStrategy::ReadWrite );
96 case carto::AllocatorStrategy::Unallocated:
97 _alloccontext.setAccessMode( carto::AllocatorStrategy::NotOwner );
100 _alloccontext.setAccessMode( carto::AllocatorStrategy::InternalModif );
105 template <
typename T>
111 template <
typename T>
114 return _alloccontext;
120 _filename = fileName;
152 read_options->copyProperties(
154 Settings::settings().getValue() ) );
157 if( !_options.get() )
161 _options->setProperty(
"frame", frame );
163 _options->setProperty(
"subobjectsfilter", frame );
166 _options->setProperty(
"border", border );
174 _format = oformat->getString();
182 _options->setProperty(
"format", *format );
185 read_options->copyProperties(_options);
192 std::string uri = _filename;
193 if( border != 0 || frame != -1 )
197 if( border != 0 && frame != -1 )
207 options->setProperty(
"convert_to_aims",
true );
212 localMsg(
"0. Try soma::Reader ...") ;
214 return reader.
read( obj, n, 1, 3 );
217 catch( std::exception & e )
227 std::set<std::string> tried;
228 std::set<FileFormat<T> *> triedf;
230 std::set<std::string>::iterator notyet = tried.end();
231 typename std::set<FileFormat<T> *>::iterator notyetf = triedf.end();
241 if( read_options.
isNull() )
243 read_options->copyProperties( uri_opt );
254 localMsg(
"1. try reader " + *format);
256 if( reader->
read( filename, obj, _alloccontext, read_options ) )
263 Finder::postProcessHeader( h );
267 catch( std::exception & e )
275 tried.insert( *format );
276 triedf.insert( reader );
281 std::string::size_type pos = bname.find(
'.' );
282 std::string::size_type dlen = filename.length() - bname.length();
285 if( pos != std::string::npos )
286 ext = filename.substr( dlen+pos+1, filename.length() - pos - 1 );
288 const std::map<std::string, std::list<std::string> > & extensions
291 std::map<std::string, std::list<std::string> >::const_iterator iext
292 = extensions.find( ext ),
293 eext = extensions.end();
294 std::list<std::string>::const_iterator ie, ee;
296 while( iext == eext && (pos=bname.find(
'.', pos+1 ))!=std::string::npos )
298 ext = filename.substr( dlen+pos+1, filename.length() - pos - 1 );
299 iext = extensions.find( ext );
304 for( ie=iext->second.begin(), ee=iext->second.end(); ie!=ee; ++ie )
305 if( tried.find( *ie ) == notyet )
308 if( reader && triedf.find( reader ) == notyetf )
315 if( reader->
read( filename, obj, _alloccontext, read_options ) )
322 Finder::postProcessHeader( h );
326 catch( std::exception & e )
335 localMsg(
"2. unsuccessfully tried " + *ie);
338 triedf.insert( reader );
345 iext = extensions.find(
"" );
348 for( ie=iext->second.begin(), ee=iext->second.end(); ie!=ee; ++ie )
349 if( tried.find( *ie ) == notyet )
352 if( reader && triedf.find( reader ) == notyetf )
359 if( reader->
read( filename, obj, _alloccontext, read_options ) )
366 Finder::postProcessHeader( h );
370 catch( std::exception & e )
379 triedf.insert( reader );
385 for( iext=extensions.begin(); iext!=eext; ++iext )
386 for( ie=iext->second.begin(), ee=iext->second.end(); ie!=ee; ++ie )
387 if( tried.find( *ie ) == notyet )
390 if( reader && triedf.find( reader ) == notyetf )
397 if( reader->
read( filename, obj, _alloccontext, read_options ) )
404 Finder::postProcessHeader( h );
408 catch( std::exception & e )
417 triedf.insert( reader );
426 std::string uri = filename;
427 if( border != 0 || frame != -1 )
431 if( border != 0 && frame != -1 )
439 return reader.
read( obj, n, 4, 4 );
445 filename +
" : no matching format" );
461 read_options->copyProperties(
463 Settings::settings().getValue() ) );
466 if( !_options.get() )
470 _options->setProperty(
"frame", frame );
472 _options->setProperty(
"subobjectsfilter", frame );
475 _options->setProperty(
"border", border );
483 _format = oformat->getString();
491 _options->setProperty(
"format", *format );
494 read_options->copyProperties(_options);
501 std::string uri = _filename;
502 if( border != 0 || frame != -1 )
506 if( border != 0 && frame != -1 )
512 localMsg(
"building soma::Reader using uri: " + uri);
519 options->setProperty(
"convert_to_aims",
true );
523 localMsg(
"0. Try soma::Reader ...");
528 catch( std::exception & e )
538 std::set<std::string> tried;
539 std::set<FileFormat<T> *> triedf;
541 std::set<std::string>::iterator notyet = tried.end();
542 typename std::set<FileFormat<T> *>::iterator notyetf = triedf.end();
553 if( read_options.
isNull() )
555 read_options->copyProperties( uri_opt );
566 localMsg(
"1. try reader " + *format);
568 obj = reader->
read( filename, _alloccontext, read_options );
576 Finder::postProcessHeader( h );
580 catch( std::exception & e )
588 tried.insert( *format );
589 triedf.insert( reader );
595 const std::map<std::string, std::list<std::string> > & extensions
598 std::map<std::string, std::list<std::string> >::const_iterator iext
599 = extensions.find( ext ),
600 eext = extensions.end();
601 std::list<std::string>::const_iterator ie, ee;
605 for( ie=iext->second.begin(), ee=iext->second.end(); ie!=ee; ++ie )
606 if( tried.find( *ie ) == notyet )
609 if( reader && triedf.find( reader ) == notyetf )
616 obj = reader->
read( filename, _alloccontext, read_options );
624 Finder::postProcessHeader( h );
628 catch( std::exception & e )
637 localMsg(
"2. unsuccessfully tried " + *ie);
640 triedf.insert( reader );
647 iext = extensions.find(
"" );
650 for( ie=iext->second.begin(), ee=iext->second.end(); ie!=ee; ++ie )
651 if( tried.find( *ie ) == notyet )
654 if( reader && triedf.find( reader ) == notyetf )
661 obj = reader->
read( filename, _alloccontext, read_options );
669 Finder::postProcessHeader( h );
673 catch( std::exception & e )
682 triedf.insert( reader );
688 for( iext=extensions.begin(); iext!=eext; ++iext )
689 for( ie=iext->second.begin(), ee=iext->second.end(); ie!=ee; ++ie )
690 if( tried.find( *ie ) == notyet )
693 if( reader && triedf.find( reader ) == notyetf )
700 obj = reader->
read( filename, _alloccontext, read_options );
708 Finder::postProcessHeader( h );
712 catch( std::exception & e )
721 triedf.insert( reader );
730 std::string uri = filename;
731 if( border != 0 || frame != -1 )
735 if( border != 0 && frame != -1 )
748 filename +
" : no matching format" );
static std::string extension(const std::string &)
static std::string basename(const std::string &)
static void keepExceptionPriority(std::exception &e, int &prio, int &type, std::string &message, int raiseprio=0)
The class for EcatSino data write operation.
static Object reference(T &value)
const carto::AllocatorStrategy::MappingMode MAP
carto::Object getObjectHeader(Headered &h)
void setAllocatorContext(const AllocatorContext &ac)
void setOptions(carto::Object options)
Generic reader for every format of Aims object.
virtual bool read(T &obj, carto::Object header=carto::none(), int passbegin=1, int passend=4)
std::map< std::string, Object > Dictionary
static void launchExcept(int code, const std::string &msg, const std::string &defmsg="")
std::string toString(const T &object)
Object none()
Pointer to an empty aims::StructuringElement.
static std::string uriFilename(const std::string &filein)
#define localMsg(message)
static Object uriOptions(const std::string &filein)