This file is indexed.

/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_