blob: 0bd6a8e3b00bd799029221e285ad38da88f11f44 [file] [log] [blame]
// Copyright 2019 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "fidl/virtual_source_file.h"
namespace fidl {
SourceLocation VirtualSourceFile::AddLine(const std::string& line) {
return SourceLocation(*virtual_lines_.emplace_back(std::make_unique<std::string>(line)), *this);
}
StringView VirtualSourceFile::LineContaining(StringView view, Position* position_out) const {
for (int i = 0; i < virtual_lines_.size(); i++) {
const std::string& line = *virtual_lines_[i];
const char* line_begin = &*line.cbegin();
const char* line_end = &*line.cend();
if (view.data() < line_begin || view.data() + view.size() > line_end)
continue;
if (position_out != nullptr) {
auto column = view.data() - line_begin;
assert(column < std::numeric_limits<int>::max());
*position_out = {i + 1, (int)column};
}
return StringView(line);
}
return StringView();
}
} // namespace fidl