$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r61444 - in sandbox/SOC/2007/cgi/trunk: boost/cgi/connections boost/cgi/utility libs/cgi/example/fcgi/stencil
From: lists.drrngrvy_at_[hidden]
Date: 2010-04-20 19:59:56
Author: drrngrvy
Date: 2010-04-20 19:59:55 EDT (Tue, 20 Apr 2010)
New Revision: 61444
URL: http://svn.boost.org/trac/boost/changeset/61444
Log:
Tweaks to the Stencil wrapper to support cTemplate 0.97. Breaks backwards compatibility (ie. will not work with cTemplate 0.96 or earlier).
Text files modified: 
   sandbox/SOC/2007/cgi/trunk/boost/cgi/connections/anonymous_pipe.hpp |     1                                         
   sandbox/SOC/2007/cgi/trunk/boost/cgi/utility/stencil.hpp            |    65 ++++++++++++++------------------------- 
   sandbox/SOC/2007/cgi/trunk/libs/cgi/example/fcgi/stencil/main.cpp   |     2                                         
   3 files changed, 24 insertions(+), 44 deletions(-)
Modified: sandbox/SOC/2007/cgi/trunk/boost/cgi/connections/anonymous_pipe.hpp
==============================================================================
--- sandbox/SOC/2007/cgi/trunk/boost/cgi/connections/anonymous_pipe.hpp	(original)
+++ sandbox/SOC/2007/cgi/trunk/boost/cgi/connections/anonymous_pipe.hpp	2010-04-20 19:59:55 EDT (Tue, 20 Apr 2010)
@@ -17,7 +17,6 @@
 #include "boost/cgi/import/io_service.hpp"
 #include "boost/cgi/detail/push_options.hpp"
 #include "boost/cgi/common/connection_base.hpp"
-
 #include "boost/cgi/common/protocol_traits.hpp"
 
 //////////////////////////////////////////////////////////////////////////
Modified: sandbox/SOC/2007/cgi/trunk/boost/cgi/utility/stencil.hpp
==============================================================================
--- sandbox/SOC/2007/cgi/trunk/boost/cgi/utility/stencil.hpp	(original)
+++ sandbox/SOC/2007/cgi/trunk/boost/cgi/utility/stencil.hpp	2010-04-20 19:59:55 EDT (Tue, 20 Apr 2010)
@@ -213,16 +213,18 @@
 public:
   typedef stencil                       self_type;
   typedef boost::cgi::common::response  base_type;
-  typedef ctemplate::Template           stencil_type;
   typedef ctemplate::TemplateDictionary impl_type;
   typedef stencils::section             section;
   typedef stencils::dictionary          dictionary;
   
   enum reload_option
   {
+    // Don't reload templates from disk.
     cached,
-    reload,
-    reload_all
+    // Reload templates from disk as and when required.
+    lazy_reload = ctemplate::TemplateCache::LAZY_RELOAD,
+    // Reload all templates in the cache now.
+    immediate_reload = ctemplate::TemplateCache::IMMEDIATE_RELOAD
   };
   
   enum strip
@@ -232,49 +234,33 @@
     strip_whitespace = ctemplate::STRIP_WHITESPACE
   };
 
-  enum parse_state
-  {
-    unused = ctemplate::TS_UNUSED,
-    empty = ctemplate::TS_EMPTY,
-    error = ctemplate::TS_ERROR,
-    ready = ctemplate::TS_READY,
-    should_reload = ctemplate::TS_SHOULD_RELOAD
-  };
- 
   stencil(impl_type* parent_dict)
-    : tmpl(NULL)
-    , impl(parent_dict->MakeCopy("response"))
+    : impl(parent_dict->MakeCopy("response"))
     , expanded(false)
     , per_expand_data()
   {
   }
   
   stencil(string_type const& root_dir = "")
-    : tmpl(NULL)
-    , impl(new impl_type("response"))
+    : impl(new impl_type("response"))
     , expanded(false)
     , per_expand_data()
   {
     if (!root_dir.empty())
-      ctemplate::Template::SetTemplateRootDirectory(root_dir);
+      ctemplate::mutable_default_template_cache()
+        ->SetTemplateRootDirectory(root_dir);
   }
   
   /// Clear the response buffer.
   void reset(impl_type* use_dict = NULL)
   {
     impl.reset(use_dict ? use_dict : new impl_type("response"));
-    tmpl = NULL;
     base_type::reset();
   }
   
   /// Get the implementation type of the template.
   impl_type& native() { return *impl; }
   
-  parse_state state()
-  {
-    return tmpl ? (parse_state)tmpl->state() : unused;
-  }
-
   bool expand(
       string_type const& template_name,
       enum reload_option reload_if_changed = cached,
@@ -286,29 +272,25 @@
     // Clear the response body (but not headers).
     clear(false);
 
-    if (reload_if_changed == reload_all)
-      ctemplate::Template::ReloadAllIfChanged();
-
-    // Get hold of the template to output.
-    tmpl = ctemplate::Template::GetTemplate(
-              template_name,
-              (ctemplate::Strip)strip_option
-           );
-
-    if (!tmpl || state() == error)
-      throw template_error(template_name);
-    else
-    if (reload_if_changed == reload)
-      tmpl->ReloadIfChanged();
-
     // Add the response content back into the template.
     set("content", content);
-    
-    // Expand the template and write it to the response.
+
+    if (reload_if_changed != cached)
+      ctemplate::mutable_default_template_cache()->ReloadAllIfChanged(
+        (ctemplate::TemplateCache::ReloadType)reload_if_changed);
+
     string_type body;
-    bool success = tmpl->ExpandWithData(&body, impl.get(), &per_expand_data);
+    bool success = ctemplate::ExpandWithData(
+        template_name,                   // The filename
+        (ctemplate::Strip)strip_option,
+        impl.get(),                      // The dictionary
+        &per_expand_data,
+        &body
+      );
+
     if (!success)
       return false;
+
     write(body);
 
     // All ok.
@@ -385,7 +367,6 @@
     return *this;
   }
 
-  stencil_type* tmpl;
   boost::scoped_ptr<impl_type> impl;
   bool expanded;
   ctemplate::PerExpandData per_expand_data;
Modified: sandbox/SOC/2007/cgi/trunk/libs/cgi/example/fcgi/stencil/main.cpp
==============================================================================
--- sandbox/SOC/2007/cgi/trunk/libs/cgi/example/fcgi/stencil/main.cpp	(original)
+++ sandbox/SOC/2007/cgi/trunk/libs/cgi/example/fcgi/stencil/main.cpp	2010-04-20 19:59:55 EDT (Tue, 20 Apr 2010)
@@ -106,7 +106,7 @@
   // Expand the response using the specified template.
   // cTemplate has a cache internally, which we can choose to
   // ignore.
-  resp.expand("stencil.html", stencil::reload);
+  resp.expand("stencil.html", stencil::lazy_reload);
 
   // Send the response and close the request.
   return commit(req, resp);