/usr/include/ctemplate/template_dictionary_interface.h is in libctemplate-dev 2.2-4.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 | // Copyright (c) 2008, 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: williasr@google.com (Scott Williams)
//
// This file implements the TemplateDictionaryInterface class. This interface
// forms the root of the TemplateDictionary class tree, but the interface is
// minimal enough to allow other sources of template data. Note that the
// TemplateDictionaryInterface class enumerates the properties expected by
// Template: it doesn't constrain how data gets into the
// TemplateDictionaryInterface class to begin with. For these methods, see
// TemplateDictionary.
//
#ifndef TEMPLATE_TEMPLATE_DICTIONARY_INTERFACE_H_
#define TEMPLATE_TEMPLATE_DICTIONARY_INTERFACE_H_
#include <stdlib.h>
#include <string>
#include <ctemplate/template_string.h>
namespace ctemplate {
const int kIndent = 2; // num spaces to indent each level -- used with dump
// TemplateDictionaryInterface
// The template data contains the associated values for
// variables, the hidden/visible state for sections and included
// templates, the associated set of dictionaries for sections and
// included templates, and the template filenames to be expanded in
// place of template-include nodes.
class TemplateDictionaryInterface {
public:
// TemplateDictionaryInterface destructor
virtual ~TemplateDictionaryInterface() {}
protected:
// The interface as follows is used at expand-time by Expand.
friend class VariableTemplateNode;
friend class SectionTemplateNode;
friend class TemplateTemplateNode;
// This class reaches into our internals for testing.
friend class TemplateDictionaryPeer;
friend class TemplateDictionaryPeerIterator;
// GetSectionValue
// Returns the value of a variable.
virtual TemplateString GetValue(const TemplateString& variable) const = 0;
// IsHiddenSection
// A predicate to indicate the current hidden/visible state of a section
// whose name is passed to it.
virtual bool IsHiddenSection(const TemplateString& name) const = 0;
// Dump a string representation of this dictionary to the supplied string.
virtual void DumpToString(std::string* out, int level) const = 0;
// TemplateDictionaryInterface is an abstract class, so its constructor is
// only visible to its subclasses.
TemplateDictionaryInterface() {}
class Iterator {
protected:
Iterator() { }
public:
virtual ~Iterator() { }
// Returns false if the iterator is exhausted.
virtual bool HasNext() const = 0;
// Returns the current referent and increments the iterator to the next.
virtual const TemplateDictionaryInterface& Next() = 0;
};
// IsHiddenTemplate
// Returns true if the template include is hidden. This is analogous to
// IsHiddenSection, but for template nodes.
virtual bool IsHiddenTemplate(const TemplateString& name) const = 0;
// GetIncludeTemplateName
// Returns the name of the template associated with the given template
// include variable. If more than one dictionary is attached to the include
// symbol, dictnum can be used to disambiguate which include name you mean.
virtual const char* GetIncludeTemplateName(
const TemplateString& variable, int dictnum) const = 0;
// CreateTemplateIterator
// A factory method for constructing an iterator representing the
// subdictionaries of the given include node. The caller is
// responsible for deleting the return value when it's done with it.
virtual Iterator* CreateTemplateIterator(
const TemplateString& section) const = 0;
// CreateSectionIterator
// A factory method for constructing an iterator representing the
// subdictionaries of the given section node. The caller is
// responsible for deleting the return value when it's done with it.
virtual Iterator* CreateSectionIterator(
const TemplateString& section) const = 0;
// IsUnhiddenSection
// Returns true if the section has been marked visible and false otherwise.
virtual bool IsUnhiddenSection(
const TemplateString& name) const = 0;
private:
// Disallow copy and assign.
TemplateDictionaryInterface(const TemplateDictionaryInterface&);
void operator=(const TemplateDictionaryInterface&);
};
}
#endif // TEMPLATE_TEMPLATE_DICTIONARY_INTERFACE_H_
|