public IRenderRequest CreateInstancedRequest(IRenderContext renderContext, RasterizerState rasterizerState,
     BlendState blendState, DepthStencilState depthStencilState, IEffect effect, IEffectParameterSet effectParameterSet,
     VertexBuffer meshVertexBuffer, IndexBuffer meshIndexBuffer, PrimitiveType primitiveType,
     Matrix[] instanceWorldTransforms, Action<List<Matrix>, VertexBuffer, IndexBuffer> computeCombinedBuffers)
 {
     throw new NotImplementedException();
 }
示例#2
0
    public RrdPrimitive(RrdUpdater updater, PrimitiveType type, int count, bool isConstant)
   {
		backend = updater.getRrdBackend();
		byteCount = RRD_PRIM_SIZES[(int)type] * count;
		pointer = updater.getRrdAllocator().allocate(byteCount);
		cachingAllowed = isConstant || backend.isCachingAllowed();
	}
示例#3
0
    private static void InsertBinaryOperationMethod(Core core, ProtoCore.AST.Node root, Operator op, PrimitiveType r, PrimitiveType op1, PrimitiveType op2, int retRank = 0, int op1rank = 0, int op2rank = 0)
    {
        ProtoCore.AST.AssociativeAST.FunctionDefinitionNode funcDefNode = new ProtoCore.AST.AssociativeAST.FunctionDefinitionNode();
        funcDefNode.access = ProtoCore.DSASM.AccessSpecifier.kPublic;
        funcDefNode.IsAssocOperator = true;
        funcDefNode.IsBuiltIn = true;
        funcDefNode.Name = Op.GetOpFunction(op);
        funcDefNode.ReturnType = new ProtoCore.Type() { Name = core.TypeSystem.GetType((int)r), UID = (int)r, rank = retRank};
        ProtoCore.AST.AssociativeAST.ArgumentSignatureNode args = new ProtoCore.AST.AssociativeAST.ArgumentSignatureNode();
        args.AddArgument(new ProtoCore.AST.AssociativeAST.VarDeclNode()
        {
            memregion = ProtoCore.DSASM.MemoryRegion.kMemStack,
            access = ProtoCore.DSASM.AccessSpecifier.kPublic,
            NameNode = BuildAssocIdentifier(core, ProtoCore.DSASM.Constants.kLHS),
            ArgumentType = new ProtoCore.Type { Name = core.TypeSystem.GetType((int)op1), UID = (int)op1, rank = op1rank}
        });
        args.AddArgument(new ProtoCore.AST.AssociativeAST.VarDeclNode()
        {
            memregion = ProtoCore.DSASM.MemoryRegion.kMemStack,
            access = ProtoCore.DSASM.AccessSpecifier.kPublic,
            NameNode = BuildAssocIdentifier(core, ProtoCore.DSASM.Constants.kRHS),
            ArgumentType = new ProtoCore.Type { Name = core.TypeSystem.GetType((int)op2), UID = (int)op2, rank = op2rank}
        });
        funcDefNode.Signature = args;

        ProtoCore.AST.AssociativeAST.CodeBlockNode body = new ProtoCore.AST.AssociativeAST.CodeBlockNode();
        ProtoCore.AST.AssociativeAST.IdentifierNode _return = BuildAssocIdentifier(core, ProtoCore.DSDefinitions.Keyword.Return, ProtoCore.PrimitiveType.kTypeReturn);

        ProtoCore.AST.AssociativeAST.IdentifierNode lhs = BuildAssocIdentifier(core, ProtoCore.DSASM.Constants.kLHS);
        ProtoCore.AST.AssociativeAST.IdentifierNode rhs = BuildAssocIdentifier(core, ProtoCore.DSASM.Constants.kRHS);
        body.Body.Add(new ProtoCore.AST.AssociativeAST.BinaryExpressionNode() { LeftNode = _return, Optr = ProtoCore.DSASM.Operator.assign, RightNode = new ProtoCore.AST.AssociativeAST.BinaryExpressionNode() { LeftNode = lhs, RightNode = rhs, Optr = op } });
        funcDefNode.FunctionBody = body;
        (root as ProtoCore.AST.AssociativeAST.CodeBlockNode).Body.Add(funcDefNode);
    }
示例#4
0
 private Expression MaybeNarrow(PrimitiveType pt, Expression e)
 {
     if (e.DataType.Size != pt.Size)
         return emitter.Cast(pt, e);
     else
         return e;
 }
示例#5
0
 public Mesh(int vbo, int ibo, int count, PrimitiveType mode)
 {
     VboId = vbo;
     IboId = ibo;
     Count = count;
     Mode = mode;
 }
示例#6
0
 protected AddressOperand(Address a, PrimitiveType type)
     : base(type)
 {
     if (a == null)
         throw new ArgumentNullException("a");
     Address = a;
 }
示例#7
0
        public void AddVertex( Vector2 vertex, Color color, PrimitiveType primitiveType )
        {
            if ( !_hasBegun )
                throw new InvalidOperationException( "Begin must be called before AddVertex can be called." );

            if ( primitiveType == PrimitiveType.LineStrip || primitiveType == PrimitiveType.TriangleStrip )
                throw new NotSupportedException( "The specified primitiveType is not supported by PrimitiveBatch." );

            if ( primitiveType == PrimitiveType.TriangleList ) {
                if ( _triangleVertsCount >= _triangleVertices.Length )
                    FlushTriangles();

                _triangleVertices[ _triangleVertsCount ].Position = new Vector3( vertex, -0.1f );
                _triangleVertices[ _triangleVertsCount ].Color = color;
                _triangleVertsCount++;
            }

            if ( primitiveType == PrimitiveType.LineList ) {
                if ( _lineVertsCount >= _lineVertices.Length )
                    FlushLines();

                _lineVertices[ _lineVertsCount ].Position = new Vector3( vertex, 0f );
                _lineVertices[ _lineVertsCount ].Color = color;
                _lineVertsCount++;
            }
        }
示例#8
0
 public SparcArchitecture(PrimitiveType wordWidth)
 {
     this.WordWidth = wordWidth;
     this.PointerType = PrimitiveType.Create(Domain.Pointer, wordWidth.Size);
     this.FramePointerType = PointerType;
     this.InstructionBitSize = 32;
 }
示例#9
0
 /// <summary>
 /// Initializes a new <see cref="VertexBufferObject"/>
 /// </summary>
 /// <param name="vertexBufferLength">The lenght of the vertex buffer</param>
 /// <param name="elementBufferLength">The lenght of the element buffer</param>
 /// <param name="primitiveType">The <see cref="OpenTK.Graphics.OpenGL.PrimitiveType"/> used to render the <see cref="VertexBufferObject"/></param>
 public VertexBufferObject(int vertexBufferLength, int elementBufferLength, PrimitiveType primitiveType)
 {
     this.VertexBufferLength = vertexBufferLength;
     this.ElementBufferLength = elementBufferLength;
     this.PrimitiveType = primitiveType;
     this.Initialize();
 }
 /// <summary>
 /// Converts a javascript primitive type to a .NET type.
 /// </summary>
 /// <param name="type"> The type to convert. </param>
 /// <returns> A .NET type. </returns>
 public static Type ToType(PrimitiveType type)
 {
     switch (type)
     {
         case PrimitiveType.Any:
             return typeof(object);
         case PrimitiveType.Undefined:
             return typeof(Undefined);
         case PrimitiveType.Null:
             return typeof(Null);
         case PrimitiveType.Bool:
             return typeof(bool);
         case PrimitiveType.Int32:
             return typeof(int);
         case PrimitiveType.UInt32:
             return typeof(uint);
         case PrimitiveType.Number:
             return typeof(double);
         case PrimitiveType.String:
             return typeof(string);
         case PrimitiveType.ConcatenatedString:
             return typeof(ConcatenatedString);
         case PrimitiveType.Object:
             return typeof(Library.ObjectInstance);
         default:
             throw new NotImplementedException(string.Format("Unsupported primitive type: {0}", type));
     }
 }
示例#11
0
 public Constant CreateConstant(ImmediateOperand imm, PrimitiveType dataWidth)
 {
     if (dataWidth.BitSize > imm.Width.BitSize)
         return Constant.Create(dataWidth, imm.Value.ToInt64());
     else
         return Constant.Create(imm.Width, imm.Value.ToUInt32());
 }
示例#12
0
        /// <summary>
        /// Creates an instance of PowerPcArchitecture.
        /// </summary>
        /// <param name="wordWidth">Supplies the word width of the PowerPC architecture.</param>
        public PowerPcArchitecture(PrimitiveType wordWidth)
        {
            this.wordWidth = wordWidth;
            this.ptrType = PrimitiveType.Create(Domain.Pointer, wordWidth.Size);

            this.lr = new RegisterStorage("lr", 0x68,   wordWidth);
            this.cr = new RegisterStorage("cr", 0x69,   wordWidth);
            this.ctr = new RegisterStorage("ctr", 0x6A, wordWidth);
            this.xer = new RegisterStorage("xer", 0x6B, wordWidth);
            this.fpscr = new RegisterStorage("fpscr", 0x6C, wordWidth);

            regs = new ReadOnlyCollection<RegisterStorage>(
                Enumerable.Range(0, 0x20)
                    .Select(n => new RegisterStorage("r" + n, n, wordWidth))
                .Concat(Enumerable.Range(0, 0x20)
                    .Select(n => new RegisterStorage("f" + n, n + 0x20, PrimitiveType.Word64)))
                .Concat(Enumerable.Range(0, 0x20)
                    .Select(n => new RegisterStorage("v" + n, n + 0x40, PrimitiveType.Word128)))
                .Concat(Enumerable.Range(0, 8)
                    .Select(n => new RegisterStorage("cr" + n, n + 0x60, PrimitiveType.Byte)))
                .Concat(new[] { lr, cr, ctr, xer })
                .ToList());

            fpregs = new ReadOnlyCollection<RegisterStorage>(
                regs.Skip(0x20).Take(0x20).ToList());

            vregs = new ReadOnlyCollection<RegisterStorage>(
                regs.Skip(0x40).Take(0x20).ToList());

            cregs = new ReadOnlyCollection<RegisterStorage>(
                regs.Skip(0x60).Take(0x8).ToList());

        }
