Teuchos Package Browser (Single Doxygen Collection)
Version of the Day
Toggle main menu visibility
Loading...
Searching...
No Matches
core
src
Teuchos_ConstNonconstObjectContainer.hpp
Go to the documentation of this file.
1
// @HEADER
2
// ***********************************************************************
3
//
4
// Teuchos: Common Tools Package
5
// Copyright (2004) 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 Michael A. Heroux (maherou@sandia.gov)
38
//
39
// ***********************************************************************
40
// @HEADER
41
42
#ifndef TEUCHOS_CONST_NONCONST_OBJECT_CONTAINER_HPP
43
#define TEUCHOS_CONST_NONCONST_OBJECT_CONTAINER_HPP
44
45
#include "
Teuchos_RCP.hpp
"
46
47
48
namespace
Teuchos
{
49
50
274
template
<
class
ObjType>
275
class
ConstNonconstObjectContainer
{
276
public
:
278
ConstNonconstObjectContainer
()
279
:
constObj_
(
null
),
isConst_
(true) {}
280
281
ConstNonconstObjectContainer
(
const
RCP<ObjType>
&obj )
282
{
initialize
(obj); }
283
284
ConstNonconstObjectContainer
(
const
RCP<const ObjType>
&obj )
285
{
initialize
(obj); }
286
288
void
initialize
(
const
RCP<ObjType>
&obj )
289
{
290
TEUCHOS_TEST_FOR_EXCEPTION
(
is_null
(obj),
NullReferenceError
,
"Error!"
);
291
constObj_
= obj;
292
isConst_
=
false
;
293
}
294
296
void
initialize
(
const
RCP<const ObjType>
&obj )
297
{
298
TEUCHOS_TEST_FOR_EXCEPTION
(
is_null
(obj),
NullReferenceError
,
"Error!"
);
299
constObj_
= obj;
300
isConst_
=
true
;
301
}
302
303
void
uninitialize
()
304
{
constObj_
=
null
;
isConst_
=
true
; }
305
306
ConstNonconstObjectContainer<ObjType>
&
operator=
(ENull)
307
{
uninitialize
();
return
*
this
; }
308
309
bool
isConst
()
const
310
{
return
isConst_
; }
311
325
RCP<ObjType>
getNonconstObj
()
const
326
{
327
TEUCHOS_TEST_FOR_EXCEPTION
(
328
constObj_
.get() &&
isConst_
,
NonconstAccessError
,
329
"Error, the object of reference type \""
<<
TypeNameTraits<ObjType>::name
()
330
<<
"\" was given as a const-only object and non-const access is not allowed."
331
);
332
return
rcp_const_cast<ObjType>
(
constObj_
);
333
}
334
339
RCP<const ObjType>
getConstObj
()
const
340
{
return
constObj_
; }
341
342
RCP<const ObjType>
operator()
()
const
343
{
return
getConstObj
(); }
344
350
const
ObjType*
operator->
()
const
351
{
return
&*
getConstObj
(); }
// Does assert also!
352
358
const
ObjType&
operator*
()
const
359
{
return
*
getConstObj
(); }
360
361
operator
RCP<const ObjType>
()
const
362
{
return
getConstObj
(); }
363
364
int
count
()
const
365
{
return
constObj_
.count(); }
366
367
private
:
368
RCP<const ObjType>
constObj_
;
369
bool
isConst_
;
370
};
371
372
377
template
<
class
T>
378
bool
is_null
(
const
ConstNonconstObjectContainer<T>
&p )
379
{
return
is_null
(p.
getConstObj
()); }
380
381
386
template
<
class
T>
387
bool
nonnull
(
const
ConstNonconstObjectContainer<T>
&p )
388
{
return
nonnull
(p.
getConstObj
()); }
389
390
391
}
// namespace Teuchos
392
393
394
#endif
// TEUCHOS_CONST_NONCONST_OBJECT_CONTAINER_HPP
Teuchos_RCP.hpp
Reference-counted pointer class and non-member templated function implementations.
Teuchos::ConstNonconstObjectContainer::operator*
const ObjType & operator*() const
Dereference the underlying object.
Definition
Teuchos_ConstNonconstObjectContainer.hpp:358
Teuchos::ConstNonconstObjectContainer::constObj_
RCP< const ObjType > constObj_
Definition
Teuchos_ConstNonconstObjectContainer.hpp:368
Teuchos::ConstNonconstObjectContainer::uninitialize
void uninitialize()
Definition
Teuchos_ConstNonconstObjectContainer.hpp:303
Teuchos::ConstNonconstObjectContainer::operator=
ConstNonconstObjectContainer< ObjType > & operator=(ENull)
Definition
Teuchos_ConstNonconstObjectContainer.hpp:306
Teuchos::ConstNonconstObjectContainer::operator()
RCP< const ObjType > operator()() const
Perform shorthand for getConstObj().
Definition
Teuchos_ConstNonconstObjectContainer.hpp:342
Teuchos::ConstNonconstObjectContainer::getNonconstObj
RCP< ObjType > getNonconstObj() const
Get an RCP to the non-const contained object.
Definition
Teuchos_ConstNonconstObjectContainer.hpp:325
Teuchos::ConstNonconstObjectContainer::is_null
bool is_null(const ConstNonconstObjectContainer< T > &p)
Returns true if p.get()==NULL.
Definition
Teuchos_ConstNonconstObjectContainer.hpp:378
Teuchos::ConstNonconstObjectContainer::ConstNonconstObjectContainer
ConstNonconstObjectContainer(const RCP< ObjType > &obj)
. Calls initialize() with a non-const object.
Definition
Teuchos_ConstNonconstObjectContainer.hpp:281
Teuchos::ConstNonconstObjectContainer::getConstObj
RCP< const ObjType > getConstObj() const
Get an RCP to the const contained object.
Definition
Teuchos_ConstNonconstObjectContainer.hpp:339
Teuchos::ConstNonconstObjectContainer::ConstNonconstObjectContainer
ConstNonconstObjectContainer(const RCP< const ObjType > &obj)
. Calls initialize() with a const object.
Definition
Teuchos_ConstNonconstObjectContainer.hpp:284
Teuchos::ConstNonconstObjectContainer::initialize
void initialize(const RCP< const ObjType > &obj)
. Initialize using a const object. Allows only const access enforced with a runtime check.
Definition
Teuchos_ConstNonconstObjectContainer.hpp:296
Teuchos::ConstNonconstObjectContainer::isConst
bool isConst() const
Returns true if const-only access to the object is allowed.
Definition
Teuchos_ConstNonconstObjectContainer.hpp:309
Teuchos::ConstNonconstObjectContainer::isConst_
bool isConst_
Definition
Teuchos_ConstNonconstObjectContainer.hpp:369
Teuchos::ConstNonconstObjectContainer::initialize
void initialize(const RCP< ObjType > &obj)
. Initialize using a non-const object. Allows both const and non-const access to the contained object...
Definition
Teuchos_ConstNonconstObjectContainer.hpp:288
Teuchos::ConstNonconstObjectContainer::operator->
const ObjType * operator->() const
Pointer (->) access to underlying const object.
Definition
Teuchos_ConstNonconstObjectContainer.hpp:350
Teuchos::ConstNonconstObjectContainer::count
int count() const
Return the internal count.
Definition
Teuchos_ConstNonconstObjectContainer.hpp:364
Teuchos::ConstNonconstObjectContainer::nonnull
bool nonnull(const ConstNonconstObjectContainer< T > &p)
Returns true if p.get()!=NULL.
Definition
Teuchos_ConstNonconstObjectContainer.hpp:387
Teuchos::ConstNonconstObjectContainer::ConstNonconstObjectContainer
ConstNonconstObjectContainer()
. Constructs to uninitialized
Definition
Teuchos_ConstNonconstObjectContainer.hpp:278
Teuchos::NonconstAccessError
Null reference error exception class.
Definition
Teuchos_Exceptions.hpp:86
Teuchos::NullReferenceError
Null reference error exception class.
Definition
Teuchos_Exceptions.hpp:78
Teuchos::RCP
Smart reference counting pointer class for automatic garbage collection.
Definition
Teuchos_RCPDecl.hpp:429
Teuchos::RCP::rcp_const_cast
RCP< T2 > rcp_const_cast(const RCP< T1 > &p1)
Constant cast of underlying RCP type from T1* to T2*.
Teuchos::TypeNameTraits::name
static std::string name()
Definition
Teuchos_TypeNameTraits.hpp:88
TEUCHOS_TEST_FOR_EXCEPTION
#define TEUCHOS_TEST_FOR_EXCEPTION(throw_exception_test, Exception, msg)
Macro for throwing an exception with breakpointing to ease debugging.
Definition
Teuchos_TestForException.hpp:178
Teuchos::is_null
bool is_null(const std::shared_ptr< T > &p)
Returns true if p.get()==NULL.
Definition
Teuchos_RCPStdSharedPtrConversionsDecl.hpp:148
Teuchos::nonnull
bool nonnull(const std::shared_ptr< T > &p)
Returns true if p.get()!=NULL.
Definition
Teuchos_RCPStdSharedPtrConversionsDecl.hpp:159
Teuchos
Definition
Teuchos_AbstractFactory.hpp:47
Teuchos::null
@ null
Definition
Teuchos_ENull.hpp:54
Generated by
1.17.0