diff --git a/implementation/BUILD b/implementation/BUILD index cbd914fd..a3ce21b8 100644 --- a/implementation/BUILD +++ b/implementation/BUILD @@ -10,6 +10,9 @@ filegroup( visibility = ["//visibility:public"], ) +################################################################################ +# Array. +################################################################################ cc_library( name = "array", hdrs = ["array.h"], @@ -56,61 +59,6 @@ cc_library( ], ) -cc_test( - name = "local_array_iteration_test", - srcs = ["local_array_iteration_test.cc"], - deps = [ - ":fake_test_constants", - "//:jni_bind", - "//:jni_test", - "@googletest//:gtest_main", - ], -) - -cc_test( - name = "local_array_field_multidimensional_test", - srcs = ["local_array_field_multidimensional_test.cc"], - deps = [ - ":fake_test_constants", - "//:jni_bind", - "//:jni_test", - "@googletest//:gtest_main", - ], -) - -cc_test( - name = "local_array_method_test", - srcs = ["local_array_method_test.cc"], - deps = [ - ":fake_test_constants", - "//:jni_bind", - "//:jni_test", - "@googletest//:gtest_main", - ], -) - -cc_test( - name = "local_array_method_multidimensional_test", - srcs = ["local_array_method_multidimensional_test.cc"], - deps = [ - ":fake_test_constants", - "//:jni_bind", - "//:jni_test", - "@googletest//:gtest_main", - ], -) - -cc_test( - name = "local_array_string_test", - srcs = ["local_array_string_test.cc"], - deps = [ - ":fake_test_constants", - "//:jni_bind", - "//:jni_test", - "@googletest//:gtest_main", - ], -) - cc_library( name = "array_type_conversion", hdrs = ["array_type_conversion.h"], @@ -151,6 +99,9 @@ cc_test( ], ) +################################################################################ +# Class. +################################################################################ cc_library( name = "class", hdrs = ["class.h"], @@ -197,6 +148,9 @@ cc_test( ], ) +################################################################################ +# ClassLoader. +################################################################################ cc_library( name = "class_loader", hdrs = ["class_loader.h"], @@ -271,6 +225,9 @@ cc_test( ], ) +################################################################################ +# Constructor. +################################################################################ cc_library( name = "constructor", hdrs = ["constructor.h"], @@ -293,6 +250,9 @@ cc_test( ], ) +################################################################################ +# DefaultClassLoader. +################################################################################ cc_library( name = "default_class_loader", hdrs = ["default_class_loader.h"], @@ -302,6 +262,9 @@ cc_library( ], ) +################################################################################ +# Fake Test Constants. +################################################################################ cc_library( name = "fake_test_constants", testonly = True, @@ -309,6 +272,9 @@ cc_library( deps = ["//:jni_dep"], ) +################################################################################ +# Field. +################################################################################ cc_library( name = "field", hdrs = ["field.h"], @@ -361,6 +327,9 @@ cc_library( ], ) +################################################################################ +# Find Class Fallback. +################################################################################ cc_library( name = "find_class_fallback", hdrs = ["find_class_fallback.h"], @@ -374,6 +343,9 @@ cc_library( ], ) +################################################################################ +# Forward Declarations. +################################################################################ cc_library( name = "forward_declarations", hdrs = ["forward_declarations.h"], @@ -385,6 +357,9 @@ cc_library( ], ) +################################################################################ +# GlobalClassLoader. +################################################################################ cc_library( name = "global_class_loader", hdrs = ["global_class_loader.h"], @@ -400,6 +375,9 @@ cc_library( ], ) +################################################################################ +# GlobalObject. +################################################################################ cc_library( name = "global_object", hdrs = ["global_object.h"], @@ -427,6 +405,9 @@ cc_test( ], ) +################################################################################ +# GlobalString. +################################################################################ cc_library( name = "global_string", hdrs = ["global_string.h"], @@ -442,6 +423,143 @@ cc_library( ], ) +################################################################################ +# LocalArray. +################################################################################ +cc_library( + name = "local_array", + hdrs = ["local_array.h"], + deps = [ + ":array", + ":array_ref", + ":class", + ":class_ref", + ":default_class_loader", + ":forward_declarations", + ":jni_type", + ":jvm", + ":no_idx", + ":object", + ":promotion_mechanics_tags", + "//:jni_dep", + "//implementation/jni_helper:jni_array_helper", + "//implementation/jni_helper:lifecycle_object", + ], +) + +cc_test( + name = "local_array_field_multidimensional_test", + srcs = ["local_array_field_multidimensional_test.cc"], + deps = [ + ":fake_test_constants", + "//:jni_bind", + "//:jni_test", + "@googletest//:gtest_main", + ], +) + +cc_test( + name = "local_array_field_test", + srcs = ["local_array_field_test.cc"], + deps = [ + ":fake_test_constants", + "//:jni_bind", + "//:jni_test", + "@googletest//:gtest_main", + ], +) + +cc_test( + name = "local_array_iteration_test", + srcs = ["local_array_iteration_test.cc"], + deps = [ + ":fake_test_constants", + "//:jni_bind", + "//:jni_test", + "@googletest//:gtest_main", + ], +) + +cc_test( + name = "local_array_multidimensional_test", + srcs = ["local_array_multidimensional_test.cc"], + deps = [ + ":fake_test_constants", + "//:jni_bind", + "//:jni_test", + "@googletest//:gtest_main", + ], +) + +cc_test( + name = "local_array_method_test", + srcs = ["local_array_method_test.cc"], + deps = [ + ":fake_test_constants", + "//:jni_bind", + "//:jni_test", + "@googletest//:gtest_main", + ], +) + +cc_test( + name = "local_array_method_multidimensional_test", + srcs = ["local_array_method_multidimensional_test.cc"], + deps = [ + ":fake_test_constants", + "//:jni_bind", + "//:jni_test", + "@googletest//:gtest_main", + ], +) + +cc_library( + name = "local_array_string", + hdrs = ["local_array_string.h"], + deps = [ + ":array", + ":array_ref", + ":class", + ":class_ref", + ":default_class_loader", + ":forward_declarations", + ":jni_type", + ":jvm", + ":local_array", + ":local_object", + ":local_string", + ":object", + "//:jni_dep", + "//implementation/jni_helper", + "//implementation/jni_helper:jni_array_helper", + ], +) + +cc_test( + name = "local_array_string_test", + srcs = ["local_array_string_test.cc"], + deps = [ + ":fake_test_constants", + "//:jni_bind", + "//:jni_test", + "@googletest//:gtest_main", + ], +) + +cc_test( + name = "local_array_test", + srcs = ["local_array_test.cc"], + deps = [ + ":fake_test_constants", + "//:jni_bind", + "//:jni_test", + "@googletest//:gtest_main", + ], +) + +################################################################################ +# ID. +################################################################################ cc_library( name = "id", hdrs = ["id.h"], @@ -479,6 +597,9 @@ cc_library( hdrs = ["id_type.h"], ) +################################################################################ +# JniType. +################################################################################ cc_library( name = "jni_type", hdrs = ["jni_type.h"], @@ -507,6 +628,9 @@ cc_test( ], ) +################################################################################ +# Jvm. +################################################################################ cc_library( name = "jvm", hdrs = ["jvm.h"], @@ -576,6 +700,9 @@ cc_test( ], ) +################################################################################ +# LoadedBy. +################################################################################ cc_library( name = "loaded_by", hdrs = ["loaded_by.h"], @@ -585,82 +712,9 @@ cc_library( ], ) -cc_library( - name = "local_array", - hdrs = ["local_array.h"], - deps = [ - ":array", - ":array_ref", - ":class", - ":class_ref", - ":default_class_loader", - ":forward_declarations", - ":jni_type", - ":jvm", - ":no_idx", - ":object", - ":promotion_mechanics_tags", - "//:jni_dep", - "//implementation/jni_helper:jni_array_helper", - "//implementation/jni_helper:lifecycle_object", - ], -) - -cc_library( - name = "local_array_string", - hdrs = ["local_array_string.h"], - deps = [ - ":array", - ":array_ref", - ":class", - ":class_ref", - ":default_class_loader", - ":forward_declarations", - ":jni_type", - ":jvm", - ":local_array", - ":local_object", - ":local_string", - ":object", - "//:jni_dep", - "//implementation/jni_helper", - "//implementation/jni_helper:jni_array_helper", - ], -) - -cc_test( - name = "local_array_test", - srcs = ["local_array_test.cc"], - deps = [ - ":fake_test_constants", - "//:jni_bind", - "//:jni_test", - "@googletest//:gtest_main", - ], -) - -cc_test( - name = "local_array_field_test", - srcs = ["local_array_field_test.cc"], - deps = [ - ":fake_test_constants", - "//:jni_bind", - "//:jni_test", - "@googletest//:gtest_main", - ], -) - -cc_test( - name = "local_array_multidimensional_test", - srcs = ["local_array_multidimensional_test.cc"], - deps = [ - ":fake_test_constants", - "//:jni_bind", - "//:jni_test", - "@googletest//:gtest_main", - ], -) - +################################################################################ +# LocalClassLoader. +################################################################################ cc_library( name = "local_class_loader", hdrs = ["local_class_loader.h"], @@ -681,6 +735,9 @@ cc_library( ], ) +################################################################################ +# LocalObject. +################################################################################ cc_library( name = "local_object", hdrs = ["local_object.h"], @@ -709,6 +766,9 @@ cc_test( ], ) +################################################################################ +# LocalString. +################################################################################ cc_library( name = "local_string", hdrs = ["local_string.h"], @@ -726,6 +786,9 @@ cc_library( ], ) +################################################################################ +# Method. +################################################################################ cc_library( name = "method", hdrs = ["method.h"], @@ -814,6 +877,9 @@ cc_test( ], ) +################################################################################ +# Multi type test. +################################################################################ cc_test( name = "multi_type_test", srcs = ["multi_type_test.cc"], @@ -825,6 +891,9 @@ cc_test( ], ) +################################################################################ +# NameConstants. +################################################################################ cc_library( name = "name_constants", hdrs = ["name_constants.h"], @@ -839,11 +908,17 @@ cc_test( ], ) +################################################################################ +# NoIdx. +################################################################################ cc_library( name = "no_idx", hdrs = ["no_idx.h"], ) +################################################################################ +# Object. +################################################################################ cc_library( name = "object", hdrs = ["object.h"], @@ -886,12 +961,18 @@ cc_test( ], ) +################################################################################ +# Params. +################################################################################ cc_library( name = "params", hdrs = ["params.h"], deps = [":object"], ) +################################################################################ +# PromotionMechanics. +################################################################################ cc_library( name = "promotion_mechanics", hdrs = ["promotion_mechanics.h"], @@ -915,6 +996,9 @@ cc_library( hdrs = ["promotion_mechanics_tags.h"], ) +################################################################################ +# Proxy. +################################################################################ cc_library( name = "proxy", hdrs = ["proxy.h"], @@ -944,6 +1028,12 @@ cc_library( ], ) +cc_library( + name = "proxy_convenience_aliases", + hdrs = ["proxy_convenience_aliases.h"], + deps = [":id_type"], +) + cc_library( name = "proxy_definitions", hdrs = ["proxy_definitions.h"], @@ -992,12 +1082,6 @@ cc_library( ], ) -cc_library( - name = "proxy_convenience_aliases", - hdrs = ["proxy_convenience_aliases.h"], - deps = [":id_type"], -) - cc_test( name = "proxy_test", srcs = ["proxy_test.cc"], @@ -1009,6 +1093,9 @@ cc_test( ], ) +################################################################################ +# RefBase. +################################################################################ cc_library( name = "ref_base", hdrs = ["ref_base.h"], @@ -1030,12 +1117,18 @@ cc_library( ], ) +################################################################################ +# Return. +################################################################################ cc_library( name = "return", hdrs = ["return.h"], deps = [":void"], ) +################################################################################ +# Signature. +################################################################################ cc_library( name = "signature", hdrs = ["signature.h"], @@ -1073,6 +1166,9 @@ cc_test( ], ) +################################################################################ +# StringRef. +################################################################################ cc_library( name = "string_ref", hdrs = ["string_ref.h"], @@ -1093,6 +1189,9 @@ cc_library( ], ) +################################################################################ +# SelectorStaticInfo. +################################################################################ cc_library( name = "selector_static_info", hdrs = ["selector_static_info.h"], @@ -1111,6 +1210,9 @@ cc_library( ], ) +################################################################################ +# Static. +################################################################################ cc_library( name = "static", hdrs = ["static.h"], @@ -1160,6 +1262,9 @@ cc_test( ], ) +################################################################################ +# SupportClassSet. +################################################################################ cc_library( name = "supported_class_set", hdrs = ["supported_class_set.h"], @@ -1169,6 +1274,9 @@ cc_library( ], ) +################################################################################ +# Self. +################################################################################ cc_library( name = "self", hdrs = ["self.h"], @@ -1185,6 +1293,9 @@ cc_test( ], ) +################################################################################ +# ThreadGuard. +################################################################################ cc_library( name = "thread_guard", hdrs = ["thread_guard.h"], @@ -1207,6 +1318,9 @@ cc_test( ], ) +################################################################################ +# Void. +################################################################################ cc_library( name = "void", hdrs = ["void.h"], diff --git a/implementation/jni_helper/BUILD b/implementation/jni_helper/BUILD index 16ac17b1..ca6ffc64 100644 --- a/implementation/jni_helper/BUILD +++ b/implementation/jni_helper/BUILD @@ -7,22 +7,77 @@ licenses(["notice"]) exports_files(["LICENSE"]) +################################################################################ +# ArgPrint. +################################################################################ +cc_library( + name = "arg_print", + hdrs = ["arg_print.h"], + deps = ["//:jni_dep"], +) + +################################################################################ +# FieldValue. +################################################################################ +cc_library( + name = "field_value_getter", + hdrs = ["field_value.h"], + deps = [ + ":jni_env", + ":trace", + "//:jni_dep", + ], +) + +################################################################################ +# Headers for export. +################################################################################ filegroup( name = "headers_for_export", srcs = glob(["**/*.h"]), visibility = ["//visibility:public"], ) +################################################################################ +# Invoke. +################################################################################ cc_library( - name = "field_value_getter", - hdrs = ["field_value.h"], + name = "invoke", + hdrs = ["invoke.h"], + deps = [ + ":jni_env", + ":trace", + "//:jni_dep", + ], +) + +cc_test( + name = "invoke_test", + srcs = ["invoke_test.cc"], + deps = [ + ":invoke", + "//:jni_dep", + "//:jni_test", + "//:mock_jni_env", + "//implementation:fake_test_constants", + "@googletest//:gtest_main", + ], +) + +cc_library( + name = "invoke_static", + hdrs = ["invoke_static.h"], deps = [ + ":invoke", ":jni_env", ":trace", "//:jni_dep", ], ) +################################################################################ +# JniArrayHelper. +################################################################################ cc_library( name = "jni_array_helper", hdrs = ["jni_array_helper.h"], @@ -33,6 +88,9 @@ cc_library( ], ) +################################################################################ +# JniEnv. +################################################################################ cc_library( name = "jni_env", hdrs = ["jni_env.h"], @@ -52,6 +110,9 @@ cc_test( ], ) +################################################################################ +# JniHelper. +################################################################################ cc_library( name = "jni_helper", hdrs = ["jni_helper.h"], @@ -77,6 +138,9 @@ cc_test( ], ) +################################################################################ +# JniTypenameToString. +################################################################################ cc_library( name = "jni_typename_to_string", hdrs = ["jni_typename_to_string.h"], @@ -93,40 +157,9 @@ cc_test( ], ) -cc_library( - name = "invoke", - hdrs = ["invoke.h"], - deps = [ - ":jni_env", - ":trace", - "//:jni_dep", - ], -) - -cc_test( - name = "invoke_test", - srcs = ["invoke_test.cc"], - deps = [ - ":invoke", - "//:jni_dep", - "//:jni_test", - "//:mock_jni_env", - "//implementation:fake_test_constants", - "@googletest//:gtest_main", - ], -) - -cc_library( - name = "invoke_static", - hdrs = ["invoke_static.h"], - deps = [ - ":invoke", - ":jni_env", - ":trace", - "//:jni_dep", - ], -) - +################################################################################ +# Lifecycle. +################################################################################ cc_library( name = "lifecycle", hdrs = ["lifecycle.h"], @@ -178,6 +211,9 @@ cc_test( ], ) +################################################################################ +# Static field. +################################################################################ cc_library( name = "static_field_value", hdrs = ["static_field_value.h"], @@ -189,6 +225,9 @@ cc_library( ], ) +################################################################################ +# Trace. +################################################################################ cc_library( name = "trace", hdrs = ["trace.h"], diff --git a/implementation/jni_helper/arg_print.h b/implementation/jni_helper/arg_print.h new file mode 100644 index 00000000..c1691f9d --- /dev/null +++ b/implementation/jni_helper/arg_print.h @@ -0,0 +1,186 @@ +/* + * Copyright 2024 Google LLC + * + * Licensed 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. + */ +#ifndef JNI_BIND_IMPLEMENTATION_JNI_HELPER_ARG_PRINT_H_ +#define JNI_BIND_IMPLEMENTATION_JNI_HELPER_ARG_PRINT_H_ + +#include +#include + +#include "jni_dep.h" + +namespace jni { + +// A basic default printer that uses `printf`. +template +struct ArgPrinter {}; + +// Helper function to select correct ArgPrinter partial specialization. +template +void ArgPrint(const T& val) { + ArgPrinter::Print(val); +} + +//////////////////////////////////////////////////////////////////////////////// +// Void. +//////////////////////////////////////////////////////////////////////////////// +template <> +struct ArgPrinter { + static void Print() {} +}; + +inline void ArgPrint() { ArgPrinter::Print(); } + +//////////////////////////////////////////////////////////////////////////////// +// Primitive Types. +//////////////////////////////////////////////////////////////////////////////// +template <> +struct ArgPrinter { + static void Print(const bool val) { printf("%s", val ? "TRUE" : "FALSE"); } +}; + +template <> +struct ArgPrinter { + static void Print(const char val) { printf("%c", val); } +}; + +template <> +struct ArgPrinter { + static void Print(const signed char val) { printf("%c", val); } +}; + +template <> +struct ArgPrinter { + static void Print(const unsigned char val) { printf("%c", val); } +}; + +template <> +struct ArgPrinter { + static void Print(const short val) { printf("%hd", val); } +}; + +template <> +struct ArgPrinter { + static void Print(const unsigned short val) { printf("%d", val); } +}; + +template <> +struct ArgPrinter { + static void Print(const int val) { printf("%i", val); } +}; + +template <> +struct ArgPrinter { + static void Print(const double val) { printf("%f", val); } +}; + +template <> +struct ArgPrinter { + static void Print(const jfloat val) { printf("%f", val); } +}; + +template <> +struct ArgPrinter { + static void Print(const jlong val) { printf("%ld", val); } +}; + +template <> +struct ArgPrinter { + static void Print(const jlong val) { printf("%ld", val); } +}; + +//////////////////////////////////////////////////////////////////////////////// +// Pointers. +//////////////////////////////////////////////////////////////////////////////// +template +struct ArgPrinter { + static void Print(const T* val) { printf("%p", val); } +}; + +template <> +struct ArgPrinter { + static void Print(const jobject val) { printf("%p", val); } +}; + +template <> +struct ArgPrinter { + static void Print(const jfieldID val) { printf("0x%p", val); } +}; + +template <> +struct ArgPrinter { + static void Print(const jstring val) { printf("0x%p", val); } +}; + +template <> +struct ArgPrinter { + static void Print(const jclass val) { printf("0x%p", val); } +}; + +template <> +struct ArgPrinter { + static void Print(const jarray val) { printf("0x%p", val); } +}; + +//////////////////////////////////////////////////////////////////////////////// +// Char* (Strings). +//////////////////////////////////////////////////////////////////////////////// +template <> +struct ArgPrinter { + static void Print(const char* val) { + if (val) { + printf("%s", val); + } else { + printf("nullptr"); + } + } +}; + +template <> +struct ArgPrinter { + static void Print(const char* val) { + if (val) { + printf("%s", val); + } else { + printf("nullptr"); + } + } +}; + +template +struct ArgPrinter { + static void Print(const char* val) { + if (val) { + printf("%s", val); + } else { + printf("nullptr"); + } + } +}; + +template +struct ArgPrinter { + static void Print(const char* val) { + if (val) { + printf("%s", val); + } else { + printf("nullptr"); + } + } +}; + +} // namespace jni + +#endif // JNI_BIND_IMPLEMENTATION_JNI_HELPER_ARG_PRINT_H_ diff --git a/metaprogramming/BUILD b/metaprogramming/BUILD index f533b916..15d23429 100644 --- a/metaprogramming/BUILD +++ b/metaprogramming/BUILD @@ -6,6 +6,9 @@ licenses(["notice"]) exports_files(["LICENSE"]) +################################################################################ +# All. +################################################################################ cc_library( name = "all", hdrs = ["all.h"], @@ -39,6 +42,9 @@ cc_test( ], ) +################################################################################ +# Any. +################################################################################ cc_library( name = "any", hdrs = ["any.h"], @@ -56,6 +62,9 @@ cc_test( ], ) +################################################################################ +# Apply. +################################################################################ cc_library( name = "apply", hdrs = ["apply.h"], @@ -79,6 +88,9 @@ cc_test( ], ) +################################################################################ +# Base. +################################################################################ cc_library( name = "base", hdrs = ["base.h"], @@ -99,6 +111,9 @@ cc_test( ], ) +################################################################################ +# Call. +################################################################################ cc_library( name = "call", hdrs = ["call.h"], @@ -113,6 +128,9 @@ cc_test( ], ) +################################################################################ +# Cartesian Product. +################################################################################ cc_library( name = "cartesian_product", hdrs = ["cartesian_product.h"], @@ -137,6 +155,9 @@ cc_test( ], ) +################################################################################ +# Chain. +################################################################################ cc_library( name = "chain", hdrs = ["chain.h"], @@ -158,6 +179,27 @@ cc_test( ], ) +################################################################################ +# colour. +################################################################################ +cc_library( + name = "colour", + hdrs = ["colour.h"], + deps = [], +) + +cc_test( + name = "colour_test", + srcs = ["colour_test.cc"], + deps = [ + ":colour", + "@googletest//:gtest_main", + ], +) + +################################################################################ +# Concatenate. +################################################################################ cc_library( name = "concatenate", hdrs = ["concatenate.h"], @@ -178,6 +220,9 @@ cc_test( ], ) +################################################################################ +# Conditional. +################################################################################ cc_library( name = "conditional", hdrs = ["conditional.h"], @@ -193,6 +238,9 @@ cc_test( ], ) +################################################################################ +# Conjunction. +################################################################################ cc_library( name = "conjunction", hdrs = ["conjunction.h"], @@ -213,6 +261,9 @@ cc_test( ], ) +################################################################################ +# Contains. +################################################################################ cc_library( name = "contains", hdrs = ["contains.h"], @@ -253,6 +304,9 @@ cc_test( ], ) +################################################################################ +# Combine. +################################################################################ cc_library( name = "combine", hdrs = ["combine.h"], @@ -267,6 +321,9 @@ cc_test( ], ) +################################################################################ +# Corpus. +################################################################################ cc_library( name = "corpus", hdrs = ["corpus.h"], @@ -293,6 +350,9 @@ cc_test( ], ) +################################################################################ +# Deep Equal. +################################################################################ cc_library( name = "deep_equal", hdrs = ["deep_equal.h"], @@ -331,6 +391,9 @@ cc_test( ], ) +################################################################################ +# Detect. +################################################################################ cc_library( name = "detect", hdrs = ["detect.h"], @@ -345,6 +408,9 @@ cc_test( ], ) +################################################################################ +# Double Locked Value. +################################################################################ cc_library( name = "double_locked_value", hdrs = ["double_locked_value.h"], @@ -359,6 +425,9 @@ cc_test( ], ) +################################################################################ +# Even Odd. +################################################################################ cc_library( name = "even_odd", hdrs = ["even_odd.h"], @@ -374,6 +443,9 @@ cc_test( ], ) +################################################################################ +# Filter. +################################################################################ cc_library( name = "filter", hdrs = ["filter.h"], @@ -397,6 +469,9 @@ cc_test( ], ) +################################################################################ +# Find Idx. +################################################################################ cc_library( name = "find_idx_of_val", hdrs = ["find_idx_of_val.h"], @@ -416,6 +491,9 @@ cc_test( ], ) +################################################################################ +# Flatten. +################################################################################ cc_library( name = "flatten", hdrs = ["flatten.h"], @@ -431,6 +509,9 @@ cc_test( ], ) +################################################################################ +# Function Traits. +################################################################################ cc_library( name = "function_traits", hdrs = ["function_traits.h"], @@ -445,12 +526,18 @@ cc_test( ], ) +################################################################################ +# Headers for export. +################################################################################ filegroup( name = "headers_for_export", srcs = glob(["**/*.h"]), visibility = ["//visibility:public"], ) +################################################################################ +# Increment. +################################################################################ cc_library( name = "increment", hdrs = ["increment.h"], @@ -466,6 +553,9 @@ cc_test( ], ) +################################################################################ +# Index. +################################################################################ cc_library( name = "index", hdrs = ["index.h"], @@ -481,6 +571,9 @@ cc_test( ], ) +################################################################################ +# Interleave. +################################################################################ cc_library( name = "interleave", hdrs = ["interleave.h"], @@ -495,6 +588,9 @@ cc_test( ], ) +################################################################################ +# Invocable Map. +################################################################################ cc_library( name = "invocable_map", hdrs = ["invocable_map.h"], @@ -515,6 +611,9 @@ cc_test( ], ) +################################################################################ +# Invoke. +################################################################################ cc_library( name = "invoke", hdrs = ["invoke.h"], @@ -537,6 +636,9 @@ cc_test( ], ) +################################################################################ +# Lambda Compatible. +################################################################################ cc_library( name = "lambda_compatible", hdrs = ["lambda_compatible.h"], @@ -558,6 +660,9 @@ cc_test( ], ) +################################################################################ +# Lambda String. +################################################################################ cc_library( name = "lambda_string", hdrs = ["lambda_string.h"], @@ -572,6 +677,9 @@ cc_test( ], ) +################################################################################ +# Optional Wrap. +################################################################################ cc_library( name = "optional_wrap", hdrs = ["optional_wrap.h"], @@ -586,6 +694,9 @@ cc_test( ], ) +################################################################################ +# Tuple Manipulation. +################################################################################ cc_library( name = "tuple_manipulation", hdrs = ["tuple_manipulation.h"], @@ -600,6 +711,9 @@ cc_test( ], ) +################################################################################ +# Tuple from Size. +################################################################################ cc_library( name = "tuple_from_size", hdrs = ["tuple_from_size.h"], @@ -614,6 +728,9 @@ cc_test( ], ) +################################################################################ +# Type Map. +################################################################################ cc_library( name = "type_map", hdrs = ["type_map.h"], @@ -635,6 +752,9 @@ cc_test( ], ) +################################################################################ +# Type of nth Element. +################################################################################ cc_library( name = "type_of_nth_element", hdrs = ["type_of_nth_element.h"], @@ -650,6 +770,9 @@ cc_test( ], ) +################################################################################ +# Min Max. +################################################################################ cc_library( name = "min_max", hdrs = ["min_max.h"], @@ -666,6 +789,9 @@ cc_test( ], ) +################################################################################ +# Modified Max. +################################################################################ cc_library( name = "modified_max", hdrs = ["modified_max.h"], @@ -680,11 +806,17 @@ cc_test( ], ) +################################################################################ +# Name Constants. +################################################################################ cc_library( name = "name_constants", hdrs = ["name_constants.h"], ) +################################################################################ +# N bit. +################################################################################ cc_library( name = "n_bit", hdrs = ["n_bit.h"], @@ -722,6 +854,9 @@ cc_test( ], ) +################################################################################ +# Next. +################################################################################ cc_library( name = "next", hdrs = ["next.h"], @@ -739,6 +874,9 @@ cc_test( ], ) +################################################################################ +# Pack Discriminator. +################################################################################ cc_library( name = "pack_discriminator", hdrs = ["pack_discriminator.h"], @@ -753,6 +891,26 @@ cc_test( ], ) +################################################################################ +# Passthrough. +################################################################################ +cc_library( + name = "passthrough", + hdrs = ["passthrough.h"], +) + +cc_test( + name = "passthrough_test", + srcs = ["passthrough_test.cc"], + deps = [ + ":passthrough", + "@googletest//:gtest_main", + ], +) + +################################################################################ +# Per Element. +################################################################################ cc_library( name = "per_element", hdrs = ["per_element.h"], @@ -785,6 +943,9 @@ cc_test( ], ) +################################################################################ +# Queryable Map. +################################################################################ cc_library( name = "queryable_map", hdrs = ["queryable_map.h"], @@ -806,6 +967,9 @@ cc_test( ], ) +################################################################################ +# Reduce. +################################################################################ cc_library( name = "reduce", hdrs = ["reduce.h"], @@ -830,6 +994,9 @@ cc_test( ], ) +################################################################################ +# Repeat String. +################################################################################ cc_library( name = "repeat_string", hdrs = ["repeat_string.h"], @@ -860,6 +1027,9 @@ cc_test( ], ) +################################################################################ +# Reverse. +################################################################################ cc_library( name = "reverse", hdrs = ["reverse.h"], @@ -878,6 +1048,9 @@ cc_test( ], ) +################################################################################ +# Same. +################################################################################ cc_library( name = "same", hdrs = ["same.h"], @@ -892,6 +1065,9 @@ cc_test( ], ) +################################################################################ +# String Concenate. +################################################################################ cc_library( name = "string_concatenate", hdrs = ["string_concatenate.h"], @@ -906,6 +1082,9 @@ cc_test( ], ) +################################################################################ +# String Contains. +################################################################################ cc_library( name = "string_contains", hdrs = ["string_contains.h"], @@ -921,6 +1100,9 @@ cc_test( ], ) +################################################################################ +# Type Index Mask. +################################################################################ cc_library( name = "type_index_mask", hdrs = ["type_index_mask.h"], @@ -936,6 +1118,9 @@ cc_test( ], ) +################################################################################ +# Type to Type Map. +################################################################################ cc_library( name = "type_to_type_map", hdrs = ["type_to_type_map.h"], @@ -959,6 +1144,9 @@ cc_test( ], ) +################################################################################ +# Unfurl. +################################################################################ cc_library( name = "unfurl", hdrs = ["unfurl.h"], @@ -976,6 +1164,9 @@ cc_test( ], ) +################################################################################ +# Unique Set. +################################################################################ cc_library( name = "unique_set", hdrs = ["unique_set.h"], @@ -994,6 +1185,9 @@ cc_test( ], ) +################################################################################ +# Unwrap. +################################################################################ cc_library( name = "unwrap", hdrs = ["unwrap.h"], @@ -1011,6 +1205,9 @@ cc_test( ], ) +################################################################################ +# Vals. +################################################################################ cc_library( name = "vals", hdrs = ["vals.h"], @@ -1050,6 +1247,9 @@ cc_test( ], ) +################################################################################ +# Zip Invoke. +################################################################################ cc_library( name = "zip_invoke", hdrs = ["zip_invoke.h"], @@ -1061,20 +1261,6 @@ cc_library( ], ) -cc_library( - name = "passthrough", - hdrs = ["passthrough.h"], -) - -cc_test( - name = "passthrough_test", - srcs = ["passthrough_test.cc"], - deps = [ - ":passthrough", - "@googletest//:gtest_main", - ], -) - cc_test( name = "zip_invoke_test", srcs = ["zip_invoke_test.cc"], diff --git a/metaprogramming/colour.h b/metaprogramming/colour.h new file mode 100644 index 00000000..1cd73573 --- /dev/null +++ b/metaprogramming/colour.h @@ -0,0 +1,57 @@ +/* + * Copyright 2024 Google LLC + * + * Licensed 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. + */ + +#ifndef JNI_BIND_METAPROGRAMMING_COLOUR_H_ +#define JNI_BIND_METAPROGRAMMING_COLOUR_H_ + +#include +#include + +namespace jni::metaprogramming { + +struct Colour { + static constexpr std::string_view kNone{"\033[0m"}; + + static constexpr std::string_view kBlack = "\033[0;30m"; + static constexpr std::string_view kBlackBold = "\033[1;30m"; + static constexpr std::string_view kRed = "\033[0;31m"; + static constexpr std::string_view kRedBold = "\033[1;31m"; + static constexpr std::string_view kGreen = "\033[0;32m"; + static constexpr std::string_view kGreenBold = "\033[1;32m"; + static constexpr std::string_view kYellow = "\033[0;33m"; + static constexpr std::string_view kYellowBold = "\033[1;33m"; + static constexpr std::string_view kBlue = "\033[0;34m"; + static constexpr std::string_view kBlueBold = "\033[1;34m"; + static constexpr std::string_view kPurple = "\033[0;35m"; + static constexpr std::string_view kPurpleBold = "\033[1;35m"; + static constexpr std::string_view kCyan = "\033[0;36m"; + static constexpr std::string_view kCyanBold = "\033[1;36m"; + static constexpr std::string_view kWhite = "\033[0;37m"; + static constexpr std::string_view kWhiteBold = "\033[1;37m"; +}; + +// Colourize function for runtime manipulation of text. This is suitable when +// the string is unknowable until runtime. +inline std::string Colourize(std::string_view colour, std::string_view str, + bool colourize = true) { + return !colourize ? std::string{str} + : std::string{colour} + std::string{str} + + std::string{Colour::kNone}; +} + +} // namespace jni::metaprogramming + +#endif // JNI_BIND_METAPROGRAMMING_COLOUR_H_ diff --git a/metaprogramming/colour_test.cc b/metaprogramming/colour_test.cc new file mode 100644 index 00000000..676917fb --- /dev/null +++ b/metaprogramming/colour_test.cc @@ -0,0 +1,45 @@ +/* + * Copyright 2024 Google LLC + * + * Licensed 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 "colour.h" + +#include +#include + +#include + +using ::jni::metaprogramming::Colour; +using ::jni::metaprogramming::Colourize; + +namespace { + +TEST(ColourTest, HasBlue) { + std::string output = Colourize(Colour::kBlue, "Blue words").data(); + + printf("%s\n", output.c_str()); + + EXPECT_TRUE(Colourize(Colour::kBlue, "Blue words").find(Colour::kBlue) != + std::string::npos); +} + +TEST(ColourTest, HasGreenAndDoesntBleed) { + std::string output = Colourize(Colour::kRed, "Red words").data(); + printf("%s, no colour.\n", output.c_str()); + + EXPECT_TRUE(output.find(Colour::kRed) != std::string::npos); +} + +} // namespace