示例#13
0
        public void Draw(IndexBuffer ibo, PrimitiveType primitiveType)
        {
            ibo.Draw();

            bool bWireframe = (SceneManager.Current.RenderMode == SceneManager.RenderMeshMode.Wireframe);

            GL.BindBuffer(BufferTarget.ArrayBuffer, vbo);

            GL.EnableClientState(ArrayCap.VertexArray);
            GL.EnableClientState(ArrayCap.NormalArray);
            GL.EnableClientState(ArrayCap.TextureCoordArray);
            if (!bWireframe) { GL.EnableClientState(ArrayCap.ColorArray); }

            GL.VertexPointer(3, VertexPointerType.Float, Vertex.Stride, new IntPtr(0));
            GL.NormalPointer(NormalPointerType.Float, Vertex.Stride, new IntPtr(Vector3.SizeInBytes));
            GL.TexCoordPointer(2, TexCoordPointerType.Float, Vertex.Stride, new IntPtr(2 * Vector3.SizeInBytes));
            if (!bWireframe) { GL.ColorPointer(4, ColorPointerType.Float, Vertex.Stride, new IntPtr((2 * Vector3.SizeInBytes) + Vector4.SizeInBytes)); }

            GL.DrawElements(primitiveType, ibo.Length, DrawElementsType.UnsignedInt, IntPtr.Zero);

            GL.DisableClientState(ArrayCap.VertexArray);
            GL.DisableClientState(ArrayCap.NormalArray);
            GL.DisableClientState(ArrayCap.TextureCoordArray);
            if (!bWireframe) { GL.DisableClientState(ArrayCap.ColorArray);}

            GL.BindBuffer(BufferTarget.ArrayBuffer, 0);
        }
示例#14
0
    /// <summary>
    ///   Checks whether a vertex count is valid for the specified type of primitives
    /// </summary>
    /// <param name="verticesOrIndices">Number of vertices or indices</param>
    /// <param name="type">Type of primitives the vertices will be processed as</param>
    /// <returns>
    ///   True if the specified number is a valid vertex count for the specified
    ///   type of primitives
    /// </returns>
    /// <remarks>
    ///   A zero check is expected to be done in addition to this method. Negative
    ///   vertex or index counts will result in undefined behavior.
    /// </remarks>
    public static bool IsValidVertexCount(int verticesOrIndices, PrimitiveType type) {
      switch(type) {
#if !XNA_4
        case PrimitiveType.PointList: {
          return true;
        }
#endif
        case PrimitiveType.LineStrip: {
          return (verticesOrIndices >= 2);
        }
        case PrimitiveType.LineList: {
          return ((verticesOrIndices % 2) == 0);
        }
#if !XNA_4
        case PrimitiveType.TriangleFan:
#endif
        case PrimitiveType.TriangleStrip: {
          return (verticesOrIndices >= 3);
        }
        case PrimitiveType.TriangleList: {
          return (verticesOrIndices % 3) == 0;
        }
        default: { throw new ArgumentException("Invalid primitive type"); }
      }
    }
 public static PrimitiveTopology ConvertPrimitiveType(PrimitiveType primitiveType)
 {
     switch (primitiveType)
     {
         case PrimitiveType.PointList:
             return PrimitiveTopology.PointList;
         case PrimitiveType.LineList:
             return PrimitiveTopology.LineList;
         case PrimitiveType.LineStrip:
             return PrimitiveTopology.LineStrip;
         case PrimitiveType.TriangleList:
             return PrimitiveTopology.TriangleList;
         case PrimitiveType.TriangleStrip:
             return PrimitiveTopology.TriangleStrip;
         case PrimitiveType.LineListWithAdjacency:
             return PrimitiveTopology.LineListWithAdjacency;
         case PrimitiveType.LineStripWithAdjacency:
             return PrimitiveTopology.LineStripWithAdjacency;
         case PrimitiveType.TriangleListWithAdjacency:
             return PrimitiveTopology.TriangleListWithAdjacency;
         case PrimitiveType.TriangleStripWithAdjacency:
             return PrimitiveTopology.TriangleStripWithAdjacency;
         default:
             throw new ArgumentOutOfRangeException(nameof(primitiveType));
     }
 }
示例#16
0
 public VertexArray(PrimitiveType primitive)
 {
     this.id = GL.GenVertexArray();
     this.primitive = primitive;
     this.arrays = new Dictionary<string, GLBuffer>();
     this.attributes = new Dictionary<int, VertexAttribute>();
 }
示例#17
0
文件: CoreUtils.cs 项目: nmeek/Dynamo
        private static void InsertBinaryOperationMethod(Core core, CodeBlockNode root, Operator op, PrimitiveType r, PrimitiveType op1, PrimitiveType op2, int retRank = 0, int op1rank = 0, int op2rank = 0)
        {
            FunctionDefinitionNode funcDefNode = new FunctionDefinitionNode();
            funcDefNode.access = CompilerDefinitions.AccessModifier.kPublic;
            funcDefNode.IsAssocOperator = true;
            funcDefNode.IsBuiltIn = true;
            funcDefNode.Name = Op.GetOpFunction(op);
            funcDefNode.ReturnType = new Type() { Name = core.TypeSystem.GetType((int)r), UID = (int)r, rank = retRank };
            ArgumentSignatureNode args = new ArgumentSignatureNode();
            args.AddArgument(new VarDeclNode()
            {
                Access = CompilerDefinitions.AccessModifier.kPublic,
                NameNode = AstFactory.BuildIdentifier(DSASM.Constants.kLHS),
                ArgumentType = new Type { Name = core.TypeSystem.GetType((int)op1), UID = (int)op1, rank = op1rank }
            });
            args.AddArgument(new VarDeclNode()
            {
                Access = CompilerDefinitions.AccessModifier.kPublic,
                NameNode = AstFactory.BuildIdentifier(DSASM.Constants.kRHS),
                ArgumentType = new Type { Name = core.TypeSystem.GetType((int)op2), UID = (int)op2, rank = op2rank }
            });
            funcDefNode.Signature = args;

            CodeBlockNode body = new CodeBlockNode();

            var lhs = AstFactory.BuildIdentifier(DSASM.Constants.kLHS);
            var rhs = AstFactory.BuildIdentifier(DSASM.Constants.kRHS);
            var binaryExpr = AstFactory.BuildBinaryExpression(lhs, rhs, op);
            body.Body.Add(AstFactory.BuildReturnStatement(binaryExpr));

            funcDefNode.FunctionBody = body;
            root.Body.Add(funcDefNode);
        }
示例#18
0
    /*
     * sets the projectile's meshfilter, collider, and
     */
    private void assignShape(PrimitiveType shape)
    {
        //PrimitiveType shape = PrimitiveType.Cylinder;
        GameObject obj = GameObject.CreatePrimitive(shape);
        obj.transform.position = new Vector3(0,115,0);

        MeshFilter filter = this.gameObject.AddComponent<MeshFilter>();
        filter.mesh = obj.GetComponent<MeshFilter>().mesh;
        transform.localScale = new Vector3(data.xScale, data.yScale, data.zScale);

        switch (shape) {
        case PrimitiveType.Sphere:
            SphereCollider col1 = this.gameObject.AddComponent<SphereCollider>();
            col1 = obj.GetComponent<SphereCollider>();
            break;
        case PrimitiveType.Capsule:
            CapsuleCollider col2 = this.gameObject.AddComponent<CapsuleCollider>();
            col2 = obj.GetComponent<CapsuleCollider>();
            break;
        default:
            MeshCollider col3 = this.gameObject.AddComponent<MeshCollider>();
            col3.sharedMesh = this.GetComponent<MeshFilter>().mesh;
            col3.convex = true;
            break;
        }

        MeshRenderer renderer = this.gameObject.AddComponent<MeshRenderer>();
        renderer.material = obj.GetComponent<MeshRenderer>().material;

        Destroy(obj);
    }
			/// <summary>
			/// Specify which elements shall be drawn by indexing them, specifying an offset and the number of elements.
			/// </summary>
			/// <param name="vao">
			/// The <see cref="VertexArrayObject"/> to which this element belongs to.
			/// </param>
			/// <param name="mode">
			/// A <see cref="PrimitiveType"/> that indicates how elements are interpreted.
			/// </param>
			protected Element(VertexArrayObject vao, PrimitiveType mode)
			{
				if (vao == null)
					throw new ArgumentNullException("vao");
				_VertexArrayObject = vao;
				ElementsMode = mode;
			}
示例#20
0
 public DrawableShape( bool useDisplayList )
 {
     UseDisplayList = useDisplayList;
     PrimitiveMode = PrimitiveType.Triangles;
     VertexArray = null;
     IndexArray = null;
 }
