public List <DAPVariable> GetRow(DAPVariablesRequest msg, int rowIndex)
        {
            if (rowIndex < 0 || rowIndex >= Tuples.Count)
            {
                throw new RequestFailedException($"Requested nonexistent row {rowIndex}");
            }

            int startIndex = msg.start == null ? 0 : (int)msg.start;
            int numVars    = (msg.count == null || msg.count == 0) ? NumColumns : (int)msg.count;
            int lastIndex  = Math.Min(startIndex + numVars, NumColumns);
            // TODO req.filter, format

            var row       = Tuples[rowIndex];
            var variables = new List <DAPVariable>();

            for (var i = startIndex; i < startIndex + numVars; i++)
            {
                var dapVar = new DAPVariable
                {
                    name                         = ColumnNames == null?i.ToString() : ColumnNames[i],
                                           value = Formatter.ValueToString(row.Column[i])
                };
                variables.Add(dapVar);
            }

            return(variables);
        }
        public List <DAPVariable> GetRows(DAPVariablesRequest msg)
        {
            int startIndex = msg.start == null ? 0 : (int)msg.start;
            int numVars    = (msg.count == null || msg.count == 0) ? Tuples.Count : (int)msg.count;
            int lastIndex  = Math.Min(startIndex + numVars, Tuples.Count);
            // TODO req.filter, format

            var variables = new List <DAPVariable>();

            for (var i = startIndex; i < startIndex + numVars; i++)
            {
                var row    = Tuples[i];
                var dapVar = new DAPVariable
                {
                    name  = i.ToString(),
                    value = "(" + Formatter.TupleToString(row) + ")",
#pragma warning disable CS0675 // Bitwise-or operator used on a sign-extended operand
                    variablesReference = VariableIndexPrefix | i,
#pragma warning restore CS0675 // Bitwise-or operator used on a sign-extended operand
                    indexedVariables = ColumnNames == null ? NumColumns : 0,
                    namedVariables   = ColumnNames == null ? 0 : NumColumns
                };
                variables.Add(dapVar);
            }

            return(variables);
        }
        public List <DAPVariable> GetVariables(DAPVariablesRequest msg, long variablesReference)
        {
            long variableType = (variablesReference >> 48);

            if (variableType == 1)
            {
                int resultSetIdx = (int)((variablesReference >> 24) & 0xffffff);
                if (resultSetIdx < 0 || resultSetIdx >= Results.Count)
                {
                    throw new InvalidOperationException($"Evaluation result set ID does not exist {resultSetIdx}");
                }

                return(Results[resultSetIdx].GetRows(msg));
            }
            else if (variableType == 2)
            {
                int resultSetIdx = (int)((variablesReference >> 24) & 0xffffff);
                if (resultSetIdx < 0 || resultSetIdx >= Results.Count)
                {
                    throw new InvalidOperationException($"Evaluation result set ID does not exist {resultSetIdx}");
                }

                int rowIndex = (int)(msg.variablesReference & 0xffffff);
                return(Results[resultSetIdx].GetRow(msg, rowIndex));
            }
            else
            {
                throw new InvalidOperationException($"EvaluationResultManager does not support this variable type: {variableType}");
            }
        }
Esempio n. 4
0
        private List <DAPVariable> GetQueryResultVariables(DAPVariablesRequest msg, int frameIndex)
        {
            if (frameIndex != 0)
            {
                throw new RequestFailedException($"Requested query results for bad frame {frameIndex}");
            }

            int startIndex = msg.start == null ? 0 : (int)msg.start;
            int numVars    = (msg.count == null || msg.count == 0) ? LastQueryResults.Count : (int)msg.count;
            int lastIndex  = Math.Min(startIndex + numVars, LastQueryResults.Count);
            // TODO req.filter, format

            var variables = new List <DAPVariable>();

            for (var i = startIndex; i < startIndex + numVars; i++)
            {
                var variable = LastQueryResults[i];
                var dapVar   = new DAPVariable
                {
                    name  = variable.Name,
                    value = variable.Value,
                    type  = variable.Type
                };
                variables.Add(dapVar);
            }

            return(variables);
        }
Esempio n. 5
0
        private List <DAPVariable> GetStackVariables(DAPVariablesRequest msg, int frameIndex)
        {
            if (frameIndex < 0 || frameIndex >= Stack.Count)
            {
                throw new RequestFailedException($"Requested variables for unknown frame {frameIndex}");
            }

            var frame      = Stack[frameIndex];
            int startIndex = msg.start == null ? 0 : (int)msg.start;
            int numVars    = (msg.count == null || msg.count == 0) ? frame.Variables.Count : (int)msg.count;
            int lastIndex  = Math.Min(startIndex + numVars, frame.Variables.Count);
            // TODO req.filter, format

            var variables = new List <DAPVariable>();

            for (var i = startIndex; i < startIndex + numVars; i++)
            {
                var variable = frame.Variables[i];
                var dapVar   = new DAPVariable
                {
                    name  = variable.Name,
                    value = variable.Value,
                    type  = variable.Type
                };
                variables.Add(dapVar);
            }

            return(variables);
        }
Esempio n. 6
0
        private void HandleVariablesRequest(DAPRequest request, DAPVariablesRequest msg)
        {
            if (!Stopped)
            {
                throw new RequestFailedException("Cannot get variables when story is running");
            }

            long variableType = (msg.variablesReference >> 48);
            List <DAPVariable> variables;

            if (variableType == 0)
            {
                int frameIndex = (int)msg.variablesReference - 1;
                variables = GetStackVariables(msg, frameIndex);
            }
            else if (variableType == 1 || variableType == 2)
            {
                variables = EvalResults.GetVariables(msg, msg.variablesReference);
            }
            else if (variableType == 3)
            {
                int frameIndex = (int)(msg.variablesReference & 0xffffff);
                variables = GetQueryResultVariables(msg, frameIndex);
            }
            else
            {
                throw new InvalidOperationException($"Unknown variables reference type: {msg.variablesReference}");
            }

            var reply = new DAPVariablesResponse
            {
                variables = variables
            };

            Stream.SendReply(request, reply);
        }