X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=src%2Ftoolkit%2Fbamtools_header.cpp;h=a08c632defa5bbbce75609f040e03d7a536c28da;hb=2e1822c9ed231b25fd474117a01a1492d4209fa4;hp=aad413f29df916ec0edade03eac4206770e0bac2;hpb=8c80d760637f8df39262683cd2570f0589423d36;p=bamtools.git diff --git a/src/toolkit/bamtools_header.cpp b/src/toolkit/bamtools_header.cpp index aad413f..a08c632 100644 --- a/src/toolkit/bamtools_header.cpp +++ b/src/toolkit/bamtools_header.cpp @@ -1,9 +1,8 @@ // *************************************************************************** // bamtools_header.cpp (c) 2010 Derek Barnett, Erik Garrison // Marth Lab, Department of Biology, Boston College -// All rights reserved. // --------------------------------------------------------------------------- -// Last modified: 21 March 2011 +// Last modified: 7 April 2011 // --------------------------------------------------------------------------- // Prints the SAM-style header from a single BAM file ( or merged header from // multiple BAM files) to stdout @@ -37,12 +36,53 @@ struct HeaderTool::HeaderSettings { { } }; +struct HeaderTool::HeaderToolPrivate { + + // ctor & dtor + public: + HeaderToolPrivate(HeaderTool::HeaderSettings* settings) + : m_settings(settings) + { } + + ~HeaderToolPrivate(void) { } + + // interface + public: + bool Run(void); + + // data members + private: + HeaderTool::HeaderSettings* m_settings; +}; + +bool HeaderTool::HeaderToolPrivate::Run(void) { + + // set to default input if none provided + if ( !m_settings->HasInputBamFilename ) + m_settings->InputFiles.push_back(Options::StandardIn()); + + // attemp to open BAM files + BamMultiReader reader; + if ( !reader.Open(m_settings->InputFiles) ) { + cerr << "bamtools header ERROR: could not open BAM file(s) for reading... Aborting." << endl; + return false; + } + + // dump (merged) header contents to stdout + cout << reader.GetHeaderText() << endl; + + // clean up & exit + reader.Close(); + return true; +} + // --------------------------------------------- // HeaderTool implementation HeaderTool::HeaderTool(void) : AbstractTool() , m_settings(new HeaderSettings) + , m_impl(0) { // set program details Options::SetProgramInfo("bamtools header", "prints header from BAM file(s)", "[-in -in ...] "); @@ -53,8 +93,12 @@ HeaderTool::HeaderTool(void) } HeaderTool::~HeaderTool(void) { + delete m_settings; m_settings = 0; + + delete m_impl; + m_impl = 0; } int HeaderTool::Help(void) { @@ -67,21 +111,12 @@ int HeaderTool::Run(int argc, char* argv[]) { // parse command line arguments Options::Parse(argc, argv, 1); - // set to default input if none provided - if ( !m_settings->HasInputBamFilename ) - m_settings->InputFiles.push_back(Options::StandardIn()); - - // attemp to open BAM files - BamMultiReader reader; - if ( !reader.Open(m_settings->InputFiles) ) { - cerr << "bamtools header ERROR: could not open BAM file(s) for reading... Aborting." << endl; - return 1; - } - - // dump (merged) header contents to stdout - cout << reader.GetHeaderText() << endl; + // initialize HeaderTool with settings + m_impl = new HeaderToolPrivate(m_settings); - // clean up & exit - reader.Close(); - return 0; + // run HeaderTool, return success/fail + if ( m_impl->Run() ) + return 0; + else + return 1; }