agent/native/ext/basic_macros.h (75 lines of code) (raw):

/* * Licensed to Elasticsearch B.V. under one or more contributor * license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright * ownership. Elasticsearch B.V. licenses this file to you under * the Apache License, Version 2.0 (the "License"); you may * not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ #include <string.h> // memset #define ELASTIC_APM_UNUSED( var ) (void)(var) #define ELASTIC_APM_PP_STRINGIZE_IMPL( token ) #token #define ELASTIC_APM_PP_STRINGIZE( token ) ELASTIC_APM_PP_STRINGIZE_IMPL( token ) #define ELASTIC_APM_PP_CONCAT_IMPL( token1, token2 ) token1##token2 #define ELASTIC_APM_PP_CONCAT( token1, token2 ) ELASTIC_APM_PP_CONCAT_IMPL( token1, token2 ) #define ELASTIC_APM_IS_IN_INCLUSIVE_RANGE( rangeBegin, x, rangeEnd ) ( ( (rangeBegin) <= (x) ) && ( (x) <= (rangeEnd) ) ) #define ELASTIC_APM_IS_IN_END_EXCLUDED_RANGE( rangeBeginIncluded, x, rangeEndExcluded ) ( ( (rangeBeginIncluded) <= (x) ) && ( (x) < (rangeEndExcluded) ) ) #define ELASTIC_APM_STATIC_ARRAY_SIZE( array ) ( ( sizeof( (array) ) ) / sizeof( (array)[ 0 ] ) ) #define ELASTIC_APM_FOR_EACH_INDEX_START_END( indexVarType, indexVar, rangeStart, rangeExcludedEnd ) \ for ( indexVarType indexVar = rangeStart ; (indexVar) < (rangeExcludedEnd) ; (indexVarType)++indexVar ) // NOLINT(bugprone-macro-parentheses) #define ELASTIC_APM_FOR_EACH_INDEX_EX( indexVarType, indexVar, rangeSize ) \ ELASTIC_APM_FOR_EACH_INDEX_START_END( indexVarType, indexVar, static_cast<indexVarType>(0), rangeSize ) #define ELASTIC_APM_FOR_EACH_INDEX( indexVar, rangeSize ) ELASTIC_APM_FOR_EACH_INDEX_EX( size_t, indexVar, rangeSize ) #define ELASTIC_APM_REPEAT_N_TIMES( numberOfTimes ) \ ELASTIC_APM_FOR_EACH_INDEX_EX( size_t, ELASTIC_APM_PP_CONCAT( elastic_apm_repeat_n_times_index_var, __LINE__ ), numberOfTimes ) /**/ #define ELASTIC_APM_FOR_EACH_BACKWARDS( indexVar, rangeSize ) \ for \ ( \ /* init */ \ size_t \ elastic_apm_for_each_backwards_number_of_elements_remaining = (rangeSize), \ indexVar = (rangeSize) == 0 ? 0 : (rangeSize) - 1; \ \ /* stop condition */ \ elastic_apm_for_each_backwards_number_of_elements_remaining != 0 ; \ \ /* step */ \ --elastic_apm_for_each_backwards_number_of_elements_remaining, \ (indexVar) = ( (indexVar) == 0 ) ? 0 : (indexVar) - 1 \ ) #define ELASTIC_APM_ZERO_STRUCT( structPtr ) memset( static_cast<void*>(structPtr), 0, sizeof( *(structPtr) ) ) #if ( ! defined( PHP_WIN32 ) ) || defined( ELASTIC_APM_UNDER_IDE ) # define ELASTIC_APM_PRINTF_ATTRIBUTE( fmtPos, fmtArgsPos ) __attribute__ ( ( format ( printf, fmtPos, fmtArgsPos ) ) ) #else # define ELASTIC_APM_PRINTF_ATTRIBUTE( fmtPos, fmtArgsPos ) #endif #if ( ! defined( PHP_WIN32 ) ) || defined( ELASTIC_APM_UNDER_IDE ) # define ELASTIC_APM_NO_RETURN_ATTRIBUTE __attribute__ ( ( noreturn ) ) #else # define ELASTIC_APM_NO_RETURN_ATTRIBUTE #endif #define ELASTIC_APM_PP_EXPAND( somePPTokenToExpand ) somePPTokenToExpand ////////////////////////////////////////////////////////////////////////////// // // ELASTIC_APM_PP_VARIADIC_ARGS_COUNT // #ifdef _MSC_VER // Microsoft compilers # define ELASTIC_APM_PP_VARIADIC_ARGS_COUNT_HELPER_AUGMENTER( ... ) unusedPPToken, __VA_ARGS__ # define ELASTIC_APM_PP_VARIADIC_ARGS_COUNT_HELPER( dummyArg_1, dummyArg_2, dummyArg_3, dummyArg_4, dummyArg_5, dummyArg_6, dummyArg_7, dummyArg_8, dummyArg_9, dummyArg_10, dummyArg_11, count, ... ) count # define ELASTIC_APM_PP_VARIADIC_ARGS_COUNT_HELPER_EXPAND_ARGS( ... ) ELASTIC_APM_PP_EXPAND( ELASTIC_APM_PP_VARIADIC_ARGS_COUNT_HELPER( __VA_ARGS__, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 ) ) # define ELASTIC_APM_PP_VARIADIC_ARGS_COUNT( ... ) ELASTIC_APM_PP_VARIADIC_ARGS_COUNT_HELPER_EXPAND_ARGS( ELASTIC_APM_PP_VARIADIC_ARGS_COUNT_HELPER_AUGMENTER( __VA_ARGS__ ) ) #else // Non-Microsoft compilers # define ELASTIC_APM_PP_VARIADIC_ARGS_COUNT_HELPER( dummyArg_0, dummyArg_1, dummyArg_2, dummyArg_3, dummyArg_4, dummyArg_5, dummyArg_6, dummyArg_7, dummyArg_8, dummyArg_9, dummyArg_10, dummyArg_11, count, ... ) count # define ELASTIC_APM_PP_VARIADIC_ARGS_COUNT( ... ) ELASTIC_APM_PP_VARIADIC_ARGS_COUNT_HELPER( 0, ## __VA_ARGS__, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 ) #endif // // ELASTIC_APM_PP_VARIADIC_ARGS_COUNT // ////////////////////////////////////////////////////////////////////////////// #ifdef ELASTIC_APM_UNDER_IDE #define ELASTIC_APM_SUPPRESS_UNUSED( symbol ) \ static void* ELASTIC_APM_PP_CONCAT( g_ELASTIC_APM_SUPPRESS_UNUSED_, ELASTIC_APM_PP_CONCAT( __LINE__, ELASTIC_APM_PP_CONCAT( _, __COUNTER__ ) ) ) = &( symbol ) #else #define ELASTIC_APM_SUPPRESS_UNUSED( symbol ) #endif #define ELASTIC_APM_NOOP_STATEMENT ((void)(0)) #define ELASTIC_APM_FIELD_SIZEOF( StructType, field ) (sizeof( ((StructType*)NULL)->field )) //////////////////////////////////////////////////////////////////////////////// //// //// ELASTIC_APM_IF_VA_ARGS_EMPTY_ELSE //// #define ELASTIC_APM_IF_VA_ARGS_EMPTY_ELSE_0( ifToken, elseToken ) ifToken #define ELASTIC_APM_IF_VA_ARGS_EMPTY_ELSE_1( ifToken, elseToken ) elseToken #define ELASTIC_APM_IF_VA_ARGS_EMPTY_ELSE_2( ifToken, elseToken ) elseToken #define ELASTIC_APM_IF_VA_ARGS_EMPTY_ELSE_3( ifToken, elseToken ) elseToken #define ELASTIC_APM_IF_VA_ARGS_EMPTY_ELSE_4( ifToken, elseToken ) elseToken #define ELASTIC_APM_IF_VA_ARGS_EMPTY_ELSE_5( ifToken, elseToken ) elseToken #define ELASTIC_APM_IF_VA_ARGS_EMPTY_ELSE_6( ifToken, elseToken ) elseToken #define ELASTIC_APM_IF_VA_ARGS_EMPTY_ELSE_7( ifToken, elseToken ) elseToken #define ELASTIC_APM_IF_VA_ARGS_EMPTY_ELSE_8( ifToken, elseToken ) elseToken #define ELASTIC_APM_IF_VA_ARGS_EMPTY_ELSE_9( ifToken, elseToken ) elseToken #define ELASTIC_APM_IF_VA_ARGS_EMPTY_ELSE_10( ifToken, elseToken ) elseToken #define ELASTIC_APM_IF_VA_ARGS_EMPTY_ELSE( ifToken, elseToken, ... ) \ ELASTIC_APM_PP_EXPAND( ELASTIC_APM_PP_CONCAT( ELASTIC_APM_IF_VA_ARGS_EMPTY_ELSE_, ELASTIC_APM_PP_VARIADIC_ARGS_COUNT( __VA_ARGS__ ) ) ) ( ifToken, elseToken ) //// //// ELASTIC_APM_IF_VA_ARGS_EMPTY_ELSE //// //////////////////////////////////////////////////////////////////////////////// #define ELASTIC_APM_ENUM_NAMES_ARRAY_PAIR( enumElement ) [enumElement] = ELASTIC_APM_STRING_LITERAL_TO_VIEW( ELASTIC_APM_PP_STRINGIZE( enumElement ) ) #define ELASTIC_APM_BUILD_PHP_VERSION_ID( major, minor, patch ) ( ((major)*100 + (minor))*100 + (patch) )