Esempio n. 1
0
 cop<KeyT,DataT,CompareT,AllocT>& cop<KeyT,DataT,CompareT,AllocT>
     ::keep_if(const property<value_type>& hasProperty)
 {
     iterator it = begin(), victim;
     while(it != end())
         if ( !hasProperty(*it) ) { victim = it++; erase(victim); } else ++it;
     return *this;
 }
Esempio n. 2
0
    typename cop<KeyT,DataT,CompareT,AllocT>::iterator
        cop<KeyT,DataT,CompareT,AllocT>::subtract(const key_type& key)
    {
        iterator it_ = find(key);
        if(it_ != end())
            erase(it_);

        return end();
    }
Esempio n. 3
0
    typename cop<KeyT,DataT,CompareT,AllocT>::iterator
        cop<KeyT,DataT,CompareT,AllocT>::subtract(const value_type& val)
    {
        iterator it_ = find(val.KEY_VALUE);
        if(it_ != end())
        {
            (*it_).CONT_VALUE -= val.CONT_VALUE;

            if((*it_).CONT_VALUE == DataT()) //neutron absorbtion
            {
                erase(it_);
                return end();
            }
            else
                return it_;
        }
        //JODO inverse subtraction violates LAW: symmetric difference
        //else
        //{
        //    DataT inverse = DataT();
        //    inverse -= val.CONT_VALUE;
        //    return insert(value_type(val.KEY_VALUE, inverse)).ITERATOR;
        //}
    }
Esempio n. 4
0
    typename cop<KeyT,DataT,CompareT,AllocT>::iterator
        cop<KeyT,DataT,CompareT,AllocT>::add(const value_type& val)
    {
        if(val.CONT_VALUE == DataT())
            return end();

        pair<iterator, bool> insertionAttempt = insert(val);

        if( insertionAttempt.WAS_SUCCESSFUL )
            return insertionAttempt.ITERATOR ;
        else
        {
            iterator it = insertionAttempt.ITERATOR;
            (*it).CONT_VALUE += val.CONT_VALUE ;

            if((*it).CONT_VALUE == DataT()) //neutron absorbtion
            {
                erase(it);
                return end();
            }
            else 
                return it ;
        }
    }