示例#21
0
 public void DrawVertexBuffer(IVertexBuffer<Vertex> buffer, int start, int length, PrimitiveType type, Sheet sheet)
 {
     shader.SetTexture("DiffuseTexture", sheet.Texture);
     renderer.Device.SetBlendMode(BlendMode.Alpha);
     shader.Render(() => renderer.DrawBatch(buffer, start, length, type));
     renderer.Device.SetBlendMode(BlendMode.None);
 }
        /// <summary>
        /// Read the message header structure and cache the meta data for finding the key fields for decoding messages.
        /// </summary>
        /// <param name="headerStructure"> for the meta data describing the message header. </param>
        public OtfHeaderDecoder(HeaderStructure headerStructure)
        {
            _size = headerStructure.Tokens[0].Size;

            foreach (Token token in headerStructure.Tokens)
            {
                switch (token.Name)
                {
                    case HeaderStructure.BlockLength:
                        _blockLengthOffset = token.Offset;
                        _blockLengthType = token.Encoding.PrimitiveType;
                        _blockLengthByteOrder = token.Encoding.ByteOrder;
                        break;

                    case HeaderStructure.TemplateId:
                        _templateIdOffset = token.Offset;
                        _templateIdType = token.Encoding.PrimitiveType;
                        _templateIdByteOrder = token.Encoding.ByteOrder;
                        break;

                    case HeaderStructure.SchemaId:
                        _schemaIdOffset = token.Offset;
                        _schemaIdType = token.Encoding.PrimitiveType;
                        _schemaIdByteOrder = token.Encoding.ByteOrder;
                        break;

                    case HeaderStructure.SchemaVersion:
                        _schemaVersionOffset = token.Offset;
                        _schemaVersionType = token.Encoding.PrimitiveType;
                        _schemaVersionByteOrder = token.Encoding.ByteOrder;
                        break;
                }
            }
        }
示例#23
0
 public ArmMemoryOperand(PrimitiveType width, RegisterStorage regBase, MachineOperand offset) : base(width)
 {
     if (width == null)
         throw new ArgumentNullException("width");
     Base = regBase;
     Offset = offset;
 }
示例#24
0
 public Primitive(PrimitiveType _type)
 {
     id = Guid.NewGuid().ToString();
     type = _type;
     edges = new List<Edge>();
     nodes = new List<Node>();
 }
示例#25
0
        private void RewriteAcbi(PrimitiveType width)
        {
            var limit = RewriteSrcOp(0, width);
            var add = RewriteSrcOp(1, width);
            var index = RewriteDstOp(2, width, e => emitter.IAdd(e, add));
            NZV(index);
            var cAdd = add as Constant;
            if (cAdd == null)
                throw new AddressCorrelatedException(
                    dasm.Current.Address,
                    "Instruction {0] too complex to rewrite.",
                    dasm.Current);
            if (cAdd.ToInt32() >= 0)
            {
                emitter.Branch(
                          emitter.Le(index, limit),
                          ((AddressOperand)dasm.Current.Operands[3]).Address,
                          RtlClass.ConditionalTransfer);
            }
            else
            {
                emitter.Branch(
                    emitter.Ge(index, limit),
                    ((AddressOperand)dasm.Current.Operands[3]).Address,
                    RtlClass.ConditionalTransfer);
            }
            rtlc.Class = RtlClass.ConditionalTransfer;

        }
		public static void DrawMeshArraysSUN(PrimitiveType mode, Int32 first, Int32 count, Int32 width)
		{
			Debug.Assert(Delegates.pglDrawMeshArraysSUN != null, "pglDrawMeshArraysSUN not implemented");
			Delegates.pglDrawMeshArraysSUN((Int32)mode, first, count, width);
			LogFunction("glDrawMeshArraysSUN({0}, {1}, {2}, {3})", mode, first, count, width);
			DebugCheckErrors(null);
		}
示例#27
0
 public void Draw(PrimitiveType mode, IElementArray elements)
 {
     using (elements.Bind())
     {
         _gl.DrawElements(mode, (int)elements.Elements, (uint)elements.Type, IntPtr.Zero);
     }
 }
示例#28
0
 public OperandRewriter(M68kArchitecture arch, RtlEmitter emitter, Frame frame, PrimitiveType dataWidth)
 {
     this.arch = arch;
     this.m = emitter;
     this.frame = frame;
     this.DataWidth = dataWidth;
 }
示例#29
0
 public Primitive()
 {
     id = Guid.NewGuid().ToString();
     type = PrimitiveType.None;
     edges = new List<Edge>();
     nodes = new List<Node>();
 }
示例#30
0
 private void RewriteFpu3(PrimitiveType width, Func<Expression, Expression, Expression> fn, Action<Expression> genFlags)
 {
     var op1 = RewriteSrcOp(0, width);
     var op2 = RewriteSrcOp(1, width);
     var dst = RewriteDstOp(2, width, e => fn(op2, op1));
     genFlags(dst);
 }
示例#31
0
        public bool VisitBinaryExpression(BinaryExpression binExp, TypeVariable tv)
        {
            var eLeft  = binExp.Left;
            var eRight = binExp.Right;

            if (binExp.Operator == Operator.IAdd)
            {
                var dt = PushAddendDataType(binExp.TypeVariable.DataType, eRight.TypeVariable.DataType);
                if (dt != null)
                {
                    MeetDataType(eLeft, dt);
                }
                dt = PushAddendDataType(binExp.TypeVariable.DataType, eLeft.TypeVariable.DataType);
                if (dt != null)
                {
                    MeetDataType(eRight, dt);
                }
            }
            else if (binExp.Operator == Operator.ISub)
            {
                var dt = PushMinuendDataType(binExp.TypeVariable.DataType, eRight.TypeVariable.DataType);
                MeetDataType(eLeft, dt);
                dt = PushSubtrahendDataType(binExp.TypeVariable.DataType, eLeft.TypeVariable.DataType);
                MeetDataType(eRight, dt);
            }
            else if (binExp.Operator == Operator.And || binExp.Operator == Operator.Or)
            {
                //$REVIEW: need a push-logical-Data type to push [[a & 3]] = char into its left and right halves.
                var dt = PrimitiveType.CreateWord(tv.DataType.BitSize).MaskDomain(Domain.Boolean | Domain.Integer | Domain.Character);
                MeetDataType(eLeft, dt);
                MeetDataType(eRight, dt);
            }
            else if (
                binExp.Operator == Operator.IMul ||
                binExp.Operator == Operator.IMod)
            {
                var dt = PrimitiveType.CreateWord(DataTypeOf(eLeft).BitSize).MaskDomain(Domain.Boolean | Domain.Integer);
                MeetDataType(eLeft, dt);
                dt = PrimitiveType.CreateWord(DataTypeOf(eRight).BitSize).MaskDomain(Domain.Boolean | Domain.Integer);
                MeetDataType(eRight, dt);
            }
            else if (
                binExp.Operator == Operator.SMul ||
                binExp.Operator == Operator.SDiv)
            {
                var dt = PrimitiveType.CreateWord(DataTypeOf(eLeft).BitSize).MaskDomain(Domain.Boolean | Domain.SignedInt);
                MeetDataType(eLeft, dt);
                dt = PrimitiveType.CreateWord(DataTypeOf(eRight).BitSize).MaskDomain(Domain.Boolean | Domain.SignedInt);
                MeetDataType(eRight, dt);
            }
            else if (
                binExp.Operator == Operator.UMul ||
                binExp.Operator == Operator.UDiv)
            {
                var dt = PrimitiveType.CreateWord(DataTypeOf(eLeft).BitSize).MaskDomain(Domain.Boolean | Domain.UnsignedInt);
                MeetDataType(eLeft, dt);
                dt = PrimitiveType.CreateWord(DataTypeOf(eRight).BitSize).MaskDomain(Domain.Boolean | Domain.UnsignedInt);
                MeetDataType(eRight, dt);
            }
            else if (binExp.Operator == Operator.FAdd ||
                     binExp.Operator == Operator.FSub ||
                     binExp.Operator == Operator.FMul ||
                     binExp.Operator == Operator.FDiv)
            {
                var dt = PrimitiveType.Create(Domain.Real, eLeft.DataType.BitSize);
                MeetDataType(eLeft, dt);
                dt = PrimitiveType.Create(Domain.Real, eRight.DataType.BitSize);
                MeetDataType(eRight, dt);
            }
            else if (binExp.Operator is SignedIntOperator)
            {
                var dt = PrimitiveType.CreateWord(eRight.TypeVariable.DataType.BitSize).MaskDomain(Domain.SignedInt | Domain.Character);
                MeetDataType(eLeft, dt);
                dt = PrimitiveType.CreateWord(eRight.TypeVariable.DataType.BitSize).MaskDomain(Domain.SignedInt | Domain.Character);
                MeetDataType(eRight, dt);
            }
            else if (binExp.Operator is UnsignedIntOperator)
            {
                var dt = PrimitiveType.CreateWord(eRight.TypeVariable.DataType.BitSize).MaskDomain(Domain.Pointer | Domain.UnsignedInt | Domain.Character);
                MeetDataType(eLeft, dt);
                dt = PrimitiveType.CreateWord(eRight.TypeVariable.DataType.BitSize).MaskDomain(Domain.Pointer | Domain.UnsignedInt | Domain.Character);
                MeetDataType(eRight, dt);
            }
            else if (binExp.Operator == Operator.Eq || binExp.Operator == Operator.Ne ||
                     binExp.Operator == Operator.Xor || binExp.Operator == Operator.Cand ||
                     binExp.Operator == Operator.Cor)
            {
                // Not much can be deduced here, except that the operands should have the same size. Earlier passes
                // already did that work, so just continue with the operands.
            }
            else if (binExp.Operator is RealConditionalOperator)
            {
                // We know leaves must be floats
                var dt = PrimitiveType.Create(Domain.Real, eLeft.DataType.BitSize);
                MeetDataType(eLeft, dt);
                dt = PrimitiveType.Create(Domain.Real, eLeft.DataType.BitSize);
                MeetDataType(eRight, dt);
            }
            else if (binExp.Operator == Operator.Shl)
            {
                var dt = PrimitiveType.CreateWord(tv.DataType.BitSize).MaskDomain(Domain.Boolean | Domain.Integer | Domain.Character);
                MeetDataType(eLeft, dt);
                dt = PrimitiveType.Create(Domain.Integer, DataTypeOf(eRight).BitSize);
            }
            else if (binExp.Operator == Operator.Shr)
            {
                var dt = PrimitiveType.CreateWord(tv.DataType.BitSize).MaskDomain(Domain.Boolean | Domain.UnsignedInt | Domain.Character);
                MeetDataType(eLeft, dt);
                dt = PrimitiveType.Create(Domain.Integer, DataTypeOf(eRight).BitSize);
            }
            else if (binExp.Operator == Operator.Sar)
            {
                var dt = PrimitiveType.CreateWord(tv.DataType.BitSize).MaskDomain(Domain.Boolean | Domain.SignedInt | Domain.Character);
                MeetDataType(eLeft, dt);
                dt = PrimitiveType.Create(Domain.Integer, DataTypeOf(eRight).BitSize);
            }
            else
            {
                throw new NotImplementedException(string.Format("Unhandled binary operator {0} in expression {1}.", binExp.Operator, binExp));
            }
            eLeft.Accept(this, eLeft.TypeVariable);
            eRight.Accept(this, eRight.TypeVariable);
            return(false);
        }
