inline void order( OrdinalVector & v ) { OrdinalVector::iterator ev = v.end(); OrdinalVector::iterator iv = v.begin(); std::sort( iv , ev ); iv = std::unique( iv , ev ); v.erase( iv , ev ); }
inline bool insert_ordinal( OrdinalVector & v , unsigned part_ordinal ) { for(OrdinalVector::iterator i=v.begin(), e=v.end(); i!=e; ++i) { if (*i == part_ordinal) return false; if (*i > part_ordinal) { v.insert(i, part_ordinal); return true; } } v.push_back(part_ordinal); return true ; }
inline bool Bucket::member_all( const OrdinalVector& parts ) const { const unsigned * const i_beg = key() + 1 ; const unsigned * const i_end = key() + key()[0] ; const OrdinalVector::const_iterator ip_end = parts.end(); OrdinalVector::const_iterator ip = parts.begin() ; bool result_all = true ; for ( ; result_all && ip_end != ip ; ++ip ) { const unsigned ord = *ip; result_all = contains_ordinal(i_beg, i_end, ord); } return result_all ; }
bool Bucket::member_any( const OrdinalVector & parts ) const { const unsigned * const i_beg = key() + 1 ; const unsigned * const i_end = key() + key()[0] ; const OrdinalVector::const_iterator ip_end = parts.end(); OrdinalVector::const_iterator ip = parts.begin() ; bool result_none = true ; for ( ; result_none && ip_end != ip ; ++ip ) { const unsigned ord = *ip; const unsigned * const i = std::lower_bound( i_beg , i_end , ord ); result_none = i_end == i || ord != *i ; } return ! result_none ; }
void BulkData::internal_verify_change_parts( const MetaData & meta , const Entity & entity , const OrdinalVector & parts ) const { const std::vector<std::string> & rank_names = meta.entity_rank_names(); const EntityRank undef_rank = InvalidEntityRank; const EntityRank entity_rank = entity.entity_rank(); bool ok = true ; std::ostringstream msg ; for ( OrdinalVector::const_iterator i = parts.begin() ; i != parts.end() ; ++i ) { const Part * const p = meta.get_parts()[*i] ; const unsigned part_rank = p->primary_entity_rank(); bool intersection_ok, rel_target_ok, rank_ok; internal_basic_part_check(p, entity_rank, undef_rank, intersection_ok, rel_target_ok, rank_ok); if ( !intersection_ok || !rel_target_ok || !rank_ok ) { if ( ok ) { ok = false ; msg << "change parts for entity " << print_entity_key( entity ); msg << " , { " ; } else { msg << " , " ; } msg << p->name() << "[" ; if ( part_rank < rank_names.size() ) { msg << rank_names[ part_rank ]; } else { msg << part_rank ; } msg << "] " ; if ( !intersection_ok ) { msg << "is_intersection " ; } if ( !rel_target_ok ) { msg << "is_relation_target " ; } if ( !rank_ok ) { msg << "is_bad_rank " ; } } } ThrowErrorMsgIf( !ok, msg.str() << "}" ); }