summaryrefslogtreecommitdiff
path: root/matching/include/phat/representations
diff options
context:
space:
mode:
Diffstat (limited to 'matching/include/phat/representations')
-rw-r--r--matching/include/phat/representations/abstract_pivot_column.h102
-rw-r--r--matching/include/phat/representations/bit_tree_pivot_column.h165
-rw-r--r--matching/include/phat/representations/full_pivot_column.h100
-rw-r--r--matching/include/phat/representations/heap_pivot_column.h126
-rw-r--r--matching/include/phat/representations/sparse_pivot_column.h79
-rw-r--r--matching/include/phat/representations/vector_heap.h170
-rw-r--r--matching/include/phat/representations/vector_list.h101
-rw-r--r--matching/include/phat/representations/vector_set.h99
-rw-r--r--matching/include/phat/representations/vector_vector.h107
9 files changed, 0 insertions, 1049 deletions
diff --git a/matching/include/phat/representations/abstract_pivot_column.h b/matching/include/phat/representations/abstract_pivot_column.h
deleted file mode 100644
index e16d7a5..0000000
--- a/matching/include/phat/representations/abstract_pivot_column.h
+++ /dev/null
@@ -1,102 +0,0 @@
-/* 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 <http://www.gnu.org/licenses/>. */
-
-#pragma once
-
-#include <phat/helpers/misc.h>
-#include <phat/representations/vector_vector.h>
-
-namespace phat {
-
- // Note: We could even make the rep generic in the underlying Const representation
- // But I cannot imagine that anything else than vector<vector<index>> would
- // make sense
- template< typename PivotColumn >
- class abstract_pivot_column : public vector_vector {
-
- protected:
- typedef vector_vector Base;
- typedef PivotColumn pivot_col;
-
- // For parallization purposes, it could be more than one full column
- mutable thread_local_storage< pivot_col > pivot_cols;
- mutable thread_local_storage< index > idx_of_pivot_cols;
-
- pivot_col& get_pivot_col() const {
- return pivot_cols();
- }
-
- bool is_pivot_col( index idx ) const {
- return idx_of_pivot_cols() == idx;
- }
-
- void release_pivot_col() {
- index idx = idx_of_pivot_cols();
- if( idx != -1 ) {
- this->matrix[ idx ].clear();
- pivot_cols().get_col_and_clear( this->matrix[ idx ] );
- }
- idx_of_pivot_cols() = -1;
- }
-
- void make_pivot_col( index idx ) {
- release_pivot_col();
- idx_of_pivot_cols() = idx;
- get_pivot_col().add_col( matrix[ idx ] );
- }
-
- public:
-
- void _set_num_cols( index nr_of_cols ) {
- #pragma omp parallel for
- for( int tid = 0; tid < omp_get_num_threads(); tid++ ) {
- pivot_cols[ tid ].init( nr_of_cols );
- idx_of_pivot_cols[ tid ] = -1;
- }
- Base::_set_num_cols( nr_of_cols );
- }
-
- void _add_to( index source, index target ) {
- if( !is_pivot_col( target ) )
- make_pivot_col( target );
- get_pivot_col().add_col( matrix[source] );
- }
-
- void _sync() {
- #pragma omp parallel for
- for( int tid = 0; tid < omp_get_num_threads(); tid++ )
- release_pivot_col();
- }
-
- void _get_col( index idx, column& col ) const { is_pivot_col( idx ) ? get_pivot_col().get_col( col ) : Base::_get_col( idx, col ); }
-
- bool _is_empty( index idx ) const { return is_pivot_col( idx ) ? get_pivot_col().is_empty() : Base::_is_empty( idx ); }
-
- index _get_max_index( index idx ) const { return is_pivot_col( idx ) ? get_pivot_col().get_max_index() : Base::_get_max_index( idx ); }
-
- void _clear( index idx ) { is_pivot_col( idx ) ? get_pivot_col().clear() : Base::_clear( idx ); }
-
- void _set_col( index idx, const column& col ) { is_pivot_col( idx ) ? get_pivot_col().set_col( col ) : Base::_set_col( idx, col ); }
-
- void _remove_max( index idx ) { is_pivot_col( idx ) ? get_pivot_col().remove_max() : Base::_remove_max( idx ); }
-
- void finalize( index idx ) { Base::_finalize( idx ); }
- };
-}
-
-
diff --git a/matching/include/phat/representations/bit_tree_pivot_column.h b/matching/include/phat/representations/bit_tree_pivot_column.h
deleted file mode 100644
index 4d48e88..0000000
--- a/matching/include/phat/representations/bit_tree_pivot_column.h
+++ /dev/null
@@ -1,165 +0,0 @@
-/* Copyright 2013 IST Austria
- Contributed by: Hubert Wagner
-
- 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 <http://www.gnu.org/licenses/>. */
-
-#pragma once
-
-#include <phat/helpers/misc.h>
-#include <phat/representations/abstract_pivot_column.h>
-
-namespace phat {
-
- // This is a bitset indexed with a 64-ary tree. Each node in the index
- // has 64 bits; i-th bit says that the i-th subtree is non-empty.
- // Supports practically O(1), inplace, zero-allocation: insert, remove, max_element
- // and clear in O(number of ones in the bitset).
- // 'add_index' is still the real bottleneck in practice.
- class bit_tree_column
- {
- protected:
-
- size_t offset; // data[i + offset] = ith block of the data-bitset
- typedef uint64_t block_type;
- std::vector< block_type > data;
-
-
- size_t debrujin_magic_table[ 64 ];
-
- enum { block_size_in_bits = 64 };
- enum { block_shift = 6 };
-
- // Some magic: http://graphics.stanford.edu/~seander/bithacks.html
- // Gets the position of the rightmost bit of 'x'. 0 means the most significant bit.
- // (-x)&x isolates the rightmost bit.
- // The whole method is much faster than calling log2i, and very comparable to using ScanBitForward/Reverse intrinsic,
- // which should be one CPU instruction, but is not portable.
- size_t rightmost_pos( const block_type value ) const {
- return 64 - 1 - debrujin_magic_table[ ( (value & (-(int64_t)value) ) * 0x07EDD5E59A4E28C2 ) >> 58 ];
- }
-
- public:
-
- void init( index num_cols ) {
- int64_t n = 1; // in case of overflow
- int64_t bottom_blocks_needed = ( num_cols + block_size_in_bits - 1 ) / block_size_in_bits;
- int64_t upper_blocks = 1;
-
- // How many blocks/nodes of index needed to index the whole bitset?
- while( n * block_size_in_bits < bottom_blocks_needed ) {
- n *= block_size_in_bits;
- upper_blocks += n;
- }
-
- offset = upper_blocks;
- data.resize( upper_blocks + bottom_blocks_needed, 0 );
-
- std::size_t temp_array[ 64 ] = {
- 63, 0, 58, 1, 59, 47, 53, 2,
- 60, 39, 48, 27, 54, 33, 42, 3,
- 61, 51, 37, 40, 49, 18, 28, 20,
- 55, 30, 34, 11, 43, 14, 22, 4,
- 62, 57, 46, 52, 38, 26, 32, 41,
- 50, 36, 17, 19, 29, 10, 13, 21,
- 56, 45, 25, 31, 35, 16, 9, 12,
- 44, 24, 15, 8, 23, 7, 6, 5 };
-
- std::copy( &temp_array[ 0 ], &temp_array[ 64 ], &debrujin_magic_table[ 0 ] );
- }
-
- index get_max_index() const {
- if( !data[ 0 ] )
- return -1;
-
- size_t n = 0;
- size_t newn = 0;
- size_t index = 0;
- while( newn < data.size() ) {
- n = newn;
- index = rightmost_pos( data[ n ] );
- newn = ( n << block_shift ) + index + 1;
- }
-
- return ( ( n - offset ) << block_shift ) + index;
- }
-
- bool is_empty() const {
- return data[ 0 ] == 0;
- }
-
- void add_index( const size_t entry ) {
- const block_type ONE = 1;
- const block_type block_modulo_mask = ( ONE << block_shift ) - 1;
- size_t index_in_level = entry >> block_shift;
- size_t address = index_in_level + offset;
- size_t index_in_block = entry & block_modulo_mask;
-
- block_type mask = ( ONE << ( block_size_in_bits - index_in_block - 1 ) );
-
- data[ address ] ^= mask;
-
- // Check if we reached the root. Also, if anyone else was in this block, we don't need to update the path up.
- while( address && !( data[ address ] & ~mask ) ) {
- index_in_block = index_in_level & block_modulo_mask;
- index_in_level >>= block_shift;
- --address;
- address >>= block_shift;
- mask = ( ONE << ( block_size_in_bits - index_in_block - 1 ) );
- data[ address ] ^= mask;
- }
- }
-
- void get_col_and_clear( column &out ) {
- index mx = this->get_max_index();
- while( mx != -1 ) {
- out.push_back( mx );
- add_index( mx );
- mx = this->get_max_index();
- }
-
- std::reverse( out.begin(), out.end() );
- }
-
- void add_col(const column &col) {
- for( size_t i = 0; i < col.size(); ++i )
- add_index(col[i]);
- }
-
- void clear() {
- index mx = this->get_max_index();
- while( mx != -1 ) {
- add_index( mx );
- mx = this->get_max_index();
- }
- }
-
- void remove_max() {
- add_index( get_max_index() );
- }
-
- void set_col( const column& col ) {
- clear();
- add_col( col );
- }
-
- void get_col( column& col ) {
- get_col_and_clear( col );
- add_col( col );
- }
- };
-
- typedef abstract_pivot_column<bit_tree_column> bit_tree_pivot_column;
-}
diff --git a/matching/include/phat/representations/full_pivot_column.h b/matching/include/phat/representations/full_pivot_column.h
deleted file mode 100644
index c2e9e3c..0000000
--- a/matching/include/phat/representations/full_pivot_column.h
+++ /dev/null
@@ -1,100 +0,0 @@
-/* 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 <http://www.gnu.org/licenses/>. */
-
-#pragma once
-
-#include <phat/helpers/misc.h>
-#include <phat/representations/abstract_pivot_column.h>
-
-namespace phat {
- class full_column {
-
- protected:
- std::priority_queue< index > history;
- std::vector< char > is_in_history;
- std::vector< char > col_bit_field;
-
- public:
- void init( const index total_size ) {
- col_bit_field.resize( total_size, false );
- is_in_history.resize( total_size, false );
- }
-
- void add_col( const column& col ) {
- for( index idx = 0; idx < (index) col.size(); idx++ ) {
- add_index( col[ idx ] );
- }
- }
-
- void add_index( const index idx ) {
- if( !is_in_history[ idx ] ) {
- history.push( idx );
- is_in_history[ idx ] = true;
- }
-
- col_bit_field[ idx ] = !col_bit_field[ idx ];
- }
-
- index get_max_index() {
- while( history.size() > 0 ) {
- index topIndex = history.top();
- if( col_bit_field[ topIndex ] ) {
- return topIndex;
- } else {
- history.pop();
- is_in_history[ topIndex ] = false;
- }
- }
-
- return -1;
- }
-
- void get_col_and_clear( column& col ) {
- while( !is_empty() ) {
- col.push_back( get_max_index() );
- add_index( get_max_index() );
- }
- std::reverse( col.begin(), col.end() );
- }
-
- bool is_empty() {
- return (get_max_index() == -1);
- }
-
- void clear() {
- while( !is_empty() )
- add_index( get_max_index() );
- }
-
- void remove_max() {
- add_index( get_max_index() );
- }
-
- void set_col( const column& col ) {
- clear();
- add_col( col );
- }
-
- void get_col( column& col ) {
- get_col_and_clear( col );
- add_col( col );
- }
- };
-
- typedef abstract_pivot_column< full_column > full_pivot_column;
-}
diff --git a/matching/include/phat/representations/heap_pivot_column.h b/matching/include/phat/representations/heap_pivot_column.h
deleted file mode 100644
index 33cd07b..0000000
--- a/matching/include/phat/representations/heap_pivot_column.h
+++ /dev/null
@@ -1,126 +0,0 @@
-/* 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 <http://www.gnu.org/licenses/>. */
-
-#pragma once
-
-#include <phat/helpers/misc.h>
-#include <phat/representations/abstract_pivot_column.h>
-
-namespace phat {
- class heap_column {
-
- protected:
- std::priority_queue< index > data;
-
- column temp_col;
- index inserts_since_last_prune;
-
- void prune()
- {
- temp_col.clear( );
- index max_index = pop_max_index( );
- while( max_index != -1 ) {
- temp_col.push_back( max_index );
- max_index = pop_max_index( );
- }
-
- for( index idx = 0; idx < (index)temp_col.size( ); idx++ )
- data.push( temp_col[ idx ] );
-
- inserts_since_last_prune = 0;
- }
-
- index pop_max_index()
- {
- if( data.empty( ) )
- return -1;
- else {
- index max_element = data.top( );
- data.pop();
- while( !data.empty( ) && data.top( ) == max_element ) {
- data.pop( );
- if( data.empty( ) )
- return -1;
- else {
- max_element = data.top( );
- data.pop( );
- }
- }
- return max_element;
- }
- }
-
- public:
- void init( const index total_size ) {
- inserts_since_last_prune = 0;
- clear();
- }
-
- void add_col( const column& col ) {
- for( index idx = 0; idx < (index) col.size(); idx++ )
- data.push( col[ idx ] );
- inserts_since_last_prune += col.size( );
- if( 2 * inserts_since_last_prune >( index ) data.size( ) )
- prune();
- }
-
- index get_max_index() {
- index max_element = pop_max_index( );
- if( max_element == -1 )
- return -1;
- else {
- data.push( max_element );
- return max_element;
- }
- }
-
- void get_col_and_clear( column& col ) {
- col.clear();
- index max_index = pop_max_index( );
- while( max_index != -1 ) {
- col.push_back( max_index );
- max_index = pop_max_index( );
- }
- std::reverse( col.begin(), col.end() );
- }
-
- bool is_empty() {
- return get_max_index() == -1;
- }
-
- void clear() {
- data = std::priority_queue< index >();
- }
-
- void remove_max() {
- pop_max_index();
- }
-
- void set_col( const column& col ) {
- clear();
- add_col( col );
- }
-
- void get_col( column& col ) {
- get_col_and_clear( col );
- add_col( col );
- }
- };
-
- typedef abstract_pivot_column< heap_column > heap_pivot_column;
-}
diff --git a/matching/include/phat/representations/sparse_pivot_column.h b/matching/include/phat/representations/sparse_pivot_column.h
deleted file mode 100644
index 390fd91..0000000
--- a/matching/include/phat/representations/sparse_pivot_column.h
+++ /dev/null
@@ -1,79 +0,0 @@
-/* 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 <http://www.gnu.org/licenses/>. */
-
-#pragma once
-
-#include <phat/helpers/misc.h>
-#include <phat/representations/abstract_pivot_column.h>
-
-namespace phat {
- class sparse_column {
-
- protected:
- std::set< index > data;
-
- void add_index( const index idx ) {
- std::pair< std::set< index >::iterator, bool > result = data.insert( idx );
- if( result.second == false )
- data.erase( result.first );
- }
-
- public:
- void init( const index total_size ) {
- data.clear();
- }
-
- void add_col( const column& col ) {
- for( index idx = 0; idx < (index) col.size(); idx++ )
- add_index( col[ idx ] );
- }
-
- index get_max_index() {
- return data.empty() ? -1 : *data.rbegin();
- }
-
- void get_col_and_clear( column& col ) {
- col.assign( data.begin(), data.end() );
- data.clear();
- }
-
- bool is_empty() {
- return data.empty();
- }
-
- void clear() {
- data.clear();
- }
-
- void remove_max() {
- add_index( get_max_index() );
- }
-
- void set_col( const column& col ) {
- clear();
- add_col( col );
- }
-
- void get_col( column& col ) {
- get_col_and_clear( col );
- add_col( col );
- }
- };
-
- typedef abstract_pivot_column< sparse_column > sparse_pivot_column;
-}
diff --git a/matching/include/phat/representations/vector_heap.h b/matching/include/phat/representations/vector_heap.h
deleted file mode 100644
index db0420f..0000000
--- a/matching/include/phat/representations/vector_heap.h
+++ /dev/null
@@ -1,170 +0,0 @@
-/* Copyright 2013 IST Austria
-Contributed by: 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 <http://www.gnu.org/licenses/>. */
-
-#pragma once
-
-#include <phat/helpers/misc.h>
-
-namespace phat {
- class vector_heap {
-
- protected:
- std::vector< dimension > dims;
- std::vector< column > matrix;
-
- std::vector< index > inserts_since_last_prune;
-
- mutable thread_local_storage< column > temp_column_buffer;
-
- protected:
- void _prune( index idx )
- {
- column& col = matrix[ idx ];
- column& temp_col = temp_column_buffer();
- temp_col.clear();
- index max_index = _pop_max_index( col );
- while( max_index != -1 ) {
- temp_col.push_back( max_index );
- max_index = _pop_max_index( col );
- }
- col = temp_col;
- std::reverse( col.begin( ), col.end( ) );
- std::make_heap( col.begin( ), col.end( ) );
- inserts_since_last_prune[ idx ] = 0;
- }
-
- index _pop_max_index( index idx )
- {
- return _pop_max_index( matrix[ idx ] );
- }
-
- index _pop_max_index( column& col ) const
- {
- if( col.empty( ) )
- return -1;
- else {
- index max_element = col.front( );
- std::pop_heap( col.begin( ), col.end( ) );
- col.pop_back( );
- while( !col.empty( ) && col.front( ) == max_element ) {
- std::pop_heap( col.begin( ), col.end( ) );
- col.pop_back( );
- if( col.empty( ) )
- return -1;
- else {
- max_element = col.front( );
- std::pop_heap( col.begin( ), col.end( ) );
- col.pop_back( );
- }
- }
- return max_element;
- }
- }
-
- public:
- // overall number of cells in boundary_matrix
- index _get_num_cols( ) const
- {
- return (index)matrix.size( );
- }
- void _set_num_cols( index nr_of_columns )
- {
- dims.resize( nr_of_columns );
- matrix.resize( nr_of_columns );
- inserts_since_last_prune.assign( nr_of_columns, 0 );
- }
-
- // dimension of given index
- dimension _get_dim( index idx ) const
- {
- return dims[ idx ];
- }
- void _set_dim( index idx, dimension dim )
- {
- dims[ idx ] = dim;
- }
-
- // replaces(!) content of 'col' with boundary of given index
- void _get_col( index idx, column& col ) const
- {
- temp_column_buffer( ) = matrix[ idx ];
-
- index max_index = _pop_max_index( temp_column_buffer() );
- while( max_index != -1 ) {
- col.push_back( max_index );
- max_index = _pop_max_index( temp_column_buffer( ) );
- }
- std::reverse( col.begin( ), col.end( ) );
- }
- void _set_col( index idx, const column& col )
- {
- matrix[ idx ] = col;
- std::make_heap( matrix[ idx ].begin( ), matrix[ idx ].end( ) );
- }
-
- // true iff boundary of given idx is empty
- bool _is_empty( index idx ) const
- {
- return _get_max_index( idx ) == -1;
- }
-
- // largest row index of given column idx (new name for lowestOne())
- index _get_max_index( index idx ) const
- {
- column& col = const_cast< column& >( matrix[ idx ] );
- index max_element = _pop_max_index( col );
- col.push_back( max_element );
- std::push_heap( col.begin( ), col.end( ) );
- return max_element;
- }
-
- // removes the maximal index of a column
- void _remove_max( index idx )
- {
- _pop_max_index( idx );
- }
-
- // clears given column
- void _clear( index idx )
- {
- matrix[ idx ].clear( );
- }
-
- // syncronizes all data structures (essential for openmp stuff)
- void _sync( ) {}
-
- // adds column 'source' to column 'target'
- void _add_to( index source, index target )
- {
- for( index idx = 0; idx < (index)matrix[ source ].size( ); idx++ ) {
- matrix[ target ].push_back( matrix[ source ][ idx ] );
- std::push_heap( matrix[ target ].begin(), matrix[ target ].end() );
- }
- inserts_since_last_prune[ target ] += matrix[ source ].size();
-
- if( 2 * inserts_since_last_prune[ target ] > ( index )matrix[ target ].size() )
- _prune( target );
- }
-
- // finalizes given column
- void _finalize( index idx ) {
- _prune( idx );
- }
-
- };
-}
diff --git a/matching/include/phat/representations/vector_list.h b/matching/include/phat/representations/vector_list.h
deleted file mode 100644
index ca0b5b8..0000000
--- a/matching/include/phat/representations/vector_list.h
+++ /dev/null
@@ -1,101 +0,0 @@
-/* Copyright 2013 IST Austria
- Contributed by: 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 <http://www.gnu.org/licenses/>. */
-
-#pragma once
-
-#include <phat/helpers/misc.h>
-
-namespace phat {
- class vector_list {
-
- protected:
- std::vector< dimension > dims;
- std::vector< std::list< index > > matrix;
-
- public:
- // overall number of cells in boundary_matrix
- index _get_num_cols() const {
- return (index)matrix.size();
- }
- void _set_num_cols( index nr_of_columns ) {
- dims.resize( nr_of_columns );
- matrix.resize( nr_of_columns );
- }
-
- // dimension of given index
- dimension _get_dim( index idx ) const {
- return dims[ idx ];
- }
- void _set_dim( index idx, dimension dim ) {
- dims[ idx ] = dim;
- }
-
- // replaces(!) content of 'col' with boundary of given index
- void _get_col( index idx, column& col ) const {
- col.clear();
- col.reserve( matrix[idx].size() );
- std::copy (matrix[idx].begin(), matrix[idx].end(), std::back_inserter(col) );
- }
-
- void _set_col( index idx, const column& col ) {
- matrix[ idx ].clear();
- matrix[ idx ].resize( col.size() );
- std::copy (col.begin(), col.end(), matrix[ idx ].begin() );
- }
-
- // true iff boundary of given idx is empty
- bool _is_empty( index idx ) const {
- return matrix[ idx ].empty();
- }
-
- // largest row index of given column idx (new name for lowestOne())
- index _get_max_index( index idx ) const {
- return matrix[ idx ].empty() ? -1 : *matrix[ idx ].rbegin();
- }
-
- // removes the maximal index of a column
- void _remove_max( index idx ) {
- std::list< index >::iterator it = matrix[ idx ].end();
- it--;
- matrix[ idx ].erase( it );
- }
-
- // clears given column
- void _clear( index idx ) {
- matrix[ idx ].clear();
- }
-
- // syncronizes all data structures (essential for openmp stuff)
- void _sync() {}
-
- // adds column 'source' to column 'target'
- void _add_to( index source, index target ) {
- std::list< index >& source_col = matrix[ source ];
- std::list< index >& target_col = matrix[ target ];
- std::list< index > temp_col;
- target_col.swap( temp_col );
- std::set_symmetric_difference( temp_col.begin(), temp_col.end(),
- source_col.begin(), source_col.end(),
- std::back_inserter( target_col ) );
- }
-
- // finalizes given column
- void _finalize( index idx ) {
- }
- };
-}
diff --git a/matching/include/phat/representations/vector_set.h b/matching/include/phat/representations/vector_set.h
deleted file mode 100644
index 6878a27..0000000
--- a/matching/include/phat/representations/vector_set.h
+++ /dev/null
@@ -1,99 +0,0 @@
-/* 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 <http://www.gnu.org/licenses/>. */
-
-#pragma once
-
-#include <phat/helpers/misc.h>
-
-namespace phat {
- class vector_set {
-
- protected:
- std::vector< dimension > dims;
- std::vector< std::set< index > > matrix;
-
- public:
- // overall number of cells in boundary_matrix
- index _get_num_cols() const {
- return (index)matrix.size();
- }
- void _set_num_cols( index nr_of_columns ) {
- dims.resize( nr_of_columns );
- matrix.resize( nr_of_columns );
- }
-
- // dimension of given index
- dimension _get_dim( index idx ) const {
- return dims[ idx ];
- }
- void _set_dim( index idx, dimension dim ) {
- dims[ idx ] = dim;
- }
-
- // replaces(!) content of 'col' with boundary of given index
- void _get_col( index idx, column& col ) const {
- col.clear();
- col.reserve( matrix[idx].size() );
- std::copy (matrix[idx].begin(), matrix[idx].end(), std::back_inserter(col) );
- }
- void _set_col( index idx, const column& col ) {
- matrix[ idx ].clear();
- matrix[ idx ].insert( col.begin(), col.end() );
- }
-
- // true iff boundary of given idx is empty
- bool _is_empty( index idx ) const {
- return matrix[ idx ].empty();
- }
-
- // largest row index of given column idx (new name for lowestOne())
- index _get_max_index( index idx ) const {
- return matrix[ idx ].empty() ? -1 : *matrix[ idx ].rbegin();
- }
-
- // removes the maximal index of a column
- void _remove_max( index idx ) {
- std::set< index >::iterator it = matrix[ idx ].end();
- it--;
- matrix[ idx ].erase( it );
- }
-
- // clears given column
- void _clear( index idx ) {
- matrix[ idx ].clear();
- }
-
- // syncronizes all data structures (essential for openmp stuff)
- void _sync() {}
-
- // adds column 'source' to column 'target'
- void _add_to( index source, index target ) {
- for( std::set< index >::iterator it = matrix[ source ].begin(); it != matrix[ source ].end(); it++ ) {
- std::set< index >& col = matrix[ target ];
- std::pair< std::set< index >::iterator, bool > result = col.insert( *it );
- if( !result.second )
- col.erase( result.first );
- }
- }
-
- // finalizes given column
- void _finalize( index idx ) {
- }
-
- };
-}
diff --git a/matching/include/phat/representations/vector_vector.h b/matching/include/phat/representations/vector_vector.h
deleted file mode 100644
index f111d6b..0000000
--- a/matching/include/phat/representations/vector_vector.h
+++ /dev/null
@@ -1,107 +0,0 @@
-/* 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 <http://www.gnu.org/licenses/>. */
-
-#pragma once
-
-#include <phat/helpers/misc.h>
-
-namespace phat {
- class vector_vector {
-
- protected:
- std::vector< dimension > dims;
- std::vector< column > matrix;
-
- thread_local_storage< column > temp_column_buffer;
-
- public:
- // overall number of cells in boundary_matrix
- index _get_num_cols() const {
- return (index)matrix.size();
- }
- void _set_num_cols( index nr_of_columns ) {
- dims.resize( nr_of_columns );
- matrix.resize( nr_of_columns );
- }
-
- // dimension of given index
- dimension _get_dim( index idx ) const {
- return dims[ idx ];
- }
- void _set_dim( index idx, dimension dim ) {
- dims[ idx ] = dim;
- }
-
- // replaces(!) content of 'col' with boundary of given index
- void _get_col( index idx, column& col ) const {
- col = matrix[ idx ];
- }
- void _set_col( index idx, const column& col ) {
- matrix[ idx ] = col;
- }
-
- // true iff boundary of given idx is empty
- bool _is_empty( index idx ) const {
- return matrix[ idx ].empty();
- }
-
- // largest row index of given column idx (new name for lowestOne())
- index _get_max_index( index idx ) const {
- return matrix[ idx ].empty() ? -1 : matrix[ idx ].back();
- }
-
- // removes the maximal index of a column
- void _remove_max( index idx ) {
- matrix[ idx ].pop_back();
- }
-
- // clears given column
- void _clear( index idx ) {
- matrix[ idx ].clear();
- }
-
- // syncronizes all data structures (essential for openmp stuff)
- void _sync() {}
-
- // adds column 'source' to column 'target'
- void _add_to( index source, index target ) {
- column& source_col = matrix[ source ];
- column& target_col = matrix[ target ];
- column& temp_col = temp_column_buffer();
-
-
- size_t new_size = source_col.size() + target_col.size();
-
- if (new_size > temp_col.size()) temp_col.resize(new_size);
-
- std::vector<index>::iterator col_end = std::set_symmetric_difference( target_col.begin(), target_col.end(),
- source_col.begin(), source_col.end(),
- temp_col.begin() );
- temp_col.erase(col_end, temp_col.end());
-
-
- target_col.swap(temp_col);
- }
-
- // finalizes given column
- void _finalize( index idx ) {
- column& col = matrix[ idx ];
- column(col.begin(), col.end()).swap(col);
- }
- };
-}