示例#32
0
 public OperandRewriter(M68kArchitecture arch, RtlEmitter emitter, IStorageBinder frame, PrimitiveType dataWidth)
 {
     this.arch      = arch;
     this.m         = emitter;
     this.binder    = frame;
     this.DataWidth = dataWidth;
 }
示例#33
0
 public virtual bool VisitPrimitiveType(PrimitiveType type, TypeQualifiers quals)
 {
     return(true);
 }
示例#34
0
 public virtual bool VisitPrimitiveType(PrimitiveType type, TypeQualifiers quals)
 {
     throw new NotImplementedException();
 }
示例#35
0
 public partial void DrawArraysInstanced([Flow(FlowDirection.In)] PrimitiveType mode, [Flow(FlowDirection.In)] int start, [Flow(FlowDirection.In)] uint count, [Flow(FlowDirection.In)] uint primcount);
示例#36
0
 /// <summary>
 /// Initializes a new instance of the ColumnModel class.
 ///
 /// Entity Framework Migrations APIs are not designed to accept input provided by untrusted sources
 /// (such as the end user of an application). If input is accepted from such sources it should be validated
 /// before being passed to these APIs to protect against SQL injection attacks etc.
 /// </summary>
 /// <param name="type"> The data type for this column. </param>
 /// <param name="typeUsage"> Additional details about the data type. This includes details such as maximum length, nullability etc. </param>
 public ColumnModel(PrimitiveTypeKind type, TypeUsage typeUsage)
     : base(type, typeUsage)
 {
     _clrType         = PrimitiveType.GetEdmPrimitiveType(type).ClrEquivalentType;
     _clrDefaultValue = CreateDefaultValue();
 }
    // Use this for initialization
    void Start()
    {
        objectCount = 10;         // should read from configuration file later on

        Regex reg = new Regex(@"^[0-9]+\.json$");

        string[] files = Directory.GetFiles(Application.streamingAssetsPath.ToString(), "*");

        for (int i = 0; i < files.Length; i++)
        {
            files[i] = Path.GetFileName(files[i]);
        }

        files = files.Where(path => reg.IsMatch(path)).ToArray();

        frameCount = files.Length;         // same for this one

        currentFrameNum = 0;
        gameDatas       = new GameData[frameCount];
        gameObjects     = new GameObject[objectCount];

        for (int i = 0; i < frameCount; i++)
        {
            string filePath   = Path.Combine(Application.streamingAssetsPath, files[i]);
            string dataAsJson = File.ReadAllText(filePath);
            gameDatas [i] = JsonUtility.FromJson <GameData> (dataAsJson);
        }

        foreach (BasicObject obj in gameDatas[currentFrameNum].objects)
        {
            PrimitiveType type = PrimitiveType.Cube;
            switch (obj.type)
            {
            case 0:
                type = PrimitiveType.Cube;
                break;

            case 1:
                type = PrimitiveType.Sphere;
                break;

            case 2:
                type = PrimitiveType.Cylinder;
                break;
            }
            gameObjects[obj.id] = GameObject.CreatePrimitive(type);
            gameObjects[obj.id].transform.position    = obj.position;
            gameObjects[obj.id].transform.eulerAngles = obj.orientation;
        }


        isPlaying         = false;
        Progress.maxValue = frameCount - 1;


//			objs = loadedData.objects;
//			for (int i = 0; i < objs.Length; i++) {
//				Debug.Log ("object N.O.: " + i);
//				Debug.Log ("id: " + objs [i].id);
//				Debug.Log ("type: " + objs [i].type);
//				Debug.Log ("position: " + objs [i].position);
//				Debug.Log ("orientation: " + objs [i].orientation);
//				Debug.Log ("linear_velocity: " + objs [i].linear_velocity);
//				Debug.Log ("angular_velocity: " + objs [i].angular_velocity);
//				Debug.Log ("linear_acceleration: " + objs [i].linear_acceleration);
//				Debug.Log ("angular_acceleration: " + objs [i].angular_acceleration);
//
//				PrimitiveType type = PrimitiveType.Cube;
//				switch (objs [i].type) {
//				case 0:
//					type = PrimitiveType.Cube;
//					break;
//				case 1:
//					type = PrimitiveType.Sphere;
//					break;
//				}
//
//				GameObject instance = GameObject.CreatePrimitive (type);
//				instance.transform.position = objs [i].position;
//				instance.transform.eulerAngles = objs [i].orientation;
//
//			}
    }
示例#38
0
 public bool TryRead(PrimitiveType dataType, out Constant value) => TryReadBe(dataType, out value);
示例#39
0
 public IndexedMemoryOperand(RegisterStorage r1, RegisterStorage r2, PrimitiveType width) : base(width)
 {
     this.Base  = r1;
     this.Index = r2;
 }
示例#40
0
 public MemoryOperand(RegisterStorage b, Constant offset, PrimitiveType width) : base(width)
 {
     this.Base   = b;
     this.Offset = offset;
 }
示例#41
0
 private void RewriteOne(PrimitiveType dt)
 {
     m.Assign(RewriteSrc(instr.Operands[0]), Constant.Create(dt, 1));
 }
示例#42
0
        private static Mutator <V850Disassembler> Mep(int bitpos, int length, int mask, int shift, PrimitiveType dt)
        {
            var ep    = Registers.ElementPtr;
            var field = new Bitfield(bitpos, length);

            return((u, d) =>
            {
                var offset = (mask & (int)field.Read(u)) << shift;
                var mem = new MemoryOperand(dt, ep, offset);
                d.ops.Add(mem);
                return true;
            });
        }
