public void RTCRtpSendParametersCreateAndDeletePtr()
        {
            RTCRtpSendParametersInternal parametersInternal = new RTCRtpSendParametersInternal();

            int encodingsLength = 2;

            RTCRtpEncodingParametersInternal[] encodings = new RTCRtpEncodingParametersInternal[encodingsLength];
            for (int i = 0; i < encodingsLength; i++)
            {
                encodings[i].active                        = true;
                encodings[i].hasValueMaxBitrate            = true;
                encodings[i].maxBitrate                    = 10000000;
                encodings[i].hasValueMaxFramerate          = true;
                encodings[i].maxFramerate                  = 30;
                encodings[i].hasValueScaleResolutionDownBy = true;
                encodings[i].scaleResolutionDownBy         = 1.0;
                encodings[i].rid = Marshal.StringToCoTaskMemAnsi(string.Empty);
            }
            parametersInternal.transactionId   = Marshal.StringToCoTaskMemAnsi(string.Empty);
            parametersInternal.encodingsLength = encodingsLength;
            parametersInternal.encodings       = IntPtrExtension.ToPtr(encodings);
            RTCRtpSendParameters parameter = new RTCRtpSendParameters(parametersInternal);
            IntPtr ptr = parameter.CreatePtr();

            RTCRtpSendParameters.DeletePtr(ptr);
        }
Example #2
0
        public void AsArrayReturnsByteArray()
        {
            byte[] source = { 1, 2, 3 };
            IntPtr ptr    = IntPtrExtension.ToPtr(source);

            byte[] dest = ptr.AsArray <byte>(source.Length);
            Assert.IsNotEmpty(dest);
            CollectionAssert.AreEqual(source, dest);
        }
Example #3
0
        public void AsArrayReturnsUlongArray()
        {
            ulong[] source = { 1, 2, 3 };
            IntPtr  ptr    = IntPtrExtension.ToPtr(source);

            ulong[] dest = ptr.AsArray <ulong>(source.Length);
            Assert.IsNotEmpty(dest);
            CollectionAssert.AreEqual(source, dest);
        }
Example #4
0
        public void AsArrayReturnsStringArray()
        {
            string[] source = { "red", "blue", "yellow" };
            IntPtr   ptr    = IntPtrExtension.ToPtr(source);

            string[] dest = ptr.AsArray <string>(source.Length);
            Assert.IsNotEmpty(dest);
            CollectionAssert.AreEqual(source, dest);
        }
Example #5
0
        public void AsArrayReturnsBoolArray()
        {
            bool[] source = { true, false, true };
            IntPtr ptr    = IntPtrExtension.ToPtr(source);

            bool[] dest = ptr.AsArray <bool>(source.Length);
            Assert.IsNotEmpty(dest);
            CollectionAssert.AreEqual(source, dest);
        }
Example #6
0
        public void AsArrayReturnsDoubleArray()
        {
            float[] source = { 0.1f, 0.2f, 0.3f };
            IntPtr  ptr    = IntPtrExtension.ToPtr(source);

            float[] dest = ptr.AsArray <float>(source.Length);
            Assert.IsNotEmpty(dest);
            CollectionAssert.AreEqual(source, dest);
        }
Example #7
0
        public void AsArrayReturnsFloatArray()
        {
            double[] source = { 0.1, 0.2, 0.3 };
            IntPtr   ptr    = IntPtrExtension.ToPtr(source);

            double[] dest = ptr.AsArray <double>(source.Length);
            Assert.IsNotEmpty(dest);
            CollectionAssert.AreEqual(source, dest);
        }
Example #8
0
        public IntPtr Execute(IExpression expression, IProcessReader processReader)
        {
            Contract.Requires(expression != null);
            Contract.Requires(processReader != null);

            switch (expression)
            {
            case ConstantExpression constantExpression:
                return(IntPtrExtension.From(constantExpression.Value));

            case NegateExpression negateExpression:
                return(Execute(negateExpression.Expression, processReader).Negate());

            case ModuleExpression moduleExpression:
            {
                var module = processReader.GetModuleByName(moduleExpression.Name);
                if (module != null)
                {
                    return(module.Start);
                }

                return(IntPtr.Zero);
            }

            case AddExpression addExpression:
                return(Execute(addExpression.Lhs, processReader).Add(Execute(addExpression.Rhs, processReader)));

            case SubtractExpression subtractExpression:
                return(Execute(subtractExpression.Lhs, processReader).Sub(Execute(subtractExpression.Rhs, processReader)));

            case MultiplyExpression multiplyExpression:
                return(Execute(multiplyExpression.Lhs, processReader).Mul(Execute(multiplyExpression.Rhs, processReader)));

            case DivideExpression divideExpression:
                return(Execute(divideExpression.Lhs, processReader).Div(Execute(divideExpression.Rhs, processReader)));

            case ReadMemoryExpression readMemoryExpression:
                var readFromAddress = Execute(readMemoryExpression.Expression, processReader);
                if (readMemoryExpression.ByteCount == 4)
                {
                    return(IntPtrExtension.From(processReader.ReadRemoteInt32(readFromAddress)));
                }
                else
                {
                    return(IntPtrExtension.From(processReader.ReadRemoteInt64(readFromAddress)));
                }

            default:
                throw new ArgumentException($"Unsupported operation '{expression.GetType().FullName}'.");
            }
        }