public List <RemoteValue> GetChildren(uint offset, uint count) { var values = Enumerable.Repeat <RemoteValue>(null, (int)count).ToList(); GetChildrenResponse response = null; if (connection.InvokeRpc(() => { response = client.GetChildren( new GetChildrenRequest { Value = grpcSbValue, Offset = offset, Count = count }); })) { for (uint n = 0; n < count; ++n) { GrpcSbValue sbValue; if (response.Children != null && response.Children.TryGetValue(n + offset, out sbValue) && sbValue.Id != 0) { values[(int)n] = valueFactory.Create(connection, sbValue); } } } return(values); }
public override Task <GetChildrenResponse> GetChildren( GetChildrenRequest request, ServerCallContext context) { var value = valueStore.GetObject(request.Value.Id); var children = value.GetChildren(request.Offset, request.Count); var response = new GetChildrenResponse(); for (uint n = 0; n < children.Count; ++n) { RemoteValue child = children[(int)n]; if (child != null) { response.Children[n + request.Offset] = GrpcFactoryUtils.CreateValue(child, valueStore.AddObject(child)); } } // (internal): Special case for pointers. LLDB names them $"*{value.GetName()}", but // Visual Studio just shows an empty name. if (value.TypeIsPointerType() && response.Children.ContainsKey(0) && response.Children[0].Name == $"*{value.GetName()}") { response.Children[0].Name = string.Empty; } return(Task.FromResult(response)); }