示例#43
0
 private void RewriteClr(PrimitiveType dt)
 {
     m.Assign(RewriteSrc(instr.Operands[0]), Constant.Zero(dt));
 }
        /// <summary>
        /// Stores the value on the top of the stack in the reference.
        /// </summary>
        /// <param name="generator"> The generator to output the CIL to. </param>
        /// <param name="optimizationInfo"> Information about any optimizations that should be performed. </param>
        /// <param name="valueType"> The primitive type of the value that is on the top of the stack. </param>
        /// <param name="throwIfUnresolvable"> <c>true</c> to throw a ReferenceError exception if
        /// the name is unresolvable; <c>false</c> to create a new property instead. </param>
        public void GenerateSet(ILGenerator generator, OptimizationInfo optimizationInfo, PrimitiveType valueType, bool throwIfUnresolvable)
        {
            string propertyName = null;
            bool   isArrayIndex = false;

            //optimizationInfo = optimizationInfo.RemoveFlags(OptimizationFlags.SuppressReturnValue);

            // Right-hand-side can be a property name (a.b)
            if (this.OperatorType == OperatorType.MemberAccess)
            {
                var rhs = this.GetOperand(1) as NameExpression;
                if (rhs == null)
                {
                    throw new JavaScriptException(optimizationInfo.Engine, ErrorType.SyntaxError, "Invalid member access", optimizationInfo.SourceSpan.StartLine, optimizationInfo.Source.Path, optimizationInfo.FunctionName);
                }
                propertyName = rhs.Name;
            }

            // Or a constant indexer (a['b'])
            if (this.OperatorType == OperatorType.Index)
            {
                var rhs = this.GetOperand(1) as LiteralExpression;
                if (rhs != null)
                {
                    propertyName = TypeConverter.ToString(rhs.Value);

                    // Or a array index (a[0])
                    if (rhs.ResultType == PrimitiveType.Int32 || (propertyName != null && Library.ArrayInstance.ParseArrayIndex(propertyName) != uint.MaxValue))
                    {
                        isArrayIndex = true;
                    }
                }
            }

            // Convert the value to an object and store it in a temporary variable.
            var value = generator.CreateTemporaryVariable(typeof(object));

            EmitConversion.ToAny(generator, valueType);
            generator.StoreVariable(value);

            if (isArrayIndex == true)
            {
                // Array indexer
                // -------------
                // xxx = object[index]

                // Load the left-hand side and convert to an object instance.
                var lhs = this.GetOperand(0);
                lhs.GenerateCode(generator, optimizationInfo);
                EmitConversion.ToObject(generator, lhs.ResultType, optimizationInfo);

                // Load the right-hand side and convert to a uint32.
                var rhs = this.GetOperand(1);
                rhs.GenerateCode(generator, optimizationInfo);
                EmitConversion.ToUInt32(generator, rhs.ResultType);

                // Call the indexer.
                generator.LoadVariable(value);
                generator.LoadBoolean(optimizationInfo.StrictMode);
                generator.Call(ReflectionHelpers.ObjectInstance_SetPropertyValue_Int);
            }
            else if (propertyName != null)
            {
                //// Load the left-hand side and convert to an object instance.
                //var lhs = this.GetOperand(0);
                //lhs.GenerateCode(generator, optimizationInfo);
                //EmitConversion.ToObject(generator, lhs.ResultType);

                //// Call the indexer.
                //generator.LoadString(propertyName);
                //generator.LoadVariable(value);
                //generator.LoadBoolean(optimizationInfo.StrictMode);
                //generator.Call(ReflectionHelpers.ObjectInstance_SetPropertyValue_String);



                // Named property modification (e.g. x.property = y)
                // -------------------------------------------------
                // __object_cacheKey = null;
                // __object_property_cachedIndex = 0;
                // ...
                // if (__object_cacheKey != object.InlineCacheKey)
                //     object.InlineSetPropertyValue("property", value, strictMode, out __object_property_cachedIndex, out __object_cacheKey)
                // else
                //     object.InlinePropertyValues[__object_property_cachedIndex] = value;

                // Load the left-hand side and convert to an object instance.
                var lhs = this.GetOperand(0);
                lhs.GenerateCode(generator, optimizationInfo);
                EmitConversion.ToObject(generator, lhs.ResultType, optimizationInfo);

                // TODO: share these variables somehow.
                var cacheKey    = generator.DeclareVariable(typeof(object));
                var cachedIndex = generator.DeclareVariable(typeof(int));

                // Store the object into a temp variable.
                var objectInstance = generator.DeclareVariable(PrimitiveType.Object);
                generator.StoreVariable(objectInstance);

                // if (__object_cacheKey != object.InlineCacheKey)
                generator.LoadVariable(cacheKey);
                generator.LoadVariable(objectInstance);
                generator.Call(ReflectionHelpers.ObjectInstance_InlineCacheKey);
                var elseClause = generator.CreateLabel();
                generator.BranchIfEqual(elseClause);

                // xxx = object.InlineSetPropertyValue("property", value, strictMode, out __object_property_cachedIndex, out __object_cacheKey)
                generator.LoadVariable(objectInstance);
                generator.LoadString(propertyName);
                generator.LoadVariable(value);
                generator.LoadBoolean(optimizationInfo.StrictMode);
                generator.LoadAddressOfVariable(cachedIndex);
                generator.LoadAddressOfVariable(cacheKey);
                generator.Call(ReflectionHelpers.ObjectInstance_InlineSetPropertyValue);

                var endOfIf = generator.CreateLabel();
                generator.Branch(endOfIf);

                // else
                generator.DefineLabelPosition(elseClause);

                // object.InlinePropertyValues[__object_property_cachedIndex] = value;
                generator.LoadVariable(objectInstance);
                generator.Call(ReflectionHelpers.ObjectInstance_InlinePropertyValues);
                generator.LoadVariable(cachedIndex);
                generator.LoadVariable(value);
                generator.StoreArrayElement(typeof(object));

                // End of the if statement
                generator.DefineLabelPosition(endOfIf);
            }
            else
            {
                // Dynamic property access
                // -----------------------
                // xxx = object.Get(x)

                // Load the left-hand side and convert to an object instance.
                var lhs = this.GetOperand(0);
                lhs.GenerateCode(generator, optimizationInfo);
                EmitConversion.ToObject(generator, lhs.ResultType, optimizationInfo);

                // Load the value and convert it to a property key.
                var rhs = this.GetOperand(1);
                rhs.GenerateCode(generator, optimizationInfo);
                EmitConversion.ToPropertyKey(generator, rhs.ResultType);

                // Call the indexer.
                generator.LoadVariable(value);
                generator.LoadBoolean(optimizationInfo.StrictMode);
                generator.Call(ReflectionHelpers.ObjectInstance_SetPropertyValue_Object);
            }

            // The temporary variable is no longer needed.
            generator.ReleaseTemporaryVariable(value);
        }
示例#45
0
        //private static

        public static void DrawSphereLegacy(Vector3 center, float radius, float precision, bool useWireframe = false)
        {
            GL.PushAttrib(AttribMask.AllAttribBits);
            GL.UseProgram(0);

            PrimitiveType primitiveType = PrimitiveType.TriangleStrip;

            if (useWireframe)
            {
                primitiveType = PrimitiveType.LineStrip;
            }

            if (radius < 0.0f)
            {
                radius = -radius;
            }

            if (radius == 0.0f)
            {
                return;
            }

            if (precision == 0)
            {
                return;
            }

            float halfPI = (float)(Math.PI * 0.5);
            float oneThroughPrecision   = 1.0f / precision;
            float twoPIThroughPrecision = (float)(Math.PI * 2.0 * oneThroughPrecision);

            float   theta1, theta2, theta3;
            Vector3 norm = new Vector3(), pos = new Vector3();

            for (uint j = 0; j < precision / 2; j++)
            {
                theta1 = (j * twoPIThroughPrecision) - halfPI;
                theta2 = ((j + 1) * twoPIThroughPrecision) - halfPI;

                GL.Begin(primitiveType);
                for (uint i = 0; i <= precision; i++)
                {
                    theta3 = i * twoPIThroughPrecision;

                    norm.X = (float)(Math.Cos(theta2) * Math.Cos(theta3));
                    norm.Y = (float)Math.Sin(theta2);
                    norm.Z = (float)(Math.Cos(theta2) * Math.Sin(theta3));
                    pos.X  = center.X + radius * norm.X;
                    pos.Y  = center.Y + radius * norm.Y;
                    pos.Z  = center.Z + radius * norm.Z;

                    GL.Normal3(norm.X, norm.Y, norm.Z);
                    GL.TexCoord2(i * oneThroughPrecision, 2.0f * (j + 1) * oneThroughPrecision);
                    GL.Vertex3(new Vector3(pos.X, pos.Y, pos.Z));// Vector3.TransformPosition(new Vector3(pos.X, pos.Y, pos.Z), transform));

                    norm.X = (float)(Math.Cos(theta1) * Math.Cos(theta3));
                    norm.Y = (float)Math.Sin(theta1);
                    norm.Z = (float)(Math.Cos(theta1) * Math.Sin(theta3));
                    pos.X  = center.X + radius * norm.X;
                    pos.Y  = center.Y + radius * norm.Y;
                    pos.Z  = center.Z + radius * norm.Z;

                    GL.Normal3(norm.X, norm.Y, norm.Z);
                    GL.TexCoord2(i * oneThroughPrecision, 2.0f * j * oneThroughPrecision);
                    GL.Vertex3(new Vector3(pos.X, pos.Y, pos.Z));
                }
                GL.End();
            }

            GL.PopAttrib();
        }
示例#46
0
        public override TypeUsage GetEdmType(TypeUsage storeType)
        {
            if (storeType == null)
            {
                throw new ArgumentNullException("storeType");
            }

            string        storeTypeName = storeType.EdmType.Name;
            PrimitiveType primitiveType = StoreTypeNameToEdmPrimitiveType[storeTypeName];
            // TODO: come up with way to determin if unicode is used
            bool  isUnicode = true;
            Facet facet;

            switch (storeTypeName)
            {
            case "bool":
            case "int2":
            case "int4":
            case "int8":
            case "float4":
            case "float8":
            case "uuid":
                return(TypeUsage.CreateDefaultTypeUsage(primitiveType));

            case "numeric":
            {
                byte scale;
                byte precision;
                if (storeType.Facets.TryGetValue(ScaleFacet, false, out facet) &&
                    !facet.IsUnbounded && facet.Value != null)
                {
                    scale = (byte)facet.Value;
                    if (storeType.Facets.TryGetValue(PrecisionFacet, false, out facet) &&
                        !facet.IsUnbounded && facet.Value != null)
                    {
                        precision = (byte)facet.Value;
                        return(TypeUsage.CreateDecimalTypeUsage(primitiveType, precision, scale));
                    }
                }
                return(TypeUsage.CreateDecimalTypeUsage(primitiveType));
            }

            case "bpchar":
                if (storeType.Facets.TryGetValue(MaxLengthFacet, false, out facet) &&
                    !facet.IsUnbounded && facet.Value != null)
                {
                    return(TypeUsage.CreateStringTypeUsage(primitiveType, isUnicode, true, (int)facet.Value));
                }
                else
                {
                    return(TypeUsage.CreateStringTypeUsage(primitiveType, isUnicode, true));
                }

            case "varchar":
                if (storeType.Facets.TryGetValue(MaxLengthFacet, false, out facet) &&
                    !facet.IsUnbounded && facet.Value != null)
                {
                    return(TypeUsage.CreateStringTypeUsage(primitiveType, isUnicode, false, (int)facet.Value));
                }
                else
                {
                    return(TypeUsage.CreateStringTypeUsage(primitiveType, isUnicode, false));
                }

            case "text":
            case "xml":
                return(TypeUsage.CreateStringTypeUsage(primitiveType, isUnicode, false));

            case "timestamp":
                // TODO: make sure the arguments are correct here
                if (storeType.Facets.TryGetValue(PrecisionFacet, false, out facet) &&
                    !facet.IsUnbounded && facet.Value != null)
                {
                    return(TypeUsage.CreateDateTimeTypeUsage(primitiveType, (byte)facet.Value));
                }
                else
                {
                    return(TypeUsage.CreateDateTimeTypeUsage(primitiveType, null));
                }

            case "date":
                return(TypeUsage.CreateDateTimeTypeUsage(primitiveType, 0));

            case "timestamptz":
                if (storeType.Facets.TryGetValue(PrecisionFacet, false, out facet) &&
                    !facet.IsUnbounded && facet.Value != null)
                {
                    return(TypeUsage.CreateDateTimeOffsetTypeUsage(primitiveType, (byte)facet.Value));
                }
                else
                {
                    return(TypeUsage.CreateDateTimeOffsetTypeUsage(primitiveType, null));
                }

            case "time":
            case "interval":
                if (storeType.Facets.TryGetValue(PrecisionFacet, false, out facet) &&
                    !facet.IsUnbounded && facet.Value != null)
                {
                    return(TypeUsage.CreateTimeTypeUsage(primitiveType, (byte)facet.Value));
                }
                else
                {
                    return(TypeUsage.CreateTimeTypeUsage(primitiveType, null));
                }

            case "bytea":
            {
                if (storeType.Facets.TryGetValue(MaxLengthFacet, false, out facet) &&
                    !facet.IsUnbounded && facet.Value != null)
                {
                    return(TypeUsage.CreateBinaryTypeUsage(primitiveType, false, (int)facet.Value));
                }
                return(TypeUsage.CreateBinaryTypeUsage(primitiveType, false));
            }

            case "rowversion":
            {
                return(TypeUsage.CreateBinaryTypeUsage(primitiveType, true, 8));
            }
                //TypeUsage.CreateBinaryTypeUsage
                //TypeUsage.CreateDateTimeTypeUsage
                //TypeUsage.CreateDecimalTypeUsage
                //TypeUsage.CreateStringTypeUsage
            }
            throw new NotSupportedException("Not supported store type: " + storeTypeName);
        }
