public override async Task GenerateWrite( FileGeneration fg, ObjectGeneration objGen, TypeGeneration typeGen, Accessor writerAccessor, Accessor itemAccessor, Accessor errorMaskAccessor, Accessor translationMaskAccessor, Accessor converterAccessor) { var data = typeGen.CustomData[Constants.DataKey] as MutagenFieldData; using (var args = new ArgsWrapper(fg, $"{this.NamespacePrefix}FilePathBinaryTranslation.Instance.Write{(typeGen.Nullable ? "Nullable" : null)}")) { args.Add($"writer: {writerAccessor}"); args.Add($"item: {itemAccessor}"); if (data.RecordType.HasValue) { args.Add($"header: recordTypeConverter.ConvertToCustom({objGen.RecordTypeHeaderName(data.RecordType.Value)})"); } else { args.Add($"length: {data.Length.Value}"); } } }
private void GenerateCustomBinaryEndCreatePartial(ObjectGeneration obj, FileGeneration fg) { var data = obj.GetObjectData(); if (data.CustomBinaryEnd == CustomEnd.Off) { return; } if (data.CustomBinaryEnd == CustomEnd.Normal) { using (var args = new ArgsWrapper(fg, $"public static partial void CustomBinaryEndImport")) { args.Add($"{ReaderClass} {ReaderMemberName}"); args.Add($"{obj.Interface(getter: false, internalInterface: true)} obj"); } using (var args = new FunctionWrapper(fg, $"public static void CustomBinaryEndImportPublic")) { args.Add($"{ReaderClass} {ReaderMemberName}"); args.Add($"{obj.Interface(getter: false, internalInterface: true)} obj"); } using (new BraceWrapper(fg)) { using (var args = new ArgsWrapper(fg, $"CustomBinaryEndImport")) { args.AddPassArg(ReaderMemberName); args.AddPassArg($"obj"); } } } }
public static void GenerateWritePartialMethods( FileGeneration fg, ObjectGeneration obj, TypeGeneration field, bool isAsync) { using (var args = new FunctionWrapper(fg, $"public static partial void WriteBinary{field.Name}Custom{obj.GetGenericTypes(MaskType.Normal)}")) { args.Wheres.AddRange(obj.GenerateWhereClauses(LoquiInterfaceType.IGetter, defs: obj.Generics)); args.SemiColon = true; args.Add($"{nameof(MutagenWriter)} writer"); args.Add($"{obj.Interface(getter: true, internalInterface: true)} item"); } fg.AppendLine(); using (var args = new FunctionWrapper(fg, $"public static void WriteBinary{field.Name}{obj.GetGenericTypes(MaskType.Normal)}")) { args.Wheres.AddRange(obj.GenerateWhereClauses(LoquiInterfaceType.IGetter, defs: obj.Generics)); args.Add($"{nameof(MutagenWriter)} writer"); args.Add($"{obj.Interface(getter: true, internalInterface: true)} item"); } using (new BraceWrapper(fg)) { using (var args = new ArgsWrapper(fg, $"WriteBinary{field.Name}Custom")) { args.Add("writer: writer"); args.Add("item: item"); } } fg.AppendLine(); }
public override void GenerateCopyIn(FileGeneration fg, ObjectGeneration objGen, TypeGeneration typeGen, Accessor nodeAccessor, Accessor itemAccessor, Accessor errorMaskAccessor, Accessor translationMaskAccessor) { GenderedType gendered = typeGen as GenderedType; var gen = this.XmlMod.GetTypeGeneration(gendered.SubTypeGeneration.GetType()); MaskGenerationUtility.WrapErrorFieldIndexPush( fg, () => { using (var args = new ArgsWrapper(fg, $"{itemAccessor} = new {typeGen.TypeName(getter: false)}")) { args.Add(subFg => { gen.GenerateCopyIn(subFg, objGen, gendered.SubTypeGeneration, nodeAccessor, Accessor.ConstructorParam($"male"), errorMaskAccessor, translationMaskAccessor: null); }); args.Add(subFg => { gen.GenerateCopyIn(subFg, objGen, gendered.SubTypeGeneration, nodeAccessor, Accessor.ConstructorParam($"female"), errorMaskAccessor, translationMaskAccessor: null); }); } }, errorMaskAccessor, typeGen.HasIndex ? typeGen.IndexEnumInt : default(Accessor)); }
public override async Task GenerateWrite( FileGeneration fg, ObjectGeneration objGen, TypeGeneration typeGen, Accessor writerAccessor, Accessor itemAccessor, Accessor errorMaskAccessor, Accessor translationMaskAccessor, Accessor converterAccessor) { BufferType zero = typeGen as BufferType; using (var args = new ArgsWrapper(fg, $"{this.Namespace}ByteArrayBinaryTranslation.Instance.Write")) { args.Add($"writer: {writerAccessor}"); if (zero.Static) { args.Add($"item: {objGen.CommonClassName(LoquiInterfaceType.IGetter, MaskType.Normal)}.{typeGen.Name}"); } else { args.Add($"item: {itemAccessor}"); } } }
private async Task GenerateForRecord(ObjectGeneration obj, FileGeneration fg) { if (!obj.IsTopClass) { return; } using (var args = new FunctionWrapper(fg, $"public{obj.FunctionOverride()}async Task WriteToXmlFolder")) { args.Add("DirectoryPath dir"); args.Add("string name"); args.Add("XElement node"); args.Add("int counter"); args.Add($"ErrorMaskBuilder? errorMask"); } using (new BraceWrapper(fg)) { using (var args = new ArgsWrapper(fg, "this.WriteToXml")) { args.Add("node: node"); args.Add("errorMask: errorMask"); args.Add("translationMask: null"); } } }
public override async Task GenerateCopyIn( FileGeneration fg, ObjectGeneration objGen, TypeGeneration typeGen, Accessor frameAccessor, Accessor itemAccessor, Accessor errorMaskAccessor, Accessor translationMaskAccessor) { var loqui = typeGen as LoquiType; var data = loqui.GetFieldData(); if (data.MarkerType.HasValue && !data.RecordType.HasValue) { fg.AppendLine($"frame.Position += frame.{nameof(MutagenFrame.MetaData)}.{nameof(ParsingBundle.Constants)}.{nameof(GameConstants.SubConstants)}.{nameof(GameConstants.SubConstants.HeaderLength)} + contentLength; // Skip marker"); } if (loqui.TargetObjectGeneration != null) { if (loqui.SetterInterfaceType == LoquiInterfaceType.IGetter) { return; } if (loqui.Singleton) { using (var args = new ArgsWrapper(fg, $"{Loqui.Generation.Utility.Await(this.IsAsync(typeGen, read: true))}{itemAccessor}.{this.Module.CopyInFromPrefix}{ModNickname}")) { args.Add($"frame: {frameAccessor}"); args.Add($"recordTypeConverter: null"); } } else { if (NeedsHeaderProcessing(loqui)) { fg.AppendLine($"frame.Position += frame.{nameof(MutagenFrame.MetaData)}.{nameof(ParsingBundle.Constants)}.{nameof(GameConstants.SubConstants)}.{nameof(GameConstants.SubConstants.HeaderLength)}; // Skip header"); } using (var args = new ArgsWrapper(fg, $"{itemAccessor} = {loqui.TargetObjectGeneration.Namespace}.{loqui.TypeNameInternal(getter: false, internalInterface: true)}.{this.Module.CreateFromPrefix}{this.Module.ModuleNickname}")) { args.Add($"frame: {frameAccessor}"); if (data?.RecordTypeConverter != null && data.RecordTypeConverter.FromConversions.Count > 0) { args.Add($"recordTypeConverter: {objGen.RegistrationName}.{typeGen.Name}Converter"); } else if (await NeedsRecordTypeConverter(loqui)) { args.AddPassArg($"recordTypeConverter"); } } } } else { throw new NotImplementedException(); } }
protected override async Task GenerateNewSnippet(ObjectGeneration obj, FileGeneration fg) { if (await obj.IsMajorRecord()) { fg.AppendLine($"var ret = new {obj.Name}();"); } else { if (obj.TryGetCustomRecordTypeTriggers(out var customLogicTriggers)) { using (var args = new ArgsWrapper(fg, $"var nextRecord = HeaderTranslation.GetNext{(obj.GetObjectType() == ObjectType.Subrecord ? "Subrecord" : "Record")}Type")) { args.Add($"reader: {ReaderMemberName}.Reader"); args.Add("contentLength: out var customLen"); } fg.AppendLine("nextRecord = recordTypeConverter.ConvertToCustom(nextRecord);"); fg.AppendLine("switch (nextRecord.TypeInt)"); using (new BraceWrapper(fg)) { foreach (var item in customLogicTriggers) { fg.AppendLine($"case {item.TypeInt}: // {item.Type}"); } using (new DepthWrapper(fg)) { using (var args = new ArgsWrapper(fg, "return CustomRecordTypeTrigger")) { args.Add($"{ReaderMemberName}: {ReaderMemberName}.SpawnWithLength(customLen + {ReaderMemberName}.{nameof(MutagenFrame.MetaData)}.{nameof(ParsingBundle.Constants)}.{nameof(GameConstants.SubConstants)}.{nameof(GameConstants.SubConstants.HeaderLength)})"); args.Add("recordType: nextRecord"); args.AddPassArg("recordTypeConverter"); } } fg.AppendLine("default:"); using (new DepthWrapper(fg)) { fg.AppendLine("break;"); } } } using (var args = new ArgsWrapper(fg, $"var ret = new {obj.Name}{obj.GetGenericTypes(MaskType.Normal)}")) { if (obj.GetObjectType() == ObjectType.Mod) { args.AddPassArg("modKey"); } if (obj.GetObjectData().GameReleaseOptions != null) { args.AddPassArg("release"); } } if (obj.GetObjectType() == ObjectType.Mod) { fg.AppendLine($"{ReaderMemberName}.MetaData.ModKey = modKey;"); } } }
public override void GenerateTypicalMakeCopy(FileGeneration fg, Accessor retAccessor, Accessor rhsAccessor, Accessor copyMaskAccessor, bool deepCopy, bool doTranslationMask) { if (this.GetObjectType() != ObjectType.Record) { base.GenerateTypicalMakeCopy(fg, retAccessor, rhsAccessor, copyMaskAccessor, deepCopy, doTranslationMask: doTranslationMask); return; } switch (this.RefType) { case LoquiRefType.Direct: using (var args = new ArgsWrapper(fg, $"{retAccessor}({this.TargetObjectGeneration.ObjectName}){rhsAccessor}.{(deepCopy ? "Deep" : null)}Copy")) { if (this.RefType == LoquiRefType.Direct) { if (!doTranslationMask) { args.Add($"copyMask: default(TranslationCrystal)"); } else if (deepCopy) { args.Add($"copyMask: {copyMaskAccessor}?.GetSubCrystal({this.IndexEnumInt})"); } else { args.Add($"copyMask: {copyMaskAccessor}.Specific"); } } args.AddPassArg($"errorMask"); } break; case LoquiRefType.Generic: if (deepCopy) { fg.AppendLine($"{retAccessor}(r.DeepCopy() as {_generic})!;"); } else { fg.AppendLine($"{retAccessor}{nameof(LoquiRegistration)}.GetCopyFunc<{_generic}, {_generic}Getter>()({rhsAccessor}, null);"); } break; case LoquiRefType.Interface: if (deepCopy) { fg.AppendLine($"{retAccessor}(r.DeepCopy() as {this.TypeNameInternal(getter: false, internalInterface: true)})!;"); } else { fg.AppendLine($"{retAccessor}{nameof(LoquiRegistration)}.GetCopyFunc<{this.TypeName()}, {this.TypeName(getter: true)}>(r.GetType(), typeof({this.TypeName(getter: true)}))({rhsAccessor}, null);"); } break; default: throw new NotImplementedException(); } }
public override void GenerateCopyInRet( FileGeneration fg, ObjectGeneration objGen, TypeGeneration targetGen, TypeGeneration typeGen, Accessor nodeAccessor, AsyncMode asyncMode, Accessor retAccessor, Accessor outItemAccessor, Accessor errorMaskAccessor, Accessor translationMaskAccessor, Accessor converterAccessor, bool inline) { if (asyncMode != AsyncMode.Off) { throw new NotImplementedException(); } if (inline) { fg.AppendLine($"transl: {this.GetTranslatorInstance(typeGen, getter: false)}.Parse"); } else { if (typeGen.TryGetFieldData(out var data) && data.RecordType.HasValue) { if (inline) { throw new NotImplementedException(); } fg.AppendLine("r.Position += Constants.SUBRECORD_LENGTH;"); } using (var args = new ArgsWrapper(fg, $"{outItemAccessor} = {this.Namespace}{this.Typename(typeGen)}BinaryTranslation.Instance.Parse")) { args.Add(nodeAccessor.DirectAccess); if (this.DoErrorMasks) { args.Add($"errorMask: {errorMaskAccessor}"); } foreach (var writeParam in this.AdditionalCopyInRetParams) { var get = writeParam( objGen: objGen, typeGen: typeGen); if (get.Failed) { continue; } args.Add(get.Value); } } fg.AppendLine("return true;"); } }
public override void GenerateForCopy(FileGeneration fg, Accessor accessor, Accessor rhs, Accessor copyMaskAccessor, bool protectedMembers, bool deepCopy) { if (!deepCopy) { throw new NotImplementedException(); } if (this.Nullable) { fg.AppendLine($"if (!{rhs}.TryGet(out var rhs{this.Name}item))"); using (new BraceWrapper(fg)) { fg.AppendLine($"{accessor} = null;"); } fg.AppendLine("else"); rhs = $"rhs{this.Name}item"; } using (new BraceWrapper(fg, doIt: this.Nullable)) { using (var args = new ArgsWrapper(fg, $"{accessor} = new GenderedItem<{this.SubTypeGeneration.TypeName(getter: false, needsCovariance: true)}{this.SubTypeGeneration.NullChar}>")) { if (this.isLoquiSingle) { LoquiType loqui = this.SubTypeGeneration as LoquiType; args.Add(subFg => { loqui.GenerateTypicalMakeCopy( subFg, retAccessor: $"male: ", rhsAccessor: $"{rhs}.Male{this.SubTypeGeneration.NullChar}", copyMaskAccessor: $"{copyMaskAccessor}.Male", deepCopy: deepCopy, doTranslationMask: false); }); args.Add(subFg => { loqui.GenerateTypicalMakeCopy( subFg, retAccessor: $"female: ", rhsAccessor: $"{rhs}.Female{this.SubTypeGeneration.NullChar}", copyMaskAccessor: $"{copyMaskAccessor}.Female", deepCopy: deepCopy, doTranslationMask: false); }); } else { args.Add($"male: {this.SubTypeGeneration.GetDuplicate($"{rhs}.Male")}"); args.Add($"female: {this.SubTypeGeneration.GetDuplicate($"{rhs}.Female")}"); } } } }
bool ReadPercent(FileGeneration fg, ObjectGeneration objGen, TypeGeneration typeGen, Accessor reader, Accessor item) { var percType = typeGen as PercentType; using (var args = new ArgsWrapper(fg, $"{item} = {nameof(PercentBinaryTranslation)}.Parse")) { args.Add($"reader: {reader}"); args.Add($"integerType: {nameof(FloatIntegerType)}.{percType.IntegerType}"); } return(true); }
public void GenerateWrite( FileGeneration fg, ObjectGeneration obj, TypeGeneration field, Accessor writerAccessor) { using (var args = new ArgsWrapper(fg, $"{this.Module.TranslationWriteClass(obj)}.WriteBinary{field.Name}")) { args.Add($"writer: {writerAccessor}"); args.Add("item: item"); } }
public async Task GenerateForCustomFlagWrapperFields( FileGeneration fg, ObjectGeneration objGen, TypeGeneration typeGen, Accessor dataAccessor, int?currentPosition, string passedLenAccessor, DataType dataType = null) { var fieldData = typeGen.GetFieldData(); var gen = this.Module.GetTypeGeneration(typeGen.GetType()); string loc; if (fieldData.HasTrigger) { using (var args = new ArgsWrapper(fg, $"partial void {typeGen.Name}CustomParse")) { args.Add($"{nameof(OverlayStream)} stream"); args.Add($"long finalPos"); args.Add($"int offset"); } if (typeGen.Nullable && !typeGen.CanBeNullable(getter: true)) { fg.AppendLine($"public bool {typeGen.Name}_IsSet => Get{typeGen.Name}IsSetCustom();"); } loc = $"_{typeGen.Name}Location.Value"; } else if (dataType != null) { loc = $"_{typeGen.Name}Location"; DataBinaryTranslationGeneration.GenerateWrapperExtraMembers(fg, dataType, objGen, typeGen, passedLenAccessor); } else { loc = passedLenAccessor; } using (var args = new ArgsWrapper(fg, $"public {typeGen.OverrideStr}{typeGen.TypeName(getter: true)}{(typeGen.IsNullable ? "?" : null)} {typeGen.Name} => Get{typeGen.Name}Custom")) { if (!fieldData.HasTrigger && dataType == null) { args.Add($"location: {loc ?? "0x0"}"); } } if (!fieldData.HasTrigger) { currentPosition += fieldData.Length ?? await gen.ExpectedLength(objGen, typeGen); } }
public void GenerateFill( FileGeneration fg, TypeGeneration field, Accessor frameAccessor, bool isAsync) { var data = field.GetFieldData(); using (var args = new ArgsWrapper(fg, $"{Loqui.Generation.Utility.Await(isAsync)}{this.Module.TranslationCreateClass(field.ObjectGen)}.FillBinary{field.Name}Custom")) { args.Add($"frame: {(data.HasTrigger ? $"{frameAccessor}.SpawnWithLength(frame.{nameof(MutagenFrame.MetaData)}.{nameof(ParsingBundle.Constants)}.{nameof(GameConstants.SubConstants)}.{nameof(GameConstants.SubConstants.HeaderLength)} + contentLength)" : frameAccessor)}"); args.Add("item: item"); } }
public override async Task GenerateWrapperRecordTypeParse( FileGeneration fg, ObjectGeneration objGen, TypeGeneration typeGen, Accessor locationAccessor, Accessor packageAccessor, Accessor converterAccessor) { using (var args = new ArgsWrapper(fg, $"{(typeGen.Name == null ? typeGen.GetFieldData().RecordType?.ToString() : typeGen.Name)}CustomParse")) { args.Add("stream"); args.Add("offset"); } }
public override async Task GenerateInCommonMixin(ObjectGeneration obj, FileGeneration fg) { await base.GenerateInCommonMixin(obj, fg); if (!await obj.IsMajorRecord()) { return; } using (var args = new FunctionWrapper(fg, $"public static {obj.ObjectName} Duplicate{obj.GetGenericTypes(MaskType.Normal, MaskType.NormalGetter)}")) { args.Wheres.AddRange(obj.GenericTypeMaskWheres(LoquiInterfaceType.IGetter, MaskType.Normal, MaskType.NormalGetter)); args.Add($"this {obj.Interface(obj.GetGenericTypes(MaskType.NormalGetter), getter: true, internalInterface: true)} item"); args.Add($"{nameof(FormKey)} formKey"); args.Add($"{obj.Mask(MaskType.Translation)}? copyMask = null"); } using (new BraceWrapper(fg)) { using (var args = new ArgsWrapper(fg, $"return {obj.CommonClassInstance("item", LoquiInterfaceType.IGetter, CommonGenerics.Functions, MaskType.NormalGetter)}.Duplicate{obj.GetGenericTypes(MaskType.Normal, MaskType.NormalGetter, MaskType.Translation)}")) { args.AddPassArg("item"); args.AddPassArg("formKey"); args.Add("copyMask: copyMask?.GetCrystal()"); } } fg.AppendLine(); }
public override void GenerateForCopy(FileGeneration fg, Accessor accessor, Accessor rhs, Accessor copyMaskAccessor, bool protectedMembers, bool deepCopy) { fg.AppendLine($"if ({(deepCopy ? this.GetTranslationIfAccessor(copyMaskAccessor) : this.SkipCheck(copyMaskAccessor, deepCopy))})"); using (new BraceWrapper(fg)) { if (this.HasBeenSet) { fg.AppendLine($"{accessor.PropertyOrDirectAccess} = {rhs}.{FormIDTypeString};"); } else { if (deepCopy) { fg.AppendLine($"{accessor.PropertyOrDirectAccess} = {rhs}.{FormIDTypeString};"); } else { using (var args = new ArgsWrapper(fg, $"{accessor.PropertyOrDirectAccess}.SetLink")) { args.Add($"value: {rhs}"); } } } } }
public override async Task GenerateWrapperFields( FileGeneration fg, ObjectGeneration objGen, TypeGeneration typeGen, Accessor dataAccessor, int?passedLength, string passedLengthAccessor, DataType data = null) { using (var args = new ArgsWrapper(fg, $"partial void {(typeGen.Name == null ? typeGen.GetFieldData().RecordType?.ToString() : typeGen.Name)}CustomParse")) { args.Add($"{nameof(OverlayStream)} stream"); args.Add($"int offset"); } }
public override async Task GenerateInClass(ObjectGeneration obj, FileGeneration fg) { await base.GenerateInClass(obj, fg); if (WantsTryCreateFromBinary(obj)) { using (var args = new FunctionWrapper(fg, "public static bool TryCreateFromBinary")) { foreach (var(API, Public) in this.MainAPI.ReaderAPI.IterateAPI( obj, TranslationDirection.Reader, new APILine(OutItemKey, $"out {obj.ObjectName} item"))) { if (Public) { args.Add(API.Result); } } } using (new BraceWrapper(fg)) { fg.AppendLine($"var startPos = {ReaderMemberName}.Position;"); using (var args = new ArgsWrapper(fg, $"item = CreateFromBinary")) { args.Add(this.MainAPI.PassArgs(obj, TranslationDirection.Reader)); } fg.AppendLine($"return startPos != {ReaderMemberName}.Position;"); } } await GenerateBinaryOverlayCreates(obj, fg); }
public override void GenerateCopyInRet( FileGeneration fg, ObjectGeneration objGen, TypeGeneration targetGen, TypeGeneration typeGen, Accessor nodeAccessor, AsyncMode asyncMode, Accessor retAccessor, Accessor outItemAccessor, Accessor errorMaskAccessor, Accessor translationAccessor, Accessor converterAccessor, bool inline) { if (inline) { fg.AppendLine($"transl: {this.GetTranslatorInstance(typeGen, getter: false)}.Parse"); return; } var data = typeGen.CustomData[Constants.DataKey] as MutagenFieldData; using (var args = new ArgsWrapper(fg, $"{retAccessor}{Loqui.Generation.Utility.Await(asyncMode)}{this.Namespace}ByteArrayBinaryTranslation.Instance.Parse", suffixLine: Loqui.Generation.Utility.ConfigAwait(asyncMode))) { args.Add(nodeAccessor.Access); if (this.DoErrorMasks) { args.Add($"errorMask: out {errorMaskAccessor}"); } if (asyncMode == AsyncMode.Off) { args.Add($"item: out {outItemAccessor}"); } if (data.HasTrigger) { args.Add($"length: subLength"); } else { args.Add($"length: {data.Length.Value}"); } } }
bool WritePercent(FileGeneration fg, ObjectGeneration objGen, TypeGeneration typeGen, Accessor writer, Accessor item) { var percType = typeGen as PercentType; var data = percType.GetFieldData(); using (var args = new ArgsWrapper(fg, $"{nameof(PercentBinaryTranslation)}.Write")) { args.Add($"writer: {writer}"); args.Add($"item: {item}"); args.Add($"integerType: {nameof(FloatIntegerType)}.{percType.IntegerType}"); if (data.RecordType.HasValue && data.HandleTrigger) { args.Add($"header: translationParams.ConvertToCustom({objGen.RecordTypeHeaderName(data.RecordType.Value)})"); } } return(true); }
public override void GenerateWrite( FileGeneration fg, ObjectGeneration objGen, TypeGeneration typeGen, Accessor writerAccessor, Accessor itemAccessor, Accessor errorMaskAccessor, Accessor nameAccessor, Accessor translationMaskAccessor) { StringType str = typeGen as StringType; if (str.Translated.HasValue) { using (var args = new ArgsWrapper(fg, $"Mutagen.Bethesda.Xml.TranslatedStringXmlTranslation.Instance.Write")) { args.Add($"{XmlTranslationModule.XElementLine.GetParameterName(objGen)}: {writerAccessor}"); args.Add($"name: {nameAccessor}"); args.Add($"item: {ItemWriteAccess(typeGen, itemAccessor)}"); if (typeGen.HasIndex) { args.Add($"fieldIndex: (int){typeGen.IndexEnumName}"); } args.Add($"errorMask: {errorMaskAccessor}"); } } else { using (var args = new ArgsWrapper(fg, $"{this.TypeName(typeGen)}XmlTranslation.Instance.Write")) { args.Add($"{XmlTranslationModule.XElementLine.GetParameterName(objGen)}: {writerAccessor}"); args.Add($"name: {nameAccessor}"); args.Add($"item: {ItemWriteAccess(typeGen, itemAccessor)}"); if (typeGen.HasIndex) { args.Add($"fieldIndex: (int){typeGen.IndexEnumName}"); } args.Add($"errorMask: {errorMaskAccessor}"); } } }
public override void GenerateCopyInRet( FileGeneration fg, ObjectGeneration objGen, TypeGeneration targetGen, TypeGeneration typeGen, Accessor nodeAccessor, AsyncMode asyncMode, Accessor retAccessor, Accessor outItemAccessor, Accessor errorMaskAccessor, Accessor translationMaskAccessor, Accessor converterAccessor, bool inline) { if (inline) { fg.AppendLine($"transl: {this.GetTranslatorInstance(typeGen, getter: false)}.Parse"); return; } if (asyncMode != AsyncMode.Off) { throw new NotImplementedException(); } var data = typeGen.GetFieldData(); using (var args = new ArgsWrapper(fg, $"{retAccessor}{this.Namespace}StringBinaryTranslation.Instance.Parse")) { args.Add(nodeAccessor.DirectAccess); if (this.DoErrorMasks) { args.Add($"errorMask: {errorMaskAccessor}"); } args.Add($"item: out {outItemAccessor.DirectAccess}"); args.Add($"parseWhole: {(data.HasTrigger ? "true" : "false")}"); if (data.Length.HasValue) { args.Add($"length: {data.Length.Value}"); } } }
public override void GenerateForTranslate(FileGeneration fg, TypeGeneration field, string retAccessor, string rhsAccessor, bool indexed) { if (!field.IntegrateField) { return; } var gendered = field as GenderedType; var loqui = gendered.SubTypeGeneration as LoquiType; if (field.Nullable || loqui != null) { using (var args = new ArgsWrapper(fg, $"{retAccessor} = GenderedItem.TranslateHelper")) { args.Add($"{rhsAccessor}{(indexed ? ".Value" : null)}"); args.Add($"eval"); if (loqui != null) { args.Add($"(m, e) => m?.Translate(e)"); } } } else { using (var args = new ArgsWrapper(fg, $"{retAccessor} = new GenderedItem<{SubMaskString(field, "R")}>")) { if (loqui != null) { args.Add($"{rhsAccessor}.Male.Translate(eval)"); args.Add($"{rhsAccessor}.Female.Translate(eval)"); } else { args.Add($"eval({rhsAccessor}.Male)"); args.Add($"eval({rhsAccessor}.Female)"); } } } }
public override void GenerateWrite( FileGeneration fg, ObjectGeneration objGen, TypeGeneration typeGen, Accessor writerAccessor, Accessor itemAccessor, Accessor errorMaskAccessor, Accessor translationMaskAccessor, Accessor converterAccessor) { BoolType b = typeGen as BoolType; if (b.BoolAsMarker == null) { base.GenerateWrite( fg, objGen, typeGen, writerAccessor, itemAccessor, errorMaskAccessor, translationMaskAccessor, converterAccessor); } else { var data = typeGen.GetFieldData(); using (var args = new ArgsWrapper(fg, $"{this.Namespace}BooleanBinaryTranslation.Instance.WriteAsMarker")) { args.Add($"writer: {writerAccessor}"); args.Add($"item: {ItemWriteAccess(typeGen, itemAccessor)}"); if (data.RecordType.HasValue && data.HandleTrigger) { args.Add($"header: recordTypeConverter.ConvertToCustom({objGen.RecordTypeHeaderName(data.RecordType.Value)})"); } } } }
public override async Task GenerateWrite( FileGeneration fg, ObjectGeneration objGen, TypeGeneration typeGen, Accessor writerAccessor, Accessor itemAccessor, Accessor errorMaskAccessor, Accessor translationMaskAccessor, Accessor converterAccessor) { var data = typeGen.GetFieldData(); using (var args = new ArgsWrapper(fg, $"{this.Namespace}ByteArrayBinaryTranslation.Instance.Write")) { args.Add($"writer: {writerAccessor}"); args.Add($"item: {itemAccessor}"); if (this.DoErrorMasks) { args.Add($"fieldIndex: (int){typeGen.IndexEnumName}"); args.Add($"errorMask: {errorMaskAccessor}"); } if (data.RecordType.HasValue) { args.Add($"header: recordTypeConverter.ConvertToCustom({objGen.RecordTypeHeaderName(data.RecordType.Value)})"); } if (data.OverflowRecordType.HasValue) { args.Add($"overflowRecord: {objGen.RecordTypeHeaderName(data.OverflowRecordType.Value)}"); } } }
public override void GenerateCopyInRet( FileGeneration fg, ObjectGeneration objGen, TypeGeneration targetGen, TypeGeneration typeGen, Accessor nodeAccessor, AsyncMode asyncMode, Accessor retAccessor, Accessor outItemAccessor, Accessor errorMaskAccessor, Accessor translationMaskAccessor, Accessor converterAccessor, bool inline) { if (inline) { throw new NotImplementedException(); } if (asyncMode != AsyncMode.Off) { throw new NotImplementedException(); } var data = typeGen.GetFieldData(); if (data.RecordType.HasValue) { fg.AppendLine("r.Position += Constants.SUBRECORD_LENGTH;"); } using (var args = new ArgsWrapper(fg, $"{retAccessor}{this.NamespacePrefix}{this.Typename(typeGen)}BinaryTranslation.Instance.Parse")) { args.Add(nodeAccessor.Access); if (this.DoErrorMasks) { args.Add($"errorMask: {errorMaskAccessor}"); } args.Add($"translationMask: {translationMaskAccessor}"); } }
public override void GenerateForEqualsMask(FileGeneration fg, Accessor accessor, Accessor rhsAccessor, string retAccessor) { LoquiType loqui = this.SubTypeGeneration as LoquiType; if (this.Nullable || loqui != null) { using (var args = new ArgsWrapper(fg, $"ret.{this.Name} = {nameof(GenderedItem)}.{nameof(GenderedItem.EqualityMaskHelper)}")) { args.Add($"lhs: {accessor}"); args.Add($"rhs: {rhsAccessor}"); if (loqui == null) { args.Add($"maskGetter: (l, r, i) => EqualityComparer<{this.SubTypeGeneration.TypeName(getter: true, needsCovariance: true)}{this.SubTypeGeneration.NullChar}>.Default.Equals(l, r)"); } else { if (this.ItemNullable) { args.Add($"maskGetter: (l, r, i) => EqualsMaskHelper.EqualsHelper(l, r, (loqLhs, loqRhs, incl) => loqLhs.GetEqualsMask(loqRhs, incl), i)"); } else { args.Add("maskGetter: (l, r, i) => l.GetEqualsMask(r, i)"); } } args.AddPassArg("include"); } } else { using (var args = new ArgsWrapper(fg, $"ret.{this.Name} = new GenderedItem<bool>")) { args.Add($"male: {this.SubTypeGeneration.GenerateEqualsSnippet($"{accessor}.Male", $"{rhsAccessor}.Male")}"); args.Add($"female: {this.SubTypeGeneration.GenerateEqualsSnippet($"{accessor}.Female", $"{rhsAccessor}.Female")}"); } } }
public override void GenerateCopyInRet( FileGeneration fg, ObjectGeneration objGen, TypeGeneration targetGen, TypeGeneration typeGen, Accessor nodeAccessor, AsyncMode asyncMode, Accessor retAccessor, Accessor outItemAccessor, Accessor errorMaskAccessor, Accessor translationAccessor, Accessor converterAccessor, bool inline) { if (inline) { throw new NotImplementedException(); } var data = typeGen.CustomData[Constants.DataKey] as MutagenFieldData; using (var args = new ArgsWrapper(fg, $"{retAccessor}{Loqui.Generation.Utility.Await(asyncMode)}{this.NamespacePrefix}FilePathBinaryTranslation.Instance.Parse", suffixLine: Loqui.Generation.Utility.ConfigAwait(asyncMode))) { args.Add(nodeAccessor.Access); if (asyncMode == AsyncMode.Off) { args.Add($"item: out {outItemAccessor}"); } if (data.RecordType.HasValue) { args.Add($"header: recordTypeConverter.Convert({objGen.RecordTypeHeaderName(data.RecordType.Value)})"); } else { args.Add($"length: {data.Length.Value}"); } } }