/***************************************************************************** # Copyright (C) 1994-2008 by David Gordon. # All rights reserved. # # This software is part of a beta-test version of the Consed/Autofinish # package. It should not be redistributed or # used for any commercial purpose, including commercially funded # sequencing, without written permission from the author and the # University of Washington. # # This software is provided ``AS IS'' and any express or implied # warranties, including, but not limited to, the implied warranties of # merchantability and fitness for a particular purpose, are disclaimed. # In no event shall the authors or the University of Washington be # liable for any direct, indirect, incidental, special, exemplary, or # consequential damages (including, but not limited to, procurement of # substitute goods or services; loss of use, data, or profits; or # business interruption) however caused and on any theory of liability, # whether in contract, strict liability, or tort (including negligence # or otherwise) arising in any way out of the use of this software, even # if advised of the possibility of such damage. # # Building Consed from source is error prone and not simple which is # why I provide executables. Due to time limitations I cannot # provide any assistance in building Consed. Even if you do not # modify the source, you may introduce errors due to using a # different version of the compiler, a different version of motif, # different versions of other libraries than I used, etc. For this # reason, if you discover Consed bugs, I can only offer help with # those bugs if you first reproduce those bugs with an executable # provided by me--not an executable you have built. # # Modifying Consed is also difficult. Although Consed is modular, # some modules are used by many other modules. Thus making a change # in one place can have unforeseen effects on many other features. # It may takes months for you to notice these other side-effects # which may not seen connected at all. It is not feasable for me to # provide help with modifying Consed sources because of the # potentially huge amount of time involved. # #*****************************************************************************/ #include "userDefinedTagField.h" #include "consed.h" #include "tag.h" bool userDefinedTagField :: bIsPointerTypeWithThisID( const long lID ) { if ( eWhatType() == userDefinedTagFieldType::ePointer ) { if ( ( (userDefinedPointerTagField*) this)->lID_ == lID ) { return true; } } return false; } void userDefinedIntegerTagField :: writeThyselfToAceFile( ofstream& ofsAceFile ) { ofsAceFile << pUserDefinedTagFieldType_->soFieldName_ << " " << l_ << endl; } void userDefinedFloatingTagField :: writeThyselfToAceFile( ofstream& ofsAceFile ) { ofsAceFile << pUserDefinedTagFieldType_->soFieldName_ << " " << d_ << endl; } void userDefinedStringTagField :: writeThyselfToAceFile( ofstream& ofsAceFile ) { so_.stripTrailingWhitespaceFast(); // definitely want the trailing // carriage return removed ofsAceFile << pUserDefinedTagFieldType_->soFieldName_ << " " << so_.nGetNumberOfLinesOfText() << "{" << endl << so_ << endl << "S}" << endl; } void userDefinedPointerTagField :: writeThyselfToAceFile( ofstream& ofsAceFile ) { ofsAceFile << pUserDefinedTagFieldType_->soFieldName_ << " " << lID_ << endl; } void userDefinedPointerTagField :: resolvePointer( tag* pTag, // used for error message RWCString& soErrorMessage ) { tag* pTagPointedTo = ConsEd::pGetAssembly()->pFindTagWithThisID( lID_ ); if ( !pTagPointedTo ) { soErrorMessage += "\nTag of type "; soErrorMessage += pTag->soType_; soErrorMessage += " at "; soErrorMessage += pTag->pGetContig()->soGetName(); soErrorMessage += " "; soErrorMessage += RWCString( (long) pTag->nGetUnpaddedStart() ); soErrorMessage += "-"; soErrorMessage += RWCString( (long) pTag->nGetUnpaddedEnd() ); if ( pTag->bReadTagNotConsensusTag_ ) { soErrorMessage += " on read "; soErrorMessage += pTag->pLocFrag_->soGetName(); } else { soErrorMessage += " on consensus"; } soErrorMessage += " specifies an id of "; soErrorMessage += RWCString( lID_ ); soErrorMessage += " but cannot find any tag with that ID"; return; } if ( pTagPointedTo->soType_ != pUserDefinedTagFieldType_->soPointerToWhichTagType_ ) { soErrorMessage += "\nTag of type "; soErrorMessage += pTag->soType_; soErrorMessage += " at "; soErrorMessage += pTag->pGetContig()->soGetName(); soErrorMessage += " "; soErrorMessage += RWCString( (long) pTag->nGetUnpaddedStart() ); soErrorMessage += "-"; soErrorMessage += RWCString( (long) pTag->nGetUnpaddedEnd() ); if ( pTag->bReadTagNotConsensusTag_ ) { soErrorMessage += " on read "; soErrorMessage += pTag->pLocFrag_->soGetName(); } else { soErrorMessage += " on consensus"; } soErrorMessage += " is supposed to point to a tag of type "; soErrorMessage += pUserDefinedTagFieldType_->soPointerToWhichTagType_; soErrorMessage += " but its id of "; soErrorMessage += RWCString( lID_ ); soErrorMessage += " specifies a tag of type "; soErrorMessage += pTagPointedTo->soType_; soErrorMessage += " located at "; soErrorMessage += pTagPointedTo->pGetContig()->soGetName(); soErrorMessage += " "; soErrorMessage += RWCString( (long) pTagPointedTo->nGetUnpaddedStart() ); soErrorMessage += "-"; soErrorMessage += RWCString( (long) pTagPointedTo->nGetUnpaddedEnd() ); if ( pTagPointedTo->bReadTagNotConsensusTag_ ) { soErrorMessage += " on read "; soErrorMessage += pTagPointedTo->pLocFrag_->soGetName(); } else { soErrorMessage += " on consensus"; } return; } pTag_ = pTagPointedTo; }