示例#47
0
        public override TypeUsage GetStoreType(TypeUsage edmType)
        {
            if (edmType == null)
            {
                throw new ArgumentNullException("edmType");
            }

            PrimitiveType primitiveType = edmType.EdmType as PrimitiveType;

            if (primitiveType == null)
            {
                throw new ArgumentException("Store does not support specified edm type");
            }

            // TODO: come up with way to determin if unicode is used
            bool  isUnicode = true;
            Facet facet;

            switch (primitiveType.PrimitiveTypeKind)
            {
            case PrimitiveTypeKind.Boolean:
                return(TypeUsage.CreateDefaultTypeUsage(StoreTypeNameToStorePrimitiveType["bool"]));

            case PrimitiveTypeKind.Int16:
                return(TypeUsage.CreateDefaultTypeUsage(StoreTypeNameToStorePrimitiveType["int2"]));

            case PrimitiveTypeKind.Int32:
                return(TypeUsage.CreateDefaultTypeUsage(StoreTypeNameToStorePrimitiveType["int4"]));

            case PrimitiveTypeKind.Int64:
                return(TypeUsage.CreateDefaultTypeUsage(StoreTypeNameToStorePrimitiveType["int8"]));

            case PrimitiveTypeKind.Single:
                return(TypeUsage.CreateDefaultTypeUsage(StoreTypeNameToStorePrimitiveType["float4"]));

            case PrimitiveTypeKind.Double:
                return(TypeUsage.CreateDefaultTypeUsage(StoreTypeNameToStorePrimitiveType["float8"]));

            case PrimitiveTypeKind.Decimal:
            {
                byte scale;
                byte precision;
                if (edmType.Facets.TryGetValue(ScaleFacet, false, out facet) &&
                    !facet.IsUnbounded && facet.Value != null)
                {
                    scale = (byte)facet.Value;
                    if (edmType.Facets.TryGetValue(PrecisionFacet, false, out facet) &&
                        !facet.IsUnbounded && facet.Value != null)
                    {
                        precision = (byte)facet.Value;
                        return(TypeUsage.CreateDecimalTypeUsage(StoreTypeNameToStorePrimitiveType["numeric"], precision, scale));
                    }
                }
                return(TypeUsage.CreateDecimalTypeUsage(StoreTypeNameToStorePrimitiveType["numeric"]));
            }

            case PrimitiveTypeKind.String:
            {
                // TODO: could get character, character varying, text
                if (edmType.Facets.TryGetValue(FixedLengthFacet, false, out facet) &&
                    !facet.IsUnbounded && facet.Value != null && (bool)facet.Value)
                {
                    PrimitiveType characterPrimitive = StoreTypeNameToStorePrimitiveType["bpchar"];
                    if (edmType.Facets.TryGetValue(MaxLengthFacet, false, out facet) &&
                        !facet.IsUnbounded && facet.Value != null)
                    {
                        return(TypeUsage.CreateStringTypeUsage(characterPrimitive, isUnicode, true, (int)facet.Value));
                    }
                    // this may not work well
                    return(TypeUsage.CreateStringTypeUsage(characterPrimitive, isUnicode, true));
                }
                if (edmType.Facets.TryGetValue(MaxLengthFacet, false, out facet) &&
                    !facet.IsUnbounded && facet.Value != null)
                {
                    return(TypeUsage.CreateStringTypeUsage(StoreTypeNameToStorePrimitiveType["varchar"], isUnicode, false, (int)facet.Value));
                }
                // assume text since it is not fixed length and has no max length
                return(TypeUsage.CreateStringTypeUsage(StoreTypeNameToStorePrimitiveType["text"], isUnicode, false));
            }

            case PrimitiveTypeKind.DateTime:
                if (edmType.Facets.TryGetValue(PrecisionFacet, false, out facet) &&
                    !facet.IsUnbounded && facet.Value != null)
                {
                    return(TypeUsage.CreateDateTimeTypeUsage(StoreTypeNameToStorePrimitiveType["timestamp"], (byte)facet.Value));
                }
                else
                {
                    return(TypeUsage.CreateDateTimeTypeUsage(StoreTypeNameToStorePrimitiveType["timestamp"], null));
                }

            case PrimitiveTypeKind.DateTimeOffset:
                if (edmType.Facets.TryGetValue(PrecisionFacet, false, out facet) &&
                    !facet.IsUnbounded && facet.Value != null)
                {
                    return(TypeUsage.CreateDateTimeOffsetTypeUsage(StoreTypeNameToStorePrimitiveType["timestamptz"], (byte)facet.Value));
                }
                else
                {
                    return(TypeUsage.CreateDateTimeOffsetTypeUsage(StoreTypeNameToStorePrimitiveType["timestamptz"], null));
                }

            case PrimitiveTypeKind.Time:
                if (edmType.Facets.TryGetValue(PrecisionFacet, false, out facet) &&
                    !facet.IsUnbounded && facet.Value != null)
                {
                    return(TypeUsage.CreateTimeTypeUsage(StoreTypeNameToStorePrimitiveType["interval"], (byte)facet.Value));
                }
                else
                {
                    return(TypeUsage.CreateTimeTypeUsage(StoreTypeNameToStorePrimitiveType["interval"], null));
                }

            case PrimitiveTypeKind.Binary:
            {
                if (edmType.Facets.TryGetValue(MaxLengthFacet, false, out facet) &&
                    !facet.IsUnbounded && facet.Value != null)
                {
                    return(TypeUsage.CreateBinaryTypeUsage(StoreTypeNameToStorePrimitiveType["bytea"], false, (int)facet.Value));
                }
                return(TypeUsage.CreateBinaryTypeUsage(StoreTypeNameToStorePrimitiveType["bytea"], false));
            }

            case PrimitiveTypeKind.Guid:
                return(TypeUsage.CreateDefaultTypeUsage(StoreTypeNameToStorePrimitiveType["uuid"]));

            case PrimitiveTypeKind.Byte:
            case PrimitiveTypeKind.SByte:
                return(TypeUsage.CreateDefaultTypeUsage(StoreTypeNameToStorePrimitiveType["int2"]));
            }

            throw new NotSupportedException("Not supported edm type: " + edmType);
        }
示例#48
0
 public void DrawPrimitives(PrimitiveType pt, int firstVertex, int numVertices)
 {
     VerifyThreadAffinity();
     OpenGL.glDrawArrays(ModeFromPrimitiveType(pt), firstVertex, numVertices);
     OpenGL.CheckGLError();
 }
示例#49
0
 public MemoryOperand(PrimitiveType dataWidth) : base(dataWidth)
 {
 }
示例#50
0
        private bool TryDecodeOperand(PrimitiveType width, int maxReg, out MachineOperand op)
        {
            op = null !;
            if (!rdr.TryReadByte(out byte bSpecifier))
            {
                return(false);
            }
            var reg = arch.GetRegister(bSpecifier & 0xF) !;

            switch (bSpecifier >> 4)
            {
            case 0: // Literal mode
            case 1:
            case 2:
            case 3:
                op = LiteralOperand(width, bSpecifier);
                break;

            case 4: // Index mode
                op = IndexOperand(width, reg) !;
                if (op == null)
                {
                    return(false);
                }
                break;

            case 5: // Register mode
                if (reg.Number > maxReg)
                {
                    return(false);
                }
                op = new RegisterOperand(reg);
                break;

            case 6: // Register deferred
                op = new MemoryOperand(width)
                {
                    Base = new RegisterOperand(reg)
                };
                break;

            case 7: // Autodecrement mode
                op = new MemoryOperand(width)
                {
                    Base          = new RegisterOperand(reg),
                    AutoDecrement = true,
                };
                break;

            case 8: // Autoincrement mode
                if (reg.Number == 0x0F)
                {
                    op = ImmediateOperand(width) !;
                    return(op != null);
                }
                else
                {
                    op = new MemoryOperand(width)
                    {
                        Base          = new RegisterOperand(reg),
                        AutoIncrement = true,
                    };
                }
                break;

            case 9: // Deferred Autoincrement mode
                op = new MemoryOperand(width)
                {
                    Base          = new RegisterOperand(reg),
                    AutoIncrement = true,
                    Deferred      = true,
                };
                break;

            case 0xA: // Displacement mode
            case 0xB:
                if (!rdr.TryReadByte(out byte b))
                {
                    return(false);
                }
                op = DisplacementOperand(width, reg, Constant.SByte((sbyte)b), bSpecifier);
                break;

            case 0xC:
            case 0xD:
                if (!rdr.TryReadUInt16(out ushort w))
                {
                    return(false);
                }
                op = DisplacementOperand(width, reg, Constant.Int16((short)w), bSpecifier);
                break;

            case 0xE:
            case 0xF:
                if (!rdr.TryReadUInt32(out uint dw))
                {
                    return(false);
                }
                op = DisplacementOperand(width, reg, Constant.Word32(dw), bSpecifier);
                break;

            default:
                throw new InvalidCastException("Impossiburu!");
            }
            return(true);
        }
