42#ifndef TEUCHOS_WORKSPACE_HPP
43#define TEUCHOS_WORKSPACE_HPP
46#include "Teuchos_ArrayView.hpp"
47#include "Teuchos_Assert.hpp"
133 size_t num_bytes()
const;
135 char* workspace_ptr();
137 const char* workspace_ptr()
const;
140 char *workspace_begin_;
141 char *workspace_end_;
148 static void*
operator new(size_t);
149 static void operator delete(
void*);
247 bool call_constructors_;
252 static void*
operator new(size_t);
253 static void operator delete(
void*);
275 size_t num_bytes_total()
const;
278 size_t num_bytes_remaining()
const;
284 int num_static_allocations()
const;
290 int num_dyn_allocations()
const;
294 size_t num_current_bytes_total();
298 size_t num_max_bytes_needed()
const;
303 void protected_initialize(
size_t num_bytes);
305 char *workspace_begin_;
307 char *workspace_end_;
311 int num_static_allocations_;
313 int num_dyn_allocations_;
316 size_t num_current_bytes_total_;
317 size_t num_max_bytes_needed_;
355 : raw_workspace_(workspace_store,sizeof(T)*num_elements), call_constructors_(call_constructors)
357 if(call_constructors_) {
359 for(
size_t k = 0; k < num_elements; ++k, raw_ptr +=
sizeof(T) )
368 if(call_constructors_) {
369 const size_t num_elements = this->size();
370 char* raw_ptr = raw_workspace_.workspace_ptr();
371 for(
size_t k = 0; k < num_elements; ++k, raw_ptr +=
sizeof(T) )
372 reinterpret_cast<T*
>(raw_ptr)->~T();
380 return raw_workspace_.num_bytes() /
sizeof(T);
387 return ( size() ? &(*
this)[0] : 0 );
394 return ( size() ? &(*
this)[0] : 0 );
404 return reinterpret_cast<T*
>(raw_workspace_.workspace_ptr())[i];
419 return Teuchos::null;
420 return arrayView<T>( &(*
this)[0], size() );
429 return Teuchos::null;
430 return arrayView<const T>( &(*
this)[0], size() );
460void Workspace<T>::operator
delete(
void*)
471 return workspace_end_ - workspace_begin_;
477 return workspace_end_ - curr_ws_ptr_;
483 return num_static_allocations_;
489 return num_dyn_allocations_;
495 return num_current_bytes_total_;
501 return num_max_bytes_needed_;
524 return workspace_end_ - workspace_begin_;
530 return workspace_begin_;
536 return workspace_begin_;
541void RawWorkspace::operator
delete(
void*)
Reference-counted pointer class and non-member templated function implementations.
Partial specialization of ArrayView for const T.
Smart reference counting pointer class for automatic garbage collection.
Encapulsation object for raw temporary workspace that has been allocated. These objects can only be c...
size_t num_bytes() const
Return the number of bytes of raw workspace.
char * workspace_ptr()
Give a raw pointer to the beginning of the workspace.
WorkspaceStore class that can be used to actually reinitialize memory.
WorkspaceStoreInitializeable(size_t num_bytes=0)
Default constructs to no memory set and will dynamically allocate all memory requested.
void initialize(size_t num_bytes)
Set the size block of memory to be given as workspace.
Workspace encapsulation class.
void protected_initialize(size_t num_bytes)
int num_static_allocations() const
Return the number of static memory allocations granted thus far. This is the number of memory allocat...
size_t num_max_bytes_needed() const
Return the maximum storage in bytes needed. This is the maximum total amount of * storage that was ne...
int num_dyn_allocations() const
Return the number of dynamic memory allocations granted thus far. This is the number of memory alloca...
size_t num_bytes_total() const
Return the total number of bytes that where initially allocated.
size_t num_bytes_remaining() const
Return the number of bytes remaining currently.
size_t num_current_bytes_total()
Return the total number of bytes currently allocated.. This is the total number of bytes currently be...
Templated class for workspace creation.
~Workspace()
The destructor on the elements will only be called if call_constructors == true was passed to the con...
T * getRawPtr()
Return a raw pointer to the beginning of the array or null if unsized.
ArrayView< T > operator()()
Return a non-const array view.
T & operator[](size_t i)
Non-const zero based element access.
size_t size() const
Return the number of elements in the array.
#define TEUCHOS_TEST_FOR_EXCEPTION(throw_exception_test, Exception, msg)
Macro for throwing an exception with breakpointing to ease debugging.
The Teuchos namespace contains all of the classes, structs and enums used by Teuchos,...
TEUCHOSCORE_LIB_DLL_EXPORT void print_memory_usage_stats(const WorkspaceStore *workspace_store, std::ostream &out)
Print statistics on memory usage.
TEUCHOSCORE_LIB_DLL_EXPORT Teuchos::RCP< WorkspaceStore > get_default_workspace_store()
Get the global workspace object set by set_default_workspace_store().
TEUCHOSCORE_LIB_DLL_EXPORT void set_default_workspace_store(const Teuchos::RCP< WorkspaceStore > &default_workspace_store)
Set pointer to global workspace object.