MOOCHO (Single Doxygen Collection)  Version of the Day
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
AbstractLinAlgPack_MatrixOpGetGMS.hpp
Go to the documentation of this file.
1 // @HEADER
2 // ***********************************************************************
3 //
4 // Moocho: Multi-functional Object-Oriented arCHitecture for Optimization
5 // Copyright (2003) Sandia Corporation
6 //
7 // Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive
8 // license for use of this work by or on behalf of the U.S. Government.
9 //
10 // Redistribution and use in source and binary forms, with or without
11 // modification, are permitted provided that the following conditions are
12 // met:
13 //
14 // 1. Redistributions of source code must retain the above copyright
15 // notice, this list of conditions and the following disclaimer.
16 //
17 // 2. Redistributions in binary form must reproduce the above copyright
18 // notice, this list of conditions and the following disclaimer in the
19 // documentation and/or other materials provided with the distribution.
20 //
21 // 3. Neither the name of the Corporation nor the names of the
22 // contributors may be used to endorse or promote products derived from
23 // this software without specific prior written permission.
24 //
25 // THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY
26 // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
27 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
28 // PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE
29 // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
30 // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
31 // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
32 // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
33 // LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
34 // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
35 // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36 //
37 // Questions? Contact Roscoe A. Bartlett (rabartl@sandia.gov)
38 //
39 // ***********************************************************************
40 // @HEADER
41 
42 #ifndef MATRIX_WITH_OP_GET_GMS_H
43 #define MATRIX_WITH_OP_GET_GMS_H
44 
48 #include "Teuchos_dyn_cast.hpp"
49 
50 namespace AbstractLinAlgPack {
51 
68  : virtual public AbstractLinAlgPack::MatrixOp // doxygen needs full path
69 {
70 public:
71 
86  virtual const DMatrixSlice get_gms_view() const = 0;
87 
102  virtual void free_gms_view(const DMatrixSlice* gms_view) const = 0;
103 
104 }; // end class MatrixOpGetGMS
105 
126 public:
127 
130  MatrixDenseEncap( const MatrixOpGetGMS& mat_get );
136  MatrixDenseEncap( const MatrixOp& mat );
140  const DMatrixSlice operator()() const;
141 
142 private:
143 
146  MatrixDenseEncap(); // Not defined and not to be called!
147  MatrixDenseEncap(const MatrixDenseEncap&); // ""
149 
150 }; // end class MatrixDenseEncap
151 
152 // ///////////////////////////////////////////
153 // Inline members
154 
155 // MatrixDenseEncap
156 
157 inline
159  :mat_get_(mat_get)
160  ,gms_view_(mat_get_.get_gms_view())
161 {}
162 
163 inline
165  :mat_get_(Teuchos::dyn_cast<const MatrixOpGetGMS>(mat))
166  ,gms_view_(mat_get_.get_gms_view())
167 {}
168 
169 inline
171 {
173 }
174 
175 inline
177 {
178  return gms_view_;
179 }
180 
181 } // end namespace AbstractLinAlgPack
182 
183 #endif // MATRIX_WITH_OP_GET_GMS_H
virtual void free_gms_view(const DMatrixSlice *gms_view) const =0
Free a view of a dense matrix initialized from get_gms_view()>/tt>.
const DMatrixSlice operator()() const
Returns a constant view of the DMatrixSlice view.
virtual const DMatrixSlice get_gms_view() const =0
Get a const view of the abstract matrix in the form DenseLinAlgPack::DMatrixSlice.
T_To & dyn_cast(T_From &from)
Abstract interface that allows the extraction of a const DMatrixSlice view of an abstract matrix...
Helper class type that simplifies the usage of the MatrixOpGetGMS interface for clients.
Base class for all matrices that support basic matrix operations.
MatrixDenseEncap & operator=(const MatrixDenseEncap &)