示例#51
0
 public abstract bool TryRead(MemoryArea mem, Address addr, PrimitiveType dt, out Constant value);
示例#52
0
        public void Crate_creates_store_function_for_enum_type_function_import()
        {
            var model = new DbModelBuilder()
                        .Build(new DbProviderInfo("System.Data.SqlClient", "2012"));

            var enumTypeCtor = typeof(EnumType).GetConstructors(BindingFlags.NonPublic | BindingFlags.Instance).Single(c => c.GetParameters().Count() == 5);
            var enumType     = (EnumType)enumTypeCtor.Invoke(BindingFlags.NonPublic | BindingFlags.Instance, null,
                                                             new object[] { "TestEnumType", "Model", PrimitiveType.GetEdmPrimitiveType(PrimitiveTypeKind.Int32), false, DataSpace.CSpace },
                                                             CultureInfo.InvariantCulture);

            var functionDescriptor =
                new FunctionDescriptor(
                    "f",
                    new[] { new ParameterDescriptor("p1", enumType, null, false) },
                    new EdmType[] { enumType },
                    "ResultCol",
                    "dbo",
                    StoreFunctionKind.TableValuedFunction,
                    isBuiltIn: null,
                    isNiladic: null);

            var storeFunction = new StoreFunctionBuilder(model, "docs", "ns").Create(functionDescriptor);

            Assert.Equal(
                BuiltInTypeKind.CollectionType,
                storeFunction.ReturnParameter.TypeUsage.EdmType.BuiltInTypeKind);

            var collectionItemType =
                (RowType)((CollectionType)storeFunction.ReturnParameter.TypeUsage.EdmType).TypeUsage.EdmType;

            Assert.Single(collectionItemType.Properties);
            Assert.Equal("ResultCol", collectionItemType.Properties[0].Name);
            Assert.Equal("int", collectionItemType.Properties[0].TypeUsage.EdmType.Name);

            Assert.Single(storeFunction.Parameters);
            Assert.Equal("p1", storeFunction.Parameters[0].Name);
            Assert.Equal("int", storeFunction.Parameters[0].TypeName);
            Assert.Equal(ParameterMode.In, storeFunction.Parameters[0].Mode);
            Assert.True(storeFunction.IsComposableAttribute);
        }
示例#53
0
        /// <summary>
        /// Returns the list of key properties defined on <paramref name="type"/>; null if <paramref name="type"/> is complex.
        /// </summary>
        /// <param name="type">Type in question.</param>
        /// <param name="hasProperties">true if <paramref name="type"/> has any (declared or inherited) properties; otherwise false.</param>
        /// <returns>Returns the list of key properties defined on <paramref name="type"/>; null if <paramref name="type"/> is complex.</returns>
        internal static PropertyInfo[] GetKeyPropertiesOnType(Type type, out bool hasProperties)
        {
            if (CommonUtil.IsUnsupportedType(type))
            {
                throw new InvalidOperationException(c.Strings.ClientType_UnsupportedType(type));
            }

            string typeName = type.ToString();
            IEnumerable <object> customAttributes       = type.GetCustomAttributes(true);
            bool                isEntity                = customAttributes.OfType <EntityTypeAttribute>().Any();
            KeyAttribute        dataServiceKeyAttribute = customAttributes.OfType <KeyAttribute>().FirstOrDefault();
            List <PropertyInfo> keyProperties           = new List <PropertyInfo>();

            PropertyInfo[] properties = ClientTypeUtil.GetPropertiesOnType(type, false /*declaredOnly*/).ToArray();
            hasProperties = properties.Length > 0;

            KeyKind currentKeyKind = KeyKind.NotKey;
            KeyKind newKeyKind     = KeyKind.NotKey;

            foreach (PropertyInfo propertyInfo in properties)
            {
                if ((newKeyKind = ClientTypeUtil.IsKeyProperty(propertyInfo, dataServiceKeyAttribute)) != KeyKind.NotKey)
                {
                    if (newKeyKind > currentKeyKind)
                    {
                        keyProperties.Clear();
                        currentKeyKind = newKeyKind;
                        keyProperties.Add(propertyInfo);
                    }
                    else if (newKeyKind == currentKeyKind)
                    {
                        keyProperties.Add(propertyInfo);
                    }
                }
            }

            Type keyPropertyDeclaringType = null;

            foreach (PropertyInfo key in keyProperties)
            {
                if (null == keyPropertyDeclaringType)
                {
                    keyPropertyDeclaringType = key.DeclaringType;
                }
                else if (keyPropertyDeclaringType != key.DeclaringType)
                {
                    throw c.Error.InvalidOperation(c.Strings.ClientType_KeysOnDifferentDeclaredType(typeName));
                }

                if (!PrimitiveType.IsKnownType(key.PropertyType))
                {
                    throw c.Error.InvalidOperation(c.Strings.ClientType_KeysMustBeSimpleTypes(key.Name, typeName, key.PropertyType.FullName));
                }
            }

            if (newKeyKind == KeyKind.AttributedKey && keyProperties.Count != dataServiceKeyAttribute.KeyNames.Count)
            {
                var m = (from string a in dataServiceKeyAttribute.KeyNames
                         where null == (from b in properties
                                        where b.Name == a
                                        select b).FirstOrDefault()
                         select a).First <string>();
                throw c.Error.InvalidOperation(c.Strings.ClientType_MissingProperty(typeName, m));
            }

            return(keyProperties.Count > 0 ? keyProperties.ToArray() : (isEntity ? ClientTypeUtil.EmptyPropertyInfoArray : null));
        }
示例#54
0
 /// <summary>
 /// Is the type or element type (in the case of nullableOfT or IEnumOfT) a Entity Type?
 /// </summary>
 /// <param name="type">Type to examine</param>
 /// <returns>bool indicating whether or not entity type</returns>
 internal static bool TypeOrElementTypeIsEntity(Type type)
 {
     type = TypeSystem.GetElementType(type);
     type = Nullable.GetUnderlyingType(type) ?? type;
     return(!PrimitiveType.IsKnownType(type) && ClientTypeUtil.GetKeyPropertiesOnType(type) != null);
 }
示例#55
0
        /// <summary>Returns the list of properties defined on <paramref name="type"/>.</summary>
        /// <param name="type">Type instance in question.</param>
        /// <param name="declaredOnly">True to to get the properties declared on <paramref name="type"/>; false to get all properties defined on <paramref name="type"/>.</param>
        /// <returns>Returns the list of properties defined on <paramref name="type"/>.</returns>
        internal static IEnumerable <PropertyInfo> GetPropertiesOnType(Type type, bool declaredOnly)
        {
            if (!PrimitiveType.IsKnownType(type))
            {
                foreach (PropertyInfo propertyInfo in type.GetPublicProperties(true /*instanceOnly*/, declaredOnly))
                {
                    //// examples where class<PropertyType>

                    //// the normal examples
                    //// PropertyType Property { get; set }
                    //// Nullable<PropertyType> Property { get; set; }

                    //// if 'Property: struct' then we would be unable set the property during construction (and have them stick)
                    //// but when its a class, we can navigate if non-null and set the nested properties
                    //// PropertyType Property { get; } where PropertyType: class

                    //// we do support adding elements to collections
                    //// ICollection<PropertyType> { get; /*ignored set;*/ }

                    //// indexed properties are not suported because
                    //// we don't have anything to use as the index
                    //// PropertyType Property[object x] { /*ignored get;*/ /*ignored set;*/ }

                    //// also ignored
                    //// if PropertyType.IsPointer (like byte*)
                    //// if PropertyType.IsArray except for byte[] and char[]
                    //// if PropertyType == IntPtr or UIntPtr

                    //// Properties overriding abstract or virtual properties on a base type
                    //// are also ignored (because they are part of the base type declaration
                    //// and not of the derived type).

                    Type propertyType = propertyInfo.PropertyType; // class / interface / value
                    propertyType = Nullable.GetUnderlyingType(propertyType) ?? propertyType;

                    if (propertyType.IsPointer ||
                        (propertyType.IsArray && (typeof(byte[]) != propertyType) && typeof(char[]) != propertyType) ||
                        (typeof(IntPtr) == propertyType) ||
                        (typeof(UIntPtr) == propertyType))
                    {
                        continue;
                    }

                    // Ignore properties overriding abstract/virtual properties of a base type
                    // when only getting the declared properties (otherwise the property will
                    // only be included once in the property list anyways).
                    if (declaredOnly && IsOverride(type, propertyInfo))
                    {
                        continue;
                    }

                    Debug.Assert(!propertyType.ContainsGenericParameters(), "remove when test case is found that encounters this");

                    if (propertyInfo.CanRead &&
                        (!propertyType.IsValueType() || propertyInfo.CanWrite) &&
                        !propertyType.ContainsGenericParameters() &&
                        (0 == propertyInfo.GetIndexParameters().Length))
                    {
                        yield return(propertyInfo);
                    }
                }
            }
        }
