001package Torello.JSON; 002 003import Torello.Java.Additional.EffectivelyFinal; 004 005import Torello.JavaDoc.Annotations.StaticFunctional; 006import Torello.JavaDoc.Annotations.JDHeaderBackgroundImg; 007import Torello.JavaDoc.Annotations.LinkJavaSource; 008 009import Torello.JavaDoc.Annotations.IntoHTMLTable; 010import static Torello.JavaDoc.Annotations.IntoHTMLTable.Background.GreenDither; 011import static Torello.JavaDoc.Annotations.IntoHTMLTable.Background.BlueDither; 012 013import static Torello.JSON.JFlag.NOT_ALLOWED_RET_NULL_MASKS; 014 015import java.util.stream.IntStream; 016import java.util.stream.LongStream; 017import java.util.stream.DoubleStream; 018 019import java.util.function.ToIntFunction; 020import java.util.function.ToLongFunction; 021import java.util.function.ToDoubleFunction; 022 023import javax.json.Json; 024import javax.json.JsonArray; 025 026/** 027 * Utilities for parsing Json Array's and sending the parsed values into a Java Primitive 028 * Stream. 029 * 030 * <EMBED CLASS='globalDefs' DATA-A_AN=A> 031 * <EMBED CLASS='external-html' DATA-FILE-ID=ALL_CLASSES_NOTE> 032 * <EMBED CLASS='external-html' DATA-FILE-ID=RJA_INTO_PRIM_STRM> 033 * <EMBED CLASS='external-html' DATA-FILE-ID=LOOP_OPTIMIZED_NOTE> 034 * <EMBED CLASS='external-html' DATA-FILE-ID=RJ_PT_PRIM_STRM> 035 * 036 * @see Json 037 * @see JsonArray 038 */ 039@StaticFunctional 040@JDHeaderBackgroundImg(EmbedTagFileID="RJA_JDHBI_PRIM_STRM") 041public class RJArrIntoPrimStream 042{ 043 private RJArrIntoPrimStream() { } 044 045 046 // ******************************************************************************************** 047 // ******************************************************************************************** 048 // Stream Generators 049 // ******************************************************************************************** 050 // ******************************************************************************************** 051 052 053 /** 054 * <EMBED CLASS=defs DATA-TYPE=Integer DATA-TYPE_LC=int DATA-STRM_TYPE=IntStream DATA-A_AN=An> 055 * <EMBED CLASS='external-html' DATA-FILE-ID=RJ_ARR_PRIM_STREAM_STRM> 056 * @see ProcessJsonArray#numericToJava(JsonArray, SettingsRec) 057 * @see #intRec(int, int, ToIntFunction) 058 */ 059 @IntoHTMLTable(background=GreenDither, title="Generate a Java (Primitive) IntStream") 060 public static IntStream intArr( 061 final JsonArray ja, 062 final int defaultValue, 063 final int FLAGS, 064 final ToIntFunction<String> optionalUserParser 065 ) 066 { return ProcessJsonArray.numericToJava(ja, intRec(defaultValue, FLAGS, optionalUserParser)); } 067 068 /** 069 * <EMBED CLASS=defs DATA-TYPE=Long DATA-TYPE_LC=long DATA-STRM_TYPE=LongStream> 070 * <EMBED CLASS='external-html' DATA-FILE-ID=RJ_ARR_PRIM_STREAM_STRM> 071 * @see ProcessJsonArray#numericToJava(JsonArray, SettingsRec) 072 * @see #longRec(long, int, ToLongFunction) 073 */ 074 @IntoHTMLTable(background=BlueDither, title="Generate a Java (Primitive) LongStream") 075 public static LongStream longArr( 076 final JsonArray ja, 077 final long defaultValue, 078 final int FLAGS, 079 final ToLongFunction<String> optionalUserParser 080 ) 081 { 082 return ProcessJsonArray.numericToJava 083 (ja, longRec(defaultValue, FLAGS, optionalUserParser)); 084 } 085 086 /** 087 * <EMBED CLASS=defs DATA-TYPE=Double DATA-TYPE_LC=double DATA-STRM_TYPE=DoubleStream> 088 * <EMBED CLASS='external-html' DATA-FILE-ID=RJ_ARR_PRIM_STREAM_STRM> 089 * @see ProcessJsonArray#numericToJava(JsonArray, SettingsRec) 090 * @see #doubleRec(double, int, ToDoubleFunction) 091 */ 092 @IntoHTMLTable(background=GreenDither, title="Generate a Java (Primitive) DoubleStream") 093 public static DoubleStream doubleArr( 094 final JsonArray ja, 095 final double defaultValue, 096 final int FLAGS, 097 final ToDoubleFunction<String> optionalUserParser 098 ) 099 { 100 return ProcessJsonArray.numericToJava 101 (ja, doubleRec(defaultValue, FLAGS, optionalUserParser)); 102 } 103 104 105 // ******************************************************************************************** 106 // ******************************************************************************************** 107 // SettingsRec Generators 108 // ******************************************************************************************** 109 // ******************************************************************************************** 110 111 112 /** 113 * <EMBED CLASS=defs DATA-TYPE=Integer DATA-TYPE_LC=int DATA-STRM_TYPE=IntStream DATA-A_AN=An> 114 * <EMBED CLASS='external-html' DATA-FILE-ID=RJ_ARR_PRIM_STREAM_REC> 115 */ 116 @IntoHTMLTable( 117 background=BlueDither, 118 title="Generate a Java (Primitive) IntStream Configuration-Record" 119 ) 120 @LinkJavaSource(handle="BASIC_TYPES", name="INTEGER") 121 @LinkJavaSource(handle="SETTINGS_REC_BUILDER", name="primitiveStreams") 122 public static SettingsRec<Integer, IntStream> intRec( 123 final int defaultValue, 124 final int FLAGS, 125 final ToIntFunction<String> optionalUserParser 126 ) 127 { 128 final EffectivelyFinal<IntStream.Builder> EF = new EffectivelyFinal<>(null); 129 130 return new SETTINGS_REC_BUILDER<Integer, IntStream>( 131 defaultValue, 132 FLAGS & NOT_ALLOWED_RET_NULL_MASKS, 133 (optionalUserParser == null) ? null : optionalUserParser::applyAsInt, 134 BASIC_TYPES.PRIMITIVE_INTEGER() 135 ) 136 .primitiveStreams( 137 (Integer i) -> EF.f.accept(i.intValue()), // Consumer<Integer> 138 () -> EF.f = IntStream.builder(), // Runnable 139 () -> EF.f.build() // Supplier<IntStream> 140 ); 141 } 142 143 /** 144 * <EMBED CLASS=defs DATA-TYPE=Long DATA-TYPE_LC=long DATA-STRM_TYPE=LongStream> 145 * <EMBED CLASS='external-html' DATA-FILE-ID=RJ_ARR_PRIM_STREAM_REC> 146 */ 147 @IntoHTMLTable( 148 background=GreenDither, 149 title="Generate a Java (Primitive) LongStream Configuration-Recod" 150 ) 151 @LinkJavaSource(handle="BASIC_TYPES", name="LONG") 152 @LinkJavaSource(handle="SETTINGS_REC_BUILDER", name="primitiveStreams") 153 public static SettingsRec<Long, LongStream> longRec( 154 final long defaultValue, 155 final int FLAGS, 156 final ToLongFunction<String> optionalUserParser 157 ) 158 { 159 final EffectivelyFinal<LongStream.Builder> EF = new EffectivelyFinal<>(null); 160 161 return new SETTINGS_REC_BUILDER<Long, LongStream>( 162 defaultValue, 163 FLAGS & NOT_ALLOWED_RET_NULL_MASKS, 164 (optionalUserParser == null) ? null : optionalUserParser::applyAsLong, 165 BASIC_TYPES.PRIMITIVE_LONG() 166 ) 167 .primitiveStreams( 168 (Long l) -> EF.f.accept(l.longValue()), // Consumer<Long> 169 () -> EF.f = LongStream.builder(), // Runnable 170 () -> EF.f.build() // Supplier<LongStream> 171 ); 172 } 173 174 /** 175 * <EMBED CLASS=defs DATA-TYPE=Double DATA-TYPE_LC=double DATA-STRM_TYPE=DoubleStream> 176 * <EMBED CLASS='external-html' DATA-FILE-ID=RJ_ARR_PRIM_STREAM_REC> 177 */ 178 @IntoHTMLTable( 179 background=BlueDither, 180 title="Generate a Java (Primitive) DoubleStream Configuration-Record" 181 ) 182 @LinkJavaSource(handle="BASIC_TYPES", name="DOUBLE") 183 @LinkJavaSource(handle="SETTINGS_REC_BUILDER", name="primitiveStreams") 184 public static SettingsRec<Double, DoubleStream> doubleRec( 185 final double defaultValue, 186 final int FLAGS, 187 final ToDoubleFunction<String> optionalUserParser 188 ) 189 { 190 final EffectivelyFinal<DoubleStream.Builder> EF = new EffectivelyFinal<>(null); 191 192 return new SETTINGS_REC_BUILDER<Double, DoubleStream>( 193 defaultValue, 194 FLAGS & NOT_ALLOWED_RET_NULL_MASKS, 195 (optionalUserParser == null) ? null : optionalUserParser::applyAsDouble, 196 BASIC_TYPES.PRIMITIVE_DOUBLE() 197 ) 198 .primitiveStreams( 199 (Double d) -> EF.f.accept(d.doubleValue()), // Consumer<Double> 200 () -> EF.f = DoubleStream.builder(), // Runnable 201 () -> EF.f.build() // Supplier<DoubleStream> 202 ); 203 } 204 205}