83 m_pOpticalMapPoints(
nullptr),
89 m_IsDeltaLitOnly(
false),
101 m_IsJournalScan(
false),
104 m_IsGbGenomeProject(
false),
105 m_IsNcbiCONDiv(
false),
106 m_IsNcbiGenomes(
false),
110 m_IsWGSMaster(
false),
112 m_IsTSAMaster(
false),
114 m_IsTLSMaster(
false),
117 m_ShowGBBSource(
false),
120 m_HasMultiIntervalGenes(
true),
121 m_IsGenomeAssembly(
false),
122 m_IsCrossKingdom(
false),
123 m_UsePDBCompoundForComment(
false),
124 m_fUnverified(fUnverified_None),
125 m_fUnreviewed(fUnreviewed_None),
126 m_ShowAnnotCommentAsCOMMENT(
false),
127 m_ShowAnnotCommentAsCOMMENT_checked(
false),
131 m_TLSeqEntryCtx(tlsec)
133 x_Init(seq, m_FFCtx.GetLocation());
144 m_PrevHandle(prev_seq),
146 m_NextHandle(next_seq),
153 m_IsDeltaLitOnly(
false),
157 m_IsInNucProt(
false),
165 m_IsJournalScan(
false),
168 m_IsGbGenomeProject(
false),
169 m_IsNcbiCONDiv(
false),
170 m_IsNcbiGenomes(
false),
174 m_IsWGSMaster(
false),
176 m_IsTSAMaster(
false),
178 m_IsTLSMaster(
false),
181 m_ShowGBBSource(
false),
184 m_HasMultiIntervalGenes(
true),
185 m_IsGenomeAssembly(
false),
186 m_IsCrossKingdom(
false),
187 m_UsePDBCompoundForComment(
false),
188 m_fUnverified(fUnverified_None),
189 m_fUnreviewed(fUnreviewed_None),
190 m_ShowAnnotCommentAsCOMMENT(
false),
191 m_ShowAnnotCommentAsCOMMENT_checked(
false),
195 m_TLSeqEntryCtx(tlsec)
212 if (
id.IsGi() &&
id.GetGi() ==
m_Gi ) {
295 }
else if (loc->
IsInt()) {
340 for( ; gene_ci ; ++gene_ci ) {
362 if (! idx)
return false;
364 if (! bsx)
return false;
375 int num_super_kingdom = 0;
376 bool super_kingdoms_different =
false;
377 string super_kingdom_name;
379 for( ; desc_ci; ++desc_ci ) {
397 if (super_kingdom_name.empty() && te.
IsSetName()) {
398 super_kingdom_name = te.
GetName();
400 super_kingdoms_different =
true;
402 if (num_super_kingdom > 1 && super_kingdoms_different) {
431 for( ; biosrc_ci ; ++biosrc_ci ) {
433 if( seq_feat && seq_feat->
IsSetData() ) {
506 if( ! pFileTrackURLField ) {
507 pFileTrackURLField = uo.
GetFieldRef(
"Map-FileTrackURL");
509 if ( pFileTrackURLField) {
515 const vector< string > & strs = pFileTrackURLField->
GetData().
GetStrs();
518 if ( !
str.empty() ) {
526 if ( pBaseModURLField) {
546 if( ! pAuthorizedAccessField ||
572 switch( feat_loc.
Which() ) {
606 static const TFinStatElem sc_finstat_map[] = {
607 {
"Annotation-directed-improvement",
"ANNOTATION_DIRECTED_IMPROVEMENT" },
608 {
"High-quality-draft",
"HIGH_QUALITY_DRAFT" },
609 {
"Improved-high-quality-draft",
"IMPROVED_HIGH_QUALITY_DRAFT" },
610 {
"Noncontiguous-finished",
"NONCONTIGUOUS_FINISHED" },
611 {
"Standard-draft",
"STANDARD_DRAFT" }
629 field.
GetData().
GetStr() ==
"##Genome-Assembly-Data-START##" )
636 replace( asn_fin_stat.begin(), asn_fin_stat.end(),
' ',
'-' );
637 TFinStatMap::const_iterator new_fin_stat_iter = sc_FinStatMap.find(asn_fin_stat.c_str());
638 if( new_fin_stat_iter != sc_FinStatMap.end() ) {
700 for( ; annot_ci; ++annot_ci ) {
707 const CAnnotdesc & one_desc = **one_desc_iter;
708 if( ! one_desc.
IsUser() ) {
724 const CUser_field & policy_field = **policy_field_iter;
734 if( policy_str ==
"ShowInComment" ) {
756 if (! idx)
return false;
758 if (! bsx)
return false;
779 bool bTpaAssemblyPresent =
false;
786 bTpaAssemblyPresent =
true;
804 switch (
id.Which() ) {
828 if (
id.GetPatent().IsSetSeqid()) {
860 if (
id.GetGeneral().CanGetDb() ) {
864 if(
NStr::Equal(
id.GetGeneral().GetDb(),
"NCBI_GENOMES") ) {
889 if (
m_IsWGS && !acc.empty() ) {
907 if (
m_IsTSA && !acc.empty() ) {
920 if (
m_IsTLS && !acc.empty() ) {
935 if (acc.length() == 6) {
937 if (ch ==
'J' || ch ==
'K' || ch ==
'L' || ch ==
'M') {
975 if ( eh && eh.
IsSet() ) {
1000 bool has_seq =
false;
1002 if ( it->IsSeq() && it->GetSeq() ==
m_Handle ) {
1015 if ( it->IsSet() && it->GetSet().IsSetClass() &&
1034 if ( (*it)->IsLoc() ) {
1035 const CSeq_loc& loc = (*it)->GetLoc();
1036 if (loc.
IsNull())
continue;
1132 if ((*it)->IsNull()) {
1210 parent_name = parent_name.substr(4);
1235 parent_name.length() == seg_name.length() &&
1237 size_t pos = parent_name.length() - 2;
1238 for ( ; pos > 0; --pos) {
1239 if (parent_name[pos] !=
'0') {
1243 parent_name.erase(pos + 1);
1258 for (
auto& sid : bsp.
GetId()) {
1290 }
else if (sep.
IsSet()) {
1308 if (useIndexedFasterSets) {
1317 for( ; bioseq_iter; ++bioseq_iter ) {
1321 switch( seqId->
Which() ) {
1361 if( entry_handle.
IsSet() ) {
User-defined methods of the data storage class.
User-defined methods of the data storage class.
User-defined methods of the data storage class.
User-defined methods of the data storage class.
bool IsReverse(ENa_strand s)
User-defined methods of the data storage class.
User-defined methods of the data storage class.
const string & GetTaxname(void) const
const COrgName & GetOrgname(void) const
bool IsSetOrgname(void) const
bool IsSetTaxname(void) const
bool IsDeltaLitOnly(void) const
CRef< CSeq_loc_Mapper > m_Mapper
void x_SetLocation(const CSeq_loc *user_loc=nullptr)
CConstRef< CSeq_loc > m_Location
bool x_IsInGPS(void) const
CScope & GetScope(void) const
bool HasMultiIntervalGenes(void) const
bool IsCrossKingdom(void) const
@ fUnreviewed_Unannotated
void x_SetOpticalMapPoints(void)
void SetPDBCompoundForComment(bool value)
bool x_HasOperon(void) const
CSeq_inst::TRepr x_GetRepr(void) const
bool m_ShowAnnotCommentAsCOMMENT
SAnnotSelector & SetAnnotSelector(void)
bool UsingSeqEntryIndex(void) const
TUnreviewed m_fUnreviewed
CBioseqContext(const CBioseq_Handle &seq, CFlatFileContext &ffctx, CMasterContext *mctx=nullptr, CTopLevelSeqEntryContext *tlsec=nullptr)
bool m_UsePDBCompoundForComment
const CFlatFileConfig & Config(void) const
unique_ptr< CPacked_seqpnt > m_pOpticalMapPointsDestroyer
unsigned int m_RefseqInfo
void x_SetDataFromUserObjects(void)
bool x_IsPart(void) const
CSeq_inst::TRepr GetRepr(void) const
CRef< CSeq_id > m_PrimaryId
bool x_HasParts(void) const
void x_SetAuthorizedAccess(const CUser_object &uo)
void x_SetEncode(const CUser_object &uo)
const CPacked_seqpnt * m_pOpticalMapPoints
const CSeq_entry_Handle & GetTopLevelEntry(void) const
bool HasOperon(void) const
bool IsRefSeq(void) const
bool m_HasMultiIntervalGenes
CConstRef< CUser_object > m_Encode
CConstRef< CMolInfo > m_Molinfo
void x_Init(const CBioseq_Handle &seq, const CSeq_loc *user_loc)
bool ShowAnnotCommentAsCOMMENT() const
void x_CheckForShowComments() const
const CMolInfo * x_GetMolInfo(void) const
CSeq_id_Handle GetPreferredSynonym(const CSeq_id &id) const
bool DoContigStyle(void) const
bool x_IsDeltaLitOnly(void) const
void x_SetFiletrackURL(const CUser_object &uo)
void x_SetHasMultiIntervalGenes(void) const
bool m_ShowAnnotCommentAsCOMMENT_checked
void x_SetMapper(const CSeq_loc &loc)
const string & GetTaxname(void) const
Empty string if unavailable.
CMolInfo::TTech GetTech(void) const
const CRef< CSeqEntryIndex > GetSeqEntryIndex(void) const
bool IsSegmented(void) const
bool UsePDBCompoundForComment(void) const
CFlatFileContext & m_FFCtx
bool x_IsInNucProt(void) const
TUnverified m_fUnverified
SIZE_TYPE x_GetPartNumber(void)
string m_AuthorizedAccess
bool HasParts(void) const
void x_SetTaxname(void) const
bool x_IsInSGS(void) const
vector< string > m_BasemodURLs
@ fUnverified_Contaminant
@ fUnverified_SequenceOrAnnotation
@ fUnverified_Misassembled
CRef< CMasterContext > m_Master
const string & GetAccession(void) const
bool IsCrossKingdom(void)
bool HasMultiIntervalGenes(void)
const string & GetTaxname(void)
void SetRefSeqConventions(void)
bool IsStyleNormal(void) const
bool IsStyleContig(void) const
CFlatFileConfig & SetConfig(void)
const CSeq_loc * GetLocation(void) const
CMasterContext(const CBioseq_Handle &master)
SIZE_TYPE GetPartNumber(const CBioseq_Handle &part)
CRef< CBioseqIndex > GetBioseqIndex(void)
namespace ncbi::objects::
class CStaticArrayMap<> provides access to a static array in much the same way as CStaticArraySet<>,...
CTopLevelSeqEntryContext(const CSeq_entry_Handle &entry_handle, bool useIndexedFasterSets=false)
bool m_CanSourcePubsBeFused
void x_InitSeqs(const CSeq_entry &sep)
CConstRef< CUser_field > GetFieldRef(const string &str, const string &delim=".", NStr::ECase use_case=NStr::eCase) const
@ eObjectType_StructuredComment
bool IsUnverifiedMisassembled() const
bool IsUnverifiedOrganism() const
bool IsUnverifiedContaminant() const
bool IsUnverifiedFeature() const
bool IsUnreviewedUnannotated() const
EObjectType GetObjectType() const
Include a standard set of the NCBI C++ Toolkit most basic headers.
static const char * str(char *buf, int n)
CRange< Position > Map(const CRange< Position > &target, const CRange< Position > &range)
#define ITERATE(Type, Var, Cont)
ITERATE macro to sequence through container elements.
virtual void Assign(const CSerialObject &source, ESerialRecursionMode how=eRecursive)
Optimized implementation of CSerialObject::Assign, which is not so efficient.
void GetLabel(string *label, ELabelType type=eDefault, TLabelFlags flags=fLabel_Default) const
Append a label for this Seq-id to the supplied string.
EAccessionInfo
For IdentifyAccession (below)
static CSeq_id_Handle GetHandle(const CSeq_id &id)
Normal way of getting a handle, works for any seq-id.
const CTextseq_id * GetTextseq_Id(void) const
Return embedded CTextseq_id, if any.
@ eContent
Untagged human-readable accession or the like.
ENa_strand GetStrand(void) const
Get the location's strand.
virtual void Assign(const CSerialObject &source, ESerialRecursionMode how=eRecursive)
Override Assign() to incorporate cache invalidation.
TRange GetTotalRange(void) const
const CSeq_id & GetId(const CSeq_loc &loc, CScope *scope)
If all CSeq_ids embedded in CSeq_loc refer to the same CBioseq, returns the first CSeq_id found,...
CSeq_id_Handle GetIdHandle(const CSeq_loc &loc, CScope *scope)
bool IsSameBioseq(const CSeq_id &id1, const CSeq_id &id2, CScope *scope, CScope::EGetBioseqFlag get_flag=CScope::eGetBioseq_All)
Determines if two CSeq_ids represent the same CBioseq.
CBioseq_Handle GetBioseqFromSeqLoc(const CSeq_loc &loc, CScope &scope, CScope::EGetBioseqFlag flag=CScope::eGetBioseq_Loaded)
Retrieve the Bioseq Handle from a location.
@ eGetId_Best
return the "best" gi (uses FindBestScore(), with CSeq_id::CalculateScore() as the score function
CBioseq_Handle GetBioseqHandleFromTSE(const CSeq_id &id, const CTSE_Handle &tse)
Get bioseq handle for sequence withing one TSE.
CRef< CSeq_loc > Map(const CSeq_loc &src_loc)
Map seq-loc.
CBioseq_Handle AddBioseq(CBioseq &bioseq, TPriority pri=kPriority_Default, EExist action=eExist_Throw)
Add bioseq, return bioseq handle.
CSeq_loc_Mapper_Base & SetMergeAbutting(void)
Merge only abutting intervals, keep overlapping.
CSeq_loc_Mapper_Base & SetGapRemove(void)
@ eSeqMap_Up
map from segments to the top level bioseq
vector< CSeq_id_Handle > TId
TClass GetClass(void) const
const TInst_Ext & GetInst_Ext(void) const
CSeq_entry_Handle GetParentEntry(void) const
Get parent Seq-entry handle.
TBioseqCore GetBioseqCore(void) const
Get bioseq core structure.
bool CanGetClass(void) const
bool IsSetInst_Ext(void) const
TInst_Mol GetInst_Mol(void) const
CConstRef< CSeq_id > GetSeqId(void) const
Get id which can be used to access this bioseq handle Throws an exception if none is available.
void Remove(ERemoveMode mode=eRemoveSeq_entry) const
CSeq_entry_Handle GetTopLevelEntry(void) const
Get top level Seq-entry handle.
const CSeq_annot::TDesc & Seq_annot_GetDesc(void) const
CBioseq_EditHandle GetEditHandle(void) const
Get 'edit' version of handle.
TInst_Length GetInst_Length(void) const
bool IsSetInst(void) const
bool IsSetInst_Repr(void) const
bool IsSetClass(void) const
CConstRef< CSeq_entry > GetCompleteSeq_entry(void) const
Complete and get const reference to the seq-entry.
TInst_Repr GetInst_Repr(void) const
CScope & GetScope(void) const
Get scope this handle belongs to.
CScope & GetScope(void) const
Get scope this handle belongs to.
CSeq_entry_Handle GetExactComplexityLevel(CBioseq_set::EClass cls) const
Return level with exact complexity, or empty handle if not found.
const CSeqMap & GetSeqMap(void) const
Get sequence map.
CSeq_entry_Handle GetParentEntry(void) const
Get parent Seq-entry handle.
const TId & GetId(void) const
bool Seq_annot_IsSetDesc(void) const
CConstRef< CSeq_entry > GetSeq_entryCore(void) const
Get const reference to the seq-entry.
SAnnotSelector & SetFeatType(TFeatType type)
Set feature type (also set annotation type to feat)
SAnnotSelector & SetResolveAll(void)
SetResolveAll() is equivalent to SetResolveMethod(eResolve_All).
const CSeq_loc & GetLocation(void) const
SAnnotSelector & SetAnnotType(TAnnotType type)
Set annotation type (feat, align, graph)
CSeq_id_Handle GetRefSeqid(void) const
The following function makes sense only when the segment is a reference to another seq.
CConstRef< CSeq_feat > GetSeq_feat(void) const
Get current seq-feat.
CSeqMap_CI BeginResolved(CScope *scope) const
bool IsNull(void) const THROWS_NONE
Check if pointer is null – same effect as Empty().
void Reset(void)
Reset reference object.
void Reset(void)
Reset reference object.
#define END_NCBI_SCOPE
End previously defined NCBI scope.
#define END_SCOPE(ns)
End the previously defined scope.
#define BEGIN_NCBI_SCOPE
Define ncbi namespace.
#define BEGIN_SCOPE(ns)
Define a new scope.
NCBI_NS_STD::string::size_type SIZE_TYPE
static bool EndsWith(const CTempString str, const CTempString end, ECase use_case=eCase)
Check if a string ends with a specified suffix value.
static bool StartsWith(const CTempString str, const CTempString start, ECase use_case=eCase)
Check if a string starts with a specified prefix value.
static bool EqualNocase(const CTempString s1, SIZE_TYPE pos, SIZE_TYPE n, const char *s2)
Case-insensitive equality of a substring with another string.
static bool Equal(const CTempString s1, SIZE_TYPE pos, SIZE_TYPE n, const char *s2, ECase use_case=eCase)
Test for equality of a substring with another string.
static int CompareCase(const CTempString s1, SIZE_TYPE pos, SIZE_TYPE n, const char *s2)
Case-sensitive compare of a substring with another string.
const TStr & GetStr(void) const
Get the variant data.
bool IsSetData(void) const
the object itself Check if a value has been assigned to Data data member.
bool IsStr(void) const
Check if variant Str is selected.
bool IsSetType(void) const
type of object within class Check if a value has been assigned to Type data member.
const TStrs & GetStrs(void) const
Get the variant data.
const TData & GetData(void) const
Get the Data member data.
bool IsStr(void) const
Check if variant Str is selected.
bool IsSetLabel(void) const
field label Check if a value has been assigned to Label data member.
const TStr & GetStr(void) const
Get the variant data.
const TData & GetData(void) const
Get the Data member data.
const TLabel & GetLabel(void) const
Get the Label member data.
const TType & GetType(void) const
Get the Type member data.
bool IsSetData(void) const
Check if a value has been assigned to Data data member.
vector< CRef< CUser_field > > TData
TFixed_level GetFixed_level(void) const
Get the Fixed_level member data.
bool IsSetFixed_level(void) const
Check if a value has been assigned to Fixed_level data member.
bool IsPartial(void) const
Check if variant Partial is selected.
const TName & GetName(void) const
Get the Name member data.
const TLevel & GetLevel(void) const
Get the Level member data.
bool IsSetName(void) const
Check if a value has been assigned to Name data member.
const Tdata & Get(void) const
Get the member data.
const TName & GetName(void) const
Get the Name member data.
list< CRef< CTaxElement > > Tdata
bool IsSetLevel(void) const
Check if a value has been assigned to Level data member.
const TPartial & GetPartial(void) const
Get the variant data.
bool IsSet(void) const
Check if a value has been assigned to data member.
bool IsSetName(void) const
Check if a value has been assigned to Name data member.
bool IsSetData(void) const
the specific data Check if a value has been assigned to Data data member.
const TLocation & GetLocation(void) const
Get the Location member data.
const TData & GetData(void) const
Get the Data member data.
const TBiosrc & GetBiosrc(void) const
Get the variant data.
bool IsBiosrc(void) const
Check if variant Biosrc is selected.
bool IsSetLocation(void) const
feature made from Check if a value has been assigned to Location data member.
bool IsGenbank(void) const
Check if variant Genbank is selected.
bool IsSetAccession(void) const
Check if a value has been assigned to Accession data member.
bool IsTpg(void) const
Check if variant Tpg is selected.
const TName & GetName(void) const
Get the Name member data.
bool IsSetPoint(void) const
Check if a value has been assigned to Point data member.
const TPnt & GetPnt(void) const
Get the variant data.
bool IsTpd(void) const
Check if variant Tpd is selected.
TPoint GetPoint(void) const
Get the Point member data.
bool CanGetName(void) const
Check if it is safe to call GetName method.
bool IsEmbl(void) const
Check if variant Embl is selected.
E_Choice Which(void) const
Which variant is currently selected.
E_Choice Which(void) const
Which variant is currently selected.
const TPacked_pnt & GetPacked_pnt(void) const
Get the variant data.
bool CanGetAccession(void) const
Check if it is safe to call GetAccession method.
bool IsWhole(void) const
Check if variant Whole is selected.
bool IsInt(void) const
Check if variant Int is selected.
bool IsNull(void) const
Check if variant Null is selected.
bool IsTpe(void) const
Check if variant Tpe is selected.
const TAccession & GetAccession(void) const
Get the Accession member data.
bool IsDdbj(void) const
Check if variant Ddbj is selected.
@ e_Gibbmt
Geninfo backbone moltype.
@ e_Giim
Geninfo import id.
@ e_Other
for historical reasons, 'other' = 'refseq'
@ e_Gpipe
Internal NCBI genome pipeline processing ID.
@ e_Tpe
Third Party Annot/Seq EMBL.
@ e_Tpd
Third Party Annot/Seq DDBJ.
@ e_Gibbsq
Geninfo backbone seqid.
@ e_General
for other databases
@ e_Gi
GenInfo Integrated Database.
@ e_not_set
No variant selected.
@ e_Tpg
Third Party Annot/Seq Genbank.
@ e_Equiv
equivalent sets of locations
const TSeq & GetSeq(void) const
Get the variant data.
TClass GetClass(void) const
Get the Class member data.
const TSet & GetSet(void) const
Get the variant data.
bool IsSeq(void) const
Check if variant Seq is selected.
bool CanGetClass(void) const
Check if it is safe to call GetClass method.
bool IsSet(void) const
Check if variant Set is selected.
const TSeq_set & GetSeq_set(void) const
Get the Seq_set member data.
@ eClass_parts
parts for 2 or 3
@ eClass_nuc_prot
nuc acid and coded proteins
@ eClass_gen_prod_set
genomic products, chrom+mRNA+protein
@ eClass_segset
segmented sequence + parts
@ eClass_small_genome_set
viral segments or mitochondrial minicircles
const TSeg & GetSeg(void) const
Get the variant data.
const Tdata & Get(void) const
Get the member data.
ERepr
representation class
const TSource & GetSource(void) const
Get the variant data.
bool IsSource(void) const
Check if variant Source is selected.
const TMap & GetMap(void) const
Get the variant data.
const TId & GetId(void) const
Get the Id member data.
const TUser & GetUser(void) const
Get the variant data.
list< CRef< CSeq_id > > TId
bool IsSeg(void) const
Check if variant Seg is selected.
bool IsDelta(void) const
Check if variant Delta is selected.
void SetInst(TInst &value)
Assign a value to Inst data member.
const TDelta & GetDelta(void) const
Get the variant data.
bool IsUser(void) const
Check if variant User is selected.
const Tdata & Get(void) const
Get the member data.
list< CRef< CDelta_seq > > Tdata
const Tdata & Get(void) const
Get the member data.
list< CRef< CSeq_loc > > Tdata
const TMolinfo & GetMolinfo(void) const
Get the variant data.
list< CRef< CAnnotdesc > > Tdata
@ eRepr_const
constructed sequence
@ eRepr_delta
sequence made by changes (delta) to others
@ eRepr_map
ordered map of any kind
@ eRepr_raw
continuous sequence
@ eRepr_virtual
no seq data
@ eTech_targeted
targeted locus sets/studies
@ eTech_tsa
transcriptome shotgun assembly
@ e_User
user defined object
@ e_Molinfo
info on the molecule and techniques
@ e_Source
source of materials, includes Org-ref
range(_Ty, _Ty) -> range< _Ty >
const GenericPointer< typename T::ValueType > T2 value
static void s_GetNameForBioseq(const CBioseq_Handle &seq, string &name)
static bool GetSeqId(const T &d, set< string > &labels, const string name="", bool detect=false, bool found=false)
#define FOR_EACH_SEQFEAT_ON_MAPEXT(Itr, Var)
SEQANNOT_IS_SEQFEAT.
#define FIELD_IS_SET_AND_IS(Var, Fld, Chs)
FIELD_IS_SET_AND_IS base macro.
#define FOR_EACH_STRING_IN_VECTOR(Itr, Var)
FOR_EACH_STRING_IN_VECTOR EDIT_EACH_STRING_IN_VECTOR.
#define ASSIGN_IF_SET_ELSE_RESET(DestVar, DestFld, SrcVar, SrcFld)
ASSIGN_IF_SET_ELSE_RESET.
#define CLONE_IF_SET_ELSE_RESET(DestVar, DestFld, SrcVar, SrcFld)
CLONE_IF_SET base macro (Useful to copy and object from a variable of one type to a variable of anoth...
#define DEFINE_STATIC_ARRAY_MAP(Type, Var, Array)
Selector used in CSeqMap methods returning iterators.
Template structure SStaticPair is simlified replacement of STL pair<> Main reason of introducing this...