You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							681 lines
						
					
					
						
							23 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							681 lines
						
					
					
						
							23 KiB
						
					
					
				
								############################################################
							 | 
						|
								
							 | 
						|
								# Created: 21st June 2005
							 | 
						|
								# Updated: 10th January 2011
							 | 
						|
								
							 | 
						|
								require 'recls'				# Download from http://synesis.com.au/software
							 | 
						|
								require 'synsoft/srcutil'	# Download from http://synesis.com.au/software
							 | 
						|
								
							 | 
						|
								############################################################
							 | 
						|
								# functions
							 | 
						|
								
							 | 
						|
								def declare_template_parameter_list(f, i)
							 | 
						|
								
							 | 
						|
									if false
							 | 
						|
										f << "template< typename T0" << ENDL
							 | 
						|
										(1 ... i).each do |j|
							 | 
						|
											f << "        , typename T#{j}" << ENDL
							 | 
						|
										end
							 | 
						|
										f << "        >" << ENDL
							 | 
						|
									else
							 | 
						|
										s = "template<typename T0";
							 | 
						|
										(1 ... i).each do |j|
							 | 
						|
											s = s + ", typename T#{j}"
							 | 
						|
										end
							 | 
						|
										s = s + ">"
							 | 
						|
										f << s << ENDL
							 | 
						|
									end
							 | 
						|
								
							 | 
						|
								end # declare_template_parameter_list
							 | 
						|
								
							 | 
						|
								def declare_function_parameter_list(f, from, to)
							 | 
						|
								
							 | 
						|
									if false
							 | 
						|
										(from ... to - 1).each do |j| 
							 | 
						|
											f << "              , T#{j} const    &v#{j}" << ENDL
							 | 
						|
										end
							 | 
						|
										f << "              , T#{to - 1} const    &v#{to - 1})" << ENDL
							 | 
						|
									else
							 | 
						|
										s = "              "
							 | 
						|
										(from ... to - 1).each do |j| 
							 | 
						|
											s = s + ", T#{j} const& v#{j}"
							 | 
						|
										end
							 | 
						|
										s = s + ", T#{to - 1} const& v#{to - 1})"
							 | 
						|
										f << s << ENDL
							 | 
						|
									end
							 | 
						|
								
							 | 
						|
								end # declare_function_parameter_list
							 | 
						|
								
							 | 
						|
								def round_up(n, granularity)
							 | 
						|
								
							 | 
						|
									((n + (granularity - 1)) / granularity) * granularity
							 | 
						|
								
							 | 
						|
								end
							 | 
						|
								
							 | 
						|
								############################################################
							 | 
						|
								
							 | 
						|
								numParams			=	32
							 | 
						|
								
							 | 
						|
								if ARGV.length > 0
							 | 
						|
									n = Integer(ARGV[0])
							 | 
						|
								
							 | 
						|
									if n > 0 && n < 256
							 | 
						|
										numParams = n
							 | 
						|
									end
							 | 
						|
								end
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								NUM_PARAMS			=	numParams
							 | 
						|
								PARAM_RANGE			=	(1 .. NUM_PARAMS)
							 | 
						|
								TAB_SIZE			=	1 #4
							 | 
						|
								TAB					=	" " * TAB_SIZE
							 | 
						|
								SHORT_ARG_LMARGIN	=	2
							 | 
						|
								
							 | 
						|
								USE_USING_DECLARATION	=	true
							 | 
						|
								USE_SHIM_PAIR_MACRO		=	true
							 | 
						|
								USE_SHORT_ARG_LMARGIN	=	true
							 | 
						|
								
							 | 
						|
								INITIALISERS_INLINE		=	true
							 | 
						|
								#CALL_LMARGIN			=	"                        "
							 | 
						|
								#CALL_LMARGIN			=	"      "
							 | 
						|
								CALL_LMARGIN			=	"#{TAB}#{TAB}"
							 | 
						|
								
							 | 
						|
								PARAMS_LIMIT_SYMBOL		=	"PANTHEIOS_APPL_PARAMS_LIMIT"
							 | 
						|
								
							 | 
						|
								SEVERITY_LEVELS			=	%w{ EMERGENCY ALERT CRITICAL ERROR WARNING NOTICE INFORMATIONAL DEBUG }
							 | 
						|
								
							 | 
						|
								############################################################
							 | 
						|
								
							 | 
						|
								d	=	Recls::stat(".")
							 | 
						|
								
							 | 
						|
								if d.fileName == "scripts"
							 | 
						|
										d = Recls::stat("../include/pantheios")
							 | 
						|
								end
							 | 
						|
								
							 | 
						|
								if !d or d.fileName != "pantheios"
							 | 
						|
										abort "Not running in the correct directory; needs to be /???/include/pantheios"
							 | 
						|
								end
							 | 
						|
								
							 | 
						|
								SEP		=	Recls::pathNameSeparator
							 | 
						|
								ENDL	=	"\n"
							 | 
						|
								
							 | 
						|
								C_LOG_FUNCTIONS_HEADER_NAME					=	"internal/generated/log_functions.h"
							 | 
						|
								C_LOG_FUNCTIONS_IMPL_NAME					=	"internal/generated/log_functions.c"
							 | 
						|
								C_LOG_DISPATCH_FUNCTIONS_HEADER_NAME		=	"internal/generated/log_dispatch_functions.h"
							 | 
						|
								Cpp_LOG_DISPATCH_FUNCTIONS_HEADER_NAME		=	"internal/generated/log_dispatch_functions.hpp"
							 | 
						|
								Cpp_LOG_FUNCTIONS_HEADER_NAME				=	"internal/generated/log_functions.hpp"
							 | 
						|
								Cpp_LOG_SEV_FUNCTIONS_HEADER_NAME			=	"internal/generated/log_sev_functions.hpp"
							 | 
						|
								
							 | 
						|
								C_LOG_FUNCTIONS_HEADER						=	"#{d.path}#{SEP}" + C_LOG_FUNCTIONS_HEADER_NAME.gsub('/', SEP)
							 | 
						|
								C_LOG_FUNCTIONS_IMPL						=	"#{d.path}#{SEP}" + C_LOG_FUNCTIONS_IMPL_NAME.gsub('/', SEP)
							 | 
						|
								C_LOG_DISPATCH_FUNCTIONS_HEADER				=	"#{d.path}#{SEP}" + C_LOG_DISPATCH_FUNCTIONS_HEADER_NAME.gsub('/', SEP)
							 | 
						|
								Cpp_LOG_DISPATCH_FUNCTIONS_HEADER			=	"#{d.path}#{SEP}" + Cpp_LOG_DISPATCH_FUNCTIONS_HEADER_NAME.gsub('/', SEP)
							 | 
						|
								Cpp_LOG_FUNCTIONS_HEADER					=	"#{d.path}#{SEP}" + Cpp_LOG_FUNCTIONS_HEADER_NAME.gsub('/', SEP)
							 | 
						|
								Cpp_LOG_SEV_FUNCTIONS_HEADER				=	"#{d.path}#{SEP}" + Cpp_LOG_SEV_FUNCTIONS_HEADER_NAME.gsub('/', SEP)
							 | 
						|
								
							 | 
						|
								num_pantheios_log_N_declarations			=	0
							 | 
						|
								num_pantheios_log_N_no_test_declarations	=	0
							 | 
						|
								num_pantheios_log_N_no_test_definitions		=	0
							 | 
						|
								num_pantheios_log_N_definitions				=	0
							 | 
						|
								num_log_dispatch_N_definitions				=	0
							 | 
						|
								num_log_definitions							=	0
							 | 
						|
								num_log_sev_definitions						=	0
							 | 
						|
								
							 | 
						|
								############################################################
							 | 
						|
								# C_LOG_FUNCTIONS_HEADER_NAME
							 | 
						|
								puts C_LOG_FUNCTIONS_HEADER_NAME
							 | 
						|
								
							 | 
						|
								f	=	File::new(C_LOG_FUNCTIONS_HEADER, "w")
							 | 
						|
								
							 | 
						|
								f << "/* /////////////////////////////////////////////////////////////////////////" << "" << ENDL
							 | 
						|
								f << " * File:        pantheios/" << C_LOG_FUNCTIONS_HEADER_NAME << "" << ENDL
							 | 
						|
								f << " *" << "" << ENDL
							 | 
						|
								f << " * Purpose:     Declarations of the pantheios_log_<N>() functions" << ENDL
							 | 
						|
								f << " *" << "" << ENDL
							 | 
						|
								f << " * Generated:   #{SrcUtil::currentDate}" << "" << ENDL
							 | 
						|
								f << " *" << "" << ENDL
							 | 
						|
								f << " * Status:      This file is auto-generated: DO NOT EDIT!" << "" << ENDL
							 | 
						|
								f << " *" << "" << ENDL
							 | 
						|
								f << " * Copyright:   The copyright restrictions of the Pantheios library," << "" << ENDL
							 | 
						|
								f << " *              enumerated in the header file <pantheios/pantheios.h>," << "" << ENDL
							 | 
						|
								f << " *              apply to this file" << "" << ENDL
							 | 
						|
								f << " *" << "" << ENDL
							 | 
						|
								f << " * ////////////////////////////////////////////////////////////////////// */" << "" << ENDL
							 | 
						|
								f << "" << ENDL
							 | 
						|
								# f << "/** \\file pantheios/#{C_LOG_FUNCTIONS_HEADER_NAME} [C, C++] INTERNAL, AUTO-GENERATED FILE: Do not include directly */" << ENDL
							 | 
						|
								f << "" << ENDL
							 | 
						|
								
							 | 
						|
								f << "#ifndef PANTHEIOS_INCLUDING_C_API_FUNCTIONS" << "" << ENDL
							 | 
						|
								f << "# error This file is included by the Pantheios API, and cannot be included directly" << "" << ENDL
							 | 
						|
								f << "#endif /* !PANTHEIOS_INCLUDING_C_API_FUNCTIONS */" << "" << ENDL
							 | 
						|
								f << "" << ENDL
							 | 
						|
								
							 | 
						|
								f << "#define PANTHEIOS_APPL_PARAMS_LIMIT_MAX_GENERATED   (#{NUM_PARAMS})" << "" << ENDL
							 | 
						|
								f << "" << ENDL
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								PARAM_RANGE.each do |i|
							 | 
						|
										sig 	= 	"PANTHEIOS_CALL(int) pantheios_log_#{i}("
							 | 
						|
										if USE_SHORT_ARG_LMARGIN
							 | 
						|
												len		=	SHORT_ARG_LMARGIN
							 | 
						|
										else
							 | 
						|
												len		=	round_up(sig.length, TAB_SIZE)
							 | 
						|
										end
							 | 
						|
										len0	=	len - TAB_SIZE
							 | 
						|
										sig		=	sig.ljust(len)
							 | 
						|
										plural	=	(i > 1) ? "s" : ""
							 | 
						|
								
							 | 
						|
										# Documentation comment
							 | 
						|
								
							 | 
						|
										f << "/** Logs #{i} parameter#{plural}, subject to external (not in \\ref group__core_library) severity-level filtering " << ENDL
							 | 
						|
										f << " * \\ingroup group__application_layer_interface__generated" << ENDL
							 | 
						|
										f << " */" << ENDL
							 | 
						|
								
							 | 
						|
								
							 | 
						|
										# Function signature
							 | 
						|
								
							 | 
						|
										f << "#{sig}pan_sev_t severity" << ENDL
							 | 
						|
										(0 ... i). each do |j|
							 | 
						|
												f << "".ljust(len0) + ", pan_char_t const* p#{j}, int l#{j} /* -1 => 'strlen(p#{j})' */" << ENDL
							 | 
						|
										end
							 | 
						|
										f << ");" << ENDL;
							 | 
						|
										f << "" << ENDL
							 | 
						|
								
							 | 
						|
										num_pantheios_log_N_declarations = 1 + num_pantheios_log_N_declarations
							 | 
						|
								end
							 | 
						|
								
							 | 
						|
								f.close()
							 | 
						|
								f = nil
							 | 
						|
								
							 | 
						|
								############################################################
							 | 
						|
								# C_LOG_FUNCTIONS_IMPL_NAME
							 | 
						|
								puts C_LOG_FUNCTIONS_IMPL_NAME
							 | 
						|
								
							 | 
						|
								f	=	File::new(C_LOG_FUNCTIONS_IMPL, "w")
							 | 
						|
								
							 | 
						|
								f << "/* /////////////////////////////////////////////////////////////////////////" << "" << ENDL
							 | 
						|
								f << " * File:        pantheios/" << C_LOG_FUNCTIONS_IMPL_NAME << "" << ENDL
							 | 
						|
								f << " *" << "" << ENDL
							 | 
						|
								f << " * Purpose:     Definitions of the pantheios_log_<N>() and" << ENDL
							 | 
						|
								f << " *              pantheios_log_<N>_no_test() functions" << ENDL
							 | 
						|
								f << " *" << "" << ENDL
							 | 
						|
								f << " * Generated:   #{SrcUtil::currentDate}" << "" << ENDL
							 | 
						|
								f << " *" << "" << ENDL
							 | 
						|
								f << " * Status:      This file is auto-generated: DO NOT EDIT!" << "" << ENDL
							 | 
						|
								f << " *" << "" << ENDL
							 | 
						|
								f << " * Copyright:   The copyright restrictions of the Pantheios library," << "" << ENDL
							 | 
						|
								f << " *              enumerated in the header file <pantheios/pantheios.h>," << "" << ENDL
							 | 
						|
								f << " *              apply to this file" << "" << ENDL
							 | 
						|
								f << " *" << "" << ENDL
							 | 
						|
								f << " * ////////////////////////////////////////////////////////////////////// */" << "" << ENDL
							 | 
						|
								f << "" << ENDL
							 | 
						|
								# f << "/** \\file pantheios/#{C_LOG_FUNCTIONS_IMPL_NAME} [C++ only] INTERNAL, AUTO-GENERATED FILE: Do not include directly */" << ENDL
							 | 
						|
								f << "" << ENDL
							 | 
						|
								
							 | 
						|
								f << "#ifndef __cplusplus" << ENDL
							 | 
						|
								f << "# error This file cannot be used independently, nor as part of a C compilation unit. It should only be included from within pantheios_core.cpp" << ENDL
							 | 
						|
								f << "#endif /* __cplusplus */" << ENDL
							 | 
						|
								f << "" << ENDL
							 | 
						|
								f << "" << ENDL
							 | 
						|
								
							 | 
						|
								PARAM_RANGE.each do |i|
							 | 
						|
										sig 	= 	"PANTHEIOS_CALL(int) pantheios_log_#{i}_no_test("
							 | 
						|
										if USE_SHORT_ARG_LMARGIN
							 | 
						|
												len		=	SHORT_ARG_LMARGIN
							 | 
						|
										else
							 | 
						|
												len		=	round_up(sig.length, TAB_SIZE)
							 | 
						|
										end
							 | 
						|
										len0	=	len - TAB_SIZE
							 | 
						|
										sig		=	sig.ljust(len)
							 | 
						|
								
							 | 
						|
										f << "#{sig}pan_sev_t severity" << ENDL
							 | 
						|
										(0 ... i - 1). each do |j|
							 | 
						|
											f << "".ljust(len0) + ", pan_slice_t const& slice#{j}" << ENDL
							 | 
						|
										end
							 | 
						|
										f << "".ljust(len0) + ", pan_slice_t const& slice#{i - 1})" << ENDL
							 | 
						|
										f << "{" << ENDL
							 | 
						|
										f << "#{TAB}const pan_slice_t slices[#{i}] =" << ENDL
							 | 
						|
										f << "#{TAB}{" << ENDL
							 | 
						|
										if INITIALISERS_INLINE
							 | 
						|
											f << "#{TAB}#{TAB}slice0"
							 | 
						|
											(1 ... i). each do |j|
							 | 
						|
												f << ", slice#{j}"
							 | 
						|
											end
							 | 
						|
											f << "" << ENDL
							 | 
						|
										else
							 | 
						|
											f << "#{TAB}#{TAB}  slice0" << ENDL
							 | 
						|
											(1 ... i). each do |j|
							 | 
						|
												f << "#{TAB}#{TAB}, slice#{j}" << ENDL
							 | 
						|
											end
							 | 
						|
										end
							 | 
						|
										f << "#{TAB}};" << ENDL
							 | 
						|
										f << "" << ENDL
							 | 
						|
										f << "#{TAB}return pantheios_log_n(severity, STLSOFT_NUM_ELEMENTS(slices), slices);" << ENDL
							 | 
						|
										f << "}" << ENDL
							 | 
						|
										f << "" << ENDL
							 | 
						|
								
							 | 
						|
										num_pantheios_log_N_no_test_definitions = 1 + num_pantheios_log_N_no_test_definitions
							 | 
						|
								end
							 | 
						|
								
							 | 
						|
								PARAM_RANGE.each do |i|
							 | 
						|
										sig 	= 	"PANTHEIOS_CALL(int) pantheios_log_#{i}("
							 | 
						|
										if USE_SHORT_ARG_LMARGIN
							 | 
						|
												len		=	SHORT_ARG_LMARGIN
							 | 
						|
										else
							 | 
						|
												len		=	round_up(sig.length, TAB_SIZE)
							 | 
						|
										end
							 | 
						|
										len0	=	len - TAB_SIZE
							 | 
						|
										sig		=	sig.ljust(len)
							 | 
						|
										f << "#{sig}pan_sev_t severity" << ENDL
							 | 
						|
										(0 ... i - 1). each do |j|
							 | 
						|
												f << "".ljust(len0) + ", pan_char_t const* p#{j}, int l#{j}" << ENDL
							 | 
						|
										end
							 | 
						|
										f << "".ljust(len0) + ", pan_char_t const* p#{i - 1}, int l#{i - 1})" << ENDL
							 | 
						|
										f << "{" << ENDL
							 | 
						|
										f << "#{TAB}if(!pantheios_isSeverityLogged(severity))" << ENDL
							 | 
						|
										f << "#{TAB}{" << ENDL
							 | 
						|
										f << "#{TAB}#{TAB}#{TAB}return 0;" << ENDL
							 | 
						|
										f << "#{TAB}}" << ENDL
							 | 
						|
										f << "#{TAB}else" << ENDL
							 | 
						|
										f << "#{TAB}{" << ENDL
							 | 
						|
										f << "#{TAB}#{TAB}const pan_slice_t slices[#{i}] =" << ENDL
							 | 
						|
										f << "#{TAB}#{TAB}{" << ENDL
							 | 
						|
										if INITIALISERS_INLINE
							 | 
						|
											f << "#{TAB}#{TAB}#{TAB}pan_slice_t(l0, p0)"
							 | 
						|
										else
							 | 
						|
											f << "#{TAB}#{TAB}#{TAB}pan_slice_t(l0, p0)" << ENDL
							 | 
						|
										end
							 | 
						|
										(1 ... i). each do |j|
							 | 
						|
											if INITIALISERS_INLINE
							 | 
						|
												f << ", pan_slice_t(l#{j}, p#{j})"
							 | 
						|
											else
							 | 
						|
												f << "#{TAB}#{TAB}#{TAB}, pan_slice_t(l#{j}, p#{j})" << ENDL
							 | 
						|
											end
							 | 
						|
										end
							 | 
						|
										if INITIALISERS_INLINE
							 | 
						|
											f << "" << ENDL
							 | 
						|
										end
							 | 
						|
										f << "#{TAB}#{TAB}};" << ENDL
							 | 
						|
										f << "" << ENDL
							 | 
						|
										f << "#{TAB}#{TAB}return pantheios_log_n(severity, STLSOFT_NUM_ELEMENTS(slices), slices);" << ENDL
							 | 
						|
										f << "#{TAB}}" << ENDL
							 | 
						|
										f << "}" << ENDL
							 | 
						|
										f << "" << ENDL
							 | 
						|
								
							 | 
						|
										num_pantheios_log_N_definitions = 1 + num_pantheios_log_N_definitions
							 | 
						|
								end
							 | 
						|
								
							 | 
						|
								f.close()
							 | 
						|
								f = nil
							 | 
						|
								
							 | 
						|
								############################################################
							 | 
						|
								# C_LOG_DISPATCH_FUNCTIONS_HEADER_NAME
							 | 
						|
								puts C_LOG_DISPATCH_FUNCTIONS_HEADER_NAME
							 | 
						|
								
							 | 
						|
								f	=	File::new(C_LOG_DISPATCH_FUNCTIONS_HEADER, "w")
							 | 
						|
								
							 | 
						|
								f << "/* /////////////////////////////////////////////////////////////////////////" << "" << ENDL
							 | 
						|
								f << " * File:        pantheios/" << C_LOG_DISPATCH_FUNCTIONS_HEADER_NAME << "" << ENDL
							 | 
						|
								f << " *" << "" << ENDL
							 | 
						|
								f << " * Purpose:     Declarations of the pantheios_log_<N>_no_test() functions" << ENDL
							 | 
						|
								f << " *" << "" << ENDL
							 | 
						|
								f << " * Generated:   #{SrcUtil::currentDate}" << "" << ENDL
							 | 
						|
								f << " *" << "" << ENDL
							 | 
						|
								f << " * Status:      This file is auto-generated: DO NOT EDIT!" << "" << ENDL
							 | 
						|
								f << " *" << "" << ENDL
							 | 
						|
								f << " * Copyright:   The copyright restrictions of the Pantheios library," << "" << ENDL
							 | 
						|
								f << " *              enumerated in the header file <pantheios/pantheios.h>," << "" << ENDL
							 | 
						|
								f << " *              apply to this file" << "" << ENDL
							 | 
						|
								f << " *" << "" << ENDL
							 | 
						|
								f << " * ////////////////////////////////////////////////////////////////////// */" << "" << ENDL
							 | 
						|
								f << "" << ENDL
							 | 
						|
								# f << "/** \\file pantheios/#{C_LOG_DISPATCH_FUNCTIONS_HEADER_NAME} [C, C++] INTERNAL, AUTO-GENERATED FILE: Do not include directly */" << ENDL
							 | 
						|
								f << "" << ENDL
							 | 
						|
								
							 | 
						|
								f << "#ifndef PANTHEIOS_INCL_PANTHEIOS_H_PANTHEIOS" << "" << ENDL
							 | 
						|
								f << "# error This file is included by the Pantheios API, and cannot be included directly" << "" << ENDL
							 | 
						|
								f << "#endif /* !PANTHEIOS_INCL_PANTHEIOS_H_PANTHEIOS */" << "" << ENDL
							 | 
						|
								f << "" << ENDL
							 | 
						|
								f << "" << ENDL
							 | 
						|
								
							 | 
						|
								PARAM_RANGE.each do |i|
							 | 
						|
								
							 | 
						|
										sig 	= 	"PANTHEIOS_CALL(int) pantheios_log_#{i}_no_test("
							 | 
						|
										if USE_SHORT_ARG_LMARGIN
							 | 
						|
												len		=	SHORT_ARG_LMARGIN
							 | 
						|
										else
							 | 
						|
												len		=	round_up(sig.length, TAB_SIZE)
							 | 
						|
										end
							 | 
						|
										len0	=	len - TAB_SIZE
							 | 
						|
										sig		=	sig.ljust(len)
							 | 
						|
								
							 | 
						|
										# Template parameter list
							 | 
						|
								
							 | 
						|
										# Function signature
							 | 
						|
								
							 | 
						|
										f << "#{sig}" << ENDL
							 | 
						|
										f << "".ljust(len0) + "  pan_sev_t severity" << ENDL
							 | 
						|
										(0 ... i). each do |j|
							 | 
						|
											f << "".ljust(len0) + ", pan_slice_t const& s#{j}" << ENDL
							 | 
						|
										end
							 | 
						|
										f << ");" << ENDL
							 | 
						|
									
							 | 
						|
										f << "" << ENDL
							 | 
						|
								
							 | 
						|
										num_pantheios_log_N_no_test_declarations = 1 + num_pantheios_log_N_no_test_declarations
							 | 
						|
								end
							 | 
						|
								
							 | 
						|
								f.close()
							 | 
						|
								f = nil
							 | 
						|
								
							 | 
						|
								############################################################
							 | 
						|
								# Cpp_LOG_DISPATCH_FUNCTIONS_HEADER_NAME
							 | 
						|
								puts Cpp_LOG_DISPATCH_FUNCTIONS_HEADER_NAME
							 | 
						|
								
							 | 
						|
								f	=	File::new(Cpp_LOG_DISPATCH_FUNCTIONS_HEADER, "w")
							 | 
						|
								
							 | 
						|
								f << "/* /////////////////////////////////////////////////////////////////////////" << "" << ENDL
							 | 
						|
								f << " * File:        pantheios/" << Cpp_LOG_DISPATCH_FUNCTIONS_HEADER_NAME << "" << ENDL
							 | 
						|
								f << " *" << "" << ENDL
							 | 
						|
								f << " * Purpose:     Inline definitions of the log_dispatch_<N>() functions" << ENDL
							 | 
						|
								f << " *" << "" << ENDL
							 | 
						|
								f << " * Generated:   #{SrcUtil::currentDate}" << "" << ENDL
							 | 
						|
								f << " *" << "" << ENDL
							 | 
						|
								f << " * Status:      This file is auto-generated: DO NOT EDIT!" << "" << ENDL
							 | 
						|
								f << " *" << "" << ENDL
							 | 
						|
								f << " * Copyright:   The copyright restrictions of the Pantheios library," << "" << ENDL
							 | 
						|
								f << " *              enumerated in the header file <pantheios/pantheios.h>," << "" << ENDL
							 | 
						|
								f << " *              apply to this file" << "" << ENDL
							 | 
						|
								f << " *" << "" << ENDL
							 | 
						|
								f << " * ////////////////////////////////////////////////////////////////////// */" << "" << ENDL
							 | 
						|
								f << "" << ENDL
							 | 
						|
								# f << "/** \\file pantheios/#{Cpp_LOG_DISPATCH_FUNCTIONS_HEADER_NAME} [C++ only] INTERNAL, AUTO-GENERATED FILE: Do not include directly */" << ENDL
							 | 
						|
								f << "" << ENDL
							 | 
						|
								
							 | 
						|
								f << "#ifndef PANTHEIOS_INCL_PANTHEIOS_HPP_PANTHEIOS" << "" << ENDL
							 | 
						|
								f << "# error This file is included by the Pantheios API, and cannot be included directly" << "" << ENDL
							 | 
						|
								f << "#endif /* !PANTHEIOS_INCL_PANTHEIOS_HPP_PANTHEIOS */" << "" << ENDL
							 | 
						|
								f << "" << ENDL
							 | 
						|
								f << "" << ENDL
							 | 
						|
								
							 | 
						|
								PARAM_RANGE.each do |i|
							 | 
						|
								
							 | 
						|
										sig 	= 	"inline int log_dispatch_#{i}("
							 | 
						|
										if USE_SHORT_ARG_LMARGIN
							 | 
						|
												len		=	SHORT_ARG_LMARGIN
							 | 
						|
										else
							 | 
						|
												len		=	round_up(sig.length, TAB_SIZE)
							 | 
						|
										end
							 | 
						|
										len0	=	len - TAB_SIZE
							 | 
						|
										sig		=	sig.ljust(len)
							 | 
						|
										plural	=	(i > 1) ? "s" : ""
							 | 
						|
								
							 | 
						|
										# Pre-processor limits
							 | 
						|
										f << "#if #{PARAMS_LIMIT_SYMBOL} >= #{i}" << ENDL << ENDL
							 | 
						|
								
							 | 
						|
										# Template parameter list
							 | 
						|
								
							 | 
						|
										# Function signature
							 | 
						|
								
							 | 
						|
										f << "#{sig}pan_sev_t severity" << ENDL
							 | 
						|
										(0 ... i). each do |j|
							 | 
						|
											f << "".ljust(len0) + ", size_t l#{j}, pan_char_t const* p#{j}" << ENDL
							 | 
						|
										end
							 | 
						|
										f << ")" << ENDL
							 | 
						|
										f << "{" << ENDL
							 | 
						|
										stm		=	"  return pantheios_log_#{i}_no_test("
							 | 
						|
										if USE_SHORT_ARG_LMARGIN
							 | 
						|
												len		=	SHORT_ARG_LMARGIN
							 | 
						|
										else
							 | 
						|
												len		=	round_up(sig.length, TAB_SIZE)
							 | 
						|
										end
							 | 
						|
										len0	=	len - TAB_SIZE
							 | 
						|
										stm = stm.ljust(len)
							 | 
						|
										f << "#{stm}severity" << ENDL
							 | 
						|
										(0 ... i).each do |j|
							 | 
						|
												f << "".ljust(len0) + ", pan_slice_t(p#{j}, l#{j})" << ENDL
							 | 
						|
										end
							 | 
						|
										f << "".ljust(len0) + ");" << ENDL
							 | 
						|
										f << "}" << ENDL
							 | 
						|
										f << "" << ENDL
							 | 
						|
								
							 | 
						|
										num_log_dispatch_N_definitions = 1 + num_log_dispatch_N_definitions
							 | 
						|
								end
							 | 
						|
								PARAM_RANGE.each { |i| f << "#endif /* #{PARAMS_LIMIT_SYMBOL} >= #{NUM_PARAMS - i + 1} */" << ENDL }
							 | 
						|
								
							 | 
						|
								f.close()
							 | 
						|
								f = nil
							 | 
						|
								
							 | 
						|
								############################################################
							 | 
						|
								# Cpp_LOG_FUNCTIONS_HEADER_NAME
							 | 
						|
								puts Cpp_LOG_FUNCTIONS_HEADER_NAME
							 | 
						|
								
							 | 
						|
								f	=	File::new(Cpp_LOG_FUNCTIONS_HEADER, "w")
							 | 
						|
								
							 | 
						|
								f << "/* /////////////////////////////////////////////////////////////////////////" << "" << ENDL
							 | 
						|
								f << " * File:        pantheios/" << Cpp_LOG_FUNCTIONS_HEADER_NAME << "" << ENDL
							 | 
						|
								f << " *" << "" << ENDL
							 | 
						|
								f << " * Purpose:     Definitions of the log() functions" << ENDL
							 | 
						|
								f << " *" << "" << ENDL
							 | 
						|
								f << " * Generated:   #{SrcUtil::currentDate}" << "" << ENDL
							 | 
						|
								f << " *" << "" << ENDL
							 | 
						|
								f << " * Status:      This file is auto-generated: DO NOT EDIT!" << "" << ENDL
							 | 
						|
								f << " *" << "" << ENDL
							 | 
						|
								f << " * Copyright:   The copyright restrictions of the Pantheios library," << "" << ENDL
							 | 
						|
								f << " *              enumerated in the header file <pantheios/pantheios.h>," << "" << ENDL
							 | 
						|
								f << " *              apply to this file" << "" << ENDL
							 | 
						|
								f << " *" << "" << ENDL
							 | 
						|
								f << " * ////////////////////////////////////////////////////////////////////// */" << "" << ENDL
							 | 
						|
								f << "" << ENDL
							 | 
						|
								# f << "/** \\file pantheios/#{Cpp_LOG_FUNCTIONS_HEADER_NAME} [C++ only] INTERNAL, AUTO-GENERATED FILE: Do not include directly */" << ENDL
							 | 
						|
								f << "" << ENDL
							 | 
						|
								
							 | 
						|
								f << "#ifndef PANTHEIOS_INCL_PANTHEIOS_HPP_PANTHEIOS" << "" << ENDL
							 | 
						|
								f << "# error This file is included by the Pantheios API, and cannot be included directly" << "" << ENDL
							 | 
						|
								f << "#endif /* !PANTHEIOS_INCL_PANTHEIOS_HPP_PANTHEIOS */" << "" << ENDL
							 | 
						|
								f << "" << ENDL
							 | 
						|
								f << "" << ENDL
							 | 
						|
								
							 | 
						|
								PARAM_RANGE.each do |i|
							 | 
						|
										plural	=	(i > 1) ? "s" : ""
							 | 
						|
								
							 | 
						|
										# Pre-processor limits
							 | 
						|
										f << "#if #{PARAMS_LIMIT_SYMBOL} >= #{i}" << ENDL << ENDL
							 | 
						|
								
							 | 
						|
										# Documentation comment
							 | 
						|
								
							 | 
						|
										f << "/** Logs #{i} object#{plural} of arbitrary type, subject to severity-level filtering" << ENDL
							 | 
						|
										f << " * \\ingroup group__application_layer_interface__generated" << ENDL
							 | 
						|
										f << " * \\note The \\c c_str_data_a() and \\c c_str_len_a() string access shims are applied to each parameter, to form a string slice" << ENDL
							 | 
						|
										f << " */" << ENDL
							 | 
						|
								
							 | 
						|
										# Template parameter list
							 | 
						|
								
							 | 
						|
										declare_template_parameter_list(f, i)
							 | 
						|
								
							 | 
						|
										# Function signature
							 | 
						|
								
							 | 
						|
										f << "inline int log( pan_sev_t severity" << ENDL
							 | 
						|
										declare_function_parameter_list(f, 0, i)
							 | 
						|
								
							 | 
						|
										# Function body
							 | 
						|
								
							 | 
						|
										f << "{" << ENDL
							 | 
						|
								
							 | 
						|
										# isSeverityLogged() test
							 | 
						|
								
							 | 
						|
										f << "#{TAB}if(!pantheios_isSeverityLogged(severity))" << ENDL
							 | 
						|
										f << "#{TAB}{" << ENDL
							 | 
						|
										f << "#{TAB}#{TAB}return 0;" << ENDL
							 | 
						|
										f << "#{TAB}}" << ENDL
							 | 
						|
										f << "#{TAB}else" << ENDL
							 | 
						|
										f << "#{TAB}{" << ENDL
							 | 
						|
								
							 | 
						|
										# log_dispatch_N() call
							 | 
						|
								
							 | 
						|
										if USE_USING_DECLARATION
							 | 
						|
												f << "#{TAB}#{TAB}PANTHEIOS_DECLARE_SHIM_PAIR_();" << ENDL
							 | 
						|
												f << ENDL
							 | 
						|
										end
							 | 
						|
								
							 | 
						|
										f << "#ifndef PANTHEIOS_FORCE_ALLOW_FUNDAMENTAL_ARGUMENTS" << ENDL;
							 | 
						|
										f << "#{TAB}#{TAB}// NOTE: if one of the following lines causes a compile error," << ENDL;
							 | 
						|
										f << "#{TAB}#{TAB}// you have passed a fundamental type to the log() statement." << ENDL;
							 | 
						|
										(0 ... i).each do |j| 
							 | 
						|
												f << "#{TAB}#{TAB}PANTHEIOS_VALIDATE_TYPE_NOT_FUNDAMENTAL_(T#{j});" << ENDL;
							 | 
						|
										end
							 | 
						|
										f << "#endif /* PANTHEIOS_FORCE_ALLOW_FUNDAMENTAL_ARGUMENTS */" << ENDL;
							 | 
						|
										f << ENDL
							 | 
						|
								
							 | 
						|
										f << "#{TAB}#{TAB}return internal::log_dispatch_#{i}(severity" << ENDL
							 | 
						|
										(0 ... i).each do |j| 
							 | 
						|
											if USE_SHIM_PAIR_MACRO
							 | 
						|
													f << "#{CALL_LMARGIN}, PANTHEIOS_INVOKE_SHIM_PAIR_(v#{j})" << ENDL
							 | 
						|
											elsif USE_USING_DECLARATION
							 | 
						|
													f << "#{CALL_LMARGIN}, c_str_len_a(v#{j}), c_str_data_a(v#{j})" << ENDL
							 | 
						|
											else
							 | 
						|
													f << "#{CALL_LMARGIN}, ::stlsoft::c_str_len_a(v#{j}), ::stlsoft::c_str_data_a(v#{j})" << ENDL
							 | 
						|
											end
							 | 
						|
										end
							 | 
						|
										f << "#{TAB}#{TAB});" << ENDL
							 | 
						|
										f << "#{TAB}}" << ENDL
							 | 
						|
										f << "}" << ENDL
							 | 
						|
										f << "" << ENDL
							 | 
						|
								
							 | 
						|
										num_log_definitions = 1 + num_log_definitions
							 | 
						|
								end
							 | 
						|
								PARAM_RANGE.each { |i| f << "#endif /* #{PARAMS_LIMIT_SYMBOL} >= #{NUM_PARAMS - i + 1} */" << ENDL }
							 | 
						|
								
							 | 
						|
								f.close()
							 | 
						|
								f = nil
							 | 
						|
								
							 | 
						|
								############################################################
							 | 
						|
								# Cpp_LOG_SEV_FUNCTIONS_HEADER_NAME
							 | 
						|
								puts Cpp_LOG_SEV_FUNCTIONS_HEADER_NAME
							 | 
						|
								
							 | 
						|
								f	=	File::new(Cpp_LOG_SEV_FUNCTIONS_HEADER, "w")
							 | 
						|
								
							 | 
						|
								f << "/* /////////////////////////////////////////////////////////////////////////" << "" << ENDL
							 | 
						|
								f << " * File:        pantheios/" << Cpp_LOG_SEV_FUNCTIONS_HEADER_NAME << "" << ENDL
							 | 
						|
								f << " *" << "" << ENDL
							 | 
						|
								f << " * Purpose:     Definitions of the log_<LEVEL>() functions" << ENDL
							 | 
						|
								f << " *" << "" << ENDL
							 | 
						|
								f << " * Generated:   #{SrcUtil::currentDate}" << "" << ENDL
							 | 
						|
								f << " *" << "" << ENDL
							 | 
						|
								f << " * Status:      This file is auto-generated: DO NOT EDIT!" << "" << ENDL
							 | 
						|
								f << " *" << "" << ENDL
							 | 
						|
								f << " * Copyright:   The copyright restrictions of the Pantheios library," << "" << ENDL
							 | 
						|
								f << " *              enumerated in the header file <pantheios/pantheios.h>," << "" << ENDL
							 | 
						|
								f << " *              apply to this file" << "" << ENDL
							 | 
						|
								f << " *" << "" << ENDL
							 | 
						|
								f << " * ////////////////////////////////////////////////////////////////////// */" << "" << ENDL
							 | 
						|
								f << "" << ENDL
							 | 
						|
								# f << "/** \\file pantheios/#{Cpp_LOG_SEV_FUNCTIONS_HEADER_NAME} [C++ only] INTERNAL, AUTO-GENERATED FILE: Do not include directly */" << ENDL
							 | 
						|
								
							 | 
						|
								f << "" << ENDL
							 | 
						|
								f << "#ifndef PANTHEIOS_INCL_PANTHEIOS_HPP_PANTHEIOS" << "" << ENDL
							 | 
						|
								f << "# error This file is included by the Pantheios API, and cannot be included directly" << "" << ENDL
							 | 
						|
								f << "#endif /* !PANTHEIOS_INCL_PANTHEIOS_HPP_PANTHEIOS */" << "" << ENDL
							 | 
						|
								f << "" << ENDL
							 | 
						|
								f << "" << ENDL
							 | 
						|
								
							 | 
						|
								SEVERITY_LEVELS.each do |severityLevel|
							 | 
						|
									
							 | 
						|
									PARAM_RANGE.each do |i|
							 | 
						|
										plural	=	(i > 1) ? "s" : ""
							 | 
						|
								
							 | 
						|
										# Pre-processor limits
							 | 
						|
										f << "#if #{PARAMS_LIMIT_SYMBOL} >= #{i}" << ENDL << ENDL
							 | 
						|
								
							 | 
						|
										# Documentation comment
							 | 
						|
								
							 | 
						|
										f << "/** Logs #{i} object#{plural} of arbitrary type, subject to severity-level filtering, at severity level \\link pantheios::SEV_#{severityLevel} #{severityLevel}\\endlink" << ENDL
							 | 
						|
										f << " * \\ingroup group__application_layer_interface__generated" << ENDL
							 | 
						|
										f << " * \\note The \\c c_str_data_a() and \\c c_str_len_a() string access shims are applied to each parameter, to form a string slice" << ENDL
							 | 
						|
										f << " */" << ENDL
							 | 
						|
								
							 | 
						|
										# Template parameter list
							 | 
						|
										declare_template_parameter_list(f, i)
							 | 
						|
								
							 | 
						|
										# Function signature
							 | 
						|
								
							 | 
						|
										if i == 1
							 | 
						|
												f << "inline int log_#{severityLevel}(T0 const& v0)" << ENDL
							 | 
						|
										else
							 | 
						|
											sig 	= 	"inline int log_#{severityLevel}("
							 | 
						|
											len		=	((sig.length + 3) / TAB_SIZE) * TAB_SIZE
							 | 
						|
											len0	=	len - 2
							 | 
						|
											sig		=	sig.ljust(len)
							 | 
						|
								
							 | 
						|
											f << "#{sig}T0 const  &v0" << ENDL
							 | 
						|
											declare_function_parameter_list(f, 1, i)
							 | 
						|
										end
							 | 
						|
									
							 | 
						|
										# Function body
							 | 
						|
								
							 | 
						|
										f << "{" << ENDL
							 | 
						|
								
							 | 
						|
										# isSeverityLogged() test
							 | 
						|
								
							 | 
						|
										f << "#{TAB}if(!pantheios_isSeverityLogged(PANTHEIOS_SEV_#{severityLevel}))" << ENDL
							 | 
						|
										f << "#{TAB}{" << ENDL
							 | 
						|
										f << "#{TAB}#{TAB}return 0;" << ENDL
							 | 
						|
										f << "#{TAB}}" << ENDL
							 | 
						|
										f << "#{TAB}else" << ENDL
							 | 
						|
										f << "#{TAB}{" << ENDL
							 | 
						|
								
							 | 
						|
										# log_dispatch_N() call
							 | 
						|
								
							 | 
						|
										if USE_USING_DECLARATION
							 | 
						|
												f << "#{TAB}#{TAB}PANTHEIOS_DECLARE_SHIM_PAIR_();" << ENDL
							 | 
						|
												f << ENDL
							 | 
						|
										end
							 | 
						|
								
							 | 
						|
										f << "#ifndef PANTHEIOS_FORCE_ALLOW_FUNDAMENTAL_ARGUMENTS" << ENDL;
							 | 
						|
										f << "#{TAB}#{TAB}// NOTE: if one of the following lines causes a compile error," << ENDL;
							 | 
						|
										f << "#{TAB}#{TAB}// you have passed a fundamental type to the log_#{severityLevel}() statement." << ENDL;
							 | 
						|
										(0 ... i).each do |j| 
							 | 
						|
												f << "#{TAB}#{TAB}PANTHEIOS_VALIDATE_TYPE_NOT_FUNDAMENTAL_(T#{j});" << ENDL;
							 | 
						|
										end
							 | 
						|
										f << "#endif /* PANTHEIOS_FORCE_ALLOW_FUNDAMENTAL_ARGUMENTS */" << ENDL;
							 | 
						|
										f << ENDL
							 | 
						|
								
							 | 
						|
										f << "#{TAB}#{TAB}return internal::log_dispatch_#{i}(PANTHEIOS_SEV_#{severityLevel}" << ENDL
							 | 
						|
								
							 | 
						|
										(0 ... i).each do |j| 
							 | 
						|
											if USE_SHIM_PAIR_MACRO
							 | 
						|
													f << "#{CALL_LMARGIN}, PANTHEIOS_INVOKE_SHIM_PAIR_(v#{j})" << ENDL
							 | 
						|
											elsif USE_USING_DECLARATION
							 | 
						|
													f << "#{CALL_LMARGIN}, c_str_len_a(v#{j}), c_str_data_a(v#{j})" << ENDL
							 | 
						|
											else
							 | 
						|
													f << "#{CALL_LMARGIN}, ::stlsoft::c_str_len_a(v#{j}), ::stlsoft::c_str_data_a(v#{j})" << ENDL
							 | 
						|
											end
							 | 
						|
										end
							 | 
						|
										f << "#{TAB}#{TAB});" << ENDL;
							 | 
						|
								
							 | 
						|
										f << "#{TAB}}" << ENDL
							 | 
						|
										f << "}" << ENDL
							 | 
						|
										f << "" << ENDL
							 | 
						|
								
							 | 
						|
										num_log_sev_definitions = 1 + num_log_sev_definitions
							 | 
						|
									end
							 | 
						|
									PARAM_RANGE.each { |i| f << "#endif /* #{PARAMS_LIMIT_SYMBOL} >= #{NUM_PARAMS - i + 1} */" << ENDL }
							 | 
						|
									f << ENDL;
							 | 
						|
								end
							 | 
						|
								
							 | 
						|
								f.close()
							 | 
						|
								f = nil
							 | 
						|
								
							 | 
						|
								puts
							 | 
						|
								
							 | 
						|
								puts "# of pantheios_log_N() declarations:         #{num_pantheios_log_N_declarations}"
							 | 
						|
								puts "# of pantheios_log_N_no_test() declarations: #{num_pantheios_log_N_no_test_declarations}"
							 | 
						|
								puts "# of pantheios_log_N_no_test() definitions:  #{num_pantheios_log_N_no_test_definitions}"
							 | 
						|
								puts "# of pantheios_log_N() definitions:          #{num_pantheios_log_N_definitions}"
							 | 
						|
								puts "# of log_dispatch_N() definitions:           #{num_log_dispatch_N_definitions}"
							 | 
						|
								puts "# of log() definitions:                      #{num_log_definitions}"
							 | 
						|
								puts "# of log_SEV() definitions:                  #{num_log_sev_definitions}"
							 | 
						|
								
							 | 
						|
								puts "--------------------------------------------"
							 | 
						|
								puts "# of function declarations:                  #{num_pantheios_log_N_declarations + num_pantheios_log_N_no_test_declarations}"
							 | 
						|
								puts "# of function definitions:                   #{num_pantheios_log_N_no_test_definitions + num_pantheios_log_N_definitions + num_log_dispatch_N_definitions + num_log_definitions + num_log_sev_definitions}"
							 |