00001 #include "AIDA_TupleHeader.h" 00002 #include "AIDA_Dev/ITupleVariableDescription.h" 00003 #include "AIDA/IAnnotation.h" 00004 00005 static const std::string emptyString = ""; 00006 00007 Anaphe::AIDA_Tuple_native::AIDA_TupleHeader::AIDA_TupleHeader(): 00008 m_annotation( createAnnotation() ), 00009 m_numberOfRows( 0 ), 00010 m_currentRowNumber( -1 ), 00011 m_pathInStore(emptyString), 00012 m_variableDescriptions(), 00013 m_variableIndices(), 00014 m_options( emptyString ) 00015 {} 00016 00017 00018 Anaphe::AIDA_Tuple_native::AIDA_TupleHeader::~AIDA_TupleHeader() 00019 { 00020 if ( m_annotation ) delete m_annotation; 00021 for ( unsigned int i = 0; i < m_variableDescriptions.size(); ++i ) { 00022 if ( m_variableDescriptions[i].second ) delete m_variableDescriptions[i].first; 00023 } 00024 00025 } 00026 00027 00028 AIDA::IAnnotation& 00029 Anaphe::AIDA_Tuple_native::AIDA_TupleHeader::annotation() 00030 { 00031 return *m_annotation; 00032 } 00033 00034 00035 const AIDA::IAnnotation& 00036 Anaphe::AIDA_Tuple_native::AIDA_TupleHeader::annotation() const 00037 { 00038 return *m_annotation; 00039 } 00040 00041 00042 bool 00043 Anaphe::AIDA_Tuple_native::AIDA_TupleHeader::setVariableDescription( AIDA::Dev::ITupleVariableDescription* description, 00044 bool passOwnership ) 00045 { 00046 std::map< std::string, int >::iterator iVariable = m_variableIndices.find( description->variableName() ); 00047 if ( iVariable != m_variableIndices.end() ) { 00048 return false; 00049 } 00050 else { 00051 m_variableIndices.insert( std::make_pair( description->variableName(), static_cast<int>( m_variableDescriptions.size() ) ) ); 00052 m_variableDescriptions.push_back( std::make_pair( description, passOwnership ) ); 00053 } 00054 return true; 00055 } 00056 00057 00058 AIDA::Dev::ITupleVariableDescription* 00059 Anaphe::AIDA_Tuple_native::AIDA_TupleHeader::variableDescription( int subVariableIndex ) 00060 { 00061 if ( subVariableIndex < 0 || subVariableIndex >= static_cast<int>(m_variableDescriptions.size()) ) return 0; 00062 return m_variableDescriptions[subVariableIndex].first; 00063 } 00064 00065 00066 const AIDA::Dev::ITupleVariableDescription* 00067 Anaphe::AIDA_Tuple_native::AIDA_TupleHeader::variableDescription( int subVariableIndex ) const 00068 { 00069 if ( subVariableIndex < 0 || subVariableIndex >= static_cast<int>(m_variableDescriptions.size()) ) return 0; 00070 return m_variableDescriptions[subVariableIndex].first; 00071 } 00072 00073 00074 int 00075 Anaphe::AIDA_Tuple_native::AIDA_TupleHeader::variableIndex( const std::string& variableName ) const 00076 { 00077 std::map< std::string, int >::const_iterator i = m_variableIndices.find( variableName ); 00078 if ( i == m_variableIndices.end() ) return -1; 00079 else return i->second; 00080 } 00081 00082 00083 #include <memory> 00084 #include <stdexcept> 00085 #include "AIDA_Dev/IDevAnalysisFactory.h" 00086 #include "AIDA_Dev/IAnnotationFactory.h" 00087 00088 AIDA::IAnnotation* 00089 Anaphe::AIDA_Tuple_native::AIDA_TupleHeader::createAnnotation() 00090 { 00091 std::auto_ptr<AIDA::Dev::IDevAnalysisFactory> af(dynamic_cast<AIDA::Dev::IDevAnalysisFactory*>(AIDA_createAnalysisFactory() )); 00092 if ( ! af.get() ) throw std::runtime_error( "Could not create an analysis factory" ); 00093 AIDA::Dev::IAnnotationFactory* anf = af->annotationFactory(); 00094 if ( ! anf ) throw std::runtime_error( "Could not find an annotation factory" ); 00095 return anf->createAnnotation(); 00096 }