From 659df12389d2c51fa2ee569d61d6033fbf8a09e0 Mon Sep 17 00:00:00 2001 From: Pixel Date: Fri, 6 Apr 2012 13:50:24 -0700 Subject: Small improvements on the SimpleMustache processor, in order to be able to make it const, and to construct template out of constant strings. --- includes/SimpleMustache.h | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) (limited to 'includes/SimpleMustache.h') diff --git a/includes/SimpleMustache.h b/includes/SimpleMustache.h index 2bb0cb1..6156923 100644 --- a/includes/SimpleMustache.h +++ b/includes/SimpleMustache.h @@ -80,11 +80,13 @@ class SimpleMustache { IO b(new Buffer(str, s)); setTemplate(b); } - void setTemplate(const char * str, ssize_t s = -1) { setTemplate((const uint8_t *) str, s); } + template + void setTemplate(const char str[S]) { setTemplate((const uint8_t *) str, S); } + void setTemplate(const char * str, ssize_t s) { setTemplate((const uint8_t *) str, s); } void setTemplate(const String & str) { setTemplate((const uint8_t *) str.to_charp(), str.strlen()); } - void render(IO h, Context * ctx) { AAssert(ctx, "Please pass on a context to render"); render_r(h, ctx, "", m_fragments.begin(), false, -1); } + void render(IO h, Context * ctx) const { AAssert(ctx, "Please pass on a context to render"); render_r(h, ctx, "", m_fragments.begin(), false, -1); } void empty() { while (!m_fragments.empty()) { delete m_fragments.front(); m_fragments.pop_front(); } } - void checkTemplate() { Fragments::iterator end = checkTemplate_r(m_fragments.begin()); AAssert(end == m_fragments.end(), "The template wasn't fully checked; possibly mismatched sections"); } + void checkTemplate() { Fragments::const_iterator end = checkTemplate_r(m_fragments.begin()); AAssert(end == m_fragments.end(), "The template wasn't fully checked; possibly mismatched sections"); } ~SimpleMustache() { empty(); } private: struct Fragment { @@ -102,10 +104,10 @@ class SimpleMustache { typedef std::list Fragments; Fragments m_fragments; - Fragments::iterator render_r(IO h, Context * ctx, const String & endSection, Fragments::iterator begin, bool noWrite, int forceIdx); - String escape(const String & s); + Fragments::const_iterator render_r(IO h, Context * ctx, const String & endSection, Fragments::const_iterator begin, bool noWrite, int forceIdx) const; + static String escape(const String & s); - Fragments::iterator checkTemplate_r(Fragments::iterator begin, const String & endSection = ""); + Fragments::const_iterator checkTemplate_r(Fragments::const_iterator begin, const String & endSection = "") const; }; }; -- cgit v1.2.3