This file is indexed.

/usr/include/sigx-2.0/sigx/signal_traits.h is in libsigx-2.0-dev 2.0.2-1build1.

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
#ifndef _SIGX_SIGNAL_TYPE_TRAIT_HPP_
#define _SIGX_SIGNAL_TYPE_TRAIT_HPP_

/*
 * Copyright 2005 Klaus Triendl
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Library General Public
 * License as published by the Free Software Foundation; either
 * version 2 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Library General Public License for more details.
 *
 * You should have received a copy of the GNU Library General Public
 * License along with this library; if not, write to the Free 
 * Software Foundation, 51 Franklin Street, Fifth Floor, 
 * Boston, MA 02110-1301, USA.
 */

#include <sigc++/signal_base.h>
#include <glibmm/signalproxy.h>


namespace sigx
{

	namespace internal
	{

struct derivation_helper
{
	typedef char sm;
	struct middle {
		char memory[32];
	};
	struct big {
		char memory[64];
	};

	enum Type
	{
		NOBASE = sizeof(sm), 
		BASE1 = sizeof(middle), 
		BASE2 = sizeof(big)
	};
};

/**	@short Compile-time determination of base-class relationship in C++.
 *	
 *	Tests from what base class @e T_derived derives. T_derived must not derive
 *	from both classes.
 *	@note inspired by sigc::is_base_and_derived
 *	@author klaus triendl
 *	@date 2006-09-11, kj	created
 */
template<typename T_derived, typename T_base1, typename T_base2>
struct is_derived_from
{
private:
#ifndef SIGC_SELF_REFERENCE_IN_MEMBER_INITIALIZATION

	//Certain compilers, notably GCC 3.2, require these functions to be inside an inner class.
	struct internal_class
	{
		static derivation_helper::sm is_base_class_(...);
		static derivation_helper::middle is_base_class_(typename sigc::type_trait<T_base1>::pointer);
		static derivation_helper::big is_base_class_(typename sigc::type_trait<T_base2>::pointer);
	};

public:
	static const int value =
		sizeof(internal_class::is_base_class_(reinterpret_cast<typename sigc::type_trait<T_derived>::pointer>(0)));

#else //SIGC_SELF_REFERENCE_IN_MEMBER_INITIALIZATION

	//The AIX xlC compiler does not like these 2 functions being in the inner class.
	//It says "The incomplete type "test" must not be used as a qualifier.
	//It does not seem necessary anyway. murrayc.
	static derivation_helper::sm is_base_class_(...);
	static derivation_helper::middle is_base_class_(typename sigc::type_trait<T_base1>::pointer);
	static derivation_helper::big is_base_class_(typename sigc::type_trait<T_base2>::pointer);

public:
	static const int value =
		sizeof(is_base_class_(reinterpret_cast<typename sigc::type_trait<T_derived>::pointer>(0)));

#endif //SIGC_SELF_REFERENCE_IN_MEMBER_INITIALIZATION

 	void avoid_gcc3_warning_(); //Not implemented. g++ 3.3.5 (but not 3.3.4, and not 3.4) warn that there are no public methods, even though there is a public variable.
};


enum signal_group
{
	SIGGROUP_IRRELEVANT, 
	SIGGROUP_SIGC, 
	SIGGROUP_GLIB_PROXY
};


/**	@short Trait to group signal types.
 *	@note We could use specializations for all signals like 
 *	count_signal_arguments does. But by finding the baseclass we can reduce 
 *	the specializations.
 */
template<typename T_signal, int I_oneof = is_derived_from<T_signal, sigc::signal_base, Glib::SignalProxyNormal>::value>
struct signal_type_trait
{
	static const signal_group type = SIGGROUP_IRRELEVANT;
};

/**	@short Specialization for sigc::signal_base derived signals
 */
template<typename T_signal>
struct signal_type_trait<T_signal, derivation_helper::BASE1>
{
	static const signal_group type = SIGGROUP_SIGC;
};

/**	@short Specialization for Glib::SignalProxyNormal derived signals
 */
template<typename T_signal>
struct signal_type_trait<T_signal, derivation_helper::BASE2>
{
	static const signal_group type = SIGGROUP_GLIB_PROXY;
};


	} // namespace internal

} // namespace sigx


#endif // end file guard