Changeset View
Changeset View
Standalone View
Standalone View
src/EvtGenBase/EvtIdSet.cpp
Show All 17 Lines | |||||
* along with EvtGen. If not, see <https://www.gnu.org/licenses/>. * | * along with EvtGen. If not, see <https://www.gnu.org/licenses/>. * | ||||
***********************************************************************/ | ***********************************************************************/ | ||||
#include "EvtGenBase/EvtIdSet.hh" | #include "EvtGenBase/EvtIdSet.hh" | ||||
#include "EvtGenBase/EvtPDL.hh" | #include "EvtGenBase/EvtPDL.hh" | ||||
#include "EvtGenBase/EvtPatches.hh" | #include "EvtGenBase/EvtPatches.hh" | ||||
#include <iostream> | #include <initializer_list> | ||||
#include <set> | |||||
#include <string> | #include <string> | ||||
EvtIdSet::EvtIdSet( const EvtId name1 ) | EvtIdSet::EvtIdSet( std::initializer_list<EvtId> idList ) : m_list{ idList } | ||||
{ | { | ||||
_numInList = 1; | |||||
_list = new EvtId[_numInList]; | |||||
_list[0] = name1; | |||||
} | |||||
EvtIdSet::EvtIdSet( const std::string name1 ) | |||||
{ | |||||
_numInList = 1; | |||||
_list = new EvtId[_numInList]; | |||||
_list[0] = EvtPDL::getId( name1 ); | |||||
} | |||||
EvtIdSet::EvtIdSet( const EvtId name1, const EvtId name2 ) | |||||
{ | |||||
_numInList = 2; | |||||
_list = new EvtId[_numInList]; | |||||
_list[0] = name1; | |||||
_list[1] = name2; | |||||
} | |||||
EvtIdSet::EvtIdSet( const std::string name1, const std::string name2 ) | |||||
{ | |||||
_numInList = 2; | |||||
_list = new EvtId[_numInList]; | |||||
_list[0] = EvtPDL::getId( name1 ); | |||||
_list[1] = EvtPDL::getId( name2 ); | |||||
} | |||||
EvtIdSet::EvtIdSet( const EvtId name1, const EvtId name2, const EvtId name3 ) | |||||
{ | |||||
_numInList = 3; | |||||
_list = new EvtId[_numInList]; | |||||
_list[0] = name1; | |||||
_list[1] = name2; | |||||
_list[2] = name3; | |||||
} | |||||
EvtIdSet::EvtIdSet( const std::string name1, const std::string name2, | |||||
const std::string name3 ) | |||||
{ | |||||
_numInList = 3; | |||||
_list = new EvtId[_numInList]; | |||||
_list[0] = EvtPDL::getId( name1 ); | |||||
_list[1] = EvtPDL::getId( name2 ); | |||||
_list[2] = EvtPDL::getId( name3 ); | |||||
} | |||||
EvtIdSet::EvtIdSet( const EvtId name1, const EvtId name2, const EvtId name3, | |||||
const EvtId name4 ) | |||||
{ | |||||
_numInList = 4; | |||||
_list = new EvtId[_numInList]; | |||||
_list[0] = name1; | |||||
_list[1] = name2; | |||||
_list[2] = name3; | |||||
_list[3] = name4; | |||||
} | |||||
EvtIdSet::EvtIdSet( const std::string name1, const std::string name2, | |||||
const std::string name3, const std::string name4 ) | |||||
{ | |||||
_numInList = 4; | |||||
_list = new EvtId[_numInList]; | |||||
_list[0] = EvtPDL::getId( name1 ); | |||||
_list[1] = EvtPDL::getId( name2 ); | |||||
_list[2] = EvtPDL::getId( name3 ); | |||||
_list[3] = EvtPDL::getId( name4 ); | |||||
} | |||||
EvtIdSet::EvtIdSet( const EvtId name1, const EvtId name2, const EvtId name3, | |||||
const EvtId name4, const EvtId name5 ) | |||||
{ | |||||
_numInList = 5; | |||||
_list = new EvtId[_numInList]; | |||||
_list[0] = name1; | |||||
_list[1] = name2; | |||||
_list[2] = name3; | |||||
_list[3] = name4; | |||||
_list[4] = name5; | |||||
} | |||||
EvtIdSet::EvtIdSet( const std::string name1, const std::string name2, | |||||
const std::string name3, const std::string name4, | |||||
const std::string name5 ) | |||||
{ | |||||
_numInList = 5; | |||||
_list = new EvtId[_numInList]; | |||||
_list[0] = EvtPDL::getId( name1 ); | |||||
_list[1] = EvtPDL::getId( name2 ); | |||||
_list[2] = EvtPDL::getId( name3 ); | |||||
_list[3] = EvtPDL::getId( name4 ); | |||||
_list[4] = EvtPDL::getId( name5 ); | |||||
} | |||||
EvtIdSet::EvtIdSet( const EvtId name1, const EvtId name2, const EvtId name3, | |||||
const EvtId name4, const EvtId name5, const EvtId name6 ) | |||||
{ | |||||
_numInList = 6; | |||||
_list = new EvtId[_numInList]; | |||||
_list[0] = name1; | |||||
_list[1] = name2; | |||||
_list[2] = name3; | |||||
_list[3] = name4; | |||||
_list[4] = name5; | |||||
_list[5] = name6; | |||||
} | |||||
EvtIdSet::EvtIdSet( const std::string name1, const std::string name2, | |||||
const std::string name3, const std::string name4, | |||||
const std::string name5, const std::string name6 ) | |||||
{ | |||||
_numInList = 6; | |||||
_list = new EvtId[_numInList]; | |||||
_list[0] = EvtPDL::getId( name1 ); | |||||
_list[1] = EvtPDL::getId( name2 ); | |||||
_list[2] = EvtPDL::getId( name3 ); | |||||
_list[3] = EvtPDL::getId( name4 ); | |||||
_list[4] = EvtPDL::getId( name5 ); | |||||
_list[5] = EvtPDL::getId( name6 ); | |||||
} | |||||
EvtIdSet::EvtIdSet( const EvtId name1, const EvtId name2, const EvtId name3, | |||||
const EvtId name4, const EvtId name5, const EvtId name6, | |||||
const EvtId name7 ) | |||||
{ | |||||
_numInList = 7; | |||||
_list = new EvtId[_numInList]; | |||||
_list[0] = name1; | |||||
_list[1] = name2; | |||||
_list[2] = name3; | |||||
_list[3] = name4; | |||||
_list[4] = name5; | |||||
_list[5] = name6; | |||||
_list[6] = name7; | |||||
} | |||||
EvtIdSet::EvtIdSet( const std::string name1, const std::string name2, | |||||
const std::string name3, const std::string name4, | |||||
const std::string name5, const std::string name6, | |||||
const std::string name7 ) | |||||
{ | |||||
_numInList = 7; | |||||
_list = new EvtId[_numInList]; | |||||
_list[0] = EvtPDL::getId( name1 ); | |||||
_list[1] = EvtPDL::getId( name2 ); | |||||
_list[2] = EvtPDL::getId( name3 ); | |||||
_list[3] = EvtPDL::getId( name4 ); | |||||
_list[4] = EvtPDL::getId( name5 ); | |||||
_list[5] = EvtPDL::getId( name6 ); | |||||
_list[6] = EvtPDL::getId( name7 ); | |||||
} | |||||
EvtIdSet::EvtIdSet( const EvtId name1, const EvtId name2, const EvtId name3, | |||||
const EvtId name4, const EvtId name5, const EvtId name6, | |||||
const EvtId name7, const EvtId name8 ) | |||||
{ | |||||
_numInList = 8; | |||||
_list = new EvtId[_numInList]; | |||||
_list[0] = name1; | |||||
_list[1] = name2; | |||||
_list[2] = name3; | |||||
_list[3] = name4; | |||||
_list[4] = name5; | |||||
_list[5] = name6; | |||||
_list[6] = name7; | |||||
_list[7] = name8; | |||||
} | } | ||||
EvtIdSet::EvtIdSet( const std::string name1, const std::string name2, | EvtIdSet::EvtIdSet( std::initializer_list<std::string> nameList ) | ||||
const std::string name3, const std::string name4, | |||||
const std::string name5, const std::string name6, | |||||
const std::string name7, const std::string name8 ) | |||||
{ | { | ||||
_numInList = 8; | for ( const std::string& name : nameList ) { | ||||
_list = new EvtId[_numInList]; | m_list.insert( EvtPDL::getId( name ) ); | ||||
_list[0] = EvtPDL::getId( name1 ); | |||||
_list[1] = EvtPDL::getId( name2 ); | |||||
_list[2] = EvtPDL::getId( name3 ); | |||||
_list[3] = EvtPDL::getId( name4 ); | |||||
_list[4] = EvtPDL::getId( name5 ); | |||||
_list[5] = EvtPDL::getId( name6 ); | |||||
_list[6] = EvtPDL::getId( name7 ); | |||||
_list[7] = EvtPDL::getId( name8 ); | |||||
} | |||||
EvtIdSet::EvtIdSet( const EvtId name1, const EvtId name2, const EvtId name3, | |||||
const EvtId name4, const EvtId name5, const EvtId name6, | |||||
const EvtId name7, const EvtId name8, const EvtId name9 ) | |||||
{ | |||||
_numInList = 9; | |||||
_list = new EvtId[_numInList]; | |||||
_list[0] = name1; | |||||
_list[1] = name2; | |||||
_list[2] = name3; | |||||
_list[3] = name4; | |||||
_list[4] = name5; | |||||
_list[5] = name6; | |||||
_list[6] = name7; | |||||
_list[7] = name8; | |||||
_list[8] = name9; | |||||
} | } | ||||
EvtIdSet::EvtIdSet( const std::string name1, const std::string name2, | |||||
const std::string name3, const std::string name4, | |||||
const std::string name5, const std::string name6, | |||||
const std::string name7, const std::string name8, | |||||
const std::string name9 ) | |||||
{ | |||||
_numInList = 9; | |||||
_list = new EvtId[_numInList]; | |||||
_list[0] = EvtPDL::getId( name1 ); | |||||
_list[1] = EvtPDL::getId( name2 ); | |||||
_list[2] = EvtPDL::getId( name3 ); | |||||
_list[3] = EvtPDL::getId( name4 ); | |||||
_list[4] = EvtPDL::getId( name5 ); | |||||
_list[5] = EvtPDL::getId( name6 ); | |||||
_list[6] = EvtPDL::getId( name7 ); | |||||
_list[7] = EvtPDL::getId( name8 ); | |||||
_list[8] = EvtPDL::getId( name9 ); | |||||
} | } | ||||
EvtIdSet::EvtIdSet( const EvtId name1, const EvtId name2, const EvtId name3, | EvtIdSet::EvtIdSet( const EvtIdSet& set1, const EvtIdSet& set2 ) : | ||||
const EvtId name4, const EvtId name5, const EvtId name6, | m_list{ set1.m_list } | ||||
const EvtId name7, const EvtId name8, const EvtId name9, | |||||
const EvtId name10 ) | |||||
{ | { | ||||
_numInList = 10; | |||||
_list = new EvtId[_numInList]; | |||||
_list[0] = name1; | |||||
_list[1] = name2; | |||||
_list[2] = name3; | |||||
_list[3] = name4; | |||||
_list[4] = name5; | |||||
_list[5] = name6; | |||||
_list[6] = name7; | |||||
_list[7] = name8; | |||||
_list[8] = name9; | |||||
_list[9] = name10; | |||||
} | |||||
EvtIdSet::EvtIdSet( const std::string name1, const std::string name2, | |||||
const std::string name3, const std::string name4, | |||||
const std::string name5, const std::string name6, | |||||
const std::string name7, const std::string name8, | |||||
const std::string name9, const std::string name10 ) | |||||
{ | |||||
_numInList = 10; | |||||
_list = new EvtId[_numInList]; | |||||
_list[0] = EvtPDL::getId( name1 ); | |||||
_list[1] = EvtPDL::getId( name2 ); | |||||
_list[2] = EvtPDL::getId( name3 ); | |||||
_list[3] = EvtPDL::getId( name4 ); | |||||
_list[4] = EvtPDL::getId( name5 ); | |||||
_list[5] = EvtPDL::getId( name6 ); | |||||
_list[6] = EvtPDL::getId( name7 ); | |||||
_list[7] = EvtPDL::getId( name8 ); | |||||
_list[8] = EvtPDL::getId( name9 ); | |||||
_list[9] = EvtPDL::getId( name10 ); | |||||
} | |||||
EvtIdSet::EvtIdSet( const EvtId name1, const EvtId name2, const EvtId name3, | |||||
const EvtId name4, const EvtId name5, const EvtId name6, | |||||
const EvtId name7, const EvtId name8, const EvtId name9, | |||||
const EvtId name10, const EvtId name11 ) | |||||
{ | |||||
_numInList = 11; | |||||
_list = new EvtId[_numInList]; | |||||
_list[0] = name1; | |||||
_list[1] = name2; | |||||
_list[2] = name3; | |||||
_list[3] = name4; | |||||
_list[4] = name5; | |||||
_list[5] = name6; | |||||
_list[6] = name7; | |||||
_list[7] = name8; | |||||
_list[8] = name9; | |||||
_list[9] = name10; | |||||
_list[10] = name11; | |||||
} | |||||
EvtIdSet::EvtIdSet( const std::string name1, const std::string name2, | |||||
const std::string name3, const std::string name4, | |||||
const std::string name5, const std::string name6, | |||||
const std::string name7, const std::string name8, | |||||
const std::string name9, const std::string name10, | |||||
const std::string name11 ) | |||||
{ | |||||
_numInList = 11; | |||||
_list = new EvtId[_numInList]; | |||||
_list[0] = EvtPDL::getId( name1 ); | |||||
_list[1] = EvtPDL::getId( name2 ); | |||||
_list[2] = EvtPDL::getId( name3 ); | |||||
_list[3] = EvtPDL::getId( name4 ); | |||||
_list[4] = EvtPDL::getId( name5 ); | |||||
_list[5] = EvtPDL::getId( name6 ); | |||||
_list[6] = EvtPDL::getId( name7 ); | |||||
_list[7] = EvtPDL::getId( name8 ); | |||||
_list[8] = EvtPDL::getId( name9 ); | |||||
_list[9] = EvtPDL::getId( name10 ); | |||||
_list[10] = EvtPDL::getId( name11 ); | |||||
} | |||||
EvtIdSet::EvtIdSet( const EvtId name1, const EvtId name2, const EvtId name3, | |||||
const EvtId name4, const EvtId name5, const EvtId name6, | |||||
const EvtId name7, const EvtId name8, const EvtId name9, | |||||
const EvtId name10, const EvtId name11, const EvtId name12 ) | |||||
{ | |||||
_numInList = 12; | |||||
_list = new EvtId[_numInList]; | |||||
_list[0] = name1; | |||||
_list[1] = name2; | |||||
_list[2] = name3; | |||||
_list[3] = name4; | |||||
_list[4] = name5; | |||||
_list[5] = name6; | |||||
_list[6] = name7; | |||||
_list[7] = name8; | |||||
_list[8] = name9; | |||||
_list[9] = name10; | |||||
_list[10] = name11; | |||||
_list[11] = name12; | |||||
} | |||||
EvtIdSet::EvtIdSet( const std::string name1, const std::string name2, | |||||
const std::string name3, const std::string name4, | |||||
const std::string name5, const std::string name6, | |||||
const std::string name7, const std::string name8, | |||||
const std::string name9, const std::string name10, | |||||
const std::string name11, const std::string name12 ) | |||||
{ | |||||
_numInList = 12; | |||||
_list = new EvtId[_numInList]; | |||||
_list[0] = EvtPDL::getId( name1 ); | |||||
_list[1] = EvtPDL::getId( name2 ); | |||||
_list[2] = EvtPDL::getId( name3 ); | |||||
_list[3] = EvtPDL::getId( name4 ); | |||||
_list[4] = EvtPDL::getId( name5 ); | |||||
_list[5] = EvtPDL::getId( name6 ); | |||||
_list[6] = EvtPDL::getId( name7 ); | |||||
_list[7] = EvtPDL::getId( name8 ); | |||||
_list[8] = EvtPDL::getId( name9 ); | |||||
_list[9] = EvtPDL::getId( name10 ); | |||||
_list[10] = EvtPDL::getId( name11 ); | |||||
_list[11] = EvtPDL::getId( name12 ); | |||||
} | |||||
EvtIdSet::EvtIdSet( const EvtIdSet& set1 ) | |||||
{ | |||||
_numInList = set1.sizeOfSet(); | |||||
_list = new EvtId[_numInList]; | |||||
int i; | |||||
for ( i = 0; i < _numInList; i++ ) { | |||||
_list[i] = set1.getElem( i ); | |||||
} | |||||
} | |||||
EvtIdSet::EvtIdSet( const EvtIdSet& set1, const EvtIdSet& set2 ) | |||||
{ | |||||
_numInList = set1.sizeOfSet(); | |||||
_list = new EvtId[_numInList]; | |||||
int i; | |||||
for ( i = 0; i < _numInList; i++ ) { | |||||
_list[i] = set1.getElem( i ); | |||||
} | |||||
//then just append the second list. | |||||
this->append( set2 ); | this->append( set2 ); | ||||
} | } | ||||
int EvtIdSet::contains( const EvtId id ) const | bool EvtIdSet::contains( const EvtId& id ) const | ||||
{ | |||||
int i; | |||||
for ( i = 0; i < _numInList; i++ ) { | |||||
if ( _list[i] == id ) | |||||
return 1; | |||||
} | |||||
return 0; | |||||
} | |||||
int EvtIdSet::contains( const std::string nm ) const | |||||
{ | |||||
int i; | |||||
for ( i = 0; i < _numInList; i++ ) { | |||||
if ( _list[i] == EvtPDL::getId( nm ) ) | |||||
return 1; | |||||
} | |||||
return 0; | |||||
} | |||||
void EvtIdSet::append( const EvtIdSet set1 ) | |||||
{ | { | ||||
int combLen = _numInList + set1.sizeOfSet(); | const auto iter = m_list.find( id ); | ||||
int uniqueLen = 0; | return iter != m_list.end(); | ||||
EvtId* combSet; | |||||
combSet = new EvtId[combLen]; | |||||
int i; | |||||
for ( i = 0; i < combLen; i++ ) { | |||||
if ( i >= _numInList ) { | |||||
//check that there are no overlaps between lists | |||||
int j; | |||||
int isUnique = 1; | |||||
for ( j = 0; j < _numInList; j++ ) { | |||||
if ( _list[j] == set1.getElem( i - _numInList ) ) { | |||||
isUnique = 0; | |||||
} | |||||
} | |||||
if ( isUnique == 1 ) { | |||||
combSet[uniqueLen] = set1.getElem( i - _numInList ); | |||||
uniqueLen += 1; | |||||
} | |||||
} else { | |||||
combSet[uniqueLen] = _list[i]; | |||||
uniqueLen += 1; | |||||
} | |||||
delete _list; | |||||
_list = new EvtId[uniqueLen]; | |||||
_numInList = uniqueLen; | |||||
for ( i = 0; i < _numInList; i++ ) { | |||||
_list[i] = combSet[i]; | |||||
} | |||||
delete combSet; | |||||
} | |||||
} | } | ||||
int EvtIdSet::sizeOfSet() const | bool EvtIdSet::contains( const std::string& name ) const | ||||
{ | { | ||||
return _numInList; | const EvtId id{ EvtPDL::getId( name ) }; | ||||
return this->contains( id ); | |||||
} | } | ||||
EvtId EvtIdSet::getElem( const int i ) const | void EvtIdSet::append( const EvtIdSet& set1 ) | ||||
{ | { | ||||
return _list[i]; | m_list.insert( set1.m_list.begin(), set1.m_list.end() ); | ||||
} | } |