inline typename StaticCrsGraph< DataType , Arg1Type , Arg2Type , SizeType >::HostMirror create_mirror_view( const StaticCrsGraph<DataType,Arg1Type,Arg2Type,SizeType > & view , typename Impl::enable_if< ! ViewTraits<DataType,Arg1Type,Arg2Type,void>::is_hostspace >::type * = 0 ) { return create_mirror( view ); }
int main() { mynode *root; root = (mynode *)0; int depth; add(&root, 5); add(&root, 4); add(&root, 6); add(&root, 9); add(&root, 14); add(&root, 3); add(&root, 1); add(&root, 2); printf("\n\nIn-order transversal is: "); inorder(root); create_mirror(root); printf("\n\nIn-order transversal after mirroring is: "); inorder(root); getch(); return 0; }
void create_mirror(mynode *root) { mynode *temp; if(root == (mynode *)0) return; else { create_mirror(root -> left); create_mirror(root -> right); //Swap the pointers in this node temp = root -> left; root -> left = root -> right; root -> right = temp; } }
inline typename StaticCrsGraph< DataType , Arg1Type , Arg2Type , SizeType >::HostMirror create_mirror( const StaticCrsGraph<DataType,Arg1Type,Arg2Type,SizeType > & view ) { // Force copy: //typedef Impl::ViewAssignment< Impl::ViewDefault > alloc ; // unused typedef StaticCrsGraph< DataType , Arg1Type , Arg2Type , SizeType > staticcrsgraph_type ; typename staticcrsgraph_type::HostMirror tmp ; typename staticcrsgraph_type::row_map_type::HostMirror tmp_row_map = create_mirror( view.row_map); typename staticcrsgraph_type::row_block_type::HostMirror tmp_row_block_offsets = create_mirror( view.row_block_offsets); // Allocation to match: tmp.row_map = tmp_row_map ; // Assignment of 'const' from 'non-const' tmp.entries = create_mirror( view.entries ); tmp.row_block_offsets = tmp_row_block_offsets ; // Assignment of 'const' from 'non-const' // Deep copy: deep_copy( tmp_row_map , view.row_map ); deep_copy( tmp.entries , view.entries ); deep_copy( tmp_row_block_offsets , view.row_block_offsets ); return tmp ; }