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}"
|