This file is indexed.

/usr/include/terralib/kernel/TeAbstractFactory.h is in libterralib-dev 4.3.0+dfsg.2-11.

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
/************************************************************************************
TerraLib - a library for developing GIS applications.
Copyright © 2001-2007 INPE and Tecgraf/PUC-Rio.

This code is part of the TerraLib library.
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.

You should have received a copy of the GNU Lesser General Public
License along with this library.

The authors reassure the license terms regarding the warranties.
They specifically disclaim any warranties, including, but not limited to,
the implied warranties of merchantability and fitness for a particular purpose.
The library provided hereunder is on an "as is" basis, and the authors have no
obligation to provide maintenance, support, updates, enhancements, or modifications.
In no event shall INPE and Tecgraf / PUC-Rio be held liable to any party for direct,
indirect, special, incidental, or consequential damages arising out of the use
of this library and its documentation.
*************************************************************************************/
/*! \file TeAbstractFactory.h
	\brief Implements a template for the Abstract Factory pattern
*/
#ifndef  __TERRALIB_INTERNAL_NEW_FACTORY_H
#define  __TERRALIB_INTERNAL_NEW_FACTORY_H

#include "TeDefines.h"
#include <map>
#include <string>

using std::map;
using std::string;

//!  Implements a template for the Abstract Factory pattern.
/*
    This file implements a templated version of the Abstract Factory Pattern 
	See: "Design Patterns - Elements of Reusable Object-Oriented Software", by Gamma et. al
	page 87.
  \author Gilberto Camara, Lúbia Vinhas
*/
template <typename PRODUCT,						// The product to be made
		  typename PARAMS,						// The parameter necessary to make the product
		  typename PRODUCTIDTYPE=std::string>	// The type used to identify the product
class TeAbstractFactory
{
public:

	//! To link each product to its factory
	typedef map<PRODUCTIDTYPE, TeAbstractFactory<PRODUCT,PARAMS,PRODUCTIDTYPE>* > TeFactoryMap; 

	//! Returns the single instance of the factory registration
	static TeFactoryMap& instance()
	{ 
		static TeFactoryMap Fmap_;
		return Fmap_;
	}

protected:

	//!  Builds a new product from a set of parameters (should be implemented by descendants)
    virtual PRODUCT* build(PARAMS* /*arg*/)
	{ 
		return PRODUCT::DefaultObject(); 
	}

 	//!  Builds a new product without parameters (should be implemented by descendants)
   virtual PRODUCT* build()
	{ 
		return PRODUCT::DefaultObject(); 
	}

public:
	//! Factory Constructor
	/*
		\param prodId the identification of the product that the factory produces
	*/
	TeAbstractFactory(PRODUCTIDTYPE prodId);

	//! Destructor
	virtual ~TeAbstractFactory() {}

	//! Virtual constructor: make the product from some arguments
	/*
		\param arg a pointer to an structure that contains the arguments
		necessary to build the product. The type of product has to be extracted
		from the arguments
	*/
	static PRODUCT* make(PARAMS* arg);

	//! Virtual constructor: explictly identifies which product should be made
	static PRODUCT* make(PRODUCTIDTYPE prodId);

private:
	PRODUCTIDTYPE  productIdentification_;
};

// Factor Constructor
template <typename PRODUCT, typename PARAMS, typename PRODUCTIDTYPE>
TeAbstractFactory<PRODUCT,PARAMS,PRODUCTIDTYPE>::TeAbstractFactory(PRODUCTIDTYPE prodId):
	productIdentification_(prodId)
{
	TeAbstractFactory<PRODUCT,PARAMS,PRODUCTIDTYPE>::instance()[prodId] = this;
}

//! Builds an object, based on the input parameters
template <typename PRODUCT, typename PARAMS, typename PRODUCTIDTYPE> 
PRODUCT*
TeAbstractFactory<PRODUCT,PARAMS,PRODUCTIDTYPE>::make(PRODUCTIDTYPE producId)
{
	// try to find the name on the factory dictionary
	typename TeFactoryMap::iterator i = TeAbstractFactory<PRODUCT,PARAMS,PRODUCTIDTYPE>::instance().find(producId);

	// Not found ?  return the Default Object   
	if (i == TeAbstractFactory<PRODUCT,PARAMS,PRODUCTIDTYPE>::instance().end())
		return PRODUCT::DefaultObject();

	// Create an object, based on the input parameters
	return (*i).second->build();
}

//! Builds an object, based on the input parameters
template <typename PRODUCT, typename PARAMS, typename PRODUCTIDTYPE> 
PRODUCT*
TeAbstractFactory<PRODUCT,PARAMS,PRODUCTIDTYPE>::make(PARAMS* arg)
{
	// If there are no arguments or factory identification return the default object
	if (!arg)
		return PRODUCT::DefaultObject();

	PRODUCTIDTYPE productId = arg->getProductId(); 

	// try to find the name on the factory dictionary
	typename TeFactoryMap::iterator i = TeAbstractFactory<PRODUCT,PARAMS,PRODUCTIDTYPE>::instance().find(productId);

	// Not found ?  return the Default Object   
	if (i == TeAbstractFactory<PRODUCT,PARAMS,PRODUCTIDTYPE>::instance().end())
		return PRODUCT::DefaultObject();

	// Create an object, based on the input parameters
		return (*i).second->build(arg);
}
#endif