├── .gitignore ├── LICENSE ├── LICENSE.meta ├── README.md ├── README.md.meta ├── UNL.meta ├── UNL ├── CodeGenerator.meta ├── CodeGenerator │ ├── DllGenerator.cs │ ├── DllGenerator.cs.meta │ ├── Double.meta │ ├── Double │ │ ├── Concat.cs │ │ ├── Concat.cs.meta │ │ ├── DoubleApiHelper.cs │ │ ├── DoubleApiHelper.cs.meta │ │ ├── GroupJoin.meta │ │ ├── GroupJoin │ │ │ ├── GroupJoinFunc.cs │ │ │ ├── GroupJoinFunc.cs.meta │ │ │ ├── GroupJoinOperator.cs │ │ │ ├── GroupJoinOperator.cs.meta │ │ │ ├── GroupJoinRefFunc.cs │ │ │ └── GroupJoinRefFunc.cs.meta │ │ ├── Join.meta │ │ ├── Join │ │ │ ├── JoinFunc.cs │ │ │ ├── JoinFunc.cs.meta │ │ │ ├── JoinOperator.cs │ │ │ ├── JoinOperator.cs.meta │ │ │ ├── JoinRefFunc.cs │ │ │ └── JoinRefFunc.cs.meta │ │ ├── SetOperation.meta │ │ ├── SetOperation │ │ │ ├── ExceptFunc.cs │ │ │ ├── ExceptFunc.cs.meta │ │ │ ├── ExceptIntersectHelper.cs │ │ │ ├── ExceptIntersectHelper.cs.meta │ │ │ ├── ExceptNone.cs │ │ │ ├── ExceptNone.cs.meta │ │ │ ├── ExceptOperator.cs │ │ │ ├── ExceptOperator.cs.meta │ │ │ ├── ExceptRefFunc.cs │ │ │ └── ExceptRefFunc.cs.meta │ │ ├── Union.meta │ │ ├── Union │ │ │ ├── UnionFunc.cs │ │ │ ├── UnionFunc.cs.meta │ │ │ ├── UnionNone.cs │ │ │ ├── UnionNone.cs.meta │ │ │ ├── UnionOperator.cs │ │ │ ├── UnionOperator.cs.meta │ │ │ ├── UnionRefFunc.cs │ │ │ └── UnionRefFunc.cs.meta │ │ ├── Zip.meta │ │ └── Zip │ │ │ ├── ZipFunc.cs │ │ │ ├── ZipFunc.cs.meta │ │ │ ├── ZipNone.cs │ │ │ ├── ZipNone.cs.meta │ │ │ ├── ZipOperator.cs │ │ │ ├── ZipOperator.cs.meta │ │ │ ├── ZipRefFunc.cs │ │ │ └── ZipRefFunc.cs.meta │ ├── Interface.meta │ ├── Interface │ │ ├── IApiExtensionMethodGenerator.cs │ │ ├── IApiExtensionMethodGenerator.cs.meta │ │ ├── IDllGenerator.cs │ │ ├── IDllGenerator.cs.meta │ │ ├── ITypeDictionaryHolder.cs │ │ └── ITypeDictionaryHolder.cs.meta │ ├── Single.meta │ ├── Single │ │ ├── Aggregate.meta │ │ ├── Aggregate │ │ │ ├── AggregateRefValue1Operator.cs │ │ │ ├── AggregateRefValue1Operator.cs.meta │ │ │ ├── AggregateRefValue1Ref.cs │ │ │ ├── AggregateRefValue1Ref.cs.meta │ │ │ ├── AggregateRefValue2Operators.cs │ │ │ ├── AggregateRefValue2Operators.cs.meta │ │ │ ├── AggregateRefValue2Refs.cs │ │ │ ├── AggregateRefValue2Refs.cs.meta │ │ │ ├── AggregateValue1Function.cs │ │ │ ├── AggregateValue1Function.cs.meta │ │ │ ├── AggregateValue1Operator.cs │ │ │ ├── AggregateValue1Operator.cs.meta │ │ │ ├── AggregateValue1Ref.cs │ │ │ ├── AggregateValue1Ref.cs.meta │ │ │ ├── AggregateValue2Functions.cs │ │ │ ├── AggregateValue2Functions.cs.meta │ │ │ ├── AggregateValue2Refs.cs │ │ │ └── AggregateValue2Refs.cs.meta │ │ ├── AllAny.meta │ │ ├── AllAny │ │ │ ├── AllFunc.cs │ │ │ ├── AllFunc.cs.meta │ │ │ ├── AllOperator.cs │ │ │ ├── AllOperator.cs.meta │ │ │ ├── AllRefFunc.cs │ │ │ ├── AllRefFunc.cs.meta │ │ │ ├── AnyFunc.cs │ │ │ ├── AnyFunc.cs.meta │ │ │ ├── AnyOperator.cs │ │ │ ├── AnyOperator.cs.meta │ │ │ ├── AnyRefFunc.cs │ │ │ └── AnyRefFunc.cs.meta │ │ ├── AppendPrependDefaultIfEmpty.cs │ │ ├── AppendPrependDefaultIfEmpty.cs.meta │ │ ├── AsRefEnumerableUnsafe.meta │ │ ├── AsRefEnumerableUnsafe │ │ │ ├── AsRefEnumerableUnsafe.cs │ │ │ └── AsRefEnumerableUnsafe.cs.meta │ │ ├── Average.meta │ │ ├── Average │ │ │ ├── TryGetAverageNone.cs │ │ │ └── TryGetAverageNone.cs.meta │ │ ├── Cast.meta │ │ ├── Cast │ │ │ ├── Cast.cs │ │ │ └── Cast.cs.meta │ │ ├── Contains.meta │ │ ├── Contains │ │ │ ├── ContainsFunc.cs │ │ │ ├── ContainsFunc.cs.meta │ │ │ ├── ContainsNone.cs │ │ │ ├── ContainsNone.cs.meta │ │ │ ├── ContainsOperator.cs │ │ │ ├── ContainsOperator.cs.meta │ │ │ ├── ContainsRefFunc.cs │ │ │ └── ContainsRefFunc.cs.meta │ │ ├── Create.meta │ │ ├── Create │ │ │ ├── Create.cs │ │ │ └── Create.cs.meta │ │ ├── DefaultIfEmpty.meta │ │ ├── DefaultIfEmpty │ │ │ ├── DefaultIfEmptyNone.cs │ │ │ └── DefaultIfEmptyNone.cs.meta │ │ ├── Distinct.meta │ │ ├── Distinct │ │ │ ├── DistinctFunc.cs │ │ │ ├── DistinctFunc.cs.meta │ │ │ ├── DistinctNone.cs │ │ │ ├── DistinctNone.cs.meta │ │ │ ├── DistinctOperator.cs │ │ │ ├── DistinctOperator.cs.meta │ │ │ ├── DistinctRefFunc.cs │ │ │ └── DistinctRefFunc.cs.meta │ │ ├── ForEach.meta │ │ ├── ForEach │ │ │ ├── ForEachAction.cs │ │ │ ├── ForEachAction.cs.meta │ │ │ ├── ForEachOperator.cs │ │ │ ├── ForEachOperator.cs.meta │ │ │ ├── ForEachRefAction.cs │ │ │ └── ForEachRefAction.cs.meta │ │ ├── GroupBy.meta │ │ ├── GroupBy │ │ │ ├── GroupByFunc1DefaultEqualityComparer.cs │ │ │ ├── GroupByFunc1DefaultEqualityComparer.cs.meta │ │ │ ├── GroupByFunc2DefaultEqualityComparer.cs │ │ │ ├── GroupByFunc2DefaultEqualityComparer.cs.meta │ │ │ ├── GroupByFunc3.cs │ │ │ ├── GroupByFunc3.cs.meta │ │ │ ├── GroupByRefAction1DefaultEqualityComparer.cs │ │ │ ├── GroupByRefAction1DefaultEqualityComparer.cs.meta │ │ │ ├── GroupByRefAction2DefaultEqualityComparer.cs │ │ │ ├── GroupByRefAction2DefaultEqualityComparer.cs.meta │ │ │ ├── GroupByRefAction2RefFunc1.cs │ │ │ └── GroupByRefAction2RefFunc1.cs.meta │ │ ├── MinMaxBy.meta │ │ ├── MinMaxBy │ │ │ ├── MinMaxByFunc.cs │ │ │ ├── MinMaxByFunc.cs.meta │ │ │ ├── MinMaxByOperator.cs │ │ │ ├── MinMaxByOperator.cs.meta │ │ │ ├── MinMaxByRefFunc.cs │ │ │ └── MinMaxByRefFunc.cs.meta │ │ ├── OrderBy.meta │ │ ├── OrderBy │ │ │ ├── OrderByFunc.cs │ │ │ ├── OrderByFunc.cs.meta │ │ │ ├── OrderByIComparer.cs │ │ │ ├── OrderByIComparer.cs.meta │ │ │ ├── OrderByNone.cs │ │ │ ├── OrderByNone.cs.meta │ │ │ ├── OrderByNoneNumber.cs │ │ │ ├── OrderByNoneNumber.cs.meta │ │ │ ├── OrderByOperator.cs │ │ │ ├── OrderByOperator.cs.meta │ │ │ ├── OrderByRefFunc.cs │ │ │ └── OrderByRefFunc.cs.meta │ │ ├── RepeatRange.meta │ │ ├── RepeatRange │ │ │ ├── Range.cs │ │ │ ├── Range.cs.meta │ │ │ ├── Repeat.cs │ │ │ └── Repeat.cs.meta │ │ ├── Reverse.cs │ │ ├── Reverse.cs.meta │ │ ├── Select.meta │ │ ├── Select │ │ │ ├── SelectFunc.cs │ │ │ ├── SelectFunc.cs.meta │ │ │ ├── SelectRefAction.cs │ │ │ └── SelectRefAction.cs.meta │ │ ├── SelectIndex.meta │ │ ├── SelectIndex │ │ │ ├── SelectIndexFunc.cs │ │ │ ├── SelectIndexFunc.cs.meta │ │ │ ├── SelectIndexRefFunc.cs │ │ │ ├── SelectIndexRefFunc.cs.meta │ │ │ ├── SelectIndexWithIndex.cs │ │ │ └── SelectIndexWithIndex.cs.meta │ │ ├── SingleApiHelper.cs │ │ ├── SingleApiHelper.cs.meta │ │ ├── SkipSkipLastTakeTakeLastRepeat.cs │ │ ├── SkipSkipLastTakeTakeLastRepeat.cs.meta │ │ ├── Sum.meta │ │ ├── Sum │ │ │ ├── SumDouble.cs │ │ │ ├── SumDouble.cs.meta │ │ │ ├── SumHelper.cs │ │ │ ├── SumHelper.cs.meta │ │ │ ├── SumInt32.cs │ │ │ ├── SumInt32.cs.meta │ │ │ ├── SumInt64.cs │ │ │ ├── SumInt64.cs.meta │ │ │ ├── SumSingle.cs │ │ │ ├── SumSingle.cs.meta │ │ │ ├── SumUInt32.cs │ │ │ ├── SumUInt32.cs.meta │ │ │ ├── SumUInt64.cs │ │ │ └── SumUInt64.cs.meta │ │ ├── TryGetElementAt.cs │ │ ├── TryGetElementAt.cs.meta │ │ ├── TryGetFirst.meta │ │ ├── TryGetFirst │ │ │ ├── TryGetFirstFunc.cs │ │ │ ├── TryGetFirstFunc.cs.meta │ │ │ ├── TryGetFirstNone.cs │ │ │ ├── TryGetFirstNone.cs.meta │ │ │ ├── TryGetFirstOperator.cs │ │ │ ├── TryGetFirstOperator.cs.meta │ │ │ ├── TryGetFirstRefFunc.cs │ │ │ └── TryGetFirstRefFunc.cs.meta │ │ ├── TryGetFirstIndexOf.meta │ │ ├── TryGetFirstIndexOf │ │ │ ├── TryGetFirstIndexOfFunc.cs │ │ │ ├── TryGetFirstIndexOfFunc.cs.meta │ │ │ ├── TryGetFirstIndexOfNone.cs │ │ │ ├── TryGetFirstIndexOfNone.cs.meta │ │ │ ├── TryGetFirstIndexOfOperator.cs │ │ │ ├── TryGetFirstIndexOfOperator.cs.meta │ │ │ ├── TryGetFirstIndexOfRefFunc.cs │ │ │ └── TryGetFirstIndexOfRefFunc.cs.meta │ │ ├── TryGetLast.meta │ │ ├── TryGetLast │ │ │ ├── TryGetLastFunc.cs │ │ │ ├── TryGetLastFunc.cs.meta │ │ │ ├── TryGetLastNone.cs │ │ │ ├── TryGetLastNone.cs.meta │ │ │ ├── TryGetLastOperator.cs │ │ │ ├── TryGetLastOperator.cs.meta │ │ │ ├── TryGetLastRefFunc.cs │ │ │ └── TryGetLastRefFunc.cs.meta │ │ ├── TryGetMinMax.meta │ │ ├── TryGetMinMax │ │ │ ├── TryGetMinMaxFunc.cs │ │ │ ├── TryGetMinMaxFunc.cs.meta │ │ │ ├── TryGetMinMaxNone.cs │ │ │ ├── TryGetMinMaxNone.cs.meta │ │ │ ├── TryGetMinMaxOperator.cs │ │ │ ├── TryGetMinMaxOperator.cs.meta │ │ │ ├── TryGetMinMaxRefFunc.cs │ │ │ └── TryGetMinMaxRefFunc.cs.meta │ │ ├── TryGetSingle.meta │ │ ├── TryGetSingle │ │ │ ├── TryGetSingleFunc.cs │ │ │ ├── TryGetSingleFunc.cs.meta │ │ │ ├── TryGetSingleNone.cs │ │ │ ├── TryGetSingleNone.cs.meta │ │ │ ├── TryGetSingleOperator.cs │ │ │ ├── TryGetSingleOperator.cs.meta │ │ │ ├── TryGetSingleRefFunc.cs │ │ │ └── TryGetSingleRefFunc.cs.meta │ │ ├── WhereIndex.meta │ │ ├── WhereIndex │ │ │ ├── WhereIndexFunc.cs │ │ │ ├── WhereIndexFunc.cs.meta │ │ │ ├── WhereIndexOperator.cs │ │ │ ├── WhereIndexOperator.cs.meta │ │ │ ├── WhereIndexRefFunc.cs │ │ │ └── WhereIndexRefFunc.cs.meta │ │ ├── WhereSkipWhileTakeWhile.meta │ │ └── WhereSkipWhileTakeWhile │ │ │ ├── WhereSkipWhileTakeWhileFunc.cs │ │ │ ├── WhereSkipWhileTakeWhileFunc.cs.meta │ │ │ ├── WhereSkipWhileTakeWhileOperator.cs │ │ │ ├── WhereSkipWhileTakeWhileOperator.cs.meta │ │ │ ├── WhereSkipWhileTakeWhileRefFunc.cs │ │ │ └── WhereSkipWhileTakeWhileRefFunc.cs.meta │ ├── Utility.meta │ └── Utility │ │ ├── DefinitionHelper.cs │ │ ├── DefinitionHelper.cs.meta │ │ ├── Helper.cs │ │ ├── Helper.cs.meta │ │ ├── IlProcessorUtility.cs │ │ ├── IlProcessorUtility.cs.meta │ │ ├── InstructionUtility.cs │ │ ├── InstructionUtility.cs.meta │ │ ├── SpecialArgumentProcessorHelper.cs │ │ └── SpecialArgumentProcessorHelper.cs.meta ├── DLLs.meta ├── DLLs │ ├── UniNativeLinq.bytes │ ├── UniNativeLinq.bytes.meta │ ├── netstandard.bytes │ └── netstandard.bytes.meta ├── Packages.meta ├── Packages │ ├── UniNativeLinq-Settings.unitypackage │ └── UniNativeLinq-Settings.unitypackage.meta ├── ScriptableObject.meta ├── ScriptableObject │ ├── Double Api.meta │ ├── Double Api │ │ ├── DifferentNameEnumerableDoubleApi.cs │ │ ├── DifferentNameEnumerableDoubleApi.cs.meta │ │ ├── SimpleEnumerableDoubleApi.cs │ │ ├── SimpleEnumerableDoubleApi.cs.meta │ │ ├── WithFuncEnumerableDoubleApi.cs │ │ └── WithFuncEnumerableDoubleApi.cs.meta │ ├── GlobalSettings.cs │ ├── GlobalSettings.cs.meta │ ├── Single Api.meta │ └── Single Api │ │ ├── JustGenericSingleApi.cs │ │ ├── JustGenericSingleApi.cs.meta │ │ ├── NoEnumerableSingleApi.cs │ │ ├── NoEnumerableSingleApi.cs.meta │ │ ├── RangeRepeatSingleApi.cs │ │ ├── RangeRepeatSingleApi.cs.meta │ │ ├── RepeatSingleApi.cs │ │ ├── RepeatSingleApi.cs.meta │ │ ├── SimpleEnumerableSingleApi.cs │ │ ├── SimpleEnumerableSingleApi.cs.meta │ │ ├── WithFuncEnumerableSingleApi.cs │ │ └── WithFuncEnumerableSingleApi.cs.meta ├── UNL.asmdef ├── UNL.asmdef.meta ├── Utility.meta ├── Utility │ ├── DependencyObject.cs │ ├── DependencyObject.cs.meta │ ├── FoldoutUtility.cs │ ├── FoldoutUtility.cs.meta │ ├── IndentScope.cs │ ├── IndentScope.cs.meta │ ├── RefAction.cs │ ├── RefAction.cs.meta │ ├── SelectDeselectAllHelper.cs │ ├── SelectDeselectAllHelper.cs.meta │ ├── String2BoolArrayTuple.cs │ ├── String2BoolArrayTuple.cs.meta │ ├── String2BoolMatrixTuple.cs │ ├── String2BoolMatrixTuple.cs.meta │ ├── StringBoolTuple.cs │ ├── StringBoolTuple.cs.meta │ ├── StringBoolValueTuple.cs │ └── StringBoolValueTuple.cs.meta ├── View.meta └── View │ ├── DrawableImplWhetherToIncludeEnumerable.cs │ ├── DrawableImplWhetherToIncludeEnumerable.cs.meta │ ├── DrawableImplWhetherToUseApiOrNot.cs │ ├── DrawableImplWhetherToUseApiOrNot.cs.meta │ ├── EnumerableCollectionProcessor.cs │ ├── EnumerableCollectionProcessor.cs.meta │ ├── Installer.cs │ ├── Installer.cs.meta │ ├── Interfaces.meta │ ├── Interfaces │ ├── IDependency.cs │ ├── IDependency.cs.meta │ ├── IDoubleApi.cs │ ├── IDoubleApi.cs.meta │ ├── IDrawable.cs │ ├── IDrawable.cs.meta │ ├── IDrawableWithEnumerable.cs │ ├── IDrawableWithEnumerable.cs.meta │ ├── IDrawableWithEnumerableAndScrollPosition.cs │ ├── IDrawableWithEnumerableAndScrollPosition.cs.meta │ ├── IEnumerableCollectionProcessor.cs │ ├── IEnumerableCollectionProcessor.cs.meta │ ├── ISingleApi.cs │ └── ISingleApi.cs.meta │ ├── SettingWindow.cs │ └── SettingWindow.cs.meta ├── package.json └── package.json.meta /.gitignore: -------------------------------------------------------------------------------- 1 | UniNativeLinq.dll -------------------------------------------------------------------------------- /LICENSE.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 9e82d29fe385e0447b0ae2adce031c29 3 | DefaultImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # UniNativeLinq-EditorExtension 2 | 3 | A set of LINQ-like extension methods specialized for `NativeArray` and `arrays of unmanaged types`. 4 | UniNativeLinq is designed to replace LINQ methods in Unity's Burst Job. 5 | GC.Alloc is prohibited in Burst Jobs and thus System.Linq methods are not able to be used. 6 | 7 | UniNativeLinq now includes all System.Linq like apis except `ToLookp()`. 8 | 9 | # How To Install 10 | 11 | ## Edit manifest.json 12 | 13 | Find `Packages/manifest.json` in your project and edit it to look like this: 14 | 15 | ```yaml 16 | { 17 | "dependencies": { 18 | "uninativelinq": "https://github.com/pCYSl5EDgo/UniNativeLinq-EditorExtension.git#2018.4", 19 | ... 20 | }, 21 | } 22 | ``` 23 | 24 | ## Click Menu Item `Tools/UniNativeLinq/Import UniNativeLinq Essential Resources` 25 | 26 | Start your Unity Editor and click menu item `Tools/UniNativeLinq/Import UniNativeLinq Essential Resources`. 27 | Import all necessary assets to initialize. 28 | 29 | ## Include Assembly Reference to Your Assembly Definition Files 30 | 31 | Select your working asmdef file to open the inspector. 32 | Check `General/Override References` and `Assembly References` appears. 33 | Add `UniNativeLinq.dll` to `Assembly References`. 34 | 35 | # Conditions 36 | ## Supported Platforms 37 | 38 | All platforms are supported! 39 | 40 | ## Supported Versions 41 | 42 | - 2018.4 43 | 44 | # APIs 45 | 46 | ## Aggregate 47 | ## All 48 | ## Any 49 | ## Average 50 | ## Cast 51 | ## Contains 52 | ## Concat 53 | ## DefaultIfEmpty 54 | ## Distinct 55 | ## Except 56 | ## ForEach 57 | ## GroupBy 58 | ## GroupJoin 59 | ## Intersect 60 | ## Join 61 | ## MaxBy 62 | ## MinBy 63 | ## OrderBy 64 | ## Repeat 65 | ## Range 66 | ## Select 67 | ## SelectIndex 68 | ## Skip 69 | ## SkipWhile 70 | ## Sum 71 | ## Take 72 | ## TakeWhile 73 | ## TryGetFirst 74 | ## TryGetFirstIndexOf 75 | ## TryGetLast 76 | ## TryGetSingle 77 | ## Union 78 | ## Where 79 | ## WhereIndex 80 | ## WithIndex 81 | ## Zip 82 | -------------------------------------------------------------------------------- /README.md.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 6ebe7ad2448c1a742924df2cec4248f5 3 | TextScriptImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /UNL.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: e64578bbce1a4b14a89d803064ab14f5 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /UNL/CodeGenerator.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 239f5c7bf06d5a543a38f486b1f34a7f 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/DllGenerator.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 447e1997cdb34c64784cb97298b0c0b0 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Double.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: a5613af19fd176445bab179a4e55f76b 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Double/Concat.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 68727124fb0ca1743ad1171277b05309 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Double/DoubleApiHelper.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using Mono.Cecil; 5 | using Mono.Cecil.Cil; 6 | // ReSharper disable InconsistentNaming 7 | 8 | namespace UniNativeLinq.Editor.CodeGenerator 9 | { 10 | public static class DoubleApiHelper 11 | { 12 | public static bool ShouldDefine(this IDoubleApi api, string[] array) 13 | { 14 | foreach (var element0 in array) 15 | { 16 | foreach (var element1 in array) 17 | { 18 | if (!api.TryGetEnabled(element0, element1, out var apiEnabled) || !apiEnabled) continue; 19 | return true; 20 | } 21 | } 22 | return false; 23 | } 24 | 25 | public static TypeDefinition DefineStatic(this ModuleDefinition mainModule, string name) 26 | => new TypeDefinition("UniNativeLinq", 27 | name, 28 | Helper.StaticExtensionClassTypeAttributes, mainModule.TypeSystem.Object) 29 | { 30 | CustomAttributes = { Helper.ExtensionAttribute } 31 | }; 32 | 33 | public static ILProcessor CpObjFromArgumentToField(this ILProcessor processor, TypeReference type, int variableIndex, FieldReference to) 34 | { 35 | return processor 36 | .LdFldA(to) 37 | .LdArg(variableIndex) 38 | .CpObj(type); 39 | } 40 | 41 | public static void HelpWithGenerate(this IDoubleApi Api, IEnumerableCollectionProcessor processor, ModuleDefinition mainModule, Action GenerateEachPair) 42 | { 43 | if (!processor.TryGetEnabled(Api.Name, out var enabled) || !enabled) return; 44 | var array = processor.EnabledNameCollection.Intersect(Api.NameCollection).ToArray(); 45 | if (!Api.ShouldDefine(array)) return; 46 | TypeDefinition @static; 47 | mainModule.Types.Add(@static = mainModule.DefineStatic(Api.Name + Api.Description + "Helper")); 48 | var count = Api.Count; 49 | for (var row = 0; row < count; row++) 50 | { 51 | var rowName = Api.NameCollection[row]; 52 | if (!processor.IsSpecialType(rowName, out var isRowSpecial)) throw new KeyNotFoundException(); 53 | 54 | for (var column = 0; column < count; column++) 55 | { 56 | var columnName = Api.NameCollection[column]; 57 | if (!processor.IsSpecialType(columnName, out var isColumnSpecial)) throw new KeyNotFoundException(); 58 | 59 | if (!Api.TryGetEnabled(rowName, columnName, out var apiEnabled) || !apiEnabled) continue; 60 | 61 | GenerateEachPair(rowName, isRowSpecial, columnName, isColumnSpecial, @static, mainModule); 62 | } 63 | } 64 | } 65 | 66 | public static void HelpWithGenerate(this IDoubleApi Api, IEnumerableCollectionProcessor processor, ModuleDefinition mainModule, ModuleDefinition systemModule, Action GenerateEachPair) 67 | { 68 | if (!processor.TryGetEnabled(Api.Name, out var enabled) || !enabled) return; 69 | var array = processor.EnabledNameCollection.Intersect(Api.NameCollection).ToArray(); 70 | if (!Api.ShouldDefine(array)) return; 71 | TypeDefinition @static; 72 | mainModule.Types.Add(@static = mainModule.DefineStatic(Api.Name + Api.Description + "Helper")); 73 | var count = Api.Count; 74 | for (var row = 0; row < count; row++) 75 | { 76 | var rowName = Api.NameCollection[row]; 77 | if (!processor.IsSpecialType(rowName, out var isRowSpecial)) throw new KeyNotFoundException(); 78 | 79 | for (var column = 0; column < count; column++) 80 | { 81 | var columnName = Api.NameCollection[column]; 82 | if (!processor.IsSpecialType(columnName, out var isColumnSpecial)) throw new KeyNotFoundException(); 83 | 84 | if (!Api.TryGetEnabled(rowName, columnName, out var apiEnabled) || !apiEnabled) continue; 85 | 86 | GenerateEachPair(rowName, isRowSpecial, columnName, isColumnSpecial, @static, mainModule, systemModule); 87 | } 88 | } 89 | } 90 | } 91 | } -------------------------------------------------------------------------------- /UNL/CodeGenerator/Double/DoubleApiHelper.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 9791bc04901e9734fadc4a6f38fc141c 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Double/GroupJoin.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 394e7214dc387f948a79979e4937d663 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Double/GroupJoin/GroupJoinFunc.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 7a5615e1fa01c894ab203df481684d61 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Double/GroupJoin/GroupJoinOperator.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: a7c9ebd8fdcf8ca44a7085946c0ad247 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Double/GroupJoin/GroupJoinRefFunc.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 248fa78948a574f4cb5e9745ced2faa7 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Double/Join.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: d2339895c30b2814fa7425389a13de02 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Double/Join/JoinFunc.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 9fd5c96d73ef36b4e8d8acf0929e98c3 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Double/Join/JoinOperator.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 03848c9934d06414dbc6d3aca9b1704a 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Double/Join/JoinRefFunc.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 2db376c7b9597884681e200a176ece40 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Double/SetOperation.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 3c91416428959c94fadb7383f4d9c93a 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Double/SetOperation/ExceptFunc.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: f1a282557aaeb664491dfbd3f29560f5 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Double/SetOperation/ExceptIntersectHelper.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using Mono.Cecil; 5 | 6 | namespace UniNativeLinq.Editor.CodeGenerator 7 | { 8 | public static class ExceptIntersectHelper 9 | { 10 | // ReSharper disable once InconsistentNaming 11 | public static void HelpExceptIntersect(this IDoubleApi Api, IEnumerableCollectionProcessor processor, ModuleDefinition mainModule, Action GenerateEachPair) 12 | { 13 | if (!processor.TryGetEnabled("SetOperation", out var enabled) || !enabled) return; 14 | var array = processor.EnabledNameCollection.Intersect(Api.NameCollection).ToArray(); 15 | if (!Api.ShouldDefine(array)) return; 16 | TypeDefinition @static; 17 | mainModule.Types.Add(@static = mainModule.DefineStatic(Api.Name + Api.Description + "Helper")); 18 | var count = Api.Count; 19 | for (var row = 0; row < count; row++) 20 | { 21 | var rowName = Api.NameCollection[row]; 22 | if (!processor.IsSpecialType(rowName, out var isRowSpecial)) throw new KeyNotFoundException(); 23 | 24 | for (var column = 0; column < count; column++) 25 | { 26 | var columnName = Api.NameCollection[column]; 27 | if (!processor.IsSpecialType(columnName, out var isColumnSpecial)) throw new KeyNotFoundException(); 28 | 29 | if (!Api.TryGetEnabled(rowName, columnName, out var apiEnabled) || !apiEnabled) continue; 30 | 31 | GenerateEachPair(rowName, isRowSpecial, columnName, isColumnSpecial, @static, mainModule); 32 | } 33 | } 34 | } 35 | 36 | // ReSharper disable once InconsistentNaming 37 | public static void HelpExceptIntersect(this IDoubleApi Api, IEnumerableCollectionProcessor processor, ModuleDefinition mainModule, ModuleDefinition systemModule, Action GenerateEachPair) 38 | { 39 | if (!processor.TryGetEnabled("SetOperation", out var enabled) || !enabled) return; 40 | var array = processor.EnabledNameCollection.Intersect(Api.NameCollection).ToArray(); 41 | if (!Api.ShouldDefine(array)) return; 42 | TypeDefinition @static; 43 | mainModule.Types.Add(@static = mainModule.DefineStatic(Api.Name + Api.Description + "Helper")); 44 | var count = Api.Count; 45 | for (var row = 0; row < count; row++) 46 | { 47 | var rowName = Api.NameCollection[row]; 48 | if (!processor.IsSpecialType(rowName, out var isRowSpecial)) throw new KeyNotFoundException(); 49 | 50 | for (var column = 0; column < count; column++) 51 | { 52 | var columnName = Api.NameCollection[column]; 53 | if (!processor.IsSpecialType(columnName, out var isColumnSpecial)) throw new KeyNotFoundException(); 54 | 55 | if (!Api.TryGetEnabled(rowName, columnName, out var apiEnabled) || !apiEnabled) continue; 56 | 57 | GenerateEachPair(rowName, isRowSpecial, columnName, isColumnSpecial, @static, mainModule, systemModule); 58 | } 59 | } 60 | } 61 | } 62 | } -------------------------------------------------------------------------------- /UNL/CodeGenerator/Double/SetOperation/ExceptIntersectHelper.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 947d821426587e34bb9f60e7dd43710f 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Double/SetOperation/ExceptNone.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 1cc4abd91e89b7d4a96f42781aad9de4 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Double/SetOperation/ExceptOperator.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: a549b409800cfd44c98d48ca2eca0a0f 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Double/SetOperation/ExceptRefFunc.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: e27656de9db27ce47afb9708261a55dd 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Double/Union.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: b99526b8645359f499925053f76ec6f8 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Double/Union/UnionFunc.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: a00355141f89a014fb915c048c6edc0e 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Double/Union/UnionNone.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: b531c0b76b51c0b42b73c42959db802c 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Double/Union/UnionOperator.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 40e65d362609a384b9931e57acbe0d2f 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Double/Union/UnionRefFunc.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 92525814bc7aaa943ae32395ca1892a2 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Double/Zip.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 2fe5acfcd885ae54d9c99692ee72c3cc 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Double/Zip/ZipFunc.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 25c258a56d867b04e9482d26ea52a76e 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Double/Zip/ZipNone.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 8ece28115fdff3743a8dd4682d661e12 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Double/Zip/ZipOperator.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 2a74191801298ed4d838c886aba7b0a3 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Double/Zip/ZipRefFunc.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 5b78203b246c7ea428d4696eb1f73e29 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Interface.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: c09f1ff8793e7134897e95089cddf549 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Interface/IApiExtensionMethodGenerator.cs: -------------------------------------------------------------------------------- 1 | using Mono.Cecil; 2 | 3 | namespace UniNativeLinq.Editor 4 | { 5 | public interface IApiExtensionMethodGenerator 6 | { 7 | void Generate(IEnumerableCollectionProcessor processor, ModuleDefinition mainModule, ModuleDefinition systemModule, ModuleDefinition unityModule); 8 | } 9 | } -------------------------------------------------------------------------------- /UNL/CodeGenerator/Interface/IApiExtensionMethodGenerator.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 5f8171eb1594ce54e8b659640fd56b51 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Interface/IDllGenerator.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace UniNativeLinq.Editor 4 | { 5 | public interface IDllGenerator : IDisposable 6 | { 7 | void Execute(IEnumerableCollectionProcessor processor, IApiExtensionMethodGenerator[] generators, IDependency[] dependencies); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Interface/IDllGenerator.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 22cc1dc9cde5cc4489160d8dbea2e667 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Interface/ITypeDictionaryHolder.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using Mono.Cecil; 3 | 4 | namespace UniNativeLinq.Editor.CodeGenerator 5 | { 6 | public interface ITypeDictionaryHolder 7 | { 8 | Dictionary Dictionary { set; } 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Interface/ITypeDictionaryHolder.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 6e6d015987ad06b4eb5bbca206ef059b 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 2b265b0c92ab3e04da01994f60a70296 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single/Aggregate.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 2d138332d8c2d794e864481a2da57bda 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single/Aggregate/AggregateRefValue1Operator.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 3e31676df09a74f489e69ce5187c0510 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single/Aggregate/AggregateRefValue1Ref.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: caea23fec170dc547a4c3f4d85c77e79 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single/Aggregate/AggregateRefValue2Operators.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: d81ebd4272011854fbdc1865c6632f10 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single/Aggregate/AggregateRefValue2Refs.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: fd09e86fea080e141bb962eabf02d2c3 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single/Aggregate/AggregateValue1Function.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: eb81b66dd3a4bf64bbc0fa0b312ac125 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single/Aggregate/AggregateValue1Operator.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: a05b81ea377d09442a1878b792b6bb95 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single/Aggregate/AggregateValue1Ref.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 536a9ab1f216fa346aafb7fb7c3ec108 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single/Aggregate/AggregateValue2Functions.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 36ffb494adce171458491c982afdc837 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single/Aggregate/AggregateValue2Refs.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 3406fafd744906f4b8848be24a8b1492 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single/AllAny.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: c0bedb8281b183a4ba9c407d4a3631f1 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single/AllAny/AllFunc.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 08e6c48df294b87458c0b5d0a373c6c9 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single/AllAny/AllOperator.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 8780adea8a400554bb6f72f1291ecb20 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single/AllAny/AllRefFunc.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 90eed9d84e8cb1340bb98682fd847a10 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single/AllAny/AnyFunc.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: d01b830e2806f46418212a5a3740daa8 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single/AllAny/AnyOperator.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 3ee9090678408b7418b672e598f29276 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single/AllAny/AnyRefFunc.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 09abd07b4a44a564e87cf55e2ad8a894 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single/AppendPrependDefaultIfEmpty.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: ce4fe9b1d2340024d8b5bba101f7b7b1 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single/AsRefEnumerableUnsafe.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 19fd71e0553495d4e9dface3f0e478f8 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single/AsRefEnumerableUnsafe/AsRefEnumerableUnsafe.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using Mono.Cecil; 5 | using Mono.Cecil.Cil; 6 | using UnityEngine; 7 | 8 | // ReSharper disable InconsistentNaming 9 | 10 | namespace UniNativeLinq.Editor.CodeGenerator 11 | { 12 | public sealed class AsRefEnumerableUnsafe 13 | : ITypeDictionaryHolder, 14 | IApiExtensionMethodGenerator 15 | { 16 | public AsRefEnumerableUnsafe(ISingleApi api) 17 | { 18 | Api = api; 19 | } 20 | 21 | public readonly ISingleApi Api; 22 | 23 | public Dictionary Dictionary { private get; set; } 24 | 25 | public void Generate(IEnumerableCollectionProcessor processor, ModuleDefinition mainModule, ModuleDefinition systemModule, ModuleDefinition unityModule) 26 | { 27 | var array = processor.EnabledNameCollection.Intersect(Api.NameCollection).ToArray(); 28 | if (!Api.ShouldDefine(array)) return; 29 | var @static = mainModule.GetType("UniNativeLinq", "NativeEnumerable"); 30 | foreach (var name in array) 31 | { 32 | if (!processor.IsSpecialType(name, out var isSpecial)) throw new KeyNotFoundException(); 33 | if (!Api.TryGetEnabled(name, out var apiEnabled) || !apiEnabled) continue; 34 | GenerateEach(name, isSpecial, @static, mainModule, systemModule); 35 | } 36 | } 37 | 38 | private void GenerateEach(string name, bool isSpecial, TypeDefinition @static, ModuleDefinition mainModule, ModuleDefinition systemModule) 39 | { 40 | var method = new MethodDefinition("AsRefEnumerableUnsafe", Helper.StaticMethodAttributes, mainModule.TypeSystem.Boolean) 41 | { 42 | DeclaringType = @static, 43 | AggressiveInlining = true, 44 | CustomAttributes = {Helper.ExtensionAttribute} 45 | }; 46 | @static.Methods.Add(method); 47 | 48 | var T = new GenericParameter("T", method) 49 | { 50 | HasNotNullableValueTypeConstraint = true, 51 | HasDefaultConstructorConstraint = true, 52 | HasReferenceTypeConstraint = false, 53 | }; 54 | method.GenericParameters.Add(T); 55 | 56 | var (baseEnumerable, enumerable, _) = T.MakeSpecialTypePair(name); 57 | method.ReturnType = enumerable; 58 | switch (name) 59 | { 60 | case "T[]": 61 | GenerateArray(method, baseEnumerable, enumerable); 62 | break; 63 | case "NativeArray": 64 | GenerateNativeArray(method, baseEnumerable, enumerable); 65 | break; 66 | default: throw new NotSupportedException(name); 67 | } 68 | } 69 | 70 | private static void GenerateArray(MethodDefinition method, TypeReference baseEnumerable, GenericInstanceType enumerable) 71 | { 72 | method.Parameters.Add(new ParameterDefinition("@this", ParameterAttributes.None, baseEnumerable)); 73 | 74 | var body = method.Body; 75 | 76 | body.GetILProcessor() 77 | .ArgumentNullCheck(0, Instruction.Create(OpCodes.Ldarg_0)) 78 | .NewObj(enumerable.FindMethod(".ctor", 1)) 79 | .Ret(); 80 | } 81 | 82 | private static void GenerateNativeArray(MethodDefinition method, TypeReference baseEnumerable, GenericInstanceType enumerable) 83 | { 84 | method.Parameters.Add(new ParameterDefinition("@this", ParameterAttributes.None, baseEnumerable)); 85 | 86 | method.Body.GetILProcessor() 87 | .LdArg(0) 88 | .NewObj(enumerable.FindMethod(".ctor", 1)) 89 | .Ret(); 90 | } 91 | } 92 | } -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single/AsRefEnumerableUnsafe/AsRefEnumerableUnsafe.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: eae67fa7af1917240b1e632eb7d6e2d2 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single/Average.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 2ee66f52e799ced4ca8d1dbe2b5a706b 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single/Average/TryGetAverageNone.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: dc636d6b2015a014e9e488d8013ec29d 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single/Cast.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: b8185cf9da48cc44fba50216c14c8dff 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single/Cast/Cast.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using Mono.Cecil; 5 | using Mono.Cecil.Cil; 6 | 7 | // ReSharper disable InconsistentNaming 8 | 9 | namespace UniNativeLinq.Editor.CodeGenerator 10 | { 11 | public sealed class Cast 12 | : ITypeDictionaryHolder, 13 | IApiExtensionMethodGenerator 14 | { 15 | public Cast(ISingleApi api) 16 | { 17 | Api = api; 18 | } 19 | 20 | public readonly ISingleApi Api; 21 | 22 | public Dictionary Dictionary { private get; set; } 23 | 24 | public void Generate(IEnumerableCollectionProcessor processor, ModuleDefinition mainModule, ModuleDefinition systemModule, ModuleDefinition unityModule) 25 | { 26 | var array = processor.EnabledNameCollection.Intersect(Api.NameCollection).ToArray(); 27 | if (!Api.ShouldDefine(array)) return; 28 | var @static = mainModule.GetType("UniNativeLinq", "NativeEnumerable`1"); 29 | 30 | foreach (var name in array) 31 | { 32 | if (!processor.IsSpecialType(name, out var isSpecial)) throw new KeyNotFoundException(); 33 | if (!Api.TryGetEnabled(name, out var apiEnabled) || !apiEnabled) continue; 34 | GenerateEach(name, isSpecial, @static, mainModule, systemModule); 35 | } 36 | } 37 | 38 | private void GenerateEach(string name, bool isSpecial, TypeDefinition @static, ModuleDefinition mainModule, ModuleDefinition systemModule) 39 | { 40 | var method = new MethodDefinition(Api.Name, MethodAttributes.Public | MethodAttributes.HideBySig, mainModule.TypeSystem.Boolean) 41 | { 42 | DeclaringType = @static, 43 | AggressiveInlining = true, 44 | CustomAttributes = {Helper.ExtensionAttribute} 45 | }; 46 | @static.Methods.Add(method); 47 | 48 | var TTo = method.DefineUnmanagedGenericParameter("TTo"); 49 | method.GenericParameters.Add(TTo); 50 | 51 | if (name != "Native") throw new NotSupportedException(name); 52 | var typeDefinition = method.Module.GetType("UniNativeLinq", "NativeEnumerable`1"); 53 | method.ReturnType = new GenericInstanceType(typeDefinition) 54 | { 55 | GenericArguments = {TTo} 56 | }; 57 | GenerateNativeEnumerable(method, TTo, systemModule); 58 | } 59 | 60 | private static void GenerateNativeEnumerable(MethodDefinition method, TypeReference TTo, ModuleDefinition systemModule) 61 | { 62 | var create = method.ReturnType.FindMethod("Create", 2); 63 | 64 | var invalidCastException = method.Module.ImportReference(systemModule.GetType("System", nameof(InvalidCastException))); 65 | 66 | var success = Instruction.Create(OpCodes.Sizeof, TTo); 67 | 68 | var enumerable = new GenericInstanceType(method.DeclaringType) 69 | { 70 | GenericArguments = {method.DeclaringType.GenericParameters[0]} 71 | }; 72 | 73 | method.Body.GetILProcessor() 74 | .LdArg(0) 75 | .LdFld(enumerable.FindField("Ptr")) 76 | .LdArg(0) 77 | .LdFld(enumerable.FindField("Length")) 78 | .SizeOf(enumerable.GenericArguments[0]) 79 | .ConvI8() 80 | .Mul() // byte長さ 81 | .Dup() // 比較用ベース 82 | .Dup() // 比較用計算後 83 | .SizeOf(TTo) 84 | .Div() 85 | .SizeOf(TTo) 86 | .Add(Instruction.Create(OpCodes.Mul)) 87 | .BeqS(success) 88 | .Pop() 89 | .Pop() 90 | .NewObj(invalidCastException.FindMethod(".ctor", 0)) 91 | .Throw() 92 | .Add(success) 93 | .Div() 94 | .Call(create) 95 | .Ret(); 96 | } 97 | } 98 | } -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single/Cast/Cast.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 46015cc56613b1d49b1a28496c686a59 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single/Contains.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 7921fb66b9268374ea0b3f0aafc87205 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single/Contains/ContainsFunc.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: f46599e3047f4af4eb7ae83fa6c17392 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single/Contains/ContainsNone.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 73511e8ea3e75ea44a7e765d999ffd41 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single/Contains/ContainsOperator.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 1b44a4f662d6bcc4bb53600fc0cd197b 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single/Contains/ContainsRefFunc.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 6230bee9b6deeb644983451c86ecbfa3 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single/Create.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: be80e865c361f464f9661e1d49a15006 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single/Create/Create.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using Mono.Cecil; 5 | using Mono.Cecil.Cil; 6 | 7 | // ReSharper disable InconsistentNaming 8 | using UniNativeLinq.Editor; 9 | using UniNativeLinq.Editor.CodeGenerator; 10 | 11 | namespace UniNativeLinq.Editor.CodeGenerator 12 | { 13 | public sealed class Create 14 | : ITypeDictionaryHolder, 15 | IApiExtensionMethodGenerator 16 | { 17 | public Create(ISingleApi api) 18 | { 19 | Api = api; 20 | } 21 | 22 | public readonly ISingleApi Api; 23 | 24 | public Dictionary Dictionary { private get; set; } 25 | 26 | public void Generate(IEnumerableCollectionProcessor processor, ModuleDefinition mainModule, ModuleDefinition systemModule, ModuleDefinition unityModule) 27 | { 28 | var array = processor.EnabledNameCollection.Intersect(Api.NameCollection).ToArray(); 29 | if (!Api.ShouldDefine(array)) return; 30 | var @static = mainModule.GetType("UniNativeLinq", "NativeEnumerable"); 31 | 32 | var method = new MethodDefinition(Api.Name, Helper.StaticMethodAttributes, mainModule.TypeSystem.Boolean) 33 | { 34 | DeclaringType = @static, 35 | AggressiveInlining = true, 36 | }; 37 | @static.Methods.Add(method); 38 | 39 | var T = new GenericParameter("T", method) 40 | { 41 | HasNotNullableValueTypeConstraint = true, 42 | HasDefaultConstructorConstraint = true, 43 | }; 44 | method.GenericParameters.Add(T); 45 | 46 | var typeDefinition = method.Module.GetType("UniNativeLinq", "NativeEnumerable`1"); 47 | method.ReturnType = new GenericInstanceType(typeDefinition) 48 | { 49 | GenericArguments = {T} 50 | }; 51 | GenerateNativeEnumerable(method, method.ReturnType, T, systemModule); 52 | } 53 | 54 | private static void GenerateNativeEnumerable(MethodDefinition method, TypeReference enumerable, TypeReference T, ModuleDefinition systemModule) 55 | { 56 | method.Parameters.Add(new ParameterDefinition("length", ParameterAttributes.None, method.Module.TypeSystem.Int64)); 57 | method.Parameters.Add(new ParameterDefinition("allocator", ParameterAttributes.None, Helper.Allocator)); 58 | var malloc = new GenericInstanceMethod(method.Module.GetType("UniNativeLinq", "UnsafeUtilityEx").FindMethod("Malloc", 2)) 59 | { 60 | GenericArguments = {T} 61 | }; 62 | var create = method.ReturnType.FindMethod("Create", 2); 63 | 64 | method.Body.GetILProcessor() 65 | .LdArg(0) 66 | .LdArg(1) 67 | .Call(malloc) 68 | .LdArg(0) 69 | .Call(create) 70 | .Ret(); 71 | } 72 | } 73 | } -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single/Create/Create.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 8652e88b392b2ea44a2073b17f34d6e5 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single/DefaultIfEmpty.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 89221352e203d3443aa796e729aa3409 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single/DefaultIfEmpty/DefaultIfEmptyNone.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: c71894fcfc7935a468959446ea83b1e1 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single/Distinct.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 516913d1285d3b84887b8134208b12f0 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single/Distinct/DistinctFunc.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: c75c0ebb58acca144b55676effec8059 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single/Distinct/DistinctNone.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using Mono.Cecil; 4 | using Mono.Cecil.Cil; 5 | // ReSharper disable InconsistentNaming 6 | 7 | namespace UniNativeLinq.Editor.CodeGenerator 8 | { 9 | public sealed class DistinctNone : ITypeDictionaryHolder, IApiExtensionMethodGenerator 10 | { 11 | public DistinctNone(ISingleApi api) 12 | { 13 | Api = api; 14 | } 15 | 16 | public readonly ISingleApi Api; 17 | 18 | public Dictionary Dictionary { private get; set; } 19 | public void Generate(IEnumerableCollectionProcessor processor, ModuleDefinition mainModule, ModuleDefinition systemModule, ModuleDefinition unityModule) 20 | { 21 | Api.GenerateSingleWithEnumerable(processor, mainModule, systemModule, unityModule, GenerateEach); 22 | } 23 | 24 | private void GenerateEach(string name, bool isSpecial, TypeDefinition @static, ModuleDefinition mainModule, ModuleDefinition systemModule) 25 | { 26 | var returnTypeDefinition = mainModule.GetType("UniNativeLinq", Api.Name + "Enumerable`4"); 27 | 28 | var method = new MethodDefinition(Api.Name, Helper.StaticMethodAttributes, mainModule.TypeSystem.Boolean) 29 | { 30 | DeclaringType = @static, 31 | AggressiveInlining = true, 32 | CustomAttributes = { Helper.ExtensionAttribute } 33 | }; 34 | @static.Methods.Add(method); 35 | 36 | var T = method.DefineUnmanagedGenericParameter(); 37 | T.Constraints.Add(new GenericInstanceType(mainModule.ImportReference(systemModule.GetType("System", "IEquatable`1"))) 38 | { 39 | GenericArguments = { T } 40 | }); 41 | method.GenericParameters.Add(T); 42 | 43 | var EqualityComparer = new GenericInstanceType(mainModule.GetType("UniNativeLinq", "DefaultEqualityComparer`1")) 44 | { 45 | GenericArguments = { T } 46 | }; 47 | 48 | if (isSpecial) 49 | { 50 | var (baseEnumerable, enumerable, enumerator) = T.MakeSpecialTypePair(name); 51 | method.ReturnType = new GenericInstanceType(returnTypeDefinition) 52 | { 53 | GenericArguments = { enumerable, enumerator, T, EqualityComparer } 54 | }; 55 | switch (name) 56 | { 57 | case "T[]": 58 | case "NativeArray": 59 | GenerateSpecial(method, baseEnumerable, enumerable); 60 | break; 61 | default: throw new NotSupportedException(name); 62 | } 63 | } 64 | else 65 | { 66 | var type = Dictionary[name]; 67 | var (enumerable, enumerator, _) = T.MakeFromCommonType(method, type, "0"); 68 | method.ReturnType = new GenericInstanceType(returnTypeDefinition) 69 | { 70 | GenericArguments = { enumerable, enumerator, T, EqualityComparer } 71 | }; 72 | GenerateNormal(method, enumerable, T); 73 | } 74 | } 75 | 76 | private static void GenerateSpecial(MethodDefinition method, TypeReference baseEnumerable, GenericInstanceType enumerable) 77 | { 78 | method.Parameters.Add(new ParameterDefinition("@this", ParameterAttributes.None, baseEnumerable)); 79 | method.DefineAllocatorParam(); 80 | 81 | var body = method.Body; 82 | body.InitLocals = true; 83 | body.Variables.Add(new VariableDefinition(enumerable)); 84 | 85 | body.GetILProcessor() 86 | .LdLocA(0) 87 | .LdArg(0) 88 | .Call(enumerable.FindMethod(".ctor", 1)) 89 | 90 | .LdLocA(0) 91 | .LdArg(1) 92 | .NewObj(method.ReturnType.FindMethod(".ctor", 2)) 93 | .Ret(); 94 | } 95 | 96 | private static void GenerateNormal(MethodDefinition method, TypeReference enumerable, GenericParameter T) 97 | { 98 | method.Parameters.Add(new ParameterDefinition("@this", ParameterAttributes.In, new ByReferenceType(enumerable)) 99 | { 100 | CustomAttributes = { Helper.GetSystemRuntimeCompilerServicesIsReadOnlyAttributeTypeReference() } 101 | }); 102 | method.DefineAllocatorParam(); 103 | 104 | method.Body.GetILProcessor() 105 | .LdArgs(0, 2) 106 | .NewObj(method.ReturnType.FindMethod(".ctor", 2)) 107 | .Ret(); 108 | } 109 | } 110 | } -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single/Distinct/DistinctNone.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: dda699606401fbc4982e6b943925d6d0 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single/Distinct/DistinctOperator.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 1724fe6248cf07f4c8b5a8b6b9c240c6 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single/Distinct/DistinctRefFunc.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: fc54e02f9bb67c54fa5a5e500b5e454a 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single/ForEach.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 769952e9d9d578947845f31a6689f9e2 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single/ForEach/ForEachAction.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: f2ea77b850e909841a4e0718d777f035 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single/ForEach/ForEachOperator.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: f1fe52ae3f59cf44e8693b63d3559409 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single/ForEach/ForEachRefAction.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: d62029891a8160f4abd4c577612f45ea 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single/GroupBy.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 2f8e172cfa9967f4ea2531b13ab9e6c7 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single/GroupBy/GroupByFunc1DefaultEqualityComparer.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: b4e905def0b0a8c45b42151e73a69ddd 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single/GroupBy/GroupByFunc2DefaultEqualityComparer.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 4a3e25452a448504a8d506a9d28cb692 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single/GroupBy/GroupByFunc3.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: dc807d5bacec8e14e8f8f84c85161526 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single/GroupBy/GroupByRefAction1DefaultEqualityComparer.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 9ee025ed10f03f941945f991cae661dc 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single/GroupBy/GroupByRefAction2DefaultEqualityComparer.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 54531effe27ff7847a87f60f46033652 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single/GroupBy/GroupByRefAction2RefFunc1.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 1bd832501c0577f449c34204b856aa4f 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single/MinMaxBy.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 34e6bb7208aa9514bbe25fa35b611f75 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single/MinMaxBy/MinMaxByFunc.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 7264730eedbdf854cb2ec496044ba926 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single/MinMaxBy/MinMaxByOperator.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 6e955e5aa62019d458ff0a8d995f5581 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single/MinMaxBy/MinMaxByRefFunc.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 63bb8d9bfff425344befe01febdec254 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single/OrderBy.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 9fc83a5d5cb168e449e3575593ca89c4 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single/OrderBy/OrderByFunc.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 041248d2dd519754a982968a1b8be6ed 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single/OrderBy/OrderByIComparer.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: fc885827b8e60a8409062d54b8f68f49 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single/OrderBy/OrderByNone.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using Mono.Cecil; 4 | using Mono.Cecil.Cil; 5 | // ReSharper disable InconsistentNaming 6 | 7 | namespace UniNativeLinq.Editor.CodeGenerator 8 | { 9 | public sealed class OrderByNone : ITypeDictionaryHolder, IApiExtensionMethodGenerator 10 | { 11 | public OrderByNone(ISingleApi api) 12 | { 13 | Api = api; 14 | } 15 | public readonly ISingleApi Api; 16 | public Dictionary Dictionary { private get; set; } 17 | public void Generate(IEnumerableCollectionProcessor processor, ModuleDefinition mainModule, ModuleDefinition systemModule, ModuleDefinition unityModule) 18 | { 19 | Api.GenerateSingleWithEnumerable(processor, mainModule, systemModule, unityModule, GenerateEach); 20 | } 21 | 22 | private void GenerateEach(string name, bool isSpecial, TypeDefinition @static, ModuleDefinition mainModule, ModuleDefinition systemModule) 23 | { 24 | var returnTypeDefinition = mainModule.GetType("UniNativeLinq", Api.Name + "Enumerable`4"); 25 | 26 | var method = new MethodDefinition(Api.Name, Helper.StaticMethodAttributes, mainModule.TypeSystem.Boolean) 27 | { 28 | DeclaringType = @static, 29 | AggressiveInlining = true, 30 | CustomAttributes = { Helper.ExtensionAttribute } 31 | }; 32 | @static.Methods.Add(method); 33 | 34 | var T = method.DefineUnmanagedGenericParameter(); 35 | T.Constraints.Add(new GenericInstanceType(mainModule.ImportReference(systemModule.GetType("System", "IComparable`1"))) 36 | { 37 | GenericArguments = { T } 38 | }); 39 | method.GenericParameters.Add(T); 40 | 41 | var TComparer = new GenericInstanceType(mainModule.GetType("UniNativeLinq", "DefaultOrderByAscending`1")) 42 | { 43 | GenericArguments = { T } 44 | }; 45 | 46 | if (isSpecial) 47 | { 48 | var (baseEnumerable, enumerable, enumerator) = T.MakeSpecialTypePair(name); 49 | method.ReturnType = new GenericInstanceType(returnTypeDefinition) 50 | { 51 | GenericArguments = { enumerable, enumerator, T, TComparer } 52 | }; 53 | switch (name) 54 | { 55 | case "T[]": 56 | case "NativeArray": 57 | GenerateSpecial(method, baseEnumerable, enumerable, TComparer); 58 | break; 59 | default: throw new NotSupportedException(name); 60 | } 61 | } 62 | else 63 | { 64 | var type = Dictionary[name]; 65 | var (enumerable, enumerator, _) = T.MakeFromCommonType(method, type, "0"); 66 | method.ReturnType = new GenericInstanceType(returnTypeDefinition) 67 | { 68 | GenericArguments = { enumerable, enumerator, T, TComparer } 69 | }; 70 | GenerateNormal(method, enumerable, TComparer); 71 | } 72 | } 73 | 74 | private static void GenerateNormal(MethodDefinition method, TypeReference enumerable, GenericInstanceType comparer) 75 | { 76 | method.Parameters.Add(new ParameterDefinition("@this", ParameterAttributes.In, new ByReferenceType(enumerable)) 77 | { 78 | CustomAttributes = { Helper.GetSystemRuntimeCompilerServicesIsReadOnlyAttributeTypeReference() } 79 | }); 80 | method.DefineAllocatorParam(); 81 | 82 | method.Body.GetILProcessor() 83 | .LdArgs(0, 2) 84 | .NewObj(method.ReturnType.FindMethod(".ctor", 2)) 85 | .Ret(); 86 | } 87 | 88 | private static void GenerateSpecial(MethodDefinition method, TypeReference baseEnumerable, GenericInstanceType enumerable, TypeReference comparer) 89 | { 90 | method.Parameters.Add(new ParameterDefinition("@this", ParameterAttributes.None, baseEnumerable)); 91 | method.DefineAllocatorParam(); 92 | 93 | var body = method.Body; 94 | body.InitLocals = true; 95 | body.Variables.Add(new VariableDefinition(enumerable)); 96 | 97 | body.GetILProcessor() 98 | .LdLocA(0) 99 | .LdArg(0) 100 | .Call(enumerable.FindMethod(".ctor", 1)) 101 | 102 | .LdLocA(0) 103 | .LdArg(1) 104 | .NewObj(method.ReturnType.FindMethod(".ctor", 2)) 105 | .Ret(); 106 | } 107 | } 108 | } -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single/OrderBy/OrderByNone.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 0a25003c3f883854fb26c2e82751cc54 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single/OrderBy/OrderByNoneNumber.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 214194b5c0014124d96f9d8208247f62 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single/OrderBy/OrderByOperator.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 27a4852ed3e806446838bf89bda0b2b6 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single/OrderBy/OrderByRefFunc.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 91ff67830df59904db356646747f49bc 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single/RepeatRange.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 3aa37d05a9d07624ea5b513564f2c853 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single/RepeatRange/Range.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using System.Linq; 3 | using Mono.Cecil; 4 | 5 | // ReSharper disable InconsistentNaming 6 | 7 | namespace UniNativeLinq.Editor.CodeGenerator 8 | { 9 | public sealed class Range 10 | : ITypeDictionaryHolder, 11 | IApiExtensionMethodGenerator 12 | { 13 | public Range(ISingleApi api) 14 | { 15 | Api = api; 16 | } 17 | 18 | public readonly ISingleApi Api; 19 | 20 | public Dictionary Dictionary { private get; set; } 21 | public void Generate(IEnumerableCollectionProcessor processor, ModuleDefinition mainModule, ModuleDefinition systemModule, ModuleDefinition unityModule) 22 | { 23 | if (!processor.TryGetEnabled(Api.Name, out var enabled) || !enabled) return; 24 | var names = Api.NameCollection; 25 | if (names.All(name => !Api.TryGetEnabled(name, out var e) || !e)) return; 26 | 27 | var @static = mainModule.GetType("UniNativeLinq", "Enumerable"); 28 | if (@static is null) 29 | { 30 | @static = mainModule.DefineStatic("Enumerable"); 31 | @static.CustomAttributes.Clear(); 32 | mainModule.Types.Add(@static); 33 | } 34 | 35 | foreach (var name in names.Where(name => Api.TryGetEnabled(name, out var e) && e)) 36 | { 37 | GenerateEach(name, @static, mainModule, systemModule, unityModule); 38 | } 39 | } 40 | 41 | private void GenerateEach(string name, TypeDefinition @static, ModuleDefinition mainModule, ModuleDefinition systemModule, ModuleDefinition unityModule) 42 | { 43 | var method = new MethodDefinition(Api.Description, Helper.StaticMethodAttributes, mainModule.TypeSystem.Boolean) 44 | { 45 | DeclaringType = @static, 46 | AggressiveInlining = true, 47 | }; 48 | @static.Methods.Add(method); 49 | 50 | var T = mainModule.ImportReference(systemModule.GetType("System", name)); 51 | 52 | var TAction = mainModule.GetType("UniNativeLinq", name + "Increment"); 53 | 54 | method.ReturnType = new GenericInstanceType(mainModule.GetType("UniNativeLinq", "RangeRepeatEnumerable`2")) 55 | { 56 | GenericArguments = { T, TAction } 57 | }; 58 | 59 | method.Parameters.Add(new ParameterDefinition("value", ParameterAttributes.None, T)); 60 | method.Parameters.Add(new ParameterDefinition("count", ParameterAttributes.None, mainModule.TypeSystem.Int64)); 61 | 62 | method.Body.GetILProcessor() 63 | .LdArgA(0) 64 | .LdArg(1) 65 | .NewObj(method.ReturnType.FindMethod(".ctor", 2)) 66 | .Ret(); 67 | } 68 | } 69 | } -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single/RepeatRange/Range.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: eb02cd685580a49498c74c9aac8f3125 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single/RepeatRange/Repeat.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using Mono.Cecil; 3 | 4 | // ReSharper disable InconsistentNaming 5 | 6 | namespace UniNativeLinq.Editor.CodeGenerator 7 | { 8 | public sealed class Repeat : ITypeDictionaryHolder, IApiExtensionMethodGenerator 9 | { 10 | public Repeat(ISingleApi api) 11 | { 12 | Api = api; 13 | } 14 | 15 | public readonly ISingleApi Api; 16 | 17 | public Dictionary Dictionary { private get; set; } 18 | public void Generate(IEnumerableCollectionProcessor processor, ModuleDefinition mainModule, ModuleDefinition systemModule, ModuleDefinition unityModule) 19 | { 20 | if (!processor.TryGetEnabled(Api.Name, out var enabled) || !enabled || !Api.TryGetEnabled("", out enabled) || !enabled) return; 21 | var @static = mainModule.GetType("UniNativeLinq", "Enumerable"); 22 | if (@static is null) 23 | { 24 | @static = mainModule.DefineStatic("Enumerable"); 25 | @static.CustomAttributes.Clear(); 26 | mainModule.Types.Add(@static); 27 | } 28 | 29 | var method = new MethodDefinition(Api.Description, Helper.StaticMethodAttributes, mainModule.TypeSystem.Boolean) 30 | { 31 | DeclaringType = @static, 32 | AggressiveInlining = true, 33 | }; 34 | @static.Methods.Add(method); 35 | 36 | var T = method.DefineUnmanagedGenericParameter(); 37 | method.GenericParameters.Add(T); 38 | 39 | var NoAction = new GenericInstanceType(mainModule.GetType("UniNativeLinq", "NoAction`1")) 40 | { 41 | GenericArguments = { T } 42 | }; 43 | 44 | method.ReturnType = new GenericInstanceType(mainModule.GetType("UniNativeLinq", "RangeRepeatEnumerable`2")) 45 | { 46 | GenericArguments = { T, NoAction } 47 | }; 48 | 49 | method.Parameters.Add(new ParameterDefinition("value", ParameterAttributes.In, new ByReferenceType(T)) 50 | { 51 | CustomAttributes = { Helper.GetSystemRuntimeCompilerServicesIsReadOnlyAttributeTypeReference() } 52 | }); 53 | method.Parameters.Add(new ParameterDefinition("count", ParameterAttributes.None, mainModule.TypeSystem.Int64)); 54 | 55 | method.Body.GetILProcessor() 56 | .LdArgs(0, 2) 57 | .NewObj(method.ReturnType.FindMethod(".ctor", 2)) 58 | .Ret(); 59 | } 60 | } 61 | } -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single/RepeatRange/Repeat.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 60da122281ae2864bbe6a889c50d7596 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single/Reverse.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using Mono.Cecil; 4 | using Mono.Cecil.Cil; 5 | // ReSharper disable InconsistentNaming 6 | 7 | namespace UniNativeLinq.Editor.CodeGenerator 8 | { 9 | public sealed class Reverse : ITypeDictionaryHolder, IApiExtensionMethodGenerator 10 | { 11 | public Reverse(ISingleApi api) 12 | { 13 | Api = api; 14 | } 15 | 16 | public readonly ISingleApi Api; 17 | 18 | public Dictionary Dictionary { private get; set; } 19 | public void Generate(IEnumerableCollectionProcessor processor, ModuleDefinition mainModule, ModuleDefinition systemModule, ModuleDefinition unityModule) 20 | { 21 | Api.GenerateSingleWithEnumerable(processor, mainModule, systemModule, unityModule, GenerateEach); 22 | } 23 | 24 | private void GenerateEach(string name, bool isSpecial, TypeDefinition @static, ModuleDefinition mainModule, ModuleDefinition systemModule) 25 | { 26 | var returnTypeDefinition = mainModule.GetType("UniNativeLinq", Api.Name + "Enumerable`3"); 27 | 28 | var method = new MethodDefinition(Api.Name, Helper.StaticMethodAttributes, mainModule.TypeSystem.Boolean) 29 | { 30 | DeclaringType = @static, 31 | AggressiveInlining = true, 32 | CustomAttributes = { Helper.ExtensionAttribute } 33 | }; 34 | @static.Methods.Add(method); 35 | 36 | var T = method.DefineUnmanagedGenericParameter(); 37 | method.GenericParameters.Add(T); 38 | 39 | if (isSpecial) 40 | { 41 | var (baseEnumerable, enumerable, enumerator) = T.MakeSpecialTypePair(name); 42 | method.ReturnType = new GenericInstanceType(returnTypeDefinition) 43 | { 44 | GenericArguments = { enumerable, enumerator, T } 45 | }; 46 | switch (name) 47 | { 48 | case "T[]": 49 | case "NativeArray": 50 | GenerateSpecial(method, baseEnumerable, enumerable); 51 | break; 52 | default: throw new NotSupportedException(name); 53 | } 54 | } 55 | else 56 | { 57 | var type = Dictionary[name]; 58 | var (enumerable, enumerator, _) = T.MakeFromCommonType(method, type, "0"); 59 | method.ReturnType = new GenericInstanceType(returnTypeDefinition) 60 | { 61 | GenericArguments = { enumerable, enumerator, T } 62 | }; 63 | GenerateNormal(method, enumerable, T); 64 | } 65 | } 66 | 67 | private static void GenerateSpecial(MethodDefinition method, TypeReference baseEnumerable, GenericInstanceType enumerable) 68 | { 69 | method.Parameters.Add(new ParameterDefinition("@this", ParameterAttributes.None, baseEnumerable)); 70 | method.DefineAllocatorParam(); 71 | 72 | var body = method.Body; 73 | body.InitLocals = true; 74 | body.Variables.Add(new VariableDefinition(enumerable)); 75 | 76 | body.GetILProcessor() 77 | .LdLocA(0) 78 | .LdArg(0) 79 | .Call(enumerable.FindMethod(".ctor", 1)) 80 | 81 | .LdLocA(0) 82 | .LdArg(1) 83 | .NewObj(method.ReturnType.FindMethod(".ctor", 2)) 84 | .Ret(); 85 | } 86 | 87 | private static void GenerateNormal(MethodDefinition method, TypeReference enumerable, GenericParameter T) 88 | { 89 | method.Parameters.Add(new ParameterDefinition("@this", ParameterAttributes.In, new ByReferenceType(enumerable)) 90 | { 91 | CustomAttributes = { Helper.GetSystemRuntimeCompilerServicesIsReadOnlyAttributeTypeReference() } 92 | }); 93 | method.DefineAllocatorParam(); 94 | 95 | method.Body.GetILProcessor() 96 | .LdArgs(0, 2) 97 | .NewObj(method.ReturnType.FindMethod(".ctor", 2)) 98 | .Ret(); 99 | } 100 | } 101 | } -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single/Reverse.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 6ea159cb5153e18488eb8599ba46ed63 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single/Select.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 9407069f160945f49a502195a93b1f91 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single/Select/SelectFunc.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 46c3ee61a5493d346bb6383a63560088 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single/Select/SelectRefAction.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: a4c8c9d9c6ae7b5469ecdb3da8f6026f 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single/SelectIndex.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: cd9b2c2b8cc1e814486a94884417c0f3 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single/SelectIndex/SelectIndexFunc.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 30c878d10e1d12c4fa671c3192e60bf6 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single/SelectIndex/SelectIndexRefFunc.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: d84fd24c2c79a154aa475f04d3512f92 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single/SelectIndex/SelectIndexWithIndex.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using Mono.Cecil; 4 | using Mono.Cecil.Cil; 5 | // ReSharper disable InconsistentNaming 6 | 7 | namespace UniNativeLinq.Editor.CodeGenerator 8 | { 9 | public sealed class SelectIndexWithIndex : ITypeDictionaryHolder, IApiExtensionMethodGenerator 10 | { 11 | public SelectIndexWithIndex(ISingleApi api) 12 | { 13 | Api = api; 14 | } 15 | public readonly ISingleApi Api; 16 | public Dictionary Dictionary { private get; set; } 17 | public void Generate(IEnumerableCollectionProcessor processor, ModuleDefinition mainModule, ModuleDefinition systemModule, ModuleDefinition unityModule) 18 | { 19 | Api.GenerateSingleWithEnumerable(processor, mainModule, systemModule, unityModule, GenerateEach); 20 | } 21 | 22 | private void GenerateEach(string name, bool isSpecial, TypeDefinition @static, ModuleDefinition mainModule, ModuleDefinition systemModule) 23 | { 24 | var returnTypeDefinition = mainModule.GetType("UniNativeLinq", Api.Name + "Enumerable`5"); 25 | 26 | var method = new MethodDefinition("WithIndex", Helper.StaticMethodAttributes, mainModule.TypeSystem.Boolean) 27 | { 28 | DeclaringType = @static, 29 | AggressiveInlining = true, 30 | CustomAttributes = { Helper.ExtensionAttribute } 31 | }; 32 | @static.Methods.Add(method); 33 | 34 | var T = method.DefineUnmanagedGenericParameter(); 35 | method.GenericParameters.Add(T); 36 | 37 | var TResult = new GenericInstanceType(mainModule.ImportReference(systemModule.GetType("System", "ValueTuple`2"))) 38 | { 39 | GenericArguments = { T, mainModule.TypeSystem.Int64 } 40 | }; 41 | 42 | var TSelector = new GenericInstanceType(mainModule.GetType("UniNativeLinq", "WithIndex`1")) 43 | { 44 | GenericArguments = { T } 45 | }; 46 | var TupleElementNamesAttributeConstructor = mainModule.ImportReference(systemModule.GetType("System.Runtime.CompilerServices", "TupleElementNamesAttribute")).FindMethod(".ctor", 1); 47 | method.MethodReturnType.CustomAttributes.Add(new CustomAttribute(TupleElementNamesAttributeConstructor, new byte[] 48 | { 49 | 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0x07, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x00, 0x00 50 | })); 51 | 52 | if (isSpecial) 53 | { 54 | var (baseEnumerable, enumerable, enumerator) = T.MakeSpecialTypePair(name); 55 | method.ReturnType = new GenericInstanceType(returnTypeDefinition) 56 | { 57 | GenericArguments = { enumerable, enumerator, T, TResult, TSelector } 58 | }; 59 | switch (name) 60 | { 61 | case "T[]": 62 | case "NativeArray": 63 | GenerateSpecial(method, baseEnumerable, enumerable, TSelector); 64 | break; 65 | default: throw new NotSupportedException(name); 66 | } 67 | } 68 | else 69 | { 70 | var type = Dictionary[name]; 71 | var (enumerable, enumerator, _) = T.MakeFromCommonType(method, type, "0"); 72 | method.ReturnType = new GenericInstanceType(returnTypeDefinition) 73 | { 74 | GenericArguments = { enumerable, enumerator, T, TResult, TSelector } 75 | }; 76 | GenerateNormal(method, enumerable, TSelector); 77 | } 78 | } 79 | 80 | private static void GenerateNormal(MethodDefinition method, TypeReference enumerable, TypeReference selector) 81 | { 82 | method.Parameters.Add(new ParameterDefinition("@this", ParameterAttributes.In, new ByReferenceType(enumerable)) 83 | { 84 | CustomAttributes = { Helper.GetSystemRuntimeCompilerServicesIsReadOnlyAttributeTypeReference() } 85 | }); 86 | 87 | method.Body.GetILProcessor() 88 | .LdArg(0) 89 | .NewObj(method.ReturnType.FindMethod(".ctor", 1)) 90 | .Ret(); 91 | } 92 | 93 | private static void GenerateSpecial(MethodDefinition method, TypeReference baseEnumerable, GenericInstanceType enumerable, TypeReference selector) 94 | { 95 | method.Parameters.Add(new ParameterDefinition("@this", ParameterAttributes.None, baseEnumerable)); 96 | 97 | var body = method.Body; 98 | body.InitLocals = true; 99 | body.Variables.Add(new VariableDefinition(enumerable)); 100 | 101 | body.GetILProcessor() 102 | .LdLocA(0) 103 | .LdArg(0) 104 | .Call(enumerable.FindMethod(".ctor", 1)) 105 | 106 | .LdLocA(0) 107 | .NewObj(method.ReturnType.FindMethod(".ctor", 1)) 108 | .Ret(); 109 | } 110 | } 111 | } -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single/SelectIndex/SelectIndexWithIndex.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 38f076599e2632d43b55afd349458a37 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single/SingleApiHelper.cs: -------------------------------------------------------------------------------- 1 | namespace UniNativeLinq.Editor.CodeGenerator 2 | { 3 | public static class SingleApiHelper 4 | { 5 | public static bool ShouldDefine(this ISingleApi api, string[] array) 6 | { 7 | foreach (var name in array) 8 | { 9 | if (api.TryGetEnabled(name, out var apiEnabled) && apiEnabled) 10 | { 11 | return true; 12 | } 13 | } 14 | return false; 15 | } 16 | } 17 | } -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single/SingleApiHelper.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: efc2e7c6a967c674fb02220574b0a1f4 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single/SkipSkipLastTakeTakeLastRepeat.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using Mono.Cecil; 5 | using Mono.Cecil.Cil; 6 | 7 | // ReSharper disable InconsistentNaming 8 | 9 | namespace UniNativeLinq.Editor.CodeGenerator 10 | { 11 | public sealed class SkipSkipLastTakeTakeLastRepeat : ITypeDictionaryHolder, IApiExtensionMethodGenerator 12 | { 13 | public SkipSkipLastTakeTakeLastRepeat(ISingleApi api) 14 | { 15 | Api = api; 16 | } 17 | public readonly ISingleApi Api; 18 | public Dictionary Dictionary { private get; set; } 19 | public void Generate(IEnumerableCollectionProcessor processor, ModuleDefinition mainModule, ModuleDefinition systemModule, ModuleDefinition unityModule) 20 | { 21 | Api.GenerateSingleWithEnumerable(processor, mainModule, systemModule, unityModule, GenerateEach); 22 | } 23 | 24 | private void GenerateEach(string name, bool isSpecial, TypeDefinition @static, ModuleDefinition mainModule, ModuleDefinition systemModule) 25 | { 26 | var returnTypeDefinition = mainModule.GetType("UniNativeLinq", Api.Name + "Enumerable`3"); 27 | 28 | var method = new MethodDefinition(Api.Name, Helper.StaticMethodAttributes, mainModule.TypeSystem.Boolean) 29 | { 30 | DeclaringType = @static, 31 | AggressiveInlining = true, 32 | CustomAttributes = { Helper.ExtensionAttribute } 33 | }; 34 | @static.Methods.Add(method); 35 | 36 | var T = method.DefineUnmanagedGenericParameter(); 37 | method.GenericParameters.Add(T); 38 | 39 | if (isSpecial) 40 | { 41 | var (baseEnumerable, enumerable, enumerator) = T.MakeSpecialTypePair(name); 42 | method.ReturnType = new GenericInstanceType(returnTypeDefinition) 43 | { 44 | GenericArguments = { enumerable, enumerator, T } 45 | }; 46 | switch (name) 47 | { 48 | case "T[]": 49 | case "NativeArray": 50 | GenerateSpecial(method, baseEnumerable, enumerable, T); 51 | break; 52 | default: throw new NotSupportedException(name); 53 | } 54 | } 55 | else 56 | { 57 | var type = Dictionary[name]; 58 | 59 | if (type.Methods.Any(x => x.Name == Api.Name)) 60 | { 61 | @static.Methods.Remove(method); 62 | return; 63 | } 64 | 65 | var (enumerable, enumerator, _) = T.MakeFromCommonType(method, type, "0"); 66 | method.ReturnType = new GenericInstanceType(returnTypeDefinition) 67 | { 68 | GenericArguments = { enumerable, enumerator, T } 69 | }; 70 | GenerateNormal(method, enumerable, T); 71 | } 72 | } 73 | 74 | private static void GenerateNormal(MethodDefinition method, TypeReference enumerable, TypeReference T) 75 | { 76 | var constructor = method.ReturnType.FindMethod(".ctor"); 77 | method.Parameters.Add(new ParameterDefinition("@this", ParameterAttributes.In, new ByReferenceType(enumerable)) 78 | { 79 | CustomAttributes = { Helper.GetSystemRuntimeCompilerServicesIsReadOnlyAttributeTypeReference() } 80 | }); 81 | method.Parameters.Add(new ParameterDefinition("count", ParameterAttributes.None, method.Module.TypeSystem.Int64)); 82 | if (constructor.Parameters.Count == 3) 83 | { 84 | method.DefineAllocatorParam(); 85 | } 86 | 87 | method.Body.GetILProcessor() 88 | .LdArgs(0, constructor.Parameters.Count) 89 | .NewObj(constructor) 90 | .Ret(); 91 | } 92 | 93 | private static void GenerateSpecial(MethodDefinition method, TypeReference baseEnumerable, GenericInstanceType enumerable, TypeReference T) 94 | { 95 | var constructor = method.ReturnType.FindMethod(".ctor"); 96 | method.Parameters.Add(new ParameterDefinition("@this", ParameterAttributes.None, baseEnumerable)); 97 | method.Parameters.Add(new ParameterDefinition("count", ParameterAttributes.None, method.Module.TypeSystem.Int64)); 98 | if (constructor.Parameters.Count == 3) 99 | { 100 | method.DefineAllocatorParam(); 101 | } 102 | 103 | var body = method.Body; 104 | body.InitLocals = true; 105 | body.Variables.Add(new VariableDefinition(enumerable)); 106 | 107 | body.GetILProcessor() 108 | .LdLocA(0) 109 | .LdArg(0) 110 | .Call(enumerable.FindMethod(".ctor", 1)) 111 | 112 | .LdLocA(0) 113 | .LdArgs(1, method.Parameters.Count - 1) 114 | .NewObj(constructor) 115 | .Ret(); 116 | } 117 | } 118 | } -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single/SkipSkipLastTakeTakeLastRepeat.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 4e7e591a3988b1c4ba1288807a6ba4ff 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single/Sum.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: aec52b12a88d78142a1a0ed1f7daae68 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single/Sum/SumDouble.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using Mono.Cecil; 4 | 5 | namespace UniNativeLinq.Editor.CodeGenerator 6 | { 7 | public sealed class SumDouble : IApiExtensionMethodGenerator, ITypeDictionaryHolder 8 | { 9 | public SumDouble(ISingleApi api) 10 | { 11 | Api = api; 12 | } 13 | public readonly ISingleApi Api; 14 | public Dictionary Dictionary { private get; set; } 15 | 16 | public void Generate(IEnumerableCollectionProcessor processor, ModuleDefinition mainModule, ModuleDefinition systemModule, ModuleDefinition unityModule) 17 | { 18 | Api.GenerateSingleNoEnumerable(processor, mainModule, GenerateEach, GenerateGeneric); 19 | } 20 | 21 | private static void GenerateGeneric(TypeDefinition @static, ModuleDefinition mainModule) => mainModule.TypeSystem.Double.GenerateSum_Generic(@static); 22 | 23 | private void GenerateEach(string name, bool isSpecial, TypeDefinition @static, ModuleDefinition mainModule) 24 | { 25 | var returnType = mainModule.TypeSystem.Double; 26 | var method = new MethodDefinition("Sum", Helper.StaticMethodAttributes, returnType) 27 | { 28 | DeclaringType = @static, 29 | AggressiveInlining = true, 30 | CustomAttributes = { Helper.ExtensionAttribute } 31 | }; 32 | @static.Methods.Add(method); 33 | if (isSpecial) 34 | { 35 | var (baseEnumerable, _, _) = returnType.MakeSpecialTypePair(name); 36 | switch (name) 37 | { 38 | case "T[]": 39 | returnType.GenerateSum_Array(method, baseEnumerable); 40 | break; 41 | case "NativeArray": 42 | returnType.GenerateSum_NativeArray(method, baseEnumerable); 43 | break; 44 | default: throw new NotSupportedException(name); 45 | } 46 | } 47 | else 48 | { 49 | var (enumerable, enumerator, _) = returnType.MakeFromCommonType(method, Dictionary[name], "0"); 50 | returnType.GenerateSum_IRefEnumerable(method, enumerable, enumerator); 51 | } 52 | } 53 | } 54 | } -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single/Sum/SumDouble.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: cebedcebff6d3f548a70fe4bcec23b29 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single/Sum/SumHelper.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 5d47112705654e444883d96c57e98a0f 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single/Sum/SumInt32.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using Mono.Cecil; 4 | 5 | namespace UniNativeLinq.Editor.CodeGenerator 6 | { 7 | public sealed class SumInt32 : IApiExtensionMethodGenerator, ITypeDictionaryHolder 8 | { 9 | public SumInt32(ISingleApi api) 10 | { 11 | Api = api; 12 | } 13 | public readonly ISingleApi Api; 14 | public Dictionary Dictionary { private get; set; } 15 | 16 | public void Generate(IEnumerableCollectionProcessor processor, ModuleDefinition mainModule, ModuleDefinition systemModule, ModuleDefinition unityModule) 17 | { 18 | Api.GenerateSingleNoEnumerable(processor, mainModule, GenerateEach, GenerateGeneric); 19 | } 20 | 21 | private static void GenerateGeneric(TypeDefinition @static, ModuleDefinition mainModule) => mainModule.TypeSystem.Int32.GenerateSum_Generic(@static); 22 | 23 | private void GenerateEach(string name, bool isSpecial, TypeDefinition @static, ModuleDefinition mainModule) 24 | { 25 | var returnType = mainModule.TypeSystem.Int32; 26 | var method = new MethodDefinition("Sum", Helper.StaticMethodAttributes, returnType) 27 | { 28 | DeclaringType = @static, 29 | AggressiveInlining = true, 30 | CustomAttributes = { Helper.ExtensionAttribute } 31 | }; 32 | @static.Methods.Add(method); 33 | if (isSpecial) 34 | { 35 | var (baseEnumerable, _, _) = returnType.MakeSpecialTypePair(name); 36 | switch (name) 37 | { 38 | case "T[]": 39 | returnType.GenerateSum_Array(method, baseEnumerable); 40 | break; 41 | case "NativeArray": 42 | returnType.GenerateSum_NativeArray(method, baseEnumerable); 43 | break; 44 | default: throw new NotSupportedException(name); 45 | } 46 | } 47 | else 48 | { 49 | var (enumerable, enumerator, _) = returnType.MakeFromCommonType(method, Dictionary[name], "0"); 50 | returnType.GenerateSum_IRefEnumerable(method, enumerable, enumerator); 51 | } 52 | } 53 | } 54 | } -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single/Sum/SumInt32.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 02f141e858794e0409972c011fe96afc 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single/Sum/SumInt64.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using Mono.Cecil; 4 | 5 | namespace UniNativeLinq.Editor.CodeGenerator 6 | { 7 | public sealed class SumInt64 : IApiExtensionMethodGenerator, ITypeDictionaryHolder 8 | { 9 | public SumInt64(ISingleApi api) 10 | { 11 | Api = api; 12 | } 13 | public readonly ISingleApi Api; 14 | public Dictionary Dictionary { private get; set; } 15 | 16 | public void Generate(IEnumerableCollectionProcessor processor, ModuleDefinition mainModule, ModuleDefinition systemModule, ModuleDefinition unityModule) 17 | { 18 | Api.GenerateSingleNoEnumerable(processor, mainModule, GenerateEach, GenerateGeneric); 19 | } 20 | private static void GenerateGeneric(TypeDefinition @static, ModuleDefinition mainModule) => mainModule.TypeSystem.Int64.GenerateSum_Generic(@static); 21 | 22 | private void GenerateEach(string name, bool isSpecial, TypeDefinition @static, ModuleDefinition mainModule) 23 | { 24 | var returnType = mainModule.TypeSystem.Int64; 25 | var method = new MethodDefinition("Sum", Helper.StaticMethodAttributes, returnType) 26 | { 27 | DeclaringType = @static, 28 | AggressiveInlining = true, 29 | CustomAttributes = { Helper.ExtensionAttribute } 30 | }; 31 | @static.Methods.Add(method); 32 | if (isSpecial) 33 | { 34 | var (baseEnumerable, _, _) = returnType.MakeSpecialTypePair(name); 35 | switch (name) 36 | { 37 | case "T[]": 38 | returnType.GenerateSum_Array(method, baseEnumerable); 39 | break; 40 | case "NativeArray": 41 | returnType.GenerateSum_NativeArray(method, baseEnumerable); 42 | break; 43 | default: throw new NotSupportedException(name); 44 | } 45 | } 46 | else 47 | { 48 | var (enumerable, enumerator, _) = returnType.MakeFromCommonType(method, Dictionary[name], "0"); 49 | returnType.GenerateSum_IRefEnumerable(method, enumerable, enumerator); 50 | } 51 | } 52 | } 53 | } -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single/Sum/SumInt64.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 236d0b8b714d6f440b01ba5b79247228 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single/Sum/SumSingle.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using Mono.Cecil; 4 | 5 | namespace UniNativeLinq.Editor.CodeGenerator 6 | { 7 | public sealed class SumSingle : IApiExtensionMethodGenerator, ITypeDictionaryHolder 8 | { 9 | public SumSingle(ISingleApi api) 10 | { 11 | Api = api; 12 | } 13 | public readonly ISingleApi Api; 14 | public Dictionary Dictionary { private get; set; } 15 | 16 | public void Generate(IEnumerableCollectionProcessor processor, ModuleDefinition mainModule, ModuleDefinition systemModule, ModuleDefinition unityModule) 17 | { 18 | Api.GenerateSingleNoEnumerable(processor, mainModule, GenerateEach, GenerateGeneric); 19 | } 20 | private static void GenerateGeneric(TypeDefinition @static, ModuleDefinition mainModule) => mainModule.TypeSystem.Single.GenerateSum_Generic(@static); 21 | 22 | private void GenerateEach(string name, bool isSpecial, TypeDefinition @static, ModuleDefinition mainModule) 23 | { 24 | var returnType = mainModule.TypeSystem.Single; 25 | var method = new MethodDefinition("Sum", Helper.StaticMethodAttributes, returnType) 26 | { 27 | DeclaringType = @static, 28 | AggressiveInlining = true, 29 | CustomAttributes = { Helper.ExtensionAttribute } 30 | }; 31 | @static.Methods.Add(method); 32 | if (isSpecial) 33 | { 34 | var (baseEnumerable, _, _) = returnType.MakeSpecialTypePair(name); 35 | switch (name) 36 | { 37 | case "T[]": 38 | returnType.GenerateSum_Array(method, baseEnumerable); 39 | break; 40 | case "NativeArray": 41 | returnType.GenerateSum_NativeArray(method, baseEnumerable); 42 | break; 43 | default: throw new NotSupportedException(name); 44 | } 45 | } 46 | else 47 | { 48 | var (enumerable, enumerator, _) = returnType.MakeFromCommonType(method, Dictionary[name], "0"); 49 | returnType.GenerateSum_IRefEnumerable(method, enumerable, enumerator); 50 | } 51 | } 52 | } 53 | } -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single/Sum/SumSingle.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 798c909a775d38a4698364359057d5ab 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single/Sum/SumUInt32.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using Mono.Cecil; 4 | 5 | namespace UniNativeLinq.Editor.CodeGenerator 6 | { 7 | public sealed class SumUInt32 : IApiExtensionMethodGenerator, ITypeDictionaryHolder 8 | { 9 | public SumUInt32(ISingleApi api) 10 | { 11 | Api = api; 12 | } 13 | public readonly ISingleApi Api; 14 | public Dictionary Dictionary { private get; set; } 15 | 16 | public void Generate(IEnumerableCollectionProcessor processor, ModuleDefinition mainModule, ModuleDefinition systemModule, ModuleDefinition unityModule) 17 | { 18 | Api.GenerateSingleNoEnumerable(processor, mainModule, GenerateEach, GenerateGeneric); 19 | } 20 | private static void GenerateGeneric(TypeDefinition @static, ModuleDefinition mainModule) => mainModule.TypeSystem.UInt32.GenerateSum_Generic(@static); 21 | 22 | private void GenerateEach(string name, bool isSpecial, TypeDefinition @static, ModuleDefinition mainModule) 23 | { 24 | var returnType = mainModule.TypeSystem.UInt32; 25 | var method = new MethodDefinition("Sum", Helper.StaticMethodAttributes, returnType) 26 | { 27 | DeclaringType = @static, 28 | AggressiveInlining = true, 29 | CustomAttributes = { Helper.ExtensionAttribute } 30 | }; 31 | @static.Methods.Add(method); 32 | if (isSpecial) 33 | { 34 | var (baseEnumerable, _, _) = returnType.MakeSpecialTypePair(name); 35 | switch (name) 36 | { 37 | case "T[]": 38 | returnType.GenerateSum_Array(method, baseEnumerable); 39 | break; 40 | case "NativeArray": 41 | returnType.GenerateSum_NativeArray(method, baseEnumerable); 42 | break; 43 | default: throw new NotSupportedException(name); 44 | } 45 | } 46 | else 47 | { 48 | var (enumerable, enumerator, _) = returnType.MakeFromCommonType(method, Dictionary[name], "0"); 49 | returnType.GenerateSum_IRefEnumerable(method, enumerable, enumerator); 50 | } 51 | } 52 | } 53 | } -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single/Sum/SumUInt32.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 43901d5d4305a4f458eacc1b448df47d 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single/Sum/SumUInt64.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using Mono.Cecil; 4 | 5 | namespace UniNativeLinq.Editor.CodeGenerator 6 | { 7 | public sealed class SumUInt64 : IApiExtensionMethodGenerator, ITypeDictionaryHolder 8 | { 9 | public SumUInt64(ISingleApi api) 10 | { 11 | Api = api; 12 | } 13 | public readonly ISingleApi Api; 14 | public Dictionary Dictionary { private get; set; } 15 | 16 | public void Generate(IEnumerableCollectionProcessor processor, ModuleDefinition mainModule, ModuleDefinition systemModule, ModuleDefinition unityModule) 17 | { 18 | Api.GenerateSingleNoEnumerable(processor, mainModule, GenerateEach, GenerateGeneric); 19 | } 20 | 21 | private static void GenerateGeneric(TypeDefinition @static, ModuleDefinition mainModule) => mainModule.TypeSystem.UInt64.GenerateSum_Generic(@static); 22 | 23 | private void GenerateEach(string name, bool isSpecial, TypeDefinition @static, ModuleDefinition mainModule) 24 | { 25 | var returnType = mainModule.TypeSystem.UInt64; 26 | var method = new MethodDefinition(Api.Name, Helper.StaticMethodAttributes, returnType) 27 | { 28 | DeclaringType = @static, 29 | AggressiveInlining = true, 30 | CustomAttributes = { Helper.ExtensionAttribute } 31 | }; 32 | @static.Methods.Add(method); 33 | if (isSpecial) 34 | { 35 | var (baseEnumerable, _, _) = returnType.MakeSpecialTypePair(name); 36 | switch (name) 37 | { 38 | case "T[]": 39 | returnType.GenerateSum_Array(method, baseEnumerable); 40 | break; 41 | case "NativeArray": 42 | returnType.GenerateSum_NativeArray(method, baseEnumerable); 43 | break; 44 | default: throw new NotSupportedException(name); 45 | } 46 | } 47 | else 48 | { 49 | var (enumerable, enumerator, _) = returnType.MakeFromCommonType(method, Dictionary[name], "0"); 50 | returnType.GenerateSum_IRefEnumerable(method, enumerable, enumerator); 51 | } 52 | } 53 | } 54 | } -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single/Sum/SumUInt64.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 1e4571826542d944e956e2ced3335f16 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single/TryGetElementAt.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: b2dc6ae2f86d8dc4caa52ba367a22b63 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single/TryGetFirst.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 6cc41cb6f6cc1e04fb6bd54333f85c1c 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single/TryGetFirst/TryGetFirstFunc.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: a488d301a413e8d4ba53f9b1b1502b38 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single/TryGetFirst/TryGetFirstNone.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 0d63414bebd00b443983a506087f3eb4 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single/TryGetFirst/TryGetFirstOperator.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 848e3d29bb9017d479ba177926fb8a53 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single/TryGetFirst/TryGetFirstRefFunc.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 26247e6b6d429ff47a22244fbaf89c3a 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single/TryGetFirstIndexOf.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 6aa892218ef6b8542abaec7c67f06e24 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single/TryGetFirstIndexOf/TryGetFirstIndexOfFunc.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: b6be62e1daf04477944e9a0204a9cce6 3 | timeCreated: 1571222353 -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single/TryGetFirstIndexOf/TryGetFirstIndexOfNone.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: be20f4bcfb23de94696de65ec8db4199 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single/TryGetFirstIndexOf/TryGetFirstIndexOfOperator.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 25943bbebf4931b4e96026e9464ed5d2 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single/TryGetFirstIndexOf/TryGetFirstIndexOfRefFunc.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: d2da7683be894c368fcd2ec489889bb2 3 | timeCreated: 1571222375 -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single/TryGetLast.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: d05d534b21543234390e10624e8ea59f 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single/TryGetLast/TryGetLastFunc.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 20c630af082d236469226d8262339d2a 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single/TryGetLast/TryGetLastNone.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: bfd9a82deccd73a4fa48c9ea1bb1f052 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single/TryGetLast/TryGetLastOperator.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: b40ecba6085d8454b8394ffca6595655 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single/TryGetLast/TryGetLastRefFunc.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 5adcbd7c41516df48a653935ea0b1e55 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single/TryGetMinMax.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 79bdd5f5408f9234b9e09dcfe17d0987 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single/TryGetMinMax/TryGetMinMaxFunc.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 97942592d58001e4381fc1092318bfce 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single/TryGetMinMax/TryGetMinMaxNone.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: c768ac04ef1014342b0984657610a772 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single/TryGetMinMax/TryGetMinMaxOperator.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 31cfab165339a3848b8af953abb8dc4c 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single/TryGetMinMax/TryGetMinMaxRefFunc.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: b29d5f7bc9a31ca48b45b3988232e294 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single/TryGetSingle.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 91bc9987a91444848ae9d9cc8d4ec92b 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single/TryGetSingle/TryGetSingleFunc.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 4ea5b21175ba1ab48b478ecce7cc6bae 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single/TryGetSingle/TryGetSingleNone.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 426b193fda3f04e41bebbe8fec517676 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single/TryGetSingle/TryGetSingleOperator.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: d38120791ec158841946c8e1bd9666d1 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single/TryGetSingle/TryGetSingleRefFunc.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 2cd133d85a319cb49aaa09b378c1b186 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single/WhereIndex.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 11e0ff73590ea2e4a8d9d9010609d969 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single/WhereIndex/WhereIndexFunc.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 18e0c3c5fe8890e49beb56d3c99834c5 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single/WhereIndex/WhereIndexOperator.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 1f847ad06f8cdd04786489a3b30251fd 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single/WhereIndex/WhereIndexRefFunc.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: c204f33338ecc5c4b8c937dc8078d9e6 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single/WhereSkipWhileTakeWhile.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 1c39b50e851a42245b485238566cbd4d 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single/WhereSkipWhileTakeWhile/WhereSkipWhileTakeWhileFunc.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using Mono.Cecil; 4 | using Mono.Cecil.Cil; 5 | // ReSharper disable InconsistentNaming 6 | 7 | namespace UniNativeLinq.Editor.CodeGenerator 8 | { 9 | public sealed class WhereSkipWhileTakeWhileFunc : ITypeDictionaryHolder, IApiExtensionMethodGenerator 10 | { 11 | public WhereSkipWhileTakeWhileFunc(ISingleApi api) 12 | { 13 | Api = api; 14 | } 15 | public readonly ISingleApi Api; 16 | public Dictionary Dictionary { private get; set; } 17 | public void Generate(IEnumerableCollectionProcessor processor, ModuleDefinition mainModule, ModuleDefinition systemModule, ModuleDefinition unityModule) 18 | { 19 | Api.GenerateSingleWithEnumerable(processor, mainModule, systemModule, unityModule, GenerateEach); 20 | } 21 | 22 | private void GenerateEach(string name, bool isSpecial, TypeDefinition @static, ModuleDefinition mainModule, ModuleDefinition systemModule) 23 | { 24 | var returnTypeDefinition = mainModule.GetType("UniNativeLinq", Api.Name + "Enumerable`4"); 25 | 26 | var method = new MethodDefinition(Api.Name, Helper.StaticMethodAttributes, mainModule.TypeSystem.Boolean) 27 | { 28 | DeclaringType = @static, 29 | AggressiveInlining = true, 30 | CustomAttributes = { Helper.ExtensionAttribute } 31 | }; 32 | @static.Methods.Add(method); 33 | 34 | var T = method.DefineUnmanagedGenericParameter(); 35 | method.GenericParameters.Add(T); 36 | 37 | var func = new GenericInstanceType(mainModule.ImportReference(systemModule.GetType("System", "Func`2"))) 38 | { 39 | GenericArguments = { T, mainModule.TypeSystem.Boolean } 40 | }; 41 | 42 | var TPredicate = new GenericInstanceType(mainModule.GetType("UniNativeLinq", "DelegateFuncToStructOperatorFunc`2")) 43 | { 44 | GenericArguments = { T, mainModule.TypeSystem.Boolean } 45 | }; 46 | 47 | if (isSpecial) 48 | { 49 | var (baseEnumerable, enumerable, enumerator) = T.MakeSpecialTypePair(name); 50 | method.ReturnType = new GenericInstanceType(returnTypeDefinition) 51 | { 52 | GenericArguments = { enumerable, enumerator, T, TPredicate } 53 | }; 54 | switch (name) 55 | { 56 | case "T[]": 57 | case "NativeArray": 58 | GenerateSpecial(method, baseEnumerable, enumerable, TPredicate, func); 59 | break; 60 | default: throw new NotSupportedException(name); 61 | } 62 | } 63 | else 64 | { 65 | var type = Dictionary[name]; 66 | var (enumerable, enumerator, _) = T.MakeFromCommonType(method, type, "0"); 67 | method.ReturnType = new GenericInstanceType(returnTypeDefinition) 68 | { 69 | GenericArguments = { enumerable, enumerator, T, TPredicate } 70 | }; 71 | GenerateNormal(method, enumerable, TPredicate, func); 72 | } 73 | } 74 | 75 | private static void GenerateNormal(MethodDefinition method, TypeReference enumerable, GenericInstanceType predicate, GenericInstanceType func) 76 | { 77 | method.Parameters.Add(new ParameterDefinition("@this", ParameterAttributes.In, new ByReferenceType(enumerable)) 78 | { 79 | CustomAttributes = { Helper.GetSystemRuntimeCompilerServicesIsReadOnlyAttributeTypeReference() } 80 | }); 81 | method.Parameters.Add(new ParameterDefinition("predicate", ParameterAttributes.None, func)); 82 | 83 | var body = method.Body; 84 | 85 | body.Variables.Add(new VariableDefinition(predicate)); 86 | 87 | body.GetILProcessor() 88 | 89 | .LoadFuncArgumentAndStoreToLocalVariableField(1, 0) 90 | 91 | .LdArg(0) 92 | .LdLocA(0) 93 | .NewObj(method.ReturnType.FindMethod(".ctor", 2)) 94 | .Ret(); 95 | } 96 | 97 | private static void GenerateSpecial(MethodDefinition method, TypeReference baseEnumerable, GenericInstanceType enumerable, GenericInstanceType predicate, GenericInstanceType func) 98 | { 99 | method.Parameters.Add(new ParameterDefinition("@this", ParameterAttributes.None, baseEnumerable)); 100 | method.Parameters.Add(new ParameterDefinition("predicate", ParameterAttributes.None, func)); 101 | 102 | var body = method.Body; 103 | body.InitLocals = true; 104 | body.Variables.Add(new VariableDefinition(enumerable)); 105 | body.Variables.Add(new VariableDefinition(predicate)); 106 | 107 | body.GetILProcessor() 108 | .LdLocA(0) 109 | .LdArg(0) 110 | .Call(enumerable.FindMethod(".ctor", 1)) 111 | 112 | .LoadFuncArgumentAndStoreToLocalVariableField(1, 1) 113 | 114 | .LdLocA(0) 115 | .LdLocA(1) 116 | .NewObj(method.ReturnType.FindMethod(".ctor", 2)) 117 | .Ret(); 118 | } 119 | } 120 | } -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single/WhereSkipWhileTakeWhile/WhereSkipWhileTakeWhileFunc.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 34139a9f9f7ca9b4ca70e286c148ee15 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single/WhereSkipWhileTakeWhile/WhereSkipWhileTakeWhileOperator.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using Mono.Cecil; 4 | using Mono.Cecil.Cil; 5 | // ReSharper disable InconsistentNaming 6 | 7 | namespace UniNativeLinq.Editor.CodeGenerator 8 | { 9 | public sealed class WhereSkipWhileTakeWhileOperator : ITypeDictionaryHolder, IApiExtensionMethodGenerator 10 | { 11 | public WhereSkipWhileTakeWhileOperator(ISingleApi api) 12 | { 13 | Api = api; 14 | } 15 | public readonly ISingleApi Api; 16 | public Dictionary Dictionary { private get; set; } 17 | public void Generate(IEnumerableCollectionProcessor processor, ModuleDefinition mainModule, ModuleDefinition systemModule, ModuleDefinition unityModule) 18 | { 19 | Api.GenerateSingleWithEnumerable(processor, mainModule, systemModule, unityModule, GenerateEach); 20 | } 21 | 22 | private void GenerateEach(string name, bool isSpecial, TypeDefinition @static, ModuleDefinition mainModule, ModuleDefinition systemModule) 23 | { 24 | var returnTypeDefinition = mainModule.GetType("UniNativeLinq", Api.Name + "Enumerable`4"); 25 | 26 | var method = new MethodDefinition(Api.Name, Helper.StaticMethodAttributes, mainModule.TypeSystem.Boolean) 27 | { 28 | DeclaringType = @static, 29 | AggressiveInlining = true, 30 | CustomAttributes = { Helper.ExtensionAttribute } 31 | }; 32 | @static.Methods.Add(method); 33 | 34 | var T = method.DefineUnmanagedGenericParameter(); 35 | method.GenericParameters.Add(T); 36 | 37 | var IRefFunc = new GenericInstanceType(mainModule.GetType("UniNativeLinq", "IRefFunc`2")) 38 | { 39 | GenericArguments = { T, mainModule.TypeSystem.Boolean } 40 | }; 41 | var TPredicate = new GenericParameter("TPredicate", method) 42 | { 43 | HasNotNullableValueTypeConstraint = true, 44 | Constraints = { IRefFunc } 45 | }; 46 | method.GenericParameters.Add(TPredicate); 47 | 48 | if (isSpecial) 49 | { 50 | var (baseEnumerable, enumerable, enumerator) = T.MakeSpecialTypePair(name); 51 | method.ReturnType = new GenericInstanceType(returnTypeDefinition) 52 | { 53 | GenericArguments = { enumerable, enumerator, T, TPredicate } 54 | }; 55 | switch (name) 56 | { 57 | case "T[]": 58 | case "NativeArray": 59 | GenerateSpecial(method, baseEnumerable, enumerable, TPredicate); 60 | break; 61 | default: throw new NotSupportedException(name); 62 | } 63 | } 64 | else 65 | { 66 | var type = Dictionary[name]; 67 | var (enumerable, enumerator, _) = T.MakeFromCommonType(method, type, "0"); 68 | method.ReturnType = new GenericInstanceType(returnTypeDefinition) 69 | { 70 | GenericArguments = { enumerable, enumerator, T, TPredicate } 71 | }; 72 | GenerateNormal(method, enumerable, TPredicate); 73 | } 74 | } 75 | 76 | private static void GenerateNormal(MethodDefinition method, TypeReference enumerable, GenericParameter predicate) 77 | { 78 | method.Parameters.Add(new ParameterDefinition("@this", ParameterAttributes.In, new ByReferenceType(enumerable)) 79 | { 80 | CustomAttributes = { Helper.GetSystemRuntimeCompilerServicesIsReadOnlyAttributeTypeReference() } 81 | }); 82 | method.Parameters.Add(new ParameterDefinition("predicate", ParameterAttributes.In, new ByReferenceType(predicate)) 83 | { 84 | CustomAttributes = { Helper.GetSystemRuntimeCompilerServicesIsReadOnlyAttributeTypeReference() } 85 | }); 86 | 87 | method.Body.GetILProcessor() 88 | .LdArgs(0, 2) 89 | .NewObj(method.ReturnType.FindMethod(".ctor", 2)) 90 | .Ret(); 91 | } 92 | 93 | private static void GenerateSpecial(MethodDefinition method, TypeReference baseEnumerable, GenericInstanceType enumerable, GenericParameter predicate) 94 | { 95 | method.Parameters.Add(new ParameterDefinition("@this", ParameterAttributes.None, baseEnumerable)); 96 | method.Parameters.Add(new ParameterDefinition("predicate", ParameterAttributes.In, new ByReferenceType(predicate)) 97 | { 98 | CustomAttributes = { Helper.GetSystemRuntimeCompilerServicesIsReadOnlyAttributeTypeReference() } 99 | }); 100 | 101 | var body = method.Body; 102 | body.InitLocals = true; 103 | body.Variables.Add(new VariableDefinition(enumerable)); 104 | 105 | body.GetILProcessor() 106 | .LdLocA(0) 107 | .LdArg(0) 108 | .Call(enumerable.FindMethod(".ctor", 1)) 109 | 110 | .LdLocA(0) 111 | .LdArg(1) 112 | .NewObj(method.ReturnType.FindMethod(".ctor", 2)) 113 | .Ret(); 114 | } 115 | } 116 | } -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single/WhereSkipWhileTakeWhile/WhereSkipWhileTakeWhileOperator.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 378b38ded9b433d4b8890543036eb8d8 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single/WhereSkipWhileTakeWhile/WhereSkipWhileTakeWhileRefFunc.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using Mono.Cecil; 4 | using Mono.Cecil.Cil; 5 | // ReSharper disable InconsistentNaming 6 | 7 | namespace UniNativeLinq.Editor.CodeGenerator 8 | { 9 | public sealed class WhereSkipWhileTakeWhileRefFunc : ITypeDictionaryHolder, IApiExtensionMethodGenerator 10 | { 11 | public WhereSkipWhileTakeWhileRefFunc(ISingleApi api) 12 | { 13 | Api = api; 14 | } 15 | public readonly ISingleApi Api; 16 | public Dictionary Dictionary { private get; set; } 17 | public void Generate(IEnumerableCollectionProcessor processor, ModuleDefinition mainModule, ModuleDefinition systemModule, ModuleDefinition unityModule) 18 | { 19 | Api.GenerateSingleWithEnumerable(processor, mainModule, systemModule, unityModule, GenerateEach); 20 | } 21 | 22 | private void GenerateEach(string name, bool isSpecial, TypeDefinition @static, ModuleDefinition mainModule, ModuleDefinition systemModule) 23 | { 24 | var returnTypeDefinition = mainModule.GetType("UniNativeLinq", Api.Name + "Enumerable`4"); 25 | 26 | var method = new MethodDefinition(Api.Name, Helper.StaticMethodAttributes, mainModule.TypeSystem.Boolean) 27 | { 28 | DeclaringType = @static, 29 | AggressiveInlining = true, 30 | CustomAttributes = { Helper.ExtensionAttribute } 31 | }; 32 | @static.Methods.Add(method); 33 | 34 | var T = method.DefineUnmanagedGenericParameter(); 35 | method.GenericParameters.Add(T); 36 | 37 | var func = new GenericInstanceType(mainModule.GetType("UniNativeLinq", "RefFunc`2")) 38 | { 39 | GenericArguments = { T, mainModule.TypeSystem.Boolean } 40 | }; 41 | 42 | var TPredicate = new GenericInstanceType(mainModule.GetType("UniNativeLinq", "DelegateRefFuncToStructOperatorFunc`2")) 43 | { 44 | GenericArguments = { T, mainModule.TypeSystem.Boolean } 45 | }; 46 | 47 | if (isSpecial) 48 | { 49 | var (baseEnumerable, enumerable, enumerator) = T.MakeSpecialTypePair(name); 50 | method.ReturnType = new GenericInstanceType(returnTypeDefinition) 51 | { 52 | GenericArguments = { enumerable, enumerator, T, TPredicate } 53 | }; 54 | switch (name) 55 | { 56 | case "T[]": 57 | case "NativeArray": 58 | GenerateSpecial(method, baseEnumerable, enumerable, TPredicate, func); 59 | break; 60 | default: throw new NotSupportedException(name); 61 | } 62 | } 63 | else 64 | { 65 | var type = Dictionary[name]; 66 | var (enumerable, enumerator, _) = T.MakeFromCommonType(method, type, "0"); 67 | method.ReturnType = new GenericInstanceType(returnTypeDefinition) 68 | { 69 | GenericArguments = { enumerable, enumerator, T, TPredicate } 70 | }; 71 | GenerateNormal(method, enumerable, TPredicate, func); 72 | } 73 | } 74 | 75 | private static void GenerateNormal(MethodDefinition method, TypeReference enumerable, GenericInstanceType predicate, GenericInstanceType func) 76 | { 77 | method.Parameters.Add(new ParameterDefinition("@this", ParameterAttributes.In, new ByReferenceType(enumerable)) 78 | { 79 | CustomAttributes = { Helper.GetSystemRuntimeCompilerServicesIsReadOnlyAttributeTypeReference() } 80 | }); 81 | method.Parameters.Add(new ParameterDefinition("predicate", ParameterAttributes.None, func)); 82 | 83 | var body = method.Body; 84 | 85 | body.Variables.Add(new VariableDefinition(predicate)); 86 | 87 | body.GetILProcessor() 88 | 89 | .LoadFuncArgumentAndStoreToLocalVariableField(1, 0) 90 | 91 | .LdArg(0) 92 | .LdLocA(0) 93 | .NewObj(method.ReturnType.FindMethod(".ctor", 2)) 94 | .Ret(); 95 | } 96 | 97 | private static void GenerateSpecial(MethodDefinition method, TypeReference baseEnumerable, GenericInstanceType enumerable, GenericInstanceType predicate, GenericInstanceType func) 98 | { 99 | method.Parameters.Add(new ParameterDefinition("@this", ParameterAttributes.None, baseEnumerable)); 100 | method.Parameters.Add(new ParameterDefinition("predicate", ParameterAttributes.None, func)); 101 | 102 | var body = method.Body; 103 | body.InitLocals = true; 104 | body.Variables.Add(new VariableDefinition(enumerable)); 105 | body.Variables.Add(new VariableDefinition(predicate)); 106 | 107 | body.GetILProcessor() 108 | .LdLocA(0) 109 | .LdArg(0) 110 | .Call(enumerable.FindMethod(".ctor", 1)) 111 | 112 | .LoadFuncArgumentAndStoreToLocalVariableField(1, 1) 113 | 114 | .LdLocA(0) 115 | .LdLocA(1) 116 | .NewObj(method.ReturnType.FindMethod(".ctor", 2)) 117 | .Ret(); 118 | } 119 | } 120 | } -------------------------------------------------------------------------------- /UNL/CodeGenerator/Single/WhereSkipWhileTakeWhile/WhereSkipWhileTakeWhileRefFunc.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: b2c9ff188335fa74eb230f2b1140e801 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Utility.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 34f999fa321f60344a3328485e5f9a77 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Utility/DefinitionHelper.cs: -------------------------------------------------------------------------------- 1 | using Mono.Cecil; 2 | 3 | namespace UniNativeLinq.Editor.CodeGenerator 4 | { 5 | public static class DefinitionHelper 6 | { 7 | public static TypeDefinition ToDefinition(this GenericInstanceType genericInstanceType) 8 | => genericInstanceType.ElementType.ToDefinition(); 9 | 10 | public static TypeDefinition ToDefinition(this TypeReference typeReference) 11 | { 12 | switch (typeReference) 13 | { 14 | case TypeDefinition answer: return answer; 15 | case GenericInstanceType answer: return answer.ToDefinition(); 16 | default: return typeReference.Resolve(); 17 | } 18 | } 19 | } 20 | } -------------------------------------------------------------------------------- /UNL/CodeGenerator/Utility/DefinitionHelper.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 6baf92e61278fd342a85a692dce05f28 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Utility/Helper.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 54a6ec9ac7526794fb913ecc9c735af1 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Utility/IlProcessorUtility.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: d7de2a87104234349ba024791bb28fda 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Utility/InstructionUtility.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 3e733e891e6a6db4da3bf544c85b8300 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/CodeGenerator/Utility/SpecialArgumentProcessorHelper.cs: -------------------------------------------------------------------------------- 1 | using Mono.Cecil; 2 | using Mono.Cecil.Cil; 3 | 4 | namespace UniNativeLinq.Editor.CodeGenerator 5 | { 6 | public static class SpecialArgumentProcessorHelper 7 | { 8 | public static ILProcessor LdConvArg(this ILProcessor processor, TypeReference enumerableGenericInstanceType, int specialArgumentIndex) 9 | { 10 | var variables = processor.Body.Variables; 11 | var variableIndex = variables.Count; 12 | variables.Add(new VariableDefinition(enumerableGenericInstanceType)); 13 | var constructor = enumerableGenericInstanceType.FindMethod(".ctor", 1); 14 | return processor 15 | .LdLocA(variableIndex) 16 | .Dup() 17 | .LdArg(specialArgumentIndex) 18 | .Call(constructor); 19 | } 20 | } 21 | } -------------------------------------------------------------------------------- /UNL/CodeGenerator/Utility/SpecialArgumentProcessorHelper.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: ed0ccc3cb2c7a0149a948d3df8cf0155 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/DLLs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: df49e98eb4ed77d4290adb8b1b980830 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /UNL/DLLs/UniNativeLinq.bytes: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pCYSl5EDgo/UniNativeLinq-EditorExtension/5510162de7dd14efb2fb0007c6ae4b2178fb7127/UNL/DLLs/UniNativeLinq.bytes -------------------------------------------------------------------------------- /UNL/DLLs/UniNativeLinq.bytes.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 92037fd2fb7b1404f9dbaa8861495e64 3 | TextScriptImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /UNL/DLLs/netstandard.bytes: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pCYSl5EDgo/UniNativeLinq-EditorExtension/5510162de7dd14efb2fb0007c6ae4b2178fb7127/UNL/DLLs/netstandard.bytes -------------------------------------------------------------------------------- /UNL/DLLs/netstandard.bytes.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: a4ac77439a2128b48b1338e2aa1e0a47 3 | TextScriptImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /UNL/Packages.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: b8826a52828a5e842ba620f3b9b086dd 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /UNL/Packages/UniNativeLinq-Settings.unitypackage: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pCYSl5EDgo/UniNativeLinq-EditorExtension/5510162de7dd14efb2fb0007c6ae4b2178fb7127/UNL/Packages/UniNativeLinq-Settings.unitypackage -------------------------------------------------------------------------------- /UNL/Packages/UniNativeLinq-Settings.unitypackage.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 8dd4fc6bf51d8714389a4772c7870500 3 | DefaultImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /UNL/ScriptableObject.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 3d96164a741e2554f85944b11023e696 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /UNL/ScriptableObject/Double Api.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 29f2928e95316c345a9da995486af177 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /UNL/ScriptableObject/Double Api/DifferentNameEnumerableDoubleApi.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: fede48352de001744b45773db44fd2d6 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/ScriptableObject/Double Api/SimpleEnumerableDoubleApi.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: f1bd5833cd2327c42a62e7fd144d0ae1 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/ScriptableObject/Double Api/WithFuncEnumerableDoubleApi.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 488ddb7f793078b48b06d5eb1baf46b6 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/ScriptableObject/GlobalSettings.cs: -------------------------------------------------------------------------------- 1 | using UnityEditor; 2 | using UnityEngine; 3 | 4 | namespace UniNativeLinq.Editor 5 | { 6 | public sealed class GlobalSettings : ScriptableObject 7 | { 8 | public bool EnableNullCheckOnRuntime; 9 | 10 | private static GlobalSettings _instance; 11 | 12 | public static GlobalSettings Instance 13 | { 14 | get 15 | { 16 | if(!(_instance is null)) 17 | return _instance; 18 | var assetPath = "Assets/Plugins/UNL/Settings/GlobalSettings.asset"; 19 | _instance = AssetDatabase.LoadAssetAtPath(assetPath); 20 | return _instance; 21 | } 22 | } 23 | } 24 | } -------------------------------------------------------------------------------- /UNL/ScriptableObject/GlobalSettings.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 9086b07259c526945a08ebb06ff2eb26 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/ScriptableObject/Single Api.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: fb6551ea1f6c03f4e947c1f1c6bbfb5e 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /UNL/ScriptableObject/Single Api/JustGenericSingleApi.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using UnityEditor; 5 | using UnityEngine; 6 | 7 | namespace UniNativeLinq.Editor 8 | { 9 | public sealed class JustGenericSingleApi : String2BoolArrayTuple, ISingleApi 10 | { 11 | string ISingleApi.Name 12 | { 13 | get => Name; 14 | set => Name = value; 15 | } 16 | string ISingleApi.Description => Description; 17 | 18 | [field: SerializeField] public bool IsHided { get; set; } 19 | [field: SerializeField] public string[] RelatedEnumerableArray { get; internal set; } 20 | [field: SerializeField] public string[] ExcludeEnumerableArray { get; internal set; } 21 | 22 | public IEnumerable NameCollection => EnabledArray.Select(x => x.Enumerable); 23 | public int Count => EnabledArray.Length; 24 | public IEnumerable<(string Name, bool Enabled)> NameEnabledTupleCollection => EnabledArray.Select(x => (x.Enumerable, x.Enabled)); 25 | public IEnumerable EnabledNameCollection => EnabledArray.Where(x => x.Enabled).Select(x => x.Enumerable); 26 | 27 | public bool TryGetEnabled(string name, out bool value) 28 | { 29 | if (name != "TEnumerable") 30 | { 31 | value = default; 32 | return false; 33 | } 34 | value = EnabledArray[0].Enabled; 35 | return true; 36 | } 37 | 38 | public bool TrySetEnabled(string name, bool value) 39 | { 40 | if (name != "TEnumerable") 41 | return false; 42 | if (EnabledArray[0].Enabled ^ value) 43 | EditorUtility.SetDirty(this); 44 | EnabledArray[0].Enabled = value; 45 | return true; 46 | } 47 | 48 | public int CompareTo(ISingleApi other) 49 | { 50 | if (other is null) 51 | return 1; 52 | var c = string.Compare(Name, other.Name, StringComparison.Ordinal); 53 | return c == 0 ? string.Compare(Description, other.Description, StringComparison.Ordinal) : c; 54 | } 55 | 56 | public void Draw(IEnumerableCollectionProcessor processor) 57 | { 58 | if (IsHided) return; 59 | foreach (var relatedEnumerable in RelatedEnumerableArray) 60 | { 61 | if (!processor.TryGetEnabled(relatedEnumerable, out var enabled)) 62 | { 63 | Debug.LogError(relatedEnumerable + " of " + Name); 64 | throw new KeyNotFoundException(); 65 | } 66 | if (!enabled) return; 67 | } 68 | 69 | using (new EditorGUILayout.HorizontalScope()) 70 | { 71 | ref var enabled = ref EnabledArray[0].Enabled; 72 | if (EditorGUILayout.ToggleLeft(new GUIContent(Name + " " + Description + " Generic"), enabled, GUI.skin.button) ^ enabled) 73 | { 74 | enabled = !enabled; 75 | EditorUtility.SetDirty(this); 76 | } 77 | if (GUILayout.Button("Hide and Deselect")) 78 | { 79 | IsHided = true; 80 | enabled = false; 81 | EditorUtility.SetDirty(this); 82 | } 83 | } 84 | } 85 | } 86 | } -------------------------------------------------------------------------------- /UNL/ScriptableObject/Single Api/JustGenericSingleApi.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 755c98a0463106143ae328fc7ba5ddaa 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/ScriptableObject/Single Api/NoEnumerableSingleApi.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: b98f8d701fd45434cb889bded0829d8d 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/ScriptableObject/Single Api/RangeRepeatSingleApi.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using UnityEditor; 5 | using UnityEngine; 6 | 7 | namespace UniNativeLinq.Editor 8 | { 9 | public sealed class RangeRepeatSingleApi : String2BoolArrayTuple, ISingleApi 10 | { 11 | string ISingleApi.Name 12 | { 13 | get => "RangeRepeat"; 14 | set { } 15 | } 16 | string ISingleApi.Description => "Range"; 17 | [field: SerializeField] public bool IsHided { get; set; } 18 | private static readonly string[] Related = { "RangeRepeat" }; 19 | public string[] RelatedEnumerableArray => Related; 20 | [field: SerializeField] public string[] ExcludeEnumerableArray { get; internal set; } 21 | public IEnumerable NameCollection => EnabledArray.Select(x => x.Enumerable); 22 | public int Count => EnabledArray.Length; 23 | public IEnumerable<(string Name, bool Enabled)> NameEnabledTupleCollection => EnabledArray.Select(x => (x.Enumerable, x.Enabled)); 24 | public IEnumerable EnabledNameCollection => EnabledArray.Where(x => x.Enabled).Select(x => x.Enumerable); 25 | 26 | public bool TryGetEnabled(string name, out bool value) 27 | { 28 | for (var i = 0; i < EnabledArray.Length; i++) 29 | { 30 | ref var tuple = ref EnabledArray[i]; 31 | if (tuple.Enumerable != name) continue; 32 | value = tuple.Enabled; 33 | return true; 34 | } 35 | value = default; 36 | return false; 37 | } 38 | 39 | public bool TrySetEnabled(string name, bool value) 40 | { 41 | for (var i = 0; i < EnabledArray.Length; i++) 42 | { 43 | ref var tuple = ref EnabledArray[i]; 44 | if (tuple.Enumerable != name) continue; 45 | tuple.Enabled = value; 46 | EditorUtility.SetDirty(this); 47 | return true; 48 | } 49 | return false; 50 | } 51 | 52 | private bool fold; 53 | public void Draw(IEnumerableCollectionProcessor processor) 54 | { 55 | if (IsHided) return; 56 | if (!FoldoutUtility.Draw(ref fold, new GUIContent(Name + "\t\t" + Description, Description))) return; 57 | 58 | using (new EditorGUILayout.HorizontalScope()) 59 | { 60 | if (GUILayout.Button("Select All")) 61 | { 62 | for (var i = 0; i < EnabledArray.Length; i++) 63 | { 64 | ref var tuple = ref EnabledArray[i]; 65 | tuple.Enabled = true; 66 | } 67 | EditorUtility.SetDirty(this); 68 | } 69 | else if (GUILayout.Button("Deselect All")) 70 | { 71 | for (var i = 0; i < EnabledArray.Length; i++) 72 | { 73 | ref var tuple = ref EnabledArray[i]; 74 | tuple.Enabled = false; 75 | } 76 | EditorUtility.SetDirty(this); 77 | } 78 | else if (GUILayout.Button("Hide and Deselect All")) 79 | { 80 | IsHided = true; 81 | for (var i = 0; i < EnabledArray.Length; i++) 82 | { 83 | ref var tuple = ref EnabledArray[i]; 84 | tuple.Enabled = false; 85 | } 86 | EditorUtility.SetDirty(this); 87 | } 88 | } 89 | 90 | for (var i = 0; i < EnabledArray.Length; i++) 91 | { 92 | ref var tuple = ref EnabledArray[i]; 93 | using (IndentScope.Create()) 94 | using (new EditorGUILayout.HorizontalScope()) 95 | { 96 | EditorGUILayout.LabelField(new GUIContent(tuple.Enumerable, Description)); 97 | var guiContent = new GUIContent(tuple.Enumerable + " : " + tuple.Enabled, Description); 98 | TrySetEnabled(tuple.Enumerable, EditorGUILayout.ToggleLeft(guiContent, tuple.Enabled, GUI.skin.button)); 99 | } 100 | } 101 | } 102 | 103 | public int CompareTo(ISingleApi other) 104 | { 105 | if (other is null) 106 | return 1; 107 | var c = string.Compare(Name, other.Name, StringComparison.Ordinal); 108 | if (c == 0) 109 | return string.Compare(Description, other.Description, StringComparison.Ordinal); 110 | return c; 111 | } 112 | } 113 | } 114 | -------------------------------------------------------------------------------- /UNL/ScriptableObject/Single Api/RangeRepeatSingleApi.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 125656f793237084ea2cb7abeabe47e6 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/ScriptableObject/Single Api/RepeatSingleApi.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using UnityEditor; 5 | using UnityEngine; 6 | 7 | namespace UniNativeLinq.Editor 8 | { 9 | public sealed class RepeatSingleApi : String2BoolArrayTuple, ISingleApi 10 | { 11 | string ISingleApi.Name 12 | { 13 | get => "RangeRepeat"; 14 | set { } 15 | } 16 | string ISingleApi.Description => "Repeat"; 17 | [field: SerializeField] public bool IsHided { get; set; } 18 | private static readonly string[] Related = { "RangeRepeat" }; 19 | public string[] RelatedEnumerableArray => Related; 20 | public string[] ExcludeEnumerableArray => Array.Empty(); 21 | public IEnumerable NameCollection => EnabledArray.Select(x => x.Enumerable); 22 | public int Count => EnabledArray.Length; 23 | public IEnumerable<(string Name, bool Enabled)> NameEnabledTupleCollection => EnabledArray.Select(x => (x.Enumerable, x.Enabled)); 24 | public IEnumerable EnabledNameCollection => EnabledArray.Where(x => x.Enabled).Select(x => x.Enumerable); 25 | 26 | public bool TryGetEnabled(string name, out bool value) 27 | { 28 | if (name != "") 29 | { 30 | value = false; 31 | return false; 32 | } 33 | value = EnabledArray[0].Enabled; 34 | return true; 35 | } 36 | 37 | public bool TrySetEnabled(string name, bool value) 38 | { 39 | if (name != "") 40 | { 41 | return false; 42 | } 43 | if (!(EnabledArray[0].Enabled ^ value)) 44 | { 45 | return true; 46 | } 47 | EditorUtility.SetDirty(this); 48 | EnabledArray[0].Enabled = value; 49 | return true; 50 | } 51 | 52 | public void Draw(IEnumerableCollectionProcessor processor) 53 | { 54 | if (IsHided) return; 55 | ref var enabled = ref EnabledArray[0].Enabled; 56 | using (new EditorGUILayout.HorizontalScope()) 57 | { 58 | if (EditorGUILayout.ToggleLeft(new GUIContent("Enumerable.Repeat"), enabled, GUI.skin.button) ^ enabled) 59 | { 60 | enabled = !enabled; 61 | EditorUtility.SetDirty(this); 62 | } 63 | if (GUILayout.Button("Hide and Deselect All")) 64 | { 65 | IsHided = true; 66 | enabled = false; 67 | EditorUtility.SetDirty(this); 68 | } 69 | } 70 | } 71 | 72 | public int CompareTo(ISingleApi other) 73 | { 74 | if (other is null) 75 | return 1; 76 | var c = string.Compare(Name, other.Name, StringComparison.Ordinal); 77 | if (c == 0) 78 | return string.Compare(Description, other.Description, StringComparison.Ordinal); 79 | return c; 80 | } 81 | } 82 | } 83 | -------------------------------------------------------------------------------- /UNL/ScriptableObject/Single Api/RepeatSingleApi.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: adeac6174b6b38c4bb02bb1f9dd45cd8 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/ScriptableObject/Single Api/SimpleEnumerableSingleApi.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 68ffd87595ac9fd40964d4ab67cbd608 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/ScriptableObject/Single Api/WithFuncEnumerableSingleApi.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using UnityEditor; 5 | using UnityEngine; 6 | 7 | namespace UniNativeLinq.Editor 8 | { 9 | public sealed class WithFuncEnumerableSingleApi : String2BoolArrayTuple, ISingleApi 10 | { 11 | string ISingleApi.Name 12 | { 13 | get => Name; 14 | set 15 | { 16 | if (RelatedEnumerableArray?.Length != 1) 17 | RelatedEnumerableArray = new string[1]; 18 | Name = RelatedEnumerableArray[0] = value; 19 | } 20 | } 21 | 22 | string ISingleApi.Description => Description; 23 | [field: SerializeField] public string[] RelatedEnumerableArray { get; private set; } 24 | [field: SerializeField] public bool IsHided { get; set; } 25 | [field: SerializeField] public string[] ExcludeEnumerableArray { get; internal set; } 26 | public IEnumerable NameCollection => EnabledArray.Select(x => x.Enumerable); 27 | public int Count => EnabledArray.Length; 28 | public IEnumerable<(string Name, bool Enabled)> NameEnabledTupleCollection => EnabledArray.Select(x => (x.Enumerable, x.Enabled)); 29 | public IEnumerable EnabledNameCollection => EnabledArray.Where(x => x.Enabled).Select(x => x.Enumerable); 30 | public bool TryGetEnabled(string name, out bool value) 31 | { 32 | for (var i = 0; i < EnabledArray.Length; i++) 33 | { 34 | ref var tuple = ref EnabledArray[i]; 35 | if (tuple.Enumerable != name) continue; 36 | value = tuple.Enabled; 37 | return true; 38 | } 39 | value = default; 40 | return false; 41 | } 42 | 43 | public bool TrySetEnabled(string name, bool value) 44 | { 45 | for (var i = 0; i < EnabledArray.Length; i++) 46 | { 47 | ref var tuple = ref EnabledArray[i]; 48 | if (tuple.Enumerable != name) continue; 49 | tuple.Enabled = value; 50 | EditorUtility.SetDirty(this); 51 | return true; 52 | } 53 | return false; 54 | } 55 | 56 | private bool fold; 57 | public void Draw(IEnumerableCollectionProcessor processor) 58 | { 59 | if (IsHided) return; 60 | foreach (var relatedEnumerable in RelatedEnumerableArray) 61 | { 62 | if (!processor.TryGetEnabled(relatedEnumerable, out var enabled)) throw new KeyNotFoundException(relatedEnumerable); 63 | if (!enabled) return; 64 | } 65 | if (!FoldoutUtility.Draw(ref fold, new GUIContent(Name + "\t\t" + Description, Description))) return; 66 | 67 | using (new EditorGUILayout.HorizontalScope()) 68 | { 69 | if (GUILayout.Button("Select All")) 70 | { 71 | for (var i = 0; i < EnabledArray.Length; i++) 72 | { 73 | ref var tuple = ref EnabledArray[i]; 74 | tuple.Enabled = true; 75 | } 76 | EditorUtility.SetDirty(this); 77 | } 78 | else if (GUILayout.Button("Deselect All")) 79 | { 80 | for (var i = 0; i < EnabledArray.Length; i++) 81 | { 82 | ref var tuple = ref EnabledArray[i]; 83 | tuple.Enabled = false; 84 | } 85 | EditorUtility.SetDirty(this); 86 | } 87 | else if (GUILayout.Button("Hide and Deselect All")) 88 | { 89 | IsHided = true; 90 | for (var i = 0; i < EnabledArray.Length; i++) 91 | { 92 | ref var tuple = ref EnabledArray[i]; 93 | tuple.Enabled = false; 94 | } 95 | EditorUtility.SetDirty(this); 96 | } 97 | } 98 | 99 | using (IndentScope.Create()) 100 | { 101 | for (var i = 0; i < EnabledArray.Length; i++) 102 | { 103 | ref var tuple = ref EnabledArray[i]; 104 | if (!processor.TryGetEnabled(tuple.Enumerable, out var targetEnabled) || !targetEnabled) continue; 105 | using (new EditorGUILayout.HorizontalScope()) 106 | { 107 | EditorGUILayout.LabelField(new GUIContent(tuple.Enumerable, Description)); 108 | var guiContent = new GUIContent(tuple.Enumerable + " : " + tuple.Enabled, Description); 109 | TrySetEnabled(tuple.Enumerable, EditorGUILayout.ToggleLeft(guiContent, tuple.Enabled, GUI.skin.button)); 110 | } 111 | } 112 | } 113 | } 114 | 115 | public int CompareTo(ISingleApi other) 116 | { 117 | if (other is null) 118 | return 1; 119 | var c = string.Compare(Name, other.Name, StringComparison.Ordinal); 120 | if (c == 0) 121 | return string.Compare(Description, other.Description, StringComparison.Ordinal); 122 | return c; 123 | } 124 | } 125 | } 126 | -------------------------------------------------------------------------------- /UNL/ScriptableObject/Single Api/WithFuncEnumerableSingleApi.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 6fbcd04e384274e42b36563ebcd4c4c1 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/UNL.asmdef: -------------------------------------------------------------------------------- 1 | { 2 | "name": "UNL", 3 | "references": [], 4 | "optionalUnityReferences": [], 5 | "includePlatforms": [ 6 | "Editor" 7 | ], 8 | "excludePlatforms": [], 9 | "allowUnsafeCode": true, 10 | "overrideReferences": true, 11 | "precompiledReferences": [ 12 | "Mono.Cecil.dll", 13 | "Mono.Cecil.Rocks.dll" 14 | ], 15 | "autoReferenced": true, 16 | "defineConstraints": [] 17 | } -------------------------------------------------------------------------------- /UNL/UNL.asmdef.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 886a7b9fa29819c4b80b7f446957837e 3 | AssemblyDefinitionImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /UNL/Utility.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 7386a58b20662364bad1eb18cf398613 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /UNL/Utility/DependencyObject.cs: -------------------------------------------------------------------------------- 1 | using UnityEngine; 2 | 3 | namespace UniNativeLinq.Editor 4 | { 5 | public class DependencyObject : ScriptableObject, IDependency 6 | { 7 | [field: SerializeField] public string Enumerable { get; private set; } 8 | [field: SerializeField] public string[] Types { get; private set; } 9 | [field: SerializeField] public string[] Methods { get; private set; } 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /UNL/Utility/DependencyObject.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 96a4761b14fa304478b4668dc55e42a9 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/Utility/FoldoutUtility.cs: -------------------------------------------------------------------------------- 1 | using UnityEditor; 2 | using UnityEngine; 3 | 4 | namespace UniNativeLinq.Editor 5 | { 6 | internal static class FoldoutUtility 7 | { 8 | public static bool Draw(ref bool flag, string text) => flag = EditorGUILayout.Foldout(flag, text); 9 | public static bool Draw(ref bool flag, GUIContent content) => flag = EditorGUILayout.Foldout(flag, content); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /UNL/Utility/FoldoutUtility.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 0e4820dc217db3044b14c57a9d37d773 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/Utility/IndentScope.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using UnityEditor; 3 | 4 | namespace UniNativeLinq.Editor 5 | { 6 | internal readonly struct IndentScope : IDisposable 7 | { 8 | public readonly int OriginalIndent; 9 | 10 | public IndentScope(int originalIndent) 11 | { 12 | OriginalIndent = originalIndent; 13 | } 14 | 15 | public static IndentScope Create(int value = 1) 16 | { 17 | var indentScope = new IndentScope(EditorGUI.indentLevel); 18 | EditorGUI.indentLevel += value; 19 | return indentScope; 20 | } 21 | 22 | public void Dispose() => EditorGUI.indentLevel = OriginalIndent; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /UNL/Utility/IndentScope.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: eb44e871590026a449b28c9bc1a073bd 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/Utility/RefAction.cs: -------------------------------------------------------------------------------- 1 | namespace UniNativeLinq.Editor 2 | { 3 | public delegate void RefAction(ref T0 arg0, ref T1 arg1); 4 | public delegate void RefAction(ref T0 arg0, ref T1 arg1, ref T2 arg2); 5 | } 6 | -------------------------------------------------------------------------------- /UNL/Utility/RefAction.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 96b2ede50a51d35449601732afe5cdfa 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/Utility/SelectDeselectAllHelper.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Linq; 3 | using UnityEditor; 4 | using UnityEngine; 5 | 6 | namespace UniNativeLinq.Editor 7 | { 8 | public static class SelectDeselectAllHelper 9 | { 10 | private const string SelectAll = "Select All"; 11 | private const string DeselectAll = "Deselect All"; 12 | 13 | public static void SelectDeselectAll(this T[] array, Func predicate, Action action) 14 | { 15 | using (var horizontalScope = new EditorGUILayout.HorizontalScope()) 16 | { 17 | using (new EditorGUI.DisabledScope(array.All(predicate))) 18 | if (GUILayout.Button(SelectAll)) 19 | action(array, true); 20 | 21 | using (var disabledScope = new EditorGUI.DisabledScope(!array.Any(predicate))) 22 | if (GUILayout.Button(DeselectAll)) 23 | action(array, false); 24 | } 25 | } 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /UNL/Utility/SelectDeselectAllHelper.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: b2f0c7c1fe997244a84e2a95c6c3d9b7 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/Utility/String2BoolArrayTuple.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Linq; 3 | using UnityEditor; 4 | using UnityEngine; 5 | 6 | namespace UniNativeLinq.Editor 7 | { 8 | public abstract class String2BoolArrayTuple : ScriptableObject, IComparable 9 | { 10 | public string Name; 11 | public string Description; 12 | public StringBoolValueTuple[] EnabledArray; 13 | 14 | protected static T[] Create(IEnumerableCollectionProcessor processor, string name, params string[] descriptions) 15 | where T : String2BoolArrayTuple, ISingleApi 16 | { 17 | var array = processor.NameCollection.ToArray(); 18 | var answer = descriptions.Length == 0 ? Array.Empty() : new T[descriptions.Length]; 19 | var index = 0; 20 | foreach (var description in descriptions) 21 | { 22 | answer[index] = CreateInstance(); 23 | ref var api = ref answer[index++]; 24 | api.EnabledArray = new StringBoolValueTuple[array.Length]; 25 | for (var i = 0; i < array.Length; i++) 26 | { 27 | ref var tuple = ref api.EnabledArray[i]; 28 | tuple.Enumerable = array[i]; 29 | tuple.Enabled = true; 30 | } 31 | ((ISingleApi)api).Name = name; 32 | api.Description = description; 33 | AssetDatabase.CreateAsset(api, "Assets/UniNativeLinq/Editor/ApiSingle/" + name + "___" + (description.Length <= 10 ? description : description.GetHashCode().ToString("X")) + ".asset"); 34 | } 35 | return answer; 36 | } 37 | 38 | protected static T Create(IEnumerableCollectionProcessor processor, string name) 39 | where T : String2BoolArrayTuple, ISingleApi 40 | { 41 | var api = CreateInstance(); 42 | var array = processor.NameCollection.ToArray(); 43 | api.EnabledArray = new StringBoolValueTuple[array.Length]; 44 | for (var i = 0; i < array.Length; i++) 45 | { 46 | ref var tuple = ref api.EnabledArray[i]; 47 | tuple.Enumerable = array[i]; 48 | tuple.Enabled = true; 49 | } 50 | ((ISingleApi)api).Name = name; 51 | AssetDatabase.CreateAsset(api, "Assets/UniNativeLinq/Editor/ApiSingle/" + name + ".asset"); 52 | return api; 53 | } 54 | 55 | public int CompareTo(String2BoolArrayTuple other) 56 | { 57 | if (ReferenceEquals(this, other)) return 0; 58 | if (ReferenceEquals(null, other)) return 1; 59 | var nameComparison = string.Compare(Name, other.Name, StringComparison.Ordinal); 60 | return nameComparison != 0 ? nameComparison : string.Compare(Description, other.Description, StringComparison.Ordinal); 61 | } 62 | } 63 | } 64 | -------------------------------------------------------------------------------- /UNL/Utility/String2BoolArrayTuple.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 3c84d718a933f914a8aec21749ef0cfe 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/Utility/String2BoolMatrixTuple.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Linq; 3 | using UnityEditor; 4 | using UnityEngine; 5 | 6 | namespace UniNativeLinq.Editor 7 | { 8 | public abstract class String2BoolMatrixTuple : ScriptableObject, IComparable 9 | { 10 | public string Name; 11 | public string Description; 12 | public string[] EnumerableArray; 13 | public bool[] EnabledArray; 14 | 15 | protected static T[] Create(IEnumerableCollectionProcessor processor, string name, params string[] descriptions) 16 | where T : String2BoolMatrixTuple, IDoubleApi 17 | { 18 | var array = processor.NameCollection.ToArray(); 19 | var answer = descriptions.Length == 0 ? Array.Empty() : new T[descriptions.Length]; 20 | var index = 0; 21 | foreach (var description in descriptions) 22 | { 23 | answer[index] = CreateInstance(); 24 | ref var api = ref answer[index++]; 25 | ((IDoubleApi)api).Name = name; 26 | api.Description = description; 27 | api.EnumerableArray = new string[array.Length]; 28 | for (var i = 0; i < array.Length; i++) 29 | api.EnumerableArray[i] = array[i]; 30 | api.EnabledArray = new bool[api.Count * api.Count]; 31 | for (int i = 0; i < api.EnabledArray.Length; i++) 32 | api.EnabledArray[i] = true; 33 | AssetDatabase.CreateAsset(api, "Assets/UniNativeLinq/Editor/ApiDouble/" + name + "___" + (description.Length <= 10 ? description : description.GetHashCode().ToString("X")) + ".asset"); 34 | } 35 | return answer; 36 | } 37 | 38 | protected static T Create(IEnumerableCollectionProcessor processor, string name) 39 | where T : String2BoolMatrixTuple, IDoubleApi 40 | { 41 | var array = processor.NameCollection.ToArray(); 42 | var api = CreateInstance(); 43 | ((IDoubleApi)api).Name = name; 44 | api.Description = ""; 45 | api.EnumerableArray = new string[array.Length]; 46 | for (var i = 0; i < array.Length; i++) 47 | api.EnumerableArray[i] = array[i]; 48 | api.EnabledArray = new bool[api.Count * api.Count]; 49 | for (int i = 0; i < api.EnabledArray.Length; i++) 50 | api.EnabledArray[i] = true; 51 | AssetDatabase.CreateAsset(api, "Assets/UniNativeLinq/Editor/ApiDouble/" + name + ".asset"); 52 | return api; 53 | } 54 | 55 | public int CompareTo(String2BoolMatrixTuple other) 56 | { 57 | if (ReferenceEquals(this, other)) return 0; 58 | if (ReferenceEquals(null, other)) return 1; 59 | var nameComparison = string.Compare(Name, other.Name, StringComparison.Ordinal); 60 | if (nameComparison != 0) return nameComparison; 61 | var descriptionComparison = string.Compare(Description, other.Description, StringComparison.Ordinal); 62 | return descriptionComparison != 0 ? descriptionComparison : EnumerableArray.Length.CompareTo(other.EnumerableArray.Length); 63 | } 64 | 65 | public ref bool this[int index0, int index1] => ref EnabledArray[index0 * EnumerableArray.Length + index1]; 66 | 67 | public int FindIndex(string name1) 68 | { 69 | if (string.IsNullOrEmpty(name1)) return -1; 70 | for (var i = 0; i < EnumerableArray.Length; i++) 71 | { 72 | if (EnumerableArray[i] == name1) 73 | return i; 74 | } 75 | return -1; 76 | } 77 | } 78 | } 79 | -------------------------------------------------------------------------------- /UNL/Utility/String2BoolMatrixTuple.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: a7d804ea269aaf24280826cf2ace16de 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/Utility/StringBoolTuple.cs: -------------------------------------------------------------------------------- 1 | using UnityEngine; 2 | 3 | namespace UniNativeLinq.Editor 4 | { 5 | public sealed class StringBoolTuple : ScriptableObject 6 | { 7 | public string Enumerable; 8 | public bool Enabled; 9 | public bool IsSpecial; 10 | public uint GenericParameterCount; 11 | public string[] RelatedEnumerableArray; 12 | public string ElementType; 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /UNL/Utility/StringBoolTuple.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: b77614625b2c61944abce734bc95fdaa 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/Utility/StringBoolValueTuple.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace UniNativeLinq.Editor 4 | { 5 | [Serializable] 6 | public struct StringBoolValueTuple 7 | { 8 | public string Enumerable; 9 | public bool Enabled; 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /UNL/Utility/StringBoolValueTuple.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: a922bb762f2150e41adc5fe93114c85c 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/View.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 72fdd1794dcc8d447af37210cd2cf130 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /UNL/View/DrawableImplWhetherToIncludeEnumerable.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using UnityEditor; 3 | using UnityEngine; 4 | 5 | namespace UniNativeLinq.Editor 6 | { 7 | internal sealed class DrawableImplWhetherToIncludeEnumerable : IDrawable 8 | { 9 | public bool FoldoutTopLevel; 10 | private readonly IEnumerableCollectionProcessor processor; 11 | 12 | public DrawableImplWhetherToIncludeEnumerable(IEnumerableCollectionProcessor processor) 13 | { 14 | this.processor = processor; 15 | } 16 | 17 | public void Draw(ref Vector2 scrollPosition) 18 | { 19 | if (!FoldoutUtility.Draw(ref FoldoutTopLevel, "Whether to include each enumerable type or NOT")) return; 20 | 21 | using (new EditorGUILayout.HorizontalScope()) 22 | { 23 | if (GUILayout.Button("Select All")) 24 | { 25 | foreach (var name in processor.NameCollection) 26 | { 27 | if (name == "Native" || name == "Array") continue; 28 | processor.TrySetEnabled(name, true); 29 | } 30 | } 31 | if (GUILayout.Button("Deselect All")) 32 | { 33 | foreach (var name in processor.NameCollection) 34 | { 35 | if (name == "Native" || name == "Array") continue; 36 | processor.TrySetEnabled(name, false); 37 | } 38 | } 39 | } 40 | 41 | foreach (var (name, enabled) in processor.NameEnabledTupleCollection) 42 | { 43 | foreach (var related in processor.GetRelatedEnumerable(name)) 44 | { 45 | if (!processor.TryGetEnabled(related, out var relatedEnabled)) throw new KeyNotFoundException(); 46 | if (relatedEnabled) continue; 47 | if (enabled) 48 | processor.TrySetEnabled(name, false); 49 | goto NEXT; 50 | } 51 | using (IndentScope.Create()) 52 | using (new EditorGUILayout.HorizontalScope()) 53 | using (new EditorGUI.DisabledScope(name == "Native" || name == "Array")) 54 | { 55 | EditorGUILayout.LabelField(name); 56 | processor.TrySetEnabled(name, EditorGUILayout.ToggleLeft(name + " : " + enabled, enabled, (GUIStyle)"button")); 57 | } 58 | NEXT:; 59 | } 60 | } 61 | } 62 | } 63 | -------------------------------------------------------------------------------- /UNL/View/DrawableImplWhetherToIncludeEnumerable.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 0e2e829453ae86949bbd7b749110cbb1 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/View/DrawableImplWhetherToUseApiOrNot.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using UnityEditor; 3 | using UnityEngine; 4 | 5 | namespace UniNativeLinq.Editor 6 | { 7 | internal sealed class DrawableImplWhetherToUseApiOrNot : IDrawable 8 | { 9 | public bool FoldoutTopLevel; 10 | public bool FoldoutSingleLevel; 11 | public bool FoldoutDoubleLevel; 12 | private readonly IEnumerableCollectionProcessor processor; 13 | private readonly ISingleApi[] singleApis; 14 | private readonly IDoubleApi[] doubleApis; 15 | 16 | public DrawableImplWhetherToUseApiOrNot(IEnumerableCollectionProcessor processor, ISingleApi[] singleApis, IDoubleApi[] doubleApis) 17 | { 18 | this.processor = processor; 19 | this.singleApis = singleApis ?? Array.Empty(); 20 | this.doubleApis = doubleApis ?? Array.Empty(); 21 | try 22 | { 23 | Array.Sort(this.singleApis); 24 | Array.Sort(this.doubleApis); 25 | } 26 | catch (Exception e) 27 | { 28 | Debug.LogWarning(e); 29 | } 30 | foreach (var api in doubleApis) 31 | { 32 | ((IDrawableWithEnumerableAndScrollPosition)api).RegisterEnumerableCollectionProcessor(processor); 33 | } 34 | } 35 | 36 | public void Draw(ref Vector2 scrollPosition) 37 | { 38 | if (!FoldoutUtility.Draw(ref FoldoutTopLevel, "Whether to include each api or NOT")) return; 39 | if (FoldoutUtility.Draw(ref FoldoutSingleLevel, "Single")) 40 | DrawSingleApis(); 41 | if (FoldoutUtility.Draw(ref FoldoutDoubleLevel, "Double")) 42 | DrawDoubleApis(ref scrollPosition); 43 | } 44 | 45 | private void DrawDoubleApis(ref Vector2 scrollPosition) 46 | { 47 | using (new EditorGUILayout.HorizontalScope()) 48 | { 49 | if (GUILayout.Button("Select All")) 50 | { 51 | for (var i = 0; i < doubleApis.Length; i++) 52 | { 53 | ref var api = ref doubleApis[i]; 54 | foreach (var name0 in api.NameCollection) 55 | foreach (var name1 in api.NameCollection) 56 | api.TrySetEnabled(name0, name1, true); 57 | } 58 | } 59 | else if (GUILayout.Button("Deselect All")) 60 | { 61 | for (var i = 0; i < doubleApis.Length; i++) 62 | { 63 | ref var api = ref doubleApis[i]; 64 | foreach (var name0 in api.NameCollection) 65 | foreach (var name1 in api.NameCollection) 66 | api.TrySetEnabled(name0, name1, false); 67 | } 68 | } 69 | else if (GUILayout.Button("Show hidden apis")) 70 | { 71 | foreach (var api in doubleApis) 72 | api.IsHided = false; 73 | } 74 | } 75 | 76 | using (new IndentScope()) 77 | { 78 | foreach (var api in doubleApis) 79 | { 80 | ((IDrawableWithEnumerableAndScrollPosition)api).Draw(ref scrollPosition); 81 | } 82 | } 83 | } 84 | 85 | private void DrawSingleApis() 86 | { 87 | using (new EditorGUILayout.HorizontalScope()) 88 | { 89 | if (GUILayout.Button("Select All")) 90 | { 91 | for (var i = 0; i < singleApis.Length; i++) 92 | { 93 | ref var api = ref singleApis[i]; 94 | foreach (var name in api.NameCollection) 95 | { 96 | api.TrySetEnabled(name, true); 97 | } 98 | } 99 | } 100 | else if (GUILayout.Button("Deselect All")) 101 | { 102 | for (var i = 0; i < singleApis.Length; i++) 103 | { 104 | ref var api = ref singleApis[i]; 105 | foreach (var name in api.NameCollection) 106 | { 107 | api.TrySetEnabled(name, false); 108 | } 109 | } 110 | } 111 | else if (GUILayout.Button("Show hidden apis")) 112 | { 113 | foreach (var api in singleApis) 114 | api.IsHided = false; 115 | } 116 | } 117 | 118 | using (new IndentScope()) 119 | { 120 | foreach (var api in singleApis) 121 | { 122 | api.Draw(processor); 123 | } 124 | } 125 | } 126 | } 127 | } 128 | -------------------------------------------------------------------------------- /UNL/View/DrawableImplWhetherToUseApiOrNot.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 35a875a8dedbcbc45a4e2da43642d086 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/View/EnumerableCollectionProcessor.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using UnityEditor; 5 | 6 | namespace UniNativeLinq.Editor 7 | { 8 | internal sealed class EnumerableCollectionProcessor : IEnumerableCollectionProcessor 9 | { 10 | private readonly StringBoolTuple[] types; 11 | private readonly Dictionary dictionary; 12 | private bool hasChanged; 13 | 14 | public EnumerableCollectionProcessor(StringBoolTuple[] types) 15 | { 16 | this.types = types ?? Array.Empty(); 17 | Array.Sort(this.types, 0, this.types.Length, new Comparer()); 18 | dictionary = this.types.ToDictionary(x => x.Enumerable, x => x); 19 | } 20 | 21 | sealed class Comparer : IComparer 22 | { 23 | public int Compare(StringBoolTuple x, StringBoolTuple y) 24 | { 25 | if (ReferenceEquals(x, y)) return 0; 26 | if (ReferenceEquals(null, y)) return 1; 27 | if (ReferenceEquals(null, x)) return -1; 28 | if (x.IsSpecial && !y.IsSpecial) return -1; 29 | if (!x.IsSpecial && y.IsSpecial) return 1; 30 | return string.Compare(x.Enumerable, y.Enumerable, StringComparison.Ordinal); 31 | } 32 | } 33 | 34 | public int Count => types.Length; 35 | 36 | public IEnumerable NameCollection => types.Select(Selector); 37 | 38 | public IEnumerable<(string Name, bool Enabled)> NameEnabledTupleCollection 39 | { 40 | get 41 | { 42 | (string Name, bool Enabled) Selector(StringBoolTuple _) => (_.Enumerable, _.Enabled); 43 | return types.Select(Selector); 44 | } 45 | } 46 | 47 | public IEnumerable EnabledNameCollection => types.Where(Predicate).Select(Selector); 48 | 49 | private static bool Predicate(StringBoolTuple _) => _.Enabled; 50 | private static string Selector(StringBoolTuple _) => _.Enumerable; 51 | 52 | public bool TryGetEnabled(string name, out bool value) 53 | { 54 | if (!dictionary.TryGetValue(name, out var tuple)) return value = false; 55 | value = tuple.Enabled; 56 | return true; 57 | } 58 | 59 | public bool TrySetEnabled(string name, bool value) 60 | { 61 | if (!dictionary.TryGetValue(name, out var tuple)) return false; 62 | hasChanged = true; 63 | tuple.Enabled = value; 64 | EditorUtility.SetDirty(tuple); 65 | return true; 66 | } 67 | 68 | public bool IsSpecialType(string name, out bool value) 69 | { 70 | if (!dictionary.TryGetValue(name, out var tuple)) return value = false; 71 | value = tuple.IsSpecial; 72 | return true; 73 | } 74 | 75 | public uint GetGenericParameterCount(string name) => dictionary[name].GenericParameterCount; 76 | 77 | public IEnumerable GetRelatedEnumerable(string name) => dictionary[name].RelatedEnumerableArray; 78 | public string GetElementType(string name) => dictionary[name].ElementType; 79 | 80 | public bool HasChanged => hasChanged; 81 | 82 | public void Apply() => hasChanged = false; 83 | } 84 | } 85 | -------------------------------------------------------------------------------- /UNL/View/EnumerableCollectionProcessor.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 123db5e3b41514644873c88f07160ace 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/View/Installer.cs: -------------------------------------------------------------------------------- 1 | using System.Collections; 2 | using System.Collections.Generic; 3 | using System.IO; 4 | using UnityEditor; 5 | using UnityEngine; 6 | using System.Runtime.CompilerServices; 7 | 8 | namespace UniNativeLinq.Editor 9 | { 10 | internal static class GetViewFolderHelper 11 | { 12 | public static string GetFolder() => InternalGetFolder(); 13 | 14 | private static string InternalGetFolder([CallerFilePath]string path = "") => path.Substring(0, path.Length - 3 - nameof(Installer).Length); 15 | } 16 | internal static class Installer 17 | { 18 | [MenuItem("Tools/UniNativeLinq/Import/Import UniNativeLinq Essential Resources", false, 2050)] 19 | public static void ImportProjectResourcesMenu() 20 | { 21 | var packageFullPath = Path.Combine(GetViewFolderHelper.GetFolder(), "../Packages/UniNativeLinq-Settings.unitypackage"); 22 | AssetDatabase.ImportPackage(packageFullPath, true); 23 | } 24 | } 25 | } -------------------------------------------------------------------------------- /UNL/View/Installer.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 5e79485430e213149a5360af82c4c619 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/View/Interfaces.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: c01183020f996cc4da26bb798a3def2e 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /UNL/View/Interfaces/IDependency.cs: -------------------------------------------------------------------------------- 1 | namespace UniNativeLinq.Editor 2 | { 3 | public interface IDependency 4 | { 5 | string Enumerable { get; } 6 | string[] Types { get; } 7 | string[] Methods { get; } 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /UNL/View/Interfaces/IDependency.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 2509f3bcf10b3d942b205a892c342379 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/View/Interfaces/IDoubleApi.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace UniNativeLinq.Editor 4 | { 5 | public interface IDoubleApi : IComparable 6 | { 7 | string Name { get; set; } 8 | string Description { get; } 9 | string[] RelatedEnumerableArray { get; } 10 | string[] ExcludeEnumerableArray { get; } 11 | 12 | string[] NameCollection { get; } 13 | int Count { get; } 14 | bool TryGetEnabled(string name0, string name1, out bool value); 15 | bool TrySetEnabled(string name0, string name1, bool value); 16 | 17 | bool IsHided { get; set; } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /UNL/View/Interfaces/IDoubleApi.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 45a8317614f6cd14b901582e1adf677e 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/View/Interfaces/IDrawable.cs: -------------------------------------------------------------------------------- 1 | using UnityEngine; 2 | 3 | namespace UniNativeLinq.Editor 4 | { 5 | public interface IDrawable 6 | { 7 | void Draw(ref Vector2 scrollPosition); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /UNL/View/Interfaces/IDrawable.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 29213eb9172946144bc4440e90ae9f38 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/View/Interfaces/IDrawableWithEnumerable.cs: -------------------------------------------------------------------------------- 1 | namespace UniNativeLinq.Editor 2 | { 3 | public interface IDrawableWithEnumerable 4 | { 5 | void Draw(IEnumerableCollectionProcessor processor); 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /UNL/View/Interfaces/IDrawableWithEnumerable.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 80682439b5e4ca14aa7d24b3da51d4ea 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/View/Interfaces/IDrawableWithEnumerableAndScrollPosition.cs: -------------------------------------------------------------------------------- 1 | using UnityEngine; 2 | 3 | namespace UniNativeLinq.Editor 4 | { 5 | public interface IDrawableWithEnumerableAndScrollPosition 6 | { 7 | void RegisterEnumerableCollectionProcessor(IEnumerableCollectionProcessor enumerableCollectionProcessor); 8 | void Draw(ref Vector2 scrollPosition); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /UNL/View/Interfaces/IDrawableWithEnumerableAndScrollPosition.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 08c774f859305594287ce459e7021160 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/View/Interfaces/IEnumerableCollectionProcessor.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | 3 | namespace UniNativeLinq.Editor 4 | { 5 | public interface IEnumerableCollectionProcessor 6 | { 7 | IEnumerable NameCollection { get; } 8 | int Count { get; } 9 | IEnumerable<(string Name, bool Enabled)> NameEnabledTupleCollection { get; } 10 | IEnumerable EnabledNameCollection { get; } 11 | bool TryGetEnabled(string name, out bool value); 12 | bool TrySetEnabled(string name, bool value); 13 | bool IsSpecialType(string name, out bool value); 14 | uint GetGenericParameterCount(string name); 15 | IEnumerable GetRelatedEnumerable(string name); 16 | string GetElementType(string name); 17 | bool HasChanged { get; } 18 | void Apply(); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /UNL/View/Interfaces/IEnumerableCollectionProcessor.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: f8266c3216b85d54e8795be950bd8db9 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/View/Interfaces/ISingleApi.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | 4 | namespace UniNativeLinq.Editor 5 | { 6 | public interface ISingleApi : IDrawableWithEnumerable, IComparable 7 | { 8 | string Name { get; set; } 9 | string Description { get; } 10 | string[] RelatedEnumerableArray { get; } 11 | string[] ExcludeEnumerableArray { get; } 12 | 13 | IEnumerable NameCollection { get; } 14 | int Count { get; } 15 | bool TryGetEnabled(string name, out bool value); 16 | bool TrySetEnabled(string name, bool value); 17 | 18 | bool IsHided { get; set; } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /UNL/View/Interfaces/ISingleApi.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 9ebedac6c58fad24b9e89f69f978b762 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /UNL/View/SettingWindow.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 388de203556827849bcb1a994cec029a 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "uninativelinq", 3 | "displayName": "UniNativeLinq", 4 | "version": "0.0.6", 5 | "unity": "2018.4", 6 | "description": "This package provides the LINQ extension to the NativeArray without any allocation.", 7 | "keywords": [], 8 | "category": "Controllers", 9 | "dependencies": { 10 | "nuget.mono-cecil": "0.1.6-preview" 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /package.json.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: cb6ca5d3f78890e4c89047a764e931a9 3 | TextScriptImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | --------------------------------------------------------------------------------