⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 template_namelist.h

📁 C++ web template engine
💻 H
字号:
// Copyright (c) 2006, Google Inc.// All rights reserved.//// Redistribution and use in source and binary forms, with or without// modification, are permitted provided that the following conditions are// met:////     * Redistributions of source code must retain the above copyright// notice, this list of conditions and the following disclaimer.//     * Redistributions in binary form must reproduce the above// copyright notice, this list of conditions and the following disclaimer// in the documentation and/or other materials provided with the// distribution.//     * Neither the name of Google Inc. nor the names of its// contributors may be used to endorse or promote products derived from// this software without specific prior written permission.//// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.// ---// Author: Frank H. Jernigan//// This class implements some template helper classes, that manage// template files and make it easier to monitor them.//// For information about how to use these classes and macros, and to// write the templates it takes as input, see doc/howto.html#ifndef TEMPLATE_TEMPLATE_NAMELIST_H_#define TEMPLATE_TEMPLATE_NAMELIST_H_#include <time.h>    // for time_t#include <string>#include <vector>#include <hash_set>#include <google/template_enums.h>   // for Strip// NOTE: if you are statically linking the template library into your binary// (rather than using the template .dll), set '/D CTEMPLATE_DLL_DECL='// as a compiler flag in your project file to turn off the dllimports.#ifndef CTEMPLATE_DLL_DECL# define CTEMPLATE_DLL_DECL  __declspec(dllimport)#endif// RegisterTemplateFilename//   Used to define a reference variable for the name of a template file. E.g://        RegisterTemplateFilename(EXAMPLE_FN, "example.tpl");//   This should be used rather than the seemingly equivalent://        #define EXAMPLE_FN "example.tpl"//   As in the latter, any call to GetTemplate may then reference the name//   via the first argument. In the example, that would be://        Template::GetTemplate(EXAMPLE_FN, DO_NOT_STRIP);//   By using this macro, rather than the #define, all templates can//   later be tested for either existence or correct syntax after program//   start-up.// TODO (we wish): Make this macro produce the #include for the auto-generated// header files, when and if the macro pre-processor supports that#define RegisterTemplateFilename(var, name)         \  const char* const var = google::TemplateNamelist::RegisterTemplate(name);namespace google {// Class: TemplateNamelist//   Each time this class is instantiated, the name passed to//   the constructor is added to the class's static list of names. The//   entire list may be retrieved later by calling the GetList accessor//   method. Or they may all be checked for existence or for correct//   syntax via the other methods. We use this in our//   sanity-checking code to make sure all the templates used by a program//   exist and are syntactically correct.class CTEMPLATE_DLL_DECL TemplateNamelist {  friend class TemporaryRegisterTemplate; private:  // Standard hash_compare libs don't define hash_compare<string>, but do define hash_compare<char*>  struct TemplateHasher {    size_t operator()(const std::string& s) const {      return stdext::hash_compare<const char*>()(s.c_str());    }    // Less operator for MSVC's hash_compare containers.    bool operator()(const std::string& a, const std::string& b) const {      return a < b;    }    // These two public members are required by msvc.  4 and 8 are defaults.    static const size_t bucket_size = 4;    static const size_t min_buckets = 8;  }; public:  // These types should be taken as 'generic' containers.  The only  // thing you should do with them is call size() and/or iterate  // between begin() and end(), and the only operations we promise  // the iterators will support are operator* and operator++.  typedef stdext::hash_set<std::string, TemplateHasher> NameListType;  typedef std::vector<std::string> MissingListType;  typedef std::vector<std::string> SyntaxListType; public:  // Takes a name and pushes it onto the static namelist  // Returns: a pointer to the entry in namelist which holds the name  static const char* RegisterTemplate(const char* name);  // GetList  // Description: Returns the collected list of names.  static const NameListType& GetList();  // GetMissingList  //   If refresh is true or if it is the first time the function is called  //   in the execution of the program, it creates (or clears) the missing  //   list and then fills it with the list of  //   templates that the program knows about but are missing from  //   the template directory.  //   If refresh is false and it is not the first time the function is  //   called, it merely returns the list created in the  //   call when the last refresh was done.  //   NOTE: The templates are NOT read, parsed, or cached  //   by this function.  static const MissingListType& GetMissingList(bool refresh);  // GetBadSyntaxList  //   If refresh is true or if it is the first time the function is called  //   in the execution of the program, it creates (or clears) the "bad  //   syntax" list and then fills it with the list of  //   templates that the program knows about but contain syntax errors.  //   A missing file is not considered a syntax error, and thus is  //   not included in this list.  //   If refresh is false and it is not the first time the function is  //   called, it merely returns the list created in the  //   call when the last refresh was done.  //   NOTE: The side effect of calling this the first time or  //   with refresh equal true is that all templates are parsed and cached.  //   Hence they need to be retrieved with the flags that  //   the program needs them loaded with (i.e, the strip parameter  //   passed to Template::GetTemplate.)  static const SyntaxListType& GetBadSyntaxList(bool refresh, Strip strip);  // GetLastmodTime  //   Iterates through all non-missing templates, and returns the latest  //   last-modification time for the template files, as returned by stat().  //   This can be used to make sure template files are getting refreshed.  static time_t GetLastmodTime();  // AllDoExist  //   Retrieves the missing list (always refreshing the list)  //   and returns true if it contains any names.  //   Else, returns false.  static bool AllDoExist();  // IsAllSyntaxOkay  //   Retrieves the "bad syntax" list (always refreshing the list)  //   and returns true if it contains any names.  //   Else, returns false.  //   NOTE: The side effect of calling this is that all templates are parsed  //   and cached, hence they need to be retrieved with the flags that  //   the program needs them loaded with. (I.e, the strip parameter  //   ultimately passed to Template::GetTemplate.)  static bool IsAllSyntaxOkay(Strip strip); protected:  // The static list of names  static NameListType *namelist_;  static MissingListType *missing_list_;  static SyntaxListType *bad_syntax_list_; private:  TemplateNamelist(const TemplateNamelist&);   // disallow copying  void operator=(const TemplateNamelist&);};}#endif  // TEMPLATE_TEMPLATE_NAMELIST_H_

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -