IterationPack: General framework for building iterative algorithms Version of the Day
IterationPack_IterQuantity.hpp
00001 // @HEADER
00002 // ***********************************************************************
00003 // 
00004 // Moocho: Multi-functional Object-Oriented arCHitecture for Optimization
00005 //                  Copyright (2003) Sandia Corporation
00006 // 
00007 // Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive
00008 // license for use of this work by or on behalf of the U.S. Government.
00009 // 
00010 // Redistribution and use in source and binary forms, with or without
00011 // modification, are permitted provided that the following conditions are
00012 // met:
00013 //
00014 // 1. Redistributions of source code must retain the above copyright
00015 // notice, this list of conditions and the following disclaimer.
00016 //
00017 // 2. Redistributions in binary form must reproduce the above copyright
00018 // notice, this list of conditions and the following disclaimer in the
00019 // documentation and/or other materials provided with the distribution.
00020 //
00021 // 3. Neither the name of the Corporation nor the names of the
00022 // contributors may be used to endorse or promote products derived from
00023 // this software without specific prior written permission.
00024 //
00025 // THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY
00026 // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
00027 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
00028 // PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE
00029 // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
00030 // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
00031 // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
00032 // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
00033 // LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
00034 // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
00035 // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
00036 //
00037 // Questions? Contact Roscoe A. Bartlett (rabartl@sandia.gov) 
00038 // 
00039 // ***********************************************************************
00040 // @HEADER
00041 //
00042 // Change Log:
00043 //  11/18/99:
00044 //    * last_updated() Added
00045 //    * set_not_updated(k) Added
00046 
00047 #ifndef ITER_QUANTITY_H
00048 #define ITER_QUANTITY_H
00049 
00050 #include <stdexcept>
00051 #include <string>
00052 #include <iomanip>
00053 #include <limits>
00054 
00055 #include "IterationPack_Types.hpp"
00056 
00057 namespace IterationPack {
00058 
00068 class IterQuantity {
00069 public:
00070 
00073 
00075   enum { NONE_UPDATED = INT_MIN };
00076 
00078   class NoStorageAvailable : public std::logic_error
00079   {public: NoStorageAvailable(const std::string& what_arg) : std::logic_error(what_arg) {}};
00080 
00082   class QuanityNotSet : public std::logic_error
00083   {public: QuanityNotSet(const std::string& what_arg) : std::logic_error(what_arg) {}};
00084   
00086 
00089 
00090   // Virtual destructor
00091   virtual ~IterQuantity() {}
00092 
00093   // Clone this iteration quantity
00094   virtual IterQuantity* clone() const = 0;
00095 
00097 
00100 
00102   virtual const char* name() const = 0; 
00103   
00110   virtual bool has_storage_k(int offset) const = 0;
00111   
00120   virtual bool updated_k(int offset) const = 0;
00121 
00127   virtual int last_updated() const = 0;
00128 
00180   virtual bool will_loose_mem(int offset, int set_offset) const = 0;
00181 
00183 
00186 
00197   virtual void set_not_updated_k(int offset) = 0;
00198 
00201   virtual void set_all_not_updated() = 0;
00202 
00204 
00207 
00216   virtual void next_iteration() = 0;
00217 
00219 
00222 
00231   virtual void print_concrete_type( std::ostream& out ) const = 0;
00232 
00234 
00237 
00239   void assert_has_storage_k(int offset) const;
00240 
00242   void assert_updated_k(int offset) const;
00243 
00245 
00246 };  // end class IterQuantity 
00247 
00248 } // end namespace IterationPack
00249 
00250 #endif  // ITER_QUANTITY_H
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Friends