/home/greg/src/restcgi-test/src/content.h

00001 /*
00002 Copyright (c) 2009 zooml.com
00003 
00004 Permission is hereby granted, free of charge, to any person obtaining a copy
00005 of this software and associated documentation files (the "Software"), to deal
00006 in the Software without restriction, including without limitation the rights
00007 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
00008 copies of the Software, and to permit persons to whom the Software is
00009 furnished to do so, subject to the following conditions:
00010 
00011 The above copyright notice and this permission notice shall be included in
00012 all copies or substantial portions of the Software.
00013 
00014 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
00015 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
00016 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
00017 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
00018 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
00019 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
00020 THE SOFTWARE.
00021 */
00022 #ifndef restcgi_content_h
00023 #define restcgi_content_h
00024 #include "apidefs.h"
00025 #include "hdr.h"
00026 #include <string>
00027 #include <boost/shared_ptr.hpp>
00028 namespace restcgi {
00029     class env;
00030     class endpoint;
00032     class RESTCGI_API content {
00033     public:
00034         typedef restcgi::content_hdr hdr_type; 
00035         virtual ~content();
00036         const hdr_type& hdr() const {return hdr_;} 
00037     protected:
00038         content(const boost::shared_ptr<endpoint>& ep, const hdr_type& h); 
00039         boost::shared_ptr<endpoint> endpoint_; 
00040     private:
00041         hdr_type hdr_;
00042     };
00053     class RESTCGI_API icontent : public content {
00054     public:
00055         typedef boost::shared_ptr<icontent> pointer; 
00056         typedef boost::shared_ptr<const icontent> const_pointer; 
00057         typedef std::istream istream_type; 
00058         ~icontent();
00061         istream_type& istream();
00062     private:
00063         icontent(const icontent&); // inhibit
00064         icontent& operator =(const icontent&); // inhibit
00065         friend class method;
00066         icontent(const boost::shared_ptr<endpoint>& ep, const hdr_type& h);
00067     };
00069     template<typename T> icontent& operator >>(icontent& ic, T& v) {ic.istream() >> v; return ic;}
00077     class RESTCGI_API ocontent : public content {
00078     public:
00079         ~ocontent();
00080         typedef boost::shared_ptr<ocontent> pointer; 
00081         typedef boost::shared_ptr<const ocontent> const_pointer; 
00082         typedef std::ostream ostream_type; 
00083 
00084 
00085         ostream_type& ostream();
00086     private:
00087         ocontent(const ocontent&); // inhibit
00088         ocontent& operator =(const ocontent&); // inhibit
00089         friend class method;
00090         ocontent(const boost::shared_ptr<endpoint>& ep, const hdr_type& h);
00091     };
00093     template<typename T> ocontent& operator <<(ocontent& oc, const T& v) {oc.ostream() << v; return oc;}
00095     inline ocontent& operator <<(ocontent& oc, std::ostream& (*v)(std::ostream&)) {oc.ostream() << v; return oc;}
00096 }
00097 #endif

Generated on Fri May 15 11:27:12 2009 for restcgi by  doxygen 1.4.7