示例#56
0
 public override TypePrinterResult VisitPrimitiveType(PrimitiveType type,
                                                      TypeQualifiers quals)
 {
     return(VisitPrimitiveType(type));
 }
示例#57
0
        public Expression RewriteUnary(
            MachineOperand operand,
            Address addrInstr,
            PrimitiveType dataWidth,
            Func <Expression, Expression> opGen)
        {
            var reg = operand as RegisterOperand;

            if (reg != null)
            {
                Expression r = binder.EnsureRegister(reg.Register);
                if (r.DataType.Size > dataWidth.Size)
                {
                    var tmp = binder.CreateTemporary(dataWidth);
                    m.Assign(tmp, opGen(m.Cast(dataWidth, r)));
                    m.Assign(r, m.Dpb(r, tmp, 0));
                    return(tmp);
                }
                else
                {
                    m.Assign(r, opGen(r));
                    return(r);
                }
            }
            var addr = operand as M68kAddressOperand;

            if (addr != null)
            {
                var load = m.Load(dataWidth, addr.Address);
                var tmp  = binder.CreateTemporary(dataWidth);
                m.Assign(tmp, opGen(load));
                m.Assign(load, tmp);
                return(tmp);
            }
            var mem = operand as MemoryOperand;

            if (mem != null)
            {
                var load = RewriteMemoryAccess(mem, dataWidth, addrInstr);
                var tmp  = binder.CreateTemporary(dataWidth);
                m.Assign(tmp, opGen(load));
                m.Assign(RewriteMemoryAccess(mem, dataWidth, addrInstr), tmp);
                return(tmp);
            }
            var post = operand as PostIncrementMemoryOperand;

            if (post != null)
            {
                var r   = binder.EnsureRegister(post.Register);
                var tmp = binder.CreateTemporary(dataWidth);
                m.Assign(tmp, opGen(m.Load(dataWidth, r)));
                m.Assign(m.Load(dataWidth, r), tmp);
                m.Assign(r, m.IAdd(r, dataWidth.Size));
                return(tmp);
            }
            var pre = operand as PredecrementMemoryOperand;

            if (pre != null)
            {
                var r = binder.EnsureRegister(pre.Register);
                m.Assign(r, m.ISub(r, dataWidth.Size));
                var tmp = binder.CreateTemporary(dataWidth);
                m.Assign(tmp, opGen(m.Load(dataWidth, r)));
                m.Assign(m.Load(dataWidth, r), tmp);
                return(tmp);
            }
            throw new NotImplementedException("Unimplemented RewriteUnary for operand type " + operand.ToString());
        }
示例#58
0
        public Expression RewriteMoveDst(MachineOperand opDst, Address addrInstr, PrimitiveType dataWidth, Expression src)
        {
            var reg = opDst as RegisterOperand;

            if (reg != null)
            {
                var r = binder.EnsureRegister(reg.Register);
                if (r.DataType.Size > dataWidth.Size)
                {
                    var tmp = binder.CreateTemporary(dataWidth);
                    m.Assign(r, m.Dpb(r, src, 0));
                    return(tmp);
                }
                else
                {
                    m.Assign(r, src);
                    return(r);
                }
            }
            var mem = opDst as MemoryOperand;

            if (mem != null)
            {
                src = Spill(src, binder.EnsureRegister(mem.Base));
                var load = RewriteMemoryAccess(mem, dataWidth, addrInstr);
                var tmp  = binder.CreateTemporary(dataWidth);
                m.Assign(load, src);
                return(tmp);
            }
            var post = opDst as PostIncrementMemoryOperand;

            if (post != null)
            {
                var r    = binder.EnsureRegister(post.Register);
                var rExp = Spill(src, r);
                var load = m.Load(dataWidth, r);
                m.Assign(load, rExp);
                m.Assign(r, m.IAdd(r, dataWidth.Size));
                return(src);
            }
            var pre = opDst as PredecrementMemoryOperand;

            if (pre != null)
            {
                var r = binder.EnsureRegister(pre.Register);
                m.Assign(r, m.ISub(r, dataWidth.Size));
                var rExp = Spill(src, r);
                var load = m.Load(dataWidth, rExp);
                m.Assign(load, src);
                return(src);
            }
            var idxop = opDst as IndexedOperand;

            if (idxop != null)
            {
                var b    = binder.EnsureRegister(idxop.base_reg);
                var i    = binder.EnsureRegister(idxop.index_reg);
                var s    = m.Const(i.DataType, idxop.index_scale);
                var load = m.Load(dataWidth, m.IAdd(b, m.IMul(i, s)));
                m.Assign(load, src);
                return(src);
            }
            var indidx = opDst as IndirectIndexedOperand;

            if (indidx != null)
            {
                var a    = binder.EnsureRegister(indidx.ARegister);
                var x    = binder.EnsureRegister(indidx.XRegister);
                var load = m.Load(dataWidth, m.IAdd(a, x));
                m.Assign(load, src);
                return(src);
            }
            var mAddr = opDst as M68kAddressOperand;

            if (mAddr != null)
            {
                m.Assign(
                    m.Load(
                        dataWidth,
                        Constant.Word32(mAddr.Address.ToUInt32())),
                    src);
                return(src);
            }
            throw new NotImplementedException("Unimplemented RewriteMoveDst for operand type " + opDst.GetType().Name);
        }
示例#59
0
        public Expression RewriteDst(
            MachineOperand operand,
            Address addrInstr,
            PrimitiveType dataWidth,
            Expression src,
            Func <Expression, Expression, Expression> opGen)
        {
            var reg = operand as RegisterOperand;

            if (reg != null)
            {
                Expression r   = binder.EnsureRegister(reg.Register);
                Expression tmp = r;
                if (dataWidth != null &&
                    reg.Width.BitSize > dataWidth.BitSize &&
                    reg.Width.Domain != Domain.Real)
                {
                    Expression rSub   = m.Cast(dataWidth, r);
                    var        srcExp = opGen(src, rSub);
                    if (srcExp is Identifier || srcExp is Constant || srcExp is DepositBits)
                    {
                        tmp = srcExp;
                    }
                    else
                    {
                        tmp = binder.CreateTemporary(dataWidth);
                        m.Assign(tmp, srcExp);
                    }
                    src = m.Dpb(r, tmp, 0);
                }
                else
                {
                    src = opGen(src, r);
                }
                m.Assign(r, src);
                return(tmp);
            }
            var dbl = operand as DoubleRegisterOperand;

            if (dbl != null)
            {
                Identifier h      = binder.EnsureRegister(dbl.Register1);
                Identifier l      = binder.EnsureRegister(dbl.Register2);
                var        d      = binder.EnsureSequence(h.Storage, l.Storage, PrimitiveType.Word64);
                var        result = opGen(src, l);
                m.Assign(d, result);
                return(d);
            }
            var addr = operand as M68kAddressOperand;

            if (addr != null)
            {
                var load = m.Load(dataWidth, addr.Address);
                var tmp  = binder.CreateTemporary(dataWidth);
                m.Assign(tmp, opGen(src, load));
                m.Assign(load, tmp);
                return(tmp);
            }
            var mem = operand as MemoryOperand;

            if (mem != null)
            {
                var load = RewriteMemoryAccess(mem, dataWidth, addrInstr);
                var tmp  = binder.CreateTemporary(dataWidth);
                m.Assign(tmp, opGen(src, load));
                m.Assign(load, tmp);
                return(tmp);
            }
            var post = operand as PostIncrementMemoryOperand;

            if (post != null)
            {
                var r   = binder.EnsureRegister(post.Register);
                var tmp = binder.CreateTemporary(dataWidth);
                m.Assign(tmp, opGen(src, m.Load(post.Width, r)));
                m.Assign(m.Load(dataWidth, r), tmp);
                m.Assign(r, m.IAdd(r, dataWidth.Size));
                return(tmp);
            }
            var pre = operand as PredecrementMemoryOperand;

            if (pre != null)
            {
                var r = binder.EnsureRegister(pre.Register);
                src = Spill(src, r);
                m.Assign(r, m.ISub(r, dataWidth.Size));
                var load = m.Load(dataWidth, r);
                var tmp  = binder.CreateTemporary(dataWidth);
                m.Assign(tmp, opGen(src, load));
                m.Assign(m.Load(dataWidth, r), tmp);
                return(tmp);
            }
            var indidx = operand as IndirectIndexedOperand;

            if (indidx != null)
            {
                Expression ea = binder.EnsureRegister(indidx.ARegister);
                if (indidx.Imm8 != 0)
                {
                    ea = m.IAdd(ea, Constant.Int32(indidx.Imm8));
                }
                Expression ix = binder.EnsureRegister(indidx.XRegister);
                if (indidx.Scale > 1)
                {
                    ix = m.IMul(ix, Constant.Int32(indidx.Scale));
                }
                var load = m.Load(dataWidth, m.IAdd(ea, ix));
                var tmp  = binder.CreateTemporary(dataWidth);
                m.Assign(tmp, opGen(src, load));
                m.Assign(load, tmp);
                return(tmp);
            }
            return(null);
        }
示例#60
0
 public int AddVertex(Vector2 position, Color color, PrimitiveType primitiveType)
 {
     return(AddVertex(ref position, color, primitiveType));
 }