public Blittable WriteOpsIntoMemory(
            SystemLevelRuleNativeData dataArray,
            SymbolSeriesMatcherNativeDataWriter dataWriter)
        {
            var structExpressionsSpace = new JaggedIndexing
            {
                index  = dataWriter.indexInStructExpressionMemory,
                length = (ushort)evaluators.Length
            };

            var totalOperations = 0;

            for (int i = 0; i < evaluators.Length; i++)
            {
                var opSize = evaluators[i].OperatorSpaceNeeded;
                dataArray.structExpressionMemorySpace[i + structExpressionsSpace.index] = evaluators[i].WriteIntoOpDataArray(
                    dataArray.dynamicOperatorMemory,
                    new JaggedIndexing
                {
                    index  = dataWriter.indexInOperatorMemory + totalOperations,
                    length = opSize
                });
                totalOperations += opSize;
            }
            dataWriter.indexInOperatorMemory += totalOperations;

            dataWriter.indexInStructExpressionMemory += structExpressionsSpace.length;

            return(blittable = new Blittable
            {
                structExpressionSpace = structExpressionsSpace,
                replacementSymbol = targetSymbol
            });
        }
예제 #2
0
        public void WriteIntoMemory(
            SystemLevelRuleNativeData dataArray,
            SymbolSeriesMatcherNativeDataWriter dataWriter)
        {
            var replacementSymbolSpace = new JaggedIndexing
            {
                index  = dataWriter.indexInReplacementSymbolsMemory,
                length = (ushort)replacementSymbols.Length
            };

            for (int i = 0; i < replacementSymbols.Length; i++)
            {
                var blittableReplacement = replacementSymbols[i].WriteOpsIntoMemory(dataArray, dataWriter);
                dataArray.replacementsSymbolMemorySpace[i + replacementSymbolSpace.index] = blittableReplacement;
            }
            dataWriter.indexInReplacementSymbolsMemory += replacementSymbolSpace.length;

            blittable = new Blittable
            {
                probability               = probability,
                replacementSymbolSize     = (ushort)replacementSymbols.Length,
                replacementParameterCount = replacementParameterCount,
                replacementSymbols        = replacementSymbolSpace
            };
        }
예제 #3
0
        public void Params_Blittable()
        {
            Blittable a = new Blittable(1, 2, 3, 4, -5, -6, -7, 8.0f, 9.0, typeof(ITests).GUID);
            Blittable b;
            Blittable c = Tests.Param13(a, in a, out b);

            Assert.True(AllEqual(a, b, c));
        }
예제 #4
0
 public void Array_Blittable()
 {
     Blittable[] a = new Blittable[] {
         new Blittable(1, 2, 3, 4, -5, -6, -7, 8.0f, 9.0, typeof(ITests).GUID),
         new Blittable(10, 20, 30, 40, -50, -60, -70, 80.0f, 90.0, typeof(IStringable).GUID)
     };
     Blittable[] b = new Blittable[a.Length];
     Blittable[] c;
     Blittable[] d = Tests.Array13(a, b, out c);
     Assert.True(AllEqual(a, b, c, d));
 }
예제 #5
0
        public void WriteIntoNativeData(NativeTurtleData nativeData, TurtleNativeDataWriter writer)
        {
            var vertexSlice = new JaggedIndexing
            {
                index  = writer.indexInVertexes,
                length = (ushort)draft.vertexCount
            };

            for (int i = 0; i < vertexSlice.length; i++)
            {
                var vertexDatum = new NativeVertexDatum
                {
                    vertex  = draft.vertices[i],
                    normal  = draft.normals[i],
                    uv      = draft.uvs[i],
                    tangent = draft.tangents[i]
                };
                nativeData.vertexData[i + writer.indexInVertexes] = vertexDatum;
            }
            writer.indexInVertexes += vertexSlice.length;

            var triangleCount = new JaggedIndexing
            {
                index  = writer.indexInTriangles,
                length = (ushort)draft.triangles.Length
            };

            for (int i = 0; i < triangleCount.length; i++)
            {
                nativeData.triangleData[i + writer.indexInTriangles] = draft.triangles[i];
            }
            writer.indexInTriangles += triangleCount.length;

            var existingMaterialIndex = writer.materialsInOrder.IndexOf(material);

            if (existingMaterialIndex == -1)
            {
                existingMaterialIndex = writer.materialsInOrder.Count;
                writer.materialsInOrder.Add(material);
            }
            var blittable = new Blittable
            {
                translation   = translation,
                alsoMove      = alsoMove,
                vertexes      = vertexSlice,
                trianges      = triangleCount,
                materialIndex = (byte)existingMaterialIndex
            };

            nativeData.allOrganData[writer.indexInOrganTemplates] = blittable;
            writer.indexInOrganTemplates++;
        }
예제 #6
0
    public static unsafe void Main()
    {
        int    i;
        object o    = new Blittable();
        int *  ptr  = &i;
        IntPtr addr = (IntPtr)ptr;

        Console.WriteLine(addr.ToString("x"));
        GCHandle h = GCHandle.Alloc(o, GCHandleType.Pinned);

        addr = h.AddrOfPinnedObject();
        Console.WriteLine(addr.ToString("x"));
        h.Free();
    }
        public unsafe void IsBlittable()
        {
            Assert.True(Blittable.IsBlittable <BlittablePointer <byte> >());
            Assert.True(Blittable.IsBlittable <BlittablePointer <sbyte> >());
            Assert.True(Blittable.IsBlittable <BlittablePointer <short> >());
            Assert.True(Blittable.IsBlittable <BlittablePointer <ushort> >());
            Assert.True(Blittable.IsBlittable <BlittablePointer <int> >());
            Assert.True(Blittable.IsBlittable <BlittablePointer <uint> >());
            Assert.True(Blittable.IsBlittable <BlittablePointer <long> >());
            Assert.True(Blittable.IsBlittable <BlittablePointer <ulong> >());
            Assert.True(Blittable.IsBlittable <BlittablePointer <IntPtr> >());
            Assert.True(Blittable.IsBlittable <BlittablePointer <UIntPtr> >());

            Assert.True(Blittable.IsBlittable <BlittablePointer <RandomIntStruct> >());
        }