stlab.adobe.com Adobe Systems Incorporated

poly_regular.hpp

Go to the documentation of this file.
00001 /*
00002     Copyright 2006-2007 Adobe Systems Incorporated
00003     Distributed under the MIT License (see accompanying file LICENSE_1_0_0.txt
00004     or a copy at http://stlab.adobe.com/licenses.html)
00005 
00006     Author(s): Mat Marcus
00007 */
00008 
00009 /*************************************************************************************************/
00010 
00011 #ifndef ADOBE_POLY_REGULAR_HPP
00012 #define ADOBE_POLY_REGULAR_HPP
00013 
00014 #include <adobe/config.hpp>
00015 
00016 #include <boost/concept_check.hpp>
00017 
00018 #include <adobe/poly.hpp>
00019 #include <adobe/regular_concept.hpp>
00020 #include <adobe/empty.hpp>
00021 
00022 /*************************************************************************************************/
00023 
00024 namespace adobe {  
00025 
00030 /*************************************************************************************************/
00036 struct poly_regular_interface : poly_copyable_interface
00037 {
00038     virtual bool equals(const poly_regular_interface& new_value) const = 0;
00039 };
00040 
00041 /*************************************************************************************************/
00042 
00050 template <typename T>
00051 struct poly_regular_instance : optimized_storage_type<T, poly_regular_interface>::type
00052 {
00053     typedef typename optimized_storage_type<T, poly_regular_interface>::type base_t;
00054 
00058     BOOST_CLASS_REQUIRE(T, adobe, RegularConcept);
00059 
00063     poly_regular_instance(const T& x) : base_t(x) {}
00064 
00068     poly_regular_instance(move_from<poly_regular_instance> x) 
00069         : base_t(move_from<base_t>(x.source)) {}
00070 
00071     bool equals(const poly_regular_interface& x) const 
00072     { return this->type_info() == x.type_info() && this->get() == *static_cast<const T*>(x.cast()); }
00073 
00074 }; 
00075 
00076 /*************************************************************************************************/
00077 
00084 struct regular : poly_base<poly_regular_interface, poly_regular_instance>
00085 {
00086     typedef poly_base<poly_regular_interface, poly_regular_instance> base_t;
00087 
00091     template <typename T>
00092     explicit regular(const T& s)
00093       : base_t(s)  { }
00094 
00095     regular()
00096       : base_t(empty_t())  { }
00097 
00101     regular(move_from<regular> x)
00102         : base_t(move_from<base_t>(x.source)) {}
00103 
00104 };
00105 
00106 
00107 /*************************************************************************************************/
00108 
00109 #if !defined(ADOBE_NO_DOCUMENTATION)
00110 
00111 /*************************************************************************************************/
00112 
00113 typedef poly<regular> poly_regular_t;
00114 
00115 /*************************************************************************************************/
00116 
00117 #endif
00118 
00119 /*************************************************************************************************/
00120 
00121 } // namespace adobe
00122 
00123 /*************************************************************************************************/
00124 
00125 #endif

Copyright © 2006-2007 Adobe Systems Incorporated.

Use of this website signifies your agreement to the Terms of Use and Online Privacy Policy.

Search powered by Google