/* Copyright 2013 IST Austria Contributed by: Ulrich Bauer, Michael Kerber, Jan Reininghaus This file is part of PHAT. PHAT is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. PHAT is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with PHAT. If not, see . */ #pragma once #include #include namespace phat { class sparse_column { protected: std::set< index > m_data; public: void init( const index total_size ) { m_data.clear(); } void add_column( const column& col ) { for( index idx = 0; idx < (index) col.size(); idx++ ) add_index( col[ idx ] ); } void add_index( const index idx ) { std::pair< std::set< index >::iterator, bool > result = m_data.insert( idx ); if( result.second == false ) m_data.erase( result.first ); } index max_index() { return m_data.empty() ? -1 : *m_data.rbegin(); } void get_column_and_clear( column& col ) { col.clear(); col.assign( m_data.begin(), m_data.end() ); m_data.clear(); } bool empty() { return m_data.empty(); } }; typedef abstract_pivot_column< sparse_column > sparse_pivot_column; }