From b9d6a13b5825dab1c52bfdc89dbf314f826ff7ec Mon Sep 17 00:00:00 2001 From: gre-ilya Date: Thu, 21 May 2026 08:09:36 +0500 Subject: [PATCH] gui --- prog/arch-researcher/Pipfile | 13 + prog/arch-researcher/Pipfile.lock | 83 + prog/arch-researcher/config.py | 3 - prog/arch-researcher/core/collector.py | 16 +- .../core/dependency_analyzer.py | 78 +- prog/arch-researcher/core/metrics_engine.py | 5 +- prog/arch-researcher/gui.py | 482 + .../arch-researcher/legacy_report/report.html | 271 + .../arch-researcher/legacy_report/report.json | 7861 +++++++++++++++-- prog/arch-researcher/models.py | 4 +- prog/arch-researcher/utils/code_analyzer.py | 90 +- 11 files changed, 8095 insertions(+), 811 deletions(-) create mode 100644 prog/arch-researcher/Pipfile create mode 100644 prog/arch-researcher/Pipfile.lock create mode 100644 prog/arch-researcher/gui.py create mode 100644 prog/arch-researcher/legacy_report/report.html diff --git a/prog/arch-researcher/Pipfile b/prog/arch-researcher/Pipfile new file mode 100644 index 0000000..540e0e0 --- /dev/null +++ b/prog/arch-researcher/Pipfile @@ -0,0 +1,13 @@ +[[source]] +url = "https://pypi.org/simple" +verify_ssl = true +name = "pypi" + +[packages] +pyqt5 = "*" +networkx = "*" + +[dev-packages] + +[requires] +python_version = "3.12" diff --git a/prog/arch-researcher/Pipfile.lock b/prog/arch-researcher/Pipfile.lock new file mode 100644 index 0000000..2c6e180 --- /dev/null +++ b/prog/arch-researcher/Pipfile.lock @@ -0,0 +1,83 @@ +{ + "_meta": { + "hash": { + "sha256": "7949d56dd1701e13de32a8fe849526075967be4665409687dde3cbe9d4dc32d9" + }, + "pipfile-spec": 6, + "requires": { + "python_version": "3.12" + }, + "sources": [ + { + "name": "pypi", + "url": "https://pypi.org/simple", + "verify_ssl": true + } + ] + }, + "default": { + "networkx": { + "hashes": [ + "sha256:26b7c357accc0c8cde558ad486283728b65b6a95d85ee1cd66bafab4c8168509", + "sha256:d47fbf302e7d9cbbb9e2555a0d267983d2aa476bac30e90dfbe5669bd57f3762" + ], + "index": "pypi", + "markers": "python_version >= '3.11' and python_full_version != '3.14.1'", + "version": "==3.6.1" + }, + "pyqt5": { + "hashes": [ + "sha256:6cd75628f6e732b1ffcfe709ab833a0716c0445d7aec8046a48d5843352becb6", + "sha256:76be0322ceda5deecd1708a8d628e698089a1cea80d1a49d242a6d579a40babd", + "sha256:bdde598a3bb95022131a5c9ea62e0a96bd6fb28932cc1619fd7ba211531b7517", + "sha256:c8b03dd9380bb13c804f0bdb0f4956067f281785b5e12303d529f0462f9afdc2", + "sha256:cd672a6738d1ae33ef7d9efa8e6cb0a1525ecf53ec86da80a9e1b6ec38c8d0f1", + "sha256:fda45743ebb4a27b4b1a51c6d8ef455c4c1b5d610c90d2934c7802b5c1557c52" + ], + "index": "pypi", + "markers": "python_version >= '3.8'", + "version": "==5.15.11" + }, + "pyqt5-qt5": { + "hashes": [ + "sha256:8bb997eb903afa9da3221a0c9e6eaa00413bbeb4394d5706118ad05375684767", + "sha256:bf2457e6371969736b4f660a0c153258fa03dbc6a181348218e6f05421682af7", + "sha256:c656af9c1e6aaa7f59bf3d8995f2fa09adbf6762b470ed284c31dca80d686a26" + ], + "version": "==5.15.18" + }, + "pyqt5-sip": { + "hashes": [ + "sha256:13c32e9025d0ab5fe960ef64dcb4c6f7ec26156ddce2cf2f195600aa26e8f9fe", + "sha256:163c2bba5e637c2222ec17d82a2c5aa158184a191923eb7d137cf4cfa0399529", + "sha256:521729e4ce44db555005f4e6987c4a5164d45ea03f5a7d08519813d4776acd15", + "sha256:65f257e28d06a01c2a9a7c0b2faf2af1dbf25a1420a5a9d905a54aaddce74d79", + "sha256:6d948f1be619c645cd3bda54952bfdc1aef7c79242dccea6a6858748e61114b9", + "sha256:71c37db75a0664325de149f43e2a712ec5fa1f90429a21dafbca005cb6767f94", + "sha256:8372ec8704bfd5e09942d0d055a1657eb4f702f4b30847a5e59df0496f99d67f", + "sha256:9254e5dd7676b76503ba20edcc919e7ac4a97b6c70a6fb2f9dba9e13b4c60509", + "sha256:92abe984becbde768954d6d0951f56d80a9868d2fd9e738e61fc944f0ff83dd6", + "sha256:95bba4670ecf5cba73958b85aa2087c17838a402ed251c38e68060c7665c998b", + "sha256:993fe3ed9a62a92e770f32d5344e3df56c2cacf1471f01b7feaf04818a2df1c4", + "sha256:9b689e02e400abd1ce0a30cd6eae8eceabcf1bbba0395cb5c86e64ba74351d68", + "sha256:a2a0278091d067b17855047ed8bd557e5ca62308a7d9fb5200451d0bd9090afc", + "sha256:aac4adc37df2f2ac1dc259409be1900f07332d140a12c9db7c84112cef64ff59", + "sha256:ac0be1a8ce145ed78c7e8d45243749405bee7e3a87e9810b0542bca010c50bd7", + "sha256:b29e4cda24748e59e5bd1bdad4812091a86b4b5b08c38b7f781eb55a5166f2b7", + "sha256:b4b743566f67cabfa7b0ba2da30b46d9d635d16cd5bc8cdcec83f620ed14dd93", + "sha256:bbec4c14903bcd585b4e1ee50edccfe224c8c0ee8004a072143993b4eb954442", + "sha256:bd9e3c6f81346f1b08d6db02305cdee20c009b43aa083d44ee2de47a7da0e123", + "sha256:c738949863d88b78f86f28e13151989ca3b1a302934811af41856dc8a27838bd", + "sha256:c969631ada7293a81e1012b2264a62d69a91995b517586489dfe24421b87b9af", + "sha256:d84ac384a63285132e67762c87681191c25e28a1df7560287ec3889d9eb223b5", + "sha256:dc5c30bb9bd8cca6e13d2fedac6e2a75fe2168d798d66f76e74835546b025027", + "sha256:dd855149c724634eb1f92d10e04e1be0751068a8521d5f9f06e5c2dbe32fd89f", + "sha256:ead5e0a64ad852ac60797989d8444a6a5bd834768536b04a07b40b2937d922f6", + "sha256:fdb45c7cd2af7eccd7370b994d432bfc7965079f845392760724f26771bb59dc" + ], + "markers": "python_version >= '3.10'", + "version": "==12.18.0" + } + }, + "develop": {} +} diff --git a/prog/arch-researcher/config.py b/prog/arch-researcher/config.py index 4bf2caf..4e7acf4 100644 --- a/prog/arch-researcher/config.py +++ b/prog/arch-researcher/config.py @@ -49,9 +49,6 @@ class AnalyzerConfig: cpp_extensions: List[str] = field(default_factory=lambda: [ ".cpp", ".cxx", ".cc", ".c", ".hpp", ".hxx", ".h" ]) - js_extensions: List[str] = field(default_factory=lambda: [ - ".js", ".mjs", ".cjs", ".ts" - ]) # Директории, которые игнорируются при обходе ignored_dirs: List[str] = field(default_factory=lambda: [ diff --git a/prog/arch-researcher/core/collector.py b/prog/arch-researcher/core/collector.py index 40c9d4c..0c7a7b2 100644 --- a/prog/arch-researcher/core/collector.py +++ b/prog/arch-researcher/core/collector.py @@ -30,7 +30,6 @@ class Collector: def __init__(self, config: AnalyzerConfig = DEFAULT_CONFIG): self.config = config self._cpp_exts = set(config.cpp_extensions) - self._js_exts = set(config.js_extensions) self._ignored = set(config.ignored_dirs) # ------------------------------------------------------------------ @@ -96,12 +95,9 @@ class Collector: ) def _detect_language(self, path: Path) -> str | None: - """Возвращает 'cpp', 'js' или None если файл не анализируется.""" - suffix = path.suffix.lower() - if suffix in self._cpp_exts: + """Возвращает 'cpp' или None если файл не анализируется.""" + if path.suffix.lower() in self._cpp_exts: return "cpp" - if suffix in self._js_exts: - return "js" return None def _resolve_module_name(self, root: Path, file: Path) -> str: @@ -124,8 +120,6 @@ class Collector: @staticmethod def _merge_language(existing: str, new_lang: str) -> str: """Объединяет языки при добавлении нового файла в модуль.""" - if existing == "mixed" or existing == new_lang: - return existing if existing != "mixed" else "mixed" - if existing in ("cpp", "js") and existing != new_lang: - return "mixed" - return new_lang # existing == "" — первый файл + if not existing: + return new_lang + return existing diff --git a/prog/arch-researcher/core/dependency_analyzer.py b/prog/arch-researcher/core/dependency_analyzer.py index 0b881b4..0632598 100644 --- a/prog/arch-researcher/core/dependency_analyzer.py +++ b/prog/arch-researcher/core/dependency_analyzer.py @@ -2,14 +2,13 @@ Модуль DependencyAnalyzer — построение и анализ графа зависимостей. Алгоритм: - 1. Для C++ файлов извлекаются #include-директивы: + 1. Для C/C++ файлов извлекаются #include-директивы: - через libclang AST (если установлен) — точный разбор - через regex (fallback) — лексический разбор - 2. Для JS файлов — regex-парсинг require() и import ... from - 3. #include / import разрешаются до имени модуля (директории) - 4. Строится ориентированный граф зависимостей (networkx DiGraph) - 5. Вычисляются метрики: coupling_in, coupling_out, instability - 6. Обнаруживаются циклические зависимости (strongly connected components) + 2. #include разрешаются до имени модуля (директории) + 3. Строится ориентированный граф зависимостей (networkx DiGraph) + 4. Вычисляются метрики: coupling_in, coupling_out, instability + 5. Обнаруживаются циклические зависимости (strongly connected components) Метрика нестабильности (Instability): I = C_out / (C_in + C_out), где @@ -51,12 +50,6 @@ except ImportError: # Regex для fallback-разбора #include _RE_INCLUDE = re.compile(r'^\s*#\s*include\s+[<"]([^>"]+)[>"]', re.MULTILINE) -# Regex для JS import / require -_RE_JS_IMPORT = re.compile( - r'(?:import\s+.*?\s+from\s+|require\s*\(\s*)[\'"]([^\'"]+)[\'"]', - re.MULTILINE, -) - class DependencyAnalyzer: """ @@ -169,21 +162,13 @@ class DependencyAnalyzer: root: Path, ) -> Set[str]: """Извлекает зависимости из одного файла.""" - suffix = Path(file_path).suffix.lower() + if Path(file_path).suffix.lower() not in self.config.cpp_extensions: + return set() - if suffix in self.config.cpp_extensions: - raw_includes = self._extract_cpp_includes(file_path) - return self._resolve_includes_to_modules( - raw_includes, file_path, file_to_module, root - ) - - if suffix in self.config.js_extensions: - raw_imports = self._extract_js_imports(file_path) - return self._resolve_js_imports_to_modules( - raw_imports, file_path, file_to_module, root - ) - - return set() + raw_includes = self._extract_cpp_includes(file_path) + return self._resolve_includes_to_modules( + raw_includes, file_path, file_to_module, root + ) def _extract_cpp_includes(self, file_path: str) -> List[str]: """ @@ -219,14 +204,6 @@ class DependencyAnalyzer: return [] return _RE_INCLUDE.findall(text) - def _extract_js_imports(self, file_path: str) -> List[str]: - """Извлечение import/require из JS/TS файла через regex.""" - try: - text = Path(file_path).read_text(encoding="utf-8", errors="replace") - except OSError: - return [] - return _RE_JS_IMPORT.findall(text) - # ------------------------------------------------------------------ # Разрешение имён в модули # ------------------------------------------------------------------ @@ -261,39 +238,6 @@ class DependencyAnalyzer: return deps - def _resolve_js_imports_to_modules( - self, - imports: List[str], - source_file: str, - file_to_module: Dict[str, str], - root: Path, - ) -> Set[str]: - """ - Разрешает JS import-пути в имена модулей. - Внешние пакеты (не начинаются с '.') игнорируются. - """ - deps: Set[str] = set() - source_dir = Path(source_file).parent - - for imp in imports: - if not imp.startswith("."): - continue # внешний пакет — не наш модуль - - # Пробуем добавить расширения - base = (source_dir / imp).resolve() - candidates = [base] - for ext in self.config.js_extensions: - candidates.append(base.with_suffix(ext)) - candidates.append(base / f"index{ext}") - - for candidate in candidates: - key = str(candidate) - if key in file_to_module: - deps.add(file_to_module[key]) - break - - return deps - # ------------------------------------------------------------------ # Вспомогательные методы # ------------------------------------------------------------------ diff --git a/prog/arch-researcher/core/metrics_engine.py b/prog/arch-researcher/core/metrics_engine.py index 3b8e49e..6bb8749 100644 --- a/prog/arch-researcher/core/metrics_engine.py +++ b/prog/arch-researcher/core/metrics_engine.py @@ -140,9 +140,6 @@ class MetricsEngine: def _detect_language(self, file_path: str) -> str: """Определяет язык по расширению файла.""" - suffix = Path(file_path).suffix.lower() - if suffix in self.config.cpp_extensions: + if Path(file_path).suffix.lower() in self.config.cpp_extensions: return "cpp" - if suffix in self.config.js_extensions: - return "js" return "unknown" diff --git a/prog/arch-researcher/gui.py b/prog/arch-researcher/gui.py new file mode 100644 index 0000000..0170832 --- /dev/null +++ b/prog/arch-researcher/gui.py @@ -0,0 +1,482 @@ +#!/usr/bin/env python3 +""" +PyQt5 GUI для Legacy Analyzer. + +Запуск: + python gui.py + pip install PyQt5 # если не установлен +""" + +import logging +import os +import sys +from pathlib import Path + +from PyQt5.QtCore import QThread, pyqtSignal, Qt +from PyQt5.QtGui import QColor, QFont, QTextCursor +from PyQt5.QtWidgets import ( + QApplication, QCheckBox, QFileDialog, QFormLayout, QGroupBox, + QHBoxLayout, QHeaderView, QLabel, QLineEdit, QMainWindow, + QPushButton, QSizePolicy, QSpinBox, QSplitter, QTableWidget, + QTableWidgetItem, QTextEdit, QVBoxLayout, QWidget, +) + +# Добавляем директорию скрипта в sys.path, чтобы импорты работали при запуске +# gui.py из любой рабочей директории +_HERE = Path(__file__).parent +if str(_HERE) not in sys.path: + sys.path.insert(0, str(_HERE)) + +from config import AnalyzerConfig, ThresholdConfig +from analyzer import Analyzer +from models import RiskLevel, ModernizationStrategy + + +# --------------------------------------------------------------------------- +# Цвета уровней риска +# --------------------------------------------------------------------------- + +RISK_COLORS = { + RiskLevel.LOW: "#27ae60", + RiskLevel.MEDIUM: "#f39c12", + RiskLevel.HIGH: "#e67e22", + RiskLevel.CRITICAL: "#e74c3c", +} + +RISK_BG = { + RiskLevel.LOW: "#eafaf1", + RiskLevel.MEDIUM: "#fef9e7", + RiskLevel.HIGH: "#fef0e6", + RiskLevel.CRITICAL: "#fdedec", +} + +STRATEGY_RU = { + ModernizationStrategy.KEEP: "Оставить", + ModernizationStrategy.REFACTOR: "Рефакторинг", + ModernizationStrategy.REENGINEER: "Реинжиниринг", + ModernizationStrategy.REPLACE: "Замена", +} + +RISK_RU = { + RiskLevel.LOW: "НИЗКИЙ", + RiskLevel.MEDIUM: "СРЕДНИЙ", + RiskLevel.HIGH: "ВЫСОКИЙ", + RiskLevel.CRITICAL: "КРИТИЧЕСКИЙ", +} + +LOG_LEVEL_COLORS = { + "DEBUG": "#888888", + "INFO": "#ecf0f1", + "WARNING": "#f39c12", + "ERROR": "#e74c3c", + "CRITICAL":"#e74c3c", +} + + +# --------------------------------------------------------------------------- +# Фоновый поток анализа +# --------------------------------------------------------------------------- + +class _QtLogHandler(logging.Handler): + """Перехватывает logging и отправляет сообщения в Qt-сигнал.""" + + def __init__(self, signal): + super().__init__() + self._signal = signal + + def emit(self, record): + try: + self._signal.emit(self.format(record), record.levelname) + except Exception: + pass + + +class AnalysisWorker(QThread): + log_signal = pyqtSignal(str, str) # (message, levelname) + finished_signal = pyqtSignal(object) # AnalysisReport + error_signal = pyqtSignal(str) + + def __init__(self, project_root: str, config: AnalyzerConfig): + super().__init__() + self._project_root = project_root + self._config = config + + def run(self): + handler = _QtLogHandler(self.log_signal) + handler.setFormatter(logging.Formatter("%(asctime)s [%(levelname)s] %(message)s", + datefmt="%H:%M:%S")) + root_logger = logging.getLogger() + root_logger.addHandler(handler) + root_logger.setLevel(logging.DEBUG) + + try: + analyzer = Analyzer(self._config) + report = analyzer.run(self._project_root) + self.finished_signal.emit(report) + except Exception as exc: + self.error_signal.emit(str(exc)) + finally: + root_logger.removeHandler(handler) + + +# --------------------------------------------------------------------------- +# Панель настроек (левая) +# --------------------------------------------------------------------------- + +class _SettingsPanel(QWidget): + def __init__(self, parent=None): + super().__init__(parent) + self._build_ui() + + def _build_ui(self): + layout = QVBoxLayout(self) + layout.setContentsMargins(8, 8, 8, 8) + layout.setSpacing(10) + + # --- Проект --- + proj_box = QGroupBox("Проект") + proj_form = QFormLayout(proj_box) + proj_form.setLabelAlignment(Qt.AlignRight) + + self.project_edit = QLineEdit() + self.project_edit.setPlaceholderText("Путь к анализируемому проекту") + proj_btn = QPushButton("…") + proj_btn.setFixedWidth(30) + proj_btn.clicked.connect(self._browse_project) + proj_row = QHBoxLayout() + proj_row.addWidget(self.project_edit) + proj_row.addWidget(proj_btn) + + self.output_edit = QLineEdit("legacy_report") + self.output_edit.setPlaceholderText("Директория для отчётов") + out_btn = QPushButton("…") + out_btn.setFixedWidth(30) + out_btn.clicked.connect(self._browse_output) + out_row = QHBoxLayout() + out_row.addWidget(self.output_edit) + out_row.addWidget(out_btn) + + self.libclang_edit = QLineEdit() + self.libclang_edit.setPlaceholderText("Авто (опционально)") + lc_btn = QPushButton("…") + lc_btn.setFixedWidth(30) + lc_btn.clicked.connect(self._browse_libclang) + lc_row = QHBoxLayout() + lc_row.addWidget(self.libclang_edit) + lc_row.addWidget(lc_btn) + + proj_form.addRow("Проект:", proj_row) + proj_form.addRow("Вывод:", out_row) + proj_form.addRow("libclang:", lc_row) + + # --- Форматы --- + fmt_box = QGroupBox("Форматы отчётов") + fmt_layout = QHBoxLayout(fmt_box) + self.fmt_json = QCheckBox("JSON") + self.fmt_json.setChecked(True) + self.fmt_html = QCheckBox("HTML") + self.fmt_html.setChecked(True) + fmt_layout.addWidget(self.fmt_json) + fmt_layout.addWidget(self.fmt_html) + fmt_layout.addStretch() + + # --- Пороги --- + thr_box = QGroupBox("Пороговые значения") + thr_form = QFormLayout(thr_box) + thr_form.setLabelAlignment(Qt.AlignRight) + + self.ccn_warn = self._spinbox(1, 100, 10) + self.ccn_crit = self._spinbox(1, 100, 20) + self.coup_warn = self._spinbox(1, 100, 5) + self.coup_crit = self._spinbox(1, 100, 10) + + thr_form.addRow("CCN предупрежд.:", self.ccn_warn) + thr_form.addRow("CCN критическое:", self.ccn_crit) + thr_form.addRow("Связность вых. (пред.):", self.coup_warn) + thr_form.addRow("Связность вых. (крит.):", self.coup_crit) + + # --- Кнопка запуска --- + self.run_btn = QPushButton("▶ Запустить анализ") + self.run_btn.setMinimumHeight(40) + self.run_btn.setStyleSheet( + "QPushButton { background: #2980b9; color: white; font-weight: bold; " + "border-radius: 4px; font-size: 13px; }" + "QPushButton:hover { background: #3498db; }" + "QPushButton:disabled { background: #7f8c8d; }" + ) + + layout.addWidget(proj_box) + layout.addWidget(fmt_box) + layout.addWidget(thr_box) + layout.addStretch() + layout.addWidget(self.run_btn) + + @staticmethod + def _spinbox(minimum, maximum, default) -> QSpinBox: + sb = QSpinBox() + sb.setRange(minimum, maximum) + sb.setValue(default) + return sb + + def _browse_project(self): + d = QFileDialog.getExistingDirectory(self, "Выберите директорию проекта") + if d: + self.project_edit.setText(d) + + def _browse_output(self): + d = QFileDialog.getExistingDirectory(self, "Директория для отчётов") + if d: + self.output_edit.setText(d) + + def _browse_libclang(self): + f, _ = QFileDialog.getOpenFileName(self, "Путь к libclang", "", + "Библиотеки (*.so *.dylib *.dll);;Все файлы (*)") + if f: + self.libclang_edit.setText(f) + + def build_config(self) -> AnalyzerConfig: + formats = [] + if self.fmt_json.isChecked(): + formats.append("json") + if self.fmt_html.isChecked(): + formats.append("html") + if not formats: + formats = ["json"] + + thresholds = ThresholdConfig( + ccn_warn=self.ccn_warn.value(), + ccn_critical=self.ccn_crit.value(), + coupling_out_warn=self.coup_warn.value(), + coupling_out_critical=self.coup_crit.value(), + ) + libclang = self.libclang_edit.text().strip() or None + return AnalyzerConfig( + output_formats=formats, + output_dir=self.output_edit.text().strip() or "legacy_report", + libclang_path=libclang, + thresholds=thresholds, + ) + + +# --------------------------------------------------------------------------- +# Панель лога (правая верхняя) +# --------------------------------------------------------------------------- + +class _LogPanel(QTextEdit): + def __init__(self, parent=None): + super().__init__(parent) + self.setReadOnly(True) + self.setFont(QFont("Monospace", 9)) + self.setStyleSheet("background: #1e1e1e; color: #ecf0f1;") + + def append_log(self, message: str, level: str): + color = LOG_LEVEL_COLORS.get(level, "#ecf0f1") + html = f'{message}' + self.append(html) + self.moveCursor(QTextCursor.End) + + def clear_log(self): + self.clear() + + +# --------------------------------------------------------------------------- +# Панель результатов (правая нижняя) +# --------------------------------------------------------------------------- + +class _ResultsPanel(QWidget): + def __init__(self, parent=None): + super().__init__(parent) + self._html_path: str = "" + self._build_ui() + self.setVisible(False) + + def _build_ui(self): + layout = QVBoxLayout(self) + layout.setContentsMargins(8, 4, 8, 8) + layout.setSpacing(6) + + # Заголовок + title = QLabel("Результаты анализа") + title.setStyleSheet("font-weight: bold; font-size: 13px;") + layout.addWidget(title) + + # Сводка + self._summary = QLabel() + self._summary.setWordWrap(True) + self._summary.setStyleSheet("font-size: 12px;") + layout.addWidget(self._summary) + + # Таблица решений + self._table = QTableWidget() + self._table.setColumnCount(4) + self._table.setHorizontalHeaderLabels(["Модуль", "Риск", "Стратегия", "Причины"]) + self._table.horizontalHeader().setSectionResizeMode(0, QHeaderView.Stretch) + self._table.horizontalHeader().setSectionResizeMode(3, QHeaderView.Stretch) + self._table.setEditTriggers(QTableWidget.NoEditTriggers) + self._table.setSelectionBehavior(QTableWidget.SelectRows) + self._table.setAlternatingRowColors(True) + layout.addWidget(self._table) + + # Кнопка открытия отчёта + self._open_btn = QPushButton("Открыть HTML отчёт") + self._open_btn.setStyleSheet( + "QPushButton { background: #27ae60; color: white; border-radius: 4px; padding: 6px; }" + "QPushButton:hover { background: #2ecc71; }" + "QPushButton:disabled { background: #7f8c8d; }" + ) + self._open_btn.clicked.connect(self._open_html) + self._open_btn.setEnabled(False) + layout.addWidget(self._open_btn) + + def show_report(self, report, output_dir: str): + from models import RiskLevel + + risk = report.system_risk_level + strategy = report.recommended_system_strategy + color = RISK_COLORS.get(risk, "#ecf0f1") + risk_ru = RISK_RU.get(risk, risk.name) + strategy_ru = STRATEGY_RU.get(strategy, strategy.name) + + summary_html = ( + f"Системный риск: {risk_ru}  |  " + f"Стратегия: {strategy_ru}
" + f"Модулей: {len(report.modules)}  |  " + f"Функций: {report.total_functions}  |  " + f"Ср. CCN: {report.avg_system_ccn:.2f}  |  " + f"Циклов зависим.: {len(report.dependency_cycles)}" + ) + self._summary.setText(summary_html) + + # Заполняем таблицу + self._table.setRowCount(len(report.decisions)) + for row, decision in enumerate(report.decisions): + r = decision.risk_level + bg = QColor(RISK_BG.get(r, "#ffffff")) + fg = QColor(RISK_COLORS.get(r, "#000000")) + + items = [ + decision.module_name, + RISK_RU.get(r, r.name), + STRATEGY_RU.get(decision.strategy, decision.strategy.name), + "; ".join(decision.reasons) if decision.reasons else "—", + ] + for col, text in enumerate(items): + item = QTableWidgetItem(text) + item.setBackground(bg) + if col == 1: + item.setForeground(fg) + item.setFont(QFont("", -1, QFont.Bold)) + self._table.setItem(row, col, item) + + self._table.resizeRowsToContents() + + # HTML отчёт + html_path = Path(output_dir) / "report.html" + if not html_path.is_absolute(): + html_path = Path.cwd() / html_path + if html_path.exists(): + self._html_path = str(html_path) + self._open_btn.setEnabled(True) + else: + self._html_path = "" + self._open_btn.setEnabled(False) + + self.setVisible(True) + + def _open_html(self): + if self._html_path: + import webbrowser + webbrowser.open(f"file://{self._html_path}") + + +# --------------------------------------------------------------------------- +# Главное окно +# --------------------------------------------------------------------------- + +class MainWindow(QMainWindow): + def __init__(self): + super().__init__() + self.setWindowTitle("Legacy Analyzer") + self.resize(1100, 700) + self._worker: AnalysisWorker | None = None + self._build_ui() + + def _build_ui(self): + central = QWidget() + self.setCentralWidget(central) + root_layout = QHBoxLayout(central) + root_layout.setContentsMargins(6, 6, 6, 6) + root_layout.setSpacing(6) + + # Левая панель — настройки + self._settings = _SettingsPanel() + self._settings.setFixedWidth(320) + self._settings.run_btn.clicked.connect(self._run_analysis) + + # Правая панель — лог + результаты + right_splitter = QSplitter(Qt.Vertical) + + self._log = _LogPanel() + self._log.setMinimumHeight(150) + + self._results = _ResultsPanel() + self._results.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) + + right_splitter.addWidget(self._log) + right_splitter.addWidget(self._results) + right_splitter.setSizes([300, 300]) + + root_layout.addWidget(self._settings) + root_layout.addWidget(right_splitter, stretch=1) + + def _run_analysis(self): + project_root = self._settings.project_edit.text().strip() + if not project_root: + self._log.append_log("Укажите путь к проекту.", "ERROR") + return + if not Path(project_root).exists(): + self._log.append_log(f"Директория не найдена: {project_root}", "ERROR") + return + + config = self._settings.build_config() + + self._log.clear_log() + self._results.setVisible(False) + self._settings.run_btn.setEnabled(False) + self._settings.run_btn.setText("⏳ Анализ...") + + self._worker = AnalysisWorker(project_root, config) + self._worker.log_signal.connect(self._log.append_log) + self._worker.finished_signal.connect(self._on_finished) + self._worker.error_signal.connect(self._on_error) + self._worker.start() + + def _on_finished(self, report): + self._reset_run_btn() + output_dir = self._settings.output_edit.text().strip() or "legacy_report" + self._results.show_report(report, output_dir) + self._log.append_log("Анализ завершён.", "INFO") + + def _on_error(self, message: str): + self._reset_run_btn() + self._log.append_log(f"Ошибка: {message}", "ERROR") + + def _reset_run_btn(self): + self._settings.run_btn.setEnabled(True) + self._settings.run_btn.setText("▶ Запустить анализ") + + +# --------------------------------------------------------------------------- +# Точка входа +# --------------------------------------------------------------------------- + +def main(): + app = QApplication(sys.argv) + app.setStyle("Fusion") + window = MainWindow() + window.show() + sys.exit(app.exec_()) + + +if __name__ == "__main__": + main() diff --git a/prog/arch-researcher/legacy_report/report.html b/prog/arch-researcher/legacy_report/report.html new file mode 100644 index 0000000..8e5c312 --- /dev/null +++ b/prog/arch-researcher/legacy_report/report.html @@ -0,0 +1,271 @@ + + + + + +Legacy Analyzer — Отчёт + + + + +

📊 Legacy Analyzer

+

+ Проект: /home/ilya/A  |  + Сгенерировано: 21.05.2026 08:08  |  + Системный риск: Высокий +

+ +

Сводка по системе

+
+
+
126
+
Файлов
+
+
+
5,186
+
Строк кода (NLOC)
+
+
+
875
+
Функций
+
+
+
1.8
+
Средняя CCN
+
+
+
6
+
Модулей
+
+
+
1
+
Циклов зависимостей
+
+
+
Высокий
+
Системный риск
+
+
+
Реинжиниринг
+
Рекомендуемая стратегия
+
+
+ +

Таблица решений по модулям

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
МодульРискСтратегияПаттернПриоритетПричины
helpers/memenvВысокийРеинжинирингAnti-Corruption Layer: изоляция модуля от циклических зависимостей390
  • Высокая нестабильность: I=0.75 (порог 0.7)
  • Участвует в циклических зависимостях — признак архитектурной деградации
tableВысокийРеинжинирингAnti-Corruption Layer: изоляция модуля от циклических зависимостей390
  • Высокая нестабильность: I=0.75 (порог 0.7)
  • Участвует в циклических зависимостях — признак архитектурной деградации
utilВысокийРеинжинирингAnti-Corruption Layer: изоляция модуля от циклических зависимостей470
  • Участвует в циклических зависимостях — признак архитектурной деградации
dbВысокийРеинжинирингAnti-Corruption Layer: изоляция модуля от циклических зависимостей480
  • Участвует в циклических зависимостях — признак архитектурной деградации
portНизкийОставить960
include/leveldbНизкийОставить1000
+
+ +

Циклические зависимости (1)

+

Цикл 1: dbhelpers/memenvtableutil

+ +

Детализация по модулям

+
+
+

db

+ Высокий +
+ ⚠ Участвует в цикле зависимостей + + + + + + + + +
Языкcpp
NLOC2,664
Функций455
Avg CCN1.7
Max CCN12
C_out / C_in3 / 2
Нестабильность (I)0.60
+
Топ функций по сложности + + + +
ФункцияCCNNLOCПараметрыРасположение
CompareIterators12715db_test.cc:1843
BuildTable11496builder.cc:2
NewWritableFile11712db_test.cc:116
ParseFileName11393filename.cc:55
ScanTable10511repair.cc:166
+
+
+

helpers/memenv

+ Высокий +
+ ⚠ Участвует в цикле зависимостей + + + + + + + + +
Языкcpp
NLOC176
Функций31
Avg CCN1.8
Max CCN6
C_out / C_in3 / 1
Нестабильность (I)0.75
+
Топ функций по сложности + + + +
ФункцияCCNNLOCПараметрыРасположение
Read6304memenv.cc:39
Append4211memenv.cc:85
Unref3120memenv.cc:16
Skip391memenv.cc:139
GetChildren3102memenv.cc:259
+
+
+

include/leveldb

+ Низкий +
+ + + + + + + + + +
Языкcpp
NLOC43
Функций41
Avg CCN1.0
Max CCN1
C_out / C_in0 / 0
Нестабильность (I)0.00
+
Топ функций по сложности + + + +
ФункцияCCNNLOCПараметрыРасположение
Prune100cache.h:16
target110env.h:116
NewSequentialFile112env.h:116
NewRandomAccessFile112env.h:119
NewWritableFile112env.h:123
+
+
+

port

+ Низкий +
+ + + + + + + + + +
Языкcpp
NLOC94
Функций10
Avg CCN2.2
Max CCN4
C_out / C_in0 / 4
Нестабильность (I)0.00
+
Топ функций по сложности + + + +
ФункцияCCNNLOCПараметрыРасположение
Zstd_Compress4244port_stdcxx.h:93
Zstd_Uncompress4183port_stdcxx.h:136
Zstd_GetUncompressedLength3113port_stdcxx.h:123
Snappy_Compress2123port_stdcxx.h:57
Snappy_GetUncompressedLength283port_stdcxx.h:74
+
+
+

table

+ Высокий +
+ ⚠ Участвует в цикле зависимостей + + + + + + + + +
Языкcpp
NLOC692
Функций132
Avg CCN1.8
Max CCN17
C_out / C_in3 / 1
Нестабильность (I)0.75
+
Топ функций по сложности + + + +
ФункцияCCNNLOCПараметрыРасположение
TestRandomAccess17613table_test.cc:434
ReadBlock13794format.cc:51
Seek11441block.cc:110
DecodeEntry7155block.cc:29
Init6221table_test.cc:360
+
+
+

util

+ Высокий +
+ ⚠ Участвует в цикле зависимостей + + + + + + + + +
Языкcpp
NLOC1,517
Функций206
Avg CCN2.0
Max CCN17
C_out / C_in2 / 3
Нестабильность (I)0.40
+
Топ функций по сложности + + + +
ФункцияCCNNLOCПараметрыРасположение
Extend17733crc32c.cc:254
GetChildren7242env_windows.cc:417
Logv7582posix_logger.h:13
Logv7552windows_logger.h:13
NewRandomAccessFile6272env_posix.cc:372
+
+ +
+

+ Legacy Analyzer — методический инструментарий модернизации унаследованных систем +

+ \ No newline at end of file diff --git a/prog/arch-researcher/legacy_report/report.json b/prog/arch-researcher/legacy_report/report.json index 131dd3f..b17a884 100644 --- a/prog/arch-researcher/legacy_report/report.json +++ b/prog/arch-researcher/legacy_report/report.json @@ -1,49 +1,48 @@ { - "generated_at": "2026-05-11T13:38:33.090534", - "project_root": "/home/claude/vkr/B", + "generated_at": "2026-05-21T08:08:36.099016", + "project_root": "/home/ilya/A", "summary": { - "total_files": 22, - "total_nloc": 1137, - "total_functions": 68, - "avg_system_ccn": 3.78, + "total_files": 126, + "total_nloc": 5186, + "total_functions": 875, + "avg_system_ccn": 1.77, "system_risk_level": "HIGH", "recommended_system_strategy": "REENGINEER", "dependency_cycles_count": 1 }, "dependency_cycles": [ [ - "src", - "src/database", - "src/error-handlers", - "src/middlewares", - "src/routes" + "db", + "helpers/memenv", + "table", + "util" ] ], "decisions": [ { - "module": "src/routes", - "risk_level": "CRITICAL", - "strategy": "REPLACE", - "recommended_pattern": "Strangler Fig + Anti-Corruption Layer: замена с изоляцией от цикла", - "priority": 190, + "module": "helpers/memenv", + "risk_level": "HIGH", + "strategy": "REENGINEER", + "recommended_pattern": "Anti-Corruption Layer: изоляция модуля от циклических зависимостей", + "priority": 390, "reasons": [ - "Критическая CCN: max=21 (порог 20)", "Высокая нестабильность: I=0.75 (порог 0.7)", "Участвует в циклических зависимостях — признак архитектурной деградации" ] }, { - "module": "src", + "module": "table", "risk_level": "HIGH", "strategy": "REENGINEER", "recommended_pattern": "Anti-Corruption Layer: изоляция модуля от циклических зависимостей", - "priority": 460, + "priority": 390, "reasons": [ + "Высокая нестабильность: I=0.75 (порог 0.7)", "Участвует в циклических зависимостях — признак архитектурной деградации" ] }, { - "module": "src/middlewares", + "module": "util", "risk_level": "HIGH", "strategy": "REENGINEER", "recommended_pattern": "Anti-Corruption Layer: изоляция модуля от циклических зависимостей", @@ -53,7 +52,7 @@ ] }, { - "module": "src/database", + "module": "db", "risk_level": "HIGH", "strategy": "REENGINEER", "recommended_pattern": "Anti-Corruption Layer: изоляция модуля от циклических зависимостей", @@ -63,707 +62,7291 @@ ] }, { - "module": "src/error-handlers", - "risk_level": "HIGH", - "strategy": "REENGINEER", - "recommended_pattern": "Anti-Corruption Layer: изоляция модуля от циклических зависимостей", - "priority": 490, - "reasons": [ - "Участвует в циклических зависимостях — признак архитектурной деградации" - ] + "module": "port", + "risk_level": "LOW", + "strategy": "KEEP", + "recommended_pattern": "", + "priority": 960, + "reasons": [] + }, + { + "module": "include/leveldb", + "risk_level": "LOW", + "strategy": "KEEP", + "recommended_pattern": "", + "priority": 1000, + "reasons": [] } ], "modules": { - "src": { + "db": { "files": [ - "/home/claude/vkr/B/src/config.mjs", - "/home/claude/vkr/B/src/index.mjs", - "/home/claude/vkr/B/src/utils.mjs" + "/home/ilya/A/db/autocompact_test.cc", + "/home/ilya/A/db/builder.cc", + "/home/ilya/A/db/builder.h", + "/home/ilya/A/db/c.cc", + "/home/ilya/A/db/c_test.c", + "/home/ilya/A/db/corruption_test.cc", + "/home/ilya/A/db/db_impl.cc", + "/home/ilya/A/db/db_impl.h", + "/home/ilya/A/db/db_iter.cc", + "/home/ilya/A/db/db_iter.h", + "/home/ilya/A/db/db_test.cc", + "/home/ilya/A/db/dbformat.cc", + "/home/ilya/A/db/dbformat.h", + "/home/ilya/A/db/dbformat_test.cc", + "/home/ilya/A/db/dumpfile.cc", + "/home/ilya/A/db/fault_injection_test.cc", + "/home/ilya/A/db/filename.cc", + "/home/ilya/A/db/filename.h", + "/home/ilya/A/db/filename_test.cc", + "/home/ilya/A/db/leveldbutil.cc", + "/home/ilya/A/db/log_format.h", + "/home/ilya/A/db/log_reader.cc", + "/home/ilya/A/db/log_reader.h", + "/home/ilya/A/db/log_test.cc", + "/home/ilya/A/db/log_writer.cc", + "/home/ilya/A/db/log_writer.h", + "/home/ilya/A/db/memtable.cc", + "/home/ilya/A/db/memtable.h", + "/home/ilya/A/db/recovery_test.cc", + "/home/ilya/A/db/repair.cc", + "/home/ilya/A/db/skiplist.h", + "/home/ilya/A/db/skiplist_test.cc", + "/home/ilya/A/db/snapshot.h", + "/home/ilya/A/db/table_cache.cc", + "/home/ilya/A/db/table_cache.h", + "/home/ilya/A/db/version_edit.cc", + "/home/ilya/A/db/version_edit.h", + "/home/ilya/A/db/version_edit_test.cc", + "/home/ilya/A/db/version_set.cc", + "/home/ilya/A/db/version_set.h", + "/home/ilya/A/db/version_set_test.cc", + "/home/ilya/A/db/write_batch.cc", + "/home/ilya/A/db/write_batch_internal.h", + "/home/ilya/A/db/write_batch_test.cc" ], - "language": "mixed", - "total_nloc": 166, - "total_functions": 22, - "avg_ccn": 1.77, - "max_ccn": 8, - "heavy_functions_count": 0, - "heavy_functions_ratio": 0.0, - "coupling_out": 4, - "coupling_in": 4, - "instability": 0.5, + "language": "cpp", + "total_nloc": 2664, + "total_functions": 455, + "avg_ccn": 1.7, + "max_ccn": 12, + "heavy_functions_count": 4, + "heavy_functions_ratio": 0.009, + "coupling_out": 3, + "coupling_in": 2, + "instability": 0.6, "has_cycles": true, "dependencies": [ - "src/database", - "src/error-handlers", - "src/middlewares", - "src/routes" + "port", + "table", + "util" ], "dependents": [ - "src/database", - "src/error-handlers", - "src/middlewares", - "src/routes" + "helpers/memenv", + "table" ], "functions": [ { - "name": "isPng", - "file": "/home/claude/vkr/B/src/utils.mjs", - "line": 10, - "ccn": 8, - "nloc": 11, - "params": 1 + "name": "CompareIterators", + "file": "/home/ilya/A/db/db_test.cc", + "line": 1843, + "ccn": 12, + "nloc": 71, + "params": 5 }, { - "name": "warmupExtract", - "file": "/home/claude/vkr/B/src/index.mjs", - "line": 101, - "ccn": 3, - "nloc": 12, - "params": 4 + "name": "BuildTable", + "file": "/home/ilya/A/db/builder.cc", + "line": 2, + "ccn": 11, + "nloc": 49, + "params": 6 }, { - "name": "isJpeg", - "file": "/home/claude/vkr/B/src/utils.mjs", - "line": 3, - "ccn": 3, - "nloc": 6, - "params": 1 - }, - { - "name": "createDbConnection", - "file": "/home/claude/vkr/B/src/index.mjs", - "line": 29, - "ccn": 2, - "nloc": 24, - "params": 0 - }, - { - "name": "generateApiPrefix", - "file": "/home/claude/vkr/B/src/index.mjs", - "line": 54, - "ccn": 2, - "nloc": 5, + "name": "NewWritableFile", + "file": "/home/ilya/A/db/db_test.cc", + "line": 116, + "ccn": 11, + "nloc": 71, "params": 2 }, { - "name": "(anonymous)", - "file": "/home/claude/vkr/B/src/index.mjs", - "line": 123, - "ccn": 2, - "nloc": 11, + "name": "ParseFileName", + "file": "/home/ilya/A/db/filename.cc", + "line": 55, + "ccn": 11, + "nloc": 39, + "params": 3 + }, + { + "name": "ScanTable", + "file": "/home/ilya/A/db/repair.cc", + "line": 166, + "ccn": 10, + "nloc": 51, + "params": 1 + }, + { + "name": "AllEntriesFor", + "file": "/home/ilya/A/db/db_test.cc", + "line": 327, + "ccn": 9, + "nloc": 39, + "params": 1 + }, + { + "name": "DumpTable", + "file": "/home/ilya/A/db/dumpfile.cc", + "line": 114, + "ccn": 9, + "nloc": 56, + "params": 3 + }, + { + "name": "FindFiles", + "file": "/home/ilya/A/db/repair.cc", + "line": 37, + "ccn": 9, + "nloc": 28, "params": 0 }, + { + "name": "RepairTable", + "file": "/home/ilya/A/db/repair.cc", + "line": 211, + "ccn": 9, + "nloc": 42, + "params": 2 + }, + { + "name": "WriteDescriptor", + "file": "/home/ilya/A/db/repair.cc", + "line": 249, + "ccn": 9, + "nloc": 46, + "params": 0 + }, + { + "name": "ReadStep", + "file": "/home/ilya/A/db/skiplist_test.cc", + "line": 154, + "ccn": 9, + "nloc": 42, + "params": 1 + }, + { + "name": "Corrupt", + "file": "/home/ilya/A/db/corruption_test.cc", + "line": 88, + "ccn": 8, + "nloc": 37, + "params": 3 + }, + { + "name": "SaveTo", + "file": "/home/ilya/A/db/version_set.cc", + "line": 525, + "ccn": 8, + "nloc": 34, + "params": 1 + }, + { + "name": "ConvertLogToTable", + "file": "/home/ilya/A/db/repair.cc", + "line": 83, + "ccn": 7, + "nloc": 61, + "params": 1 + }, + { + "name": "Match", + "file": "/home/ilya/A/db/version_set.cc", + "line": 258, + "ccn": 7, + "nloc": 30, + "params": 3 + }, + { + "name": "DestroyDB", + "file": "/home/ilya/A/db/db_impl.cc", + "line": 1264, + "ccn": 6, + "nloc": 26, + "params": 2 + }, + { + "name": "SomeFileOverlapsRange", + "file": "/home/ilya/A/db/version_set.cc", + "line": 78, + "ccn": 6, + "nloc": 22, + "params": 5 + }, + { + "name": "PrintContents", + "file": "/home/ilya/A/db/write_batch_test.cc", + "line": 2, + "ccn": 6, + "nloc": 37, + "params": 1 + }, { "name": "main", - "file": "/home/claude/vkr/B/src/index.mjs", - "line": 139, - "ccn": 2, + "file": "/home/ilya/A/db/c_test.c", + "line": 129, + "ccn": 5, + "nloc": 208, + "params": 2 + }, + { + "name": "Check", + "file": "/home/ilya/A/db/corruption_test.cc", + "line": 57, + "ccn": 5, + "nloc": 33, + "params": 2 + }, + { + "name": "DumpFile", + "file": "/home/ilya/A/db/dumpfile.cc", + "line": 159, + "ccn": 5, + "nloc": 15, + "params": 3 + }, + { + "name": "Truncate", + "file": "/home/ilya/A/db/fault_injection_test.cc", + "line": 20, + "ccn": 5, + "nloc": 24, + "params": 2 + }, + { + "name": "Verify", + "file": "/home/ilya/A/db/fault_injection_test.cc", + "line": 354, + "ccn": 5, + "nloc": 18, + "params": 3 + }, + { + "name": "Apply", + "file": "/home/ilya/A/db/version_set.cc", + "line": 500, + "ccn": 5, + "nloc": 19, + "params": 1 + }, + { + "name": "CmpCompare", + "file": "/home/ilya/A/db/c_test.c", + "line": 86, + "ccn": 4, + "nloc": 7, + "params": 5 + }, + { + "name": "SanitizeOptions", + "file": "/home/ilya/A/db/db_impl.cc", + "line": 62, + "ccn": 4, + "nloc": 19, + "params": 4 + }, + { + "name": "GetChildren", + "file": "/home/ilya/A/db/db_test.cc", + "line": 66, + "ccn": 4, + "nloc": 13, + "params": 2 + }, + { + "name": "CurrentOptions", + "file": "/home/ilya/A/db/db_test.cc", + "line": 233, + "ccn": 4, + "nloc": 16, + "params": 0 + }, + { + "name": "MTThreadBody", + "file": "/home/ilya/A/db/db_test.cc", + "line": 1669, + "ccn": 4, + "nloc": 34, + "params": 1 + }, + { + "name": "Run", + "file": "/home/ilya/A/db/repair.cc", + "line": 19, + "ccn": 4, "nloc": 19, "params": 0 }, { - "name": "toFixedOne", - "file": "/home/claude/vkr/B/src/utils.mjs", + "name": "RunConcurrent", + "file": "/home/ilya/A/db/skiplist_test.cc", + "line": 246, + "ccn": 4, + "nloc": 17, + "params": 1 + }, + { + "name": "SaveValue", + "file": "/home/ilya/A/db/version_set.cc", + "line": 191, + "ccn": 4, + "nloc": 12, + "params": 3 + }, + { + "name": "FindLargestKey", + "file": "/home/ilya/A/db/version_set.cc", + "line": 1066, + "ccn": 4, + "nloc": 11, + "params": 3 + }, + { + "name": "FindSmallestBoundaryFile", + "file": "/home/ilya/A/db/version_set.cc", + "line": 1080, + "ccn": 4, + "nloc": 14, + "params": 3 + }, + { + "name": "AddBoundaryInputs", + "file": "/home/ilya/A/db/version_set.cc", + "line": 1106, + "ccn": 4, + "nloc": 15, + "params": 3 + }, + { + "name": "SaveError", + "file": "/home/ilya/A/db/c.cc", + "line": 129, + "ccn": 3, + "nloc": 10, + "params": 2 + }, + { + "name": "leveldb_get", + "file": "/home/ilya/A/db/c.cc", + "line": 188, + "ccn": 3, + "nloc": 13, + "params": 6 + }, + { + "name": "CheckEqual", + "file": "/home/ilya/A/db/c_test.c", + "line": 25, + "ccn": 3, + "nloc": 11, + "params": 3 + }, + { + "name": "CheckPut", + "file": "/home/ilya/A/db/c_test.c", + "line": 64, + "ccn": 3, + "nloc": 13, + "params": 5 + }, + { + "name": "Build", + "file": "/home/ilya/A/db/corruption_test.cc", + "line": 34, + "ccn": 3, + "nloc": 12, + "params": 1 + }, + { + "name": "ClipToRange", + "file": "/home/ilya/A/db/db_impl.cc", + "line": 54, + "ccn": 3, + "nloc": 2, + "params": 3 + }, + { + "name": "DumpInternalIter", + "file": "/home/ilya/A/db/db_iter.cc", + "line": 3, + "ccn": 3, + "nloc": 8, + "params": 1 + }, + { + "name": "Sync", + "file": "/home/ilya/A/db/db_test.cc", + "line": 141, + "ccn": 3, + "nloc": 7, + "params": 0 + }, + { + "name": "Get", + "file": "/home/ilya/A/db/db_test.cc", + "line": 283, + "ccn": 3, + "nloc": 10, + "params": 2 + }, + { + "name": "Contents", + "file": "/home/ilya/A/db/db_test.cc", + "line": 296, + "ccn": 3, + "nloc": 19, + "params": 0 + }, + { + "name": "FilesPerLevel", + "file": "/home/ilya/A/db/db_test.cc", + "line": 381, + "ccn": 3, + "nloc": 13, + "params": 0 + }, + { + "name": "DumpFileCounts", + "file": "/home/ilya/A/db/db_test.cc", + "line": 422, + "ccn": 3, + "nloc": 10, + "params": 1 + }, + { + "name": "DeleteAnSSTFile", + "file": "/home/ilya/A/db/db_test.cc", + "line": 455, + "ccn": 3, + "nloc": 11, + "params": 0 + }, + { + "name": "RenameLDBToSST", + "file": "/home/ilya/A/db/db_test.cc", + "line": 471, + "ccn": 3, + "nloc": 14, + "params": 0 + }, + { + "name": "TEST_F", + "file": "/home/ilya/A/db/db_test.cc", + "line": 896, + "ccn": 3, + "nloc": 17, + "params": 2 + }, + { + "name": "TEST_F", + "file": "/home/ilya/A/db/db_test.cc", + "line": 1476, + "ccn": 3, + "nloc": 15, + "params": 2 + }, + { + "name": "WriteBatchPrinter", + "file": "/home/ilya/A/db/dumpfile.cc", + "line": 67, + "ccn": 3, + "nloc": 22, + "params": 3 + }, + { + "name": "ResetDBState", + "file": "/home/ilya/A/db/fault_injection_test.cc", + "line": 400, + "ccn": 3, + "nloc": 10, + "params": 1 + }, + { + "name": "SetCurrentFile", + "file": "/home/ilya/A/db/filename.cc", + "line": 90, + "ccn": 3, + "nloc": 13, + "params": 3 + }, + { + "name": "HandleDumpCommand", + "file": "/home/ilya/A/db/leveldbutil.cc", + "line": 16, + "ccn": 3, + "nloc": 10, + "params": 3 + }, + { + "name": "main", + "file": "/home/ilya/A/db/leveldbutil.cc", + "line": 28, + "ccn": 3, + "nloc": 15, + "params": 2 + }, + { + "name": "Read", + "file": "/home/ilya/A/db/log_test.cc", + "line": 43, + "ccn": 3, + "nloc": 11, + "params": 0 + }, + { + "name": "Read", + "file": "/home/ilya/A/db/log_test.cc", + "line": 154, + "ccn": 3, + "nloc": 13, + "params": 3 + }, + { + "name": "OpenWithStatus", + "file": "/home/ilya/A/db/recovery_test.cc", "line": 31, + "ccn": 3, + "nloc": 12, + "params": 1 + }, + { + "name": "Get", + "file": "/home/ilya/A/db/recovery_test.cc", + "line": 56, + "ccn": 3, + "nloc": 8, + "params": 2 + }, + { + "name": "GetFiles", + "file": "/home/ilya/A/db/recovery_test.cc", + "line": 98, + "ccn": 3, + "nloc": 11, + "params": 1 + }, + { + "name": "ConvertLogFilesToTables", + "file": "/home/ilya/A/db/repair.cc", + "line": 70, + "ccn": 3, + "nloc": 9, + "params": 0 + }, + { + "name": "RandomTarget", + "file": "/home/ilya/A/db/skiplist_test.cc", + "line": 132, + "ccn": 3, + "nloc": 8, + "params": 1 + }, + { + "name": "FindFile", + "file": "/home/ilya/A/db/version_set.cc", + "line": 43, + "ccn": 3, + "nloc": 12, + "params": 3 + }, + { + "name": "MaybeAddFile", + "file": "/home/ilya/A/db/version_set.cc", + "line": 578, + "ccn": 3, + "nloc": 10, + "params": 3 + }, + { + "name": "CreateFilter", + "file": "/home/ilya/A/db/c.cc", + "line": 99, + "ccn": 2, + "nloc": 10, + "params": 3 + }, + { + "name": "leveldb_open", + "file": "/home/ilya/A/db/c.cc", + "line": 148, + "ccn": 2, + "nloc": 7, + "params": 3 + }, + { + "name": "leveldb_property_value", + "file": "/home/ilya/A/db/c.cc", + "line": 220, + "ccn": 2, + "nloc": 6, + "params": 2 + }, + { + "name": "leveldb_approximate_sizes", + "file": "/home/ilya/A/db/c.cc", + "line": 227, + "ccn": 2, + "nloc": 7, + "params": 7 + }, + { + "name": "leveldb_env_destroy", + "file": "/home/ilya/A/db/c.cc", + "line": 510, + "ccn": 2, + "nloc": 2, + "params": 1 + }, + { + "name": "leveldb_env_get_test_directory", + "file": "/home/ilya/A/db/c.cc", + "line": 514, + "ccn": 2, + "nloc": 8, + "params": 1 + }, + { + "name": "Free", + "file": "/home/ilya/A/db/c_test.c", + "line": 33, + "ccn": 2, + "nloc": 4, + "params": 1 + }, + { + "name": "Property", + "file": "/home/ilya/A/db/corruption_test.cc", + "line": 131, + "ccn": 2, + "nloc": 8, + "params": 1 + }, + { + "name": "Corruption", + "file": "/home/ilya/A/db/db_impl.cc", + "line": 305, + "ccn": 2, + "nloc": 4, + "params": 2 + }, + { + "name": "CleanupIteratorState", + "file": "/home/ilya/A/db/db_impl.cc", + "line": 885, "ccn": 2, "nloc": 7, "params": 2 }, { - "name": "float32ArrayFromBuffer", - "file": "/home/claude/vkr/B/src/utils.mjs", + "name": "status", + "file": "/home/ilya/A/db/db_iter.cc", "line": 43, "ccn": 2, + "nloc": 5, + "params": 0 + }, + { + "name": "ClearSavedValue", + "file": "/home/ilya/A/db/db_iter.cc", + "line": 57, + "ccn": 2, + "nloc": 6, + "params": 0 + }, + { + "name": "Append", + "file": "/home/ilya/A/db/db_test.cc", + "line": 126, + "ccn": 2, + "nloc": 5, + "params": 1 + }, + { + "name": "Close", + "file": "/home/ilya/A/db/db_test.cc", + "line": 132, + "ccn": 2, + "nloc": 6, + "params": 0 + }, + { + "name": "Append", + "file": "/home/ilya/A/db/db_test.cc", + "line": 159, + "ccn": 2, + "nloc": 5, + "params": 1 + }, + { + "name": "Sync", + "file": "/home/ilya/A/db/db_test.cc", + "line": 168, + "ccn": 2, + "nloc": 5, + "params": 0 + }, + { + "name": "NewRandomAccessFile", + "file": "/home/ilya/A/db/db_test.cc", + "line": 185, + "ccn": 2, + "nloc": 19, + "params": 2 + }, + { + "name": "ChangeOptions", + "file": "/home/ilya/A/db/db_test.cc", + "line": 226, + "ccn": 2, + "nloc": 7, + "params": 0 + }, + { + "name": "TryReopen", + "file": "/home/ilya/A/db/db_test.cc", + "line": 260, + "ccn": 2, + "nloc": 11, + "params": 1 + }, + { + "name": "TotalTableFiles", + "file": "/home/ilya/A/db/db_test.cc", + "line": 374, + "ccn": 2, + "nloc": 5, + "params": 0 + }, + { + "name": "MakeTables", + "file": "/home/ilya/A/db/db_test.cc", + "line": 409, + "ccn": 2, + "nloc": 5, + "params": 3 + }, + { + "name": "IterStatus", + "file": "/home/ilya/A/db/db_test.cc", + "line": 446, + "ccn": 2, + "nloc": 7, + "params": 1 + }, + { + "name": "Between", + "file": "/home/ilya/A/db/db_test.cc", + "line": 1045, + "ccn": 2, + "nloc": 7, + "params": 3 + }, + { + "name": "NewIterator", + "file": "/home/ilya/A/db/db_test.cc", + "line": 1759, + "ccn": 2, "nloc": 9, "params": 1 }, { - "name": "(anonymous)", - "file": "/home/claude/vkr/B/src/index.mjs", - "line": 26, + "name": "GetApproximateSizes", + "file": "/home/ilya/A/db/db_test.cc", + "line": 1801, + "ccn": 2, + "nloc": 3, + "params": 3 + }, + { + "name": "SeekToLast", + "file": "/home/ilya/A/db/db_test.cc", + "line": 1819, + "ccn": 2, + "nloc": 5, + "params": 0 + }, + { + "name": "ParseInternalKey", + "file": "/home/ilya/A/db/dbformat.h", + "line": 91, + "ccn": 2, + "nloc": 8, + "params": 2 + }, + { + "name": "GuessType", + "file": "/home/ilya/A/db/dumpfile.cc", + "line": 3, + "ccn": 2, + "nloc": 9, + "params": 2 + }, + { + "name": "VersionEditPrinter", + "file": "/home/ilya/A/db/dumpfile.cc", + "line": 97, + "ccn": 2, + "nloc": 12, + "params": 3 + }, + { + "name": "GetDirName", + "file": "/home/ilya/A/db/fault_injection_test.cc", + "line": 7, + "ccn": 2, + "nloc": 6, + "params": 1 + }, + { + "name": "Build", + "file": "/home/ilya/A/db/fault_injection_test.cc", + "line": 335, + "ccn": 2, + "nloc": 9, + "params": 2 + }, + { + "name": "DeleteAllData", + "file": "/home/ilya/A/db/fault_injection_test.cc", + "line": 391, + "ccn": 2, + "nloc": 5, + "params": 0 + }, + { + "name": "DoTest", + "file": "/home/ilya/A/db/fault_injection_test.cc", + "line": 442, + "ccn": 2, + "nloc": 16, + "params": 0 + }, + { + "name": "BigString", + "file": "/home/ilya/A/db/log_test.cc", + "line": 2, + "ccn": 2, + "nloc": 6, + "params": 2 + }, + { + "name": "MatchError", + "file": "/home/ilya/A/db/log_test.cc", + "line": 83, + "ccn": 2, + "nloc": 5, + "params": 1 + }, + { + "name": "WriteInitialOffsetLog", + "file": "/home/ilya/A/db/log_test.cc", + "line": 91, + "ccn": 2, + "nloc": 5, + "params": 0 + }, + { + "name": "CheckInitialOffsetRecord", + "file": "/home/ilya/A/db/log_test.cc", + "line": 115, + "ccn": 2, + "nloc": 18, + "params": 2 + }, + { + "name": "Skip", + "file": "/home/ilya/A/db/log_test.cc", + "line": 167, + "ccn": 2, + "nloc": 6, + "params": 1 + }, + { + "name": "InitTypeCrc", + "file": "/home/ilya/A/db/log_writer.cc", + "line": 2, + "ccn": 2, + "nloc": 4, + "params": 1 + }, + { + "name": "Unref", + "file": "/home/ilya/A/db/memtable.h", + "line": 17, + "ccn": 2, + "nloc": 5, + "params": 0 + }, + { + "name": "CanAppend", + "file": "/home/ilya/A/db/recovery_test.cc", + "line": 18, + "ccn": 2, + "nloc": 8, + "params": 0 + }, + { + "name": "ManifestFileName", + "file": "/home/ilya/A/db/recovery_test.cc", + "line": 67, + "ccn": 2, + "nloc": 8, + "params": 0 + }, + { + "name": "RemoveLogFiles", + "file": "/home/ilya/A/db/recovery_test.cc", + "line": 80, + "ccn": 2, + "nloc": 6, + "params": 0 + }, + { + "name": "ExtractMetaData", + "file": "/home/ilya/A/db/repair.cc", + "line": 151, + "ccn": 2, + "nloc": 3, + "params": 0 + }, + { + "name": "ArchiveFile", + "file": "/home/ilya/A/db/repair.cc", + "line": 296, + "ccn": 2, + "nloc": 13, + "params": 1 + }, + { + "name": "rnd_", + "file": "/home/ilya/A/db/skiplist.h", + "line": 195, + "ccn": 2, + "nloc": 3, + "params": 1 + }, + { + "name": "State", + "file": "/home/ilya/A/db/skiplist_test.cc", + "line": 145, + "ccn": 2, + "nloc": 3, + "params": 0 + }, + { + "name": "TEST", + "file": "/home/ilya/A/db/skiplist_test.cc", + "line": 201, + "ccn": 2, + "nloc": 6, + "params": 2 + }, + { + "name": "ConcurrentReader", + "file": "/home/ilya/A/db/skiplist_test.cc", + "line": 235, + "ccn": 2, + "nloc": 9, + "params": 1 + }, + { + "name": "New", + "file": "/home/ilya/A/db/snapshot.h", + "line": 28, + "ccn": 2, + "nloc": 10, + "params": 1 + }, + { + "name": "Delete", + "file": "/home/ilya/A/db/snapshot.h", + "line": 49, + "ccn": 2, + "nloc": 6, + "params": 1 + }, + { + "name": "GetInternalKey", + "file": "/home/ilya/A/db/version_edit.cc", + "line": 72, + "ccn": 2, + "nloc": 6, + "params": 2 + }, + { + "name": "GetLevel", + "file": "/home/ilya/A/db/version_edit.cc", + "line": 78, + "ccn": 2, + "nloc": 7, + "params": 2 + }, + { + "name": "MaxBytesForLevel", + "file": "/home/ilya/A/db/version_set.cc", + "line": 18, + "ccn": 2, + "nloc": 6, + "params": 2 + }, + { + "name": "TotalFileSize", + "file": "/home/ilya/A/db/version_set.cc", + "line": 29, + "ccn": 2, + "nloc": 5, + "params": 1 + }, + { + "name": "Prev", + "file": "/home/ilya/A/db/version_set.cc", + "line": 126, + "ccn": 2, + "nloc": 6, + "params": 0 + }, + { + "name": "GetFileIterator", + "file": "/home/ilya/A/db/version_set.cc", + "line": 147, + "ccn": 2, + "nloc": 8, + "params": 3 + }, + { + "name": "Match", + "file": "/home/ilya/A/db/version_set.cc", + "line": 330, + "ccn": 2, + "nloc": 7, + "params": 3 + }, + { + "name": "Corruption", + "file": "/home/ilya/A/db/version_set.cc", + "line": 677, + "ccn": 2, + "nloc": 1, + "params": 2 + }, + { + "name": "overlapped_bytes_", + "file": "/home/ilya/A/db/version_set.cc", + "line": 1219, + "ccn": 2, + "nloc": 3, + "params": 1 + }, + { + "name": "ReuseFileNumber", + "file": "/home/ilya/A/db/version_set.h", + "line": 97, + "ccn": 2, + "nloc": 3, + "params": 1 + }, + { + "name": "AutoCompactTest", + "file": "/home/ilya/A/db/autocompact_test.cc", + "line": 2, + "ccn": 1, + "nloc": 7, + "params": 0 + }, + { + "name": "Key", + "file": "/home/ilya/A/db/autocompact_test.cc", + "line": 18, + "ccn": 1, + "nloc": 3, + "params": 1 + }, + { + "name": "Size", + "file": "/home/ilya/A/db/autocompact_test.cc", + "line": 21, + "ccn": 1, + "nloc": 4, + "params": 2 + }, + { + "name": "Compare", + "file": "/home/ilya/A/db/c.cc", + "line": 71, + "ccn": 1, + "nloc": 1, + "params": 2 + }, + { + "name": "Name", + "file": "/home/ilya/A/db/c.cc", + "line": 79, "ccn": 1, "nloc": 1, "params": 0 }, { - "name": "sleep", - "file": "/home/claude/vkr/B/src/index.mjs", - "line": 24, + "name": "FindShortestSeparator", + "file": "/home/ilya/A/db/c.cc", + "line": 83, + "ccn": 1, + "nloc": 0, + "params": 2 + }, + { + "name": "FindShortSuccessor", + "file": "/home/ilya/A/db/c.cc", + "line": 89, + "ccn": 1, + "nloc": 0, + "params": 1 + }, + { + "name": "Name", + "file": "/home/ilya/A/db/c.cc", + "line": 98, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "KeyMayMatch", + "file": "/home/ilya/A/db/c.cc", + "line": 112, + "ccn": 1, + "nloc": 2, + "params": 2 + }, + { + "name": "CopyString", + "file": "/home/ilya/A/db/c.cc", + "line": 138, "ccn": 1, "nloc": 4, "params": 1 }, { - "name": "(anonymous)", - "file": "/home/claude/vkr/B/src/index.mjs", - "line": 64, + "name": "leveldb_close", + "file": "/home/ilya/A/db/c.cc", + "line": 161, + "ccn": 1, + "nloc": 2, + "params": 1 + }, + { + "name": "leveldb_put", + "file": "/home/ilya/A/db/c.cc", + "line": 163, + "ccn": 1, + "nloc": 2, + "params": 7 + }, + { + "name": "leveldb_delete", + "file": "/home/ilya/A/db/c.cc", + "line": 171, + "ccn": 1, + "nloc": 1, + "params": 5 + }, + { + "name": "leveldb_write", + "file": "/home/ilya/A/db/c.cc", + "line": 184, + "ccn": 1, + "nloc": 1, + "params": 4 + }, + { + "name": "leveldb_create_iterator", + "file": "/home/ilya/A/db/c.cc", + "line": 198, + "ccn": 1, + "nloc": 3, + "params": 2 + }, + { + "name": "leveldb_create_snapshot", + "file": "/home/ilya/A/db/c.cc", + "line": 205, + "ccn": 1, + "nloc": 3, + "params": 1 + }, + { + "name": "leveldb_release_snapshot", + "file": "/home/ilya/A/db/c.cc", + "line": 212, + "ccn": 1, + "nloc": 2, + "params": 2 + }, + { + "name": "leveldb_compact_range", + "file": "/home/ilya/A/db/c.cc", + "line": 250, + "ccn": 1, + "nloc": 4, + "params": 5 + }, + { + "name": "leveldb_destroy_db", + "file": "/home/ilya/A/db/c.cc", + "line": 256, + "ccn": 1, + "nloc": 1, + "params": 3 + }, + { + "name": "leveldb_repair_db", + "file": "/home/ilya/A/db/c.cc", + "line": 263, + "ccn": 1, + "nloc": 1, + "params": 3 + }, + { + "name": "leveldb_iter_destroy", + "file": "/home/ilya/A/db/c.cc", + "line": 265, + "ccn": 1, + "nloc": 2, + "params": 1 + }, + { + "name": "leveldb_iter_valid", + "file": "/home/ilya/A/db/c.cc", + "line": 268, + "ccn": 1, + "nloc": 1, + "params": 1 + }, + { + "name": "leveldb_iter_seek_to_first", + "file": "/home/ilya/A/db/c.cc", + "line": 269, + "ccn": 1, + "nloc": 1, + "params": 1 + }, + { + "name": "leveldb_iter_seek_to_last", + "file": "/home/ilya/A/db/c.cc", + "line": 273, + "ccn": 1, + "nloc": 1, + "params": 1 + }, + { + "name": "leveldb_iter_seek", + "file": "/home/ilya/A/db/c.cc", + "line": 274, + "ccn": 1, + "nloc": 1, + "params": 3 + }, + { + "name": "leveldb_iter_next", + "file": "/home/ilya/A/db/c.cc", + "line": 278, + "ccn": 1, + "nloc": 1, + "params": 1 + }, + { + "name": "leveldb_iter_prev", + "file": "/home/ilya/A/db/c.cc", + "line": 280, + "ccn": 1, + "nloc": 1, + "params": 1 + }, + { + "name": "leveldb_iter_key", + "file": "/home/ilya/A/db/c.cc", + "line": 283, + "ccn": 1, + "nloc": 3, + "params": 2 + }, + { + "name": "leveldb_iter_value", + "file": "/home/ilya/A/db/c.cc", + "line": 289, + "ccn": 1, + "nloc": 3, + "params": 2 + }, + { + "name": "leveldb_iter_get_error", + "file": "/home/ilya/A/db/c.cc", + "line": 296, + "ccn": 1, + "nloc": 1, + "params": 2 + }, + { + "name": "leveldb_writebatch_create", + "file": "/home/ilya/A/db/c.cc", + "line": 301, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "leveldb_writebatch_destroy", + "file": "/home/ilya/A/db/c.cc", + "line": 304, + "ccn": 1, + "nloc": 1, + "params": 1 + }, + { + "name": "leveldb_writebatch_clear", + "file": "/home/ilya/A/db/c.cc", + "line": 306, + "ccn": 1, + "nloc": 1, + "params": 1 + }, + { + "name": "leveldb_writebatch_put", + "file": "/home/ilya/A/db/c.cc", + "line": 308, + "ccn": 1, + "nloc": 1, + "params": 5 + }, + { + "name": "leveldb_writebatch_delete", + "file": "/home/ilya/A/db/c.cc", + "line": 315, + "ccn": 1, + "nloc": 1, + "params": 3 + }, + { + "name": "Put", + "file": "/home/ilya/A/db/c.cc", + "line": 339, + "ccn": 1, + "nloc": 1, + "params": 2 + }, + { + "name": "Delete", + "file": "/home/ilya/A/db/c.cc", + "line": 343, + "ccn": 1, + "nloc": 1, + "params": 1 + }, + { + "name": "leveldb_writebatch_append", + "file": "/home/ilya/A/db/c.cc", + "line": 346, + "ccn": 1, + "nloc": 1, + "params": 2 + }, + { + "name": "leveldb_options_create", + "file": "/home/ilya/A/db/c.cc", + "line": 350, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "leveldb_options_destroy", + "file": "/home/ilya/A/db/c.cc", + "line": 352, + "ccn": 1, + "nloc": 1, + "params": 1 + }, + { + "name": "leveldb_options_set_comparator", + "file": "/home/ilya/A/db/c.cc", + "line": 353, + "ccn": 1, + "nloc": 1, + "params": 2 + }, + { + "name": "leveldb_options_set_filter_policy", + "file": "/home/ilya/A/db/c.cc", + "line": 359, + "ccn": 1, + "nloc": 1, + "params": 2 + }, + { + "name": "leveldb_options_set_create_if_missing", + "file": "/home/ilya/A/db/c.cc", + "line": 366, + "ccn": 1, + "nloc": 1, + "params": 2 + }, + { + "name": "leveldb_options_set_error_if_exists", + "file": "/home/ilya/A/db/c.cc", + "line": 369, + "ccn": 1, + "nloc": 1, + "params": 2 + }, + { + "name": "leveldb_options_set_paranoid_checks", + "file": "/home/ilya/A/db/c.cc", + "line": 373, + "ccn": 1, + "nloc": 1, + "params": 2 + }, + { + "name": "leveldb_options_set_env", + "file": "/home/ilya/A/db/c.cc", + "line": 376, + "ccn": 1, + "nloc": 1, + "params": 2 + }, + { + "name": "leveldb_options_set_info_log", + "file": "/home/ilya/A/db/c.cc", + "line": 380, + "ccn": 1, + "nloc": 1, + "params": 2 + }, + { + "name": "leveldb_options_set_write_buffer_size", + "file": "/home/ilya/A/db/c.cc", + "line": 382, + "ccn": 1, + "nloc": 1, + "params": 2 + }, + { + "name": "leveldb_options_set_max_open_files", + "file": "/home/ilya/A/db/c.cc", + "line": 386, + "ccn": 1, + "nloc": 1, + "params": 2 + }, + { + "name": "leveldb_options_set_cache", + "file": "/home/ilya/A/db/c.cc", + "line": 390, + "ccn": 1, + "nloc": 1, + "params": 2 + }, + { + "name": "leveldb_options_set_block_size", + "file": "/home/ilya/A/db/c.cc", + "line": 394, + "ccn": 1, + "nloc": 1, + "params": 2 + }, + { + "name": "leveldb_options_set_block_restart_interval", + "file": "/home/ilya/A/db/c.cc", + "line": 398, + "ccn": 1, + "nloc": 1, + "params": 2 + }, + { + "name": "leveldb_options_set_max_file_size", + "file": "/home/ilya/A/db/c.cc", + "line": 402, + "ccn": 1, + "nloc": 1, + "params": 2 + }, + { + "name": "leveldb_options_set_compression", + "file": "/home/ilya/A/db/c.cc", + "line": 405, + "ccn": 1, + "nloc": 1, + "params": 2 + }, + { + "name": "leveldb_comparator_destroy", + "file": "/home/ilya/A/db/c.cc", + "line": 425, + "ccn": 1, + "nloc": 1, + "params": 1 + }, + { + "name": "leveldb_filterpolicy_destroy", + "file": "/home/ilya/A/db/c.cc", + "line": 449, + "ccn": 1, + "nloc": 1, + "params": 1 + }, + { + "name": "leveldb_filterpolicy_create_bloom", + "file": "/home/ilya/A/db/c.cc", + "line": 451, + "ccn": 1, + "nloc": 17, + "params": 1 + }, + { + "name": "DoNothing", + "file": "/home/ilya/A/db/c.cc", + "line": 453, + "ccn": 1, + "nloc": 0, + "params": 1 + }, + { + "name": "Name", + "file": "/home/ilya/A/db/c.cc", + "line": 454, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "CreateFilter", + "file": "/home/ilya/A/db/c.cc", + "line": 455, + "ccn": 1, + "nloc": 1, + "params": 3 + }, + { + "name": "KeyMayMatch", + "file": "/home/ilya/A/db/c.cc", + "line": 458, + "ccn": 1, + "nloc": 1, + "params": 2 + }, + { + "name": "leveldb_readoptions_create", + "file": "/home/ilya/A/db/c.cc", + "line": 470, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "leveldb_readoptions_destroy", + "file": "/home/ilya/A/db/c.cc", + "line": 472, + "ccn": 1, + "nloc": 1, + "params": 1 + }, + { + "name": "leveldb_readoptions_set_verify_checksums", + "file": "/home/ilya/A/db/c.cc", + "line": 474, + "ccn": 1, + "nloc": 1, + "params": 2 + }, + { + "name": "leveldb_readoptions_set_fill_cache", + "file": "/home/ilya/A/db/c.cc", + "line": 478, + "ccn": 1, + "nloc": 1, + "params": 2 + }, + { + "name": "leveldb_readoptions_set_snapshot", + "file": "/home/ilya/A/db/c.cc", + "line": 481, + "ccn": 1, + "nloc": 1, + "params": 2 + }, + { + "name": "leveldb_writeoptions_create", + "file": "/home/ilya/A/db/c.cc", + "line": 488, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "leveldb_writeoptions_destroy", + "file": "/home/ilya/A/db/c.cc", + "line": 491, + "ccn": 1, + "nloc": 1, + "params": 1 + }, + { + "name": "leveldb_writeoptions_set_sync", + "file": "/home/ilya/A/db/c.cc", + "line": 495, + "ccn": 1, + "nloc": 1, + "params": 2 + }, + { + "name": "leveldb_cache_create_lru", + "file": "/home/ilya/A/db/c.cc", + "line": 498, + "ccn": 1, + "nloc": 3, + "params": 1 + }, + { + "name": "leveldb_cache_destroy", + "file": "/home/ilya/A/db/c.cc", + "line": 502, + "ccn": 1, + "nloc": 2, + "params": 1 + }, + { + "name": "leveldb_create_default_env", + "file": "/home/ilya/A/db/c.cc", + "line": 505, + "ccn": 1, + "nloc": 4, + "params": 0 + }, + { + "name": "leveldb_free", + "file": "/home/ilya/A/db/c.cc", + "line": 525, + "ccn": 1, + "nloc": 1, + "params": 1 + }, + { + "name": "leveldb_major_version", + "file": "/home/ilya/A/db/c.cc", + "line": 527, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "leveldb_minor_version", + "file": "/home/ilya/A/db/c.cc", + "line": 530, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "StartPhase", + "file": "/home/ilya/A/db/c_test.c", + "line": 2, + "ccn": 1, + "nloc": 2, + "params": 1 + }, + { + "name": "CheckGet", + "file": "/home/ilya/A/db/c_test.c", + "line": 35, + "ccn": 1, + "nloc": 7, + "params": 4 + }, + { + "name": "CheckIter", + "file": "/home/ilya/A/db/c_test.c", + "line": 54, + "ccn": 1, + "nloc": 6, + "params": 3 + }, + { + "name": "CheckDel", + "file": "/home/ilya/A/db/c_test.c", + "line": 80, + "ccn": 1, + "nloc": 4, + "params": 3 + }, + { + "name": "CmpDestroy", + "file": "/home/ilya/A/db/c_test.c", + "line": 84, + "ccn": 1, + "nloc": 0, + "params": 1 + }, + { + "name": "CmpName", + "file": "/home/ilya/A/db/c_test.c", + "line": 98, + "ccn": 1, + "nloc": 1, + "params": 1 + }, + { + "name": "FilterDestroy", + "file": "/home/ilya/A/db/c_test.c", + "line": 102, + "ccn": 1, + "nloc": 0, + "params": 1 + }, + { + "name": "FilterName", + "file": "/home/ilya/A/db/c_test.c", + "line": 105, + "ccn": 1, + "nloc": 1, + "params": 1 + }, + { + "name": "FilterCreate", + "file": "/home/ilya/A/db/c_test.c", + "line": 107, + "ccn": 1, + "nloc": 4, + "params": 5 + }, + { + "name": "FilterKeyMatch", + "file": "/home/ilya/A/db/c_test.c", + "line": 118, + "ccn": 1, + "nloc": 3, + "params": 5 + }, + { + "name": "TryReopen", + "file": "/home/ilya/A/db/corruption_test.cc", + "line": 24, "ccn": 1, "nloc": 3, "params": 0 }, { - "name": "addModuleMiddlewares", - "file": "/home/claude/vkr/B/src/index.mjs", + "name": "Reopen", + "file": "/home/ilya/A/db/corruption_test.cc", + "line": 28, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "RepairDB", + "file": "/home/ilya/A/db/corruption_test.cc", + "line": 30, + "ccn": 1, + "nloc": 3, + "params": 0 + }, + { + "name": "Key", + "file": "/home/ilya/A/db/corruption_test.cc", + "line": 141, + "ccn": 1, + "nloc": 4, + "params": 2 + }, + { + "name": "Value", + "file": "/home/ilya/A/db/corruption_test.cc", + "line": 149, + "ccn": 1, + "nloc": 2, + "params": 2 + }, + { + "name": "current_output", + "file": "/home/ilya/A/db/db_impl.cc", + "line": 31, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "total_bytes", + "file": "/home/ilya/A/db/db_impl.cc", + "line": 42, + "ccn": 1, + "nloc": 0, + "params": 1 + }, + { + "name": "TableCacheSize", + "file": "/home/ilya/A/db/db_impl.cc", + "line": 94, + "ccn": 1, + "nloc": 1, + "params": 1 + }, + { + "name": "Add", + "file": "/home/ilya/A/db/db_impl.h", + "line": 57, + "ccn": 1, + "nloc": 3, + "params": 1 + }, + { + "name": "user_comparator", + "file": "/home/ilya/A/db/db_impl.h", + "line": 112, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "Valid", + "file": "/home/ilya/A/db/db_iter.cc", + "line": 37, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "key", + "file": "/home/ilya/A/db/db_iter.cc", + "line": 37, + "ccn": 1, + "nloc": 2, + "params": 0 + }, + { + "name": "value", + "file": "/home/ilya/A/db/db_iter.cc", + "line": 41, + "ccn": 1, + "nloc": 2, + "params": 0 + }, + { + "name": "SaveKey", + "file": "/home/ilya/A/db/db_iter.cc", + "line": 54, + "ccn": 1, + "nloc": 1, + "params": 2 + }, + { + "name": "RandomCompactionPeriod", + "file": "/home/ilya/A/db/db_iter.cc", + "line": 64, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "NewDBIterator", + "file": "/home/ilya/A/db/db_iter.cc", + "line": 225, + "ccn": 1, + "nloc": 1, + "params": 5 + }, + { + "name": "RandomString", + "file": "/home/ilya/A/db/db_test.cc", + "line": 8, + "ccn": 1, + "nloc": 3, + "params": 2 + }, + { + "name": "RandomKey", + "file": "/home/ilya/A/db/db_test.cc", + "line": 14, + "ccn": 1, + "nloc": 4, + "params": 1 + }, + { + "name": "Increment", + "file": "/home/ilya/A/db/db_test.cc", + "line": 24, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "DelayMilliseconds", + "file": "/home/ilya/A/db/db_test.cc", + "line": 38, + "ccn": 1, + "nloc": 1, + "params": 1 + }, + { + "name": "IsLdbFile", + "file": "/home/ilya/A/db/db_test.cc", + "line": 43, + "ccn": 1, + "nloc": 1, + "params": 1 + }, + { + "name": "IsLogFile", + "file": "/home/ilya/A/db/db_test.cc", + "line": 47, + "ccn": 1, + "nloc": 1, + "params": 1 + }, + { + "name": "IsManifestFile", + "file": "/home/ilya/A/db/db_test.cc", + "line": 49, + "ccn": 1, + "nloc": 1, + "params": 1 + }, + { + "name": "SetIgnoreDotFiles", + "file": "/home/ilya/A/db/db_test.cc", + "line": 62, + "ccn": 1, + "nloc": 1, + "params": 1 + }, + { + "name": "count_random_reads_", + "file": "/home/ilya/A/db/db_test.cc", + "line": 116, + "ccn": 1, + "nloc": 0, + "params": 1 + }, + { + "name": "Flush", + "file": "/home/ilya/A/db/db_test.cc", + "line": 139, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "Close", + "file": "/home/ilya/A/db/db_test.cc", + "line": 166, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "Flush", + "file": "/home/ilya/A/db/db_test.cc", + "line": 167, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "Read", + "file": "/home/ilya/A/db/db_test.cc", + "line": 200, + "ccn": 1, + "nloc": 2, + "params": 4 + }, + { + "name": "dbfull", + "file": "/home/ilya/A/db/db_test.cc", + "line": 245, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "Reopen", + "file": "/home/ilya/A/db/db_test.cc", + "line": 246, + "ccn": 1, + "nloc": 1, + "params": 1 + }, + { + "name": "Close", + "file": "/home/ilya/A/db/db_test.cc", + "line": 248, + "ccn": 1, + "nloc": 2, + "params": 0 + }, + { + "name": "DestroyAndReopen", + "file": "/home/ilya/A/db/db_test.cc", + "line": 252, + "ccn": 1, + "nloc": 4, + "params": 1 + }, + { + "name": "Put", + "file": "/home/ilya/A/db/db_test.cc", + "line": 271, + "ccn": 1, + "nloc": 1, + "params": 2 + }, + { + "name": "Delete", + "file": "/home/ilya/A/db/db_test.cc", + "line": 278, + "ccn": 1, + "nloc": 1, + "params": 1 + }, + { + "name": "NumTableFilesAtLevel", + "file": "/home/ilya/A/db/db_test.cc", + "line": 370, + "ccn": 1, + "nloc": 4, + "params": 1 + }, + { + "name": "CountFiles", + "file": "/home/ilya/A/db/db_test.cc", + "line": 396, + "ccn": 1, + "nloc": 3, + "params": 0 + }, + { + "name": "Size", + "file": "/home/ilya/A/db/db_test.cc", + "line": 399, + "ccn": 1, + "nloc": 4, + "params": 2 + }, + { + "name": "Compact", + "file": "/home/ilya/A/db/db_test.cc", + "line": 406, + "ccn": 1, + "nloc": 1, + "params": 2 + }, + { + "name": "FillLevels", + "file": "/home/ilya/A/db/db_test.cc", + "line": 417, + "ccn": 1, + "nloc": 1, + "params": 2 + }, + { + "name": "DumpSSTableList", + "file": "/home/ilya/A/db/db_test.cc", + "line": 440, + "ccn": 1, + "nloc": 3, + "params": 0 + }, + { + "name": "Key", + "file": "/home/ilya/A/db/db_test.cc", + "line": 920, + "ccn": 1, + "nloc": 3, + "params": 1 + }, + { + "name": "Name", + "file": "/home/ilya/A/db/db_test.cc", + "line": 1316, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "Compare", + "file": "/home/ilya/A/db/db_test.cc", + "line": 1317, + "ccn": 1, + "nloc": 1, + "params": 2 + }, + { + "name": "FindShortestSeparator", + "file": "/home/ilya/A/db/db_test.cc", + "line": 1319, + "ccn": 1, + "nloc": 1, + "params": 2 + }, + { + "name": "FindShortSuccessor", + "file": "/home/ilya/A/db/db_test.cc", + "line": 1323, + "ccn": 1, + "nloc": 1, + "params": 1 + }, + { + "name": "Name", + "file": "/home/ilya/A/db/db_test.cc", + "line": 1342, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "Compare", + "file": "/home/ilya/A/db/db_test.cc", + "line": 1344, + "ccn": 1, + "nloc": 1, + "params": 2 + }, + { + "name": "FindShortestSeparator", + "file": "/home/ilya/A/db/db_test.cc", + "line": 1347, + "ccn": 1, + "nloc": 2, + "params": 2 + }, + { + "name": "FindShortSuccessor", + "file": "/home/ilya/A/db/db_test.cc", + "line": 1354, + "ccn": 1, + "nloc": 1, + "params": 1 + }, + { + "name": "ToNumber", + "file": "/home/ilya/A/db/db_test.cc", + "line": 1358, + "ccn": 1, + "nloc": 7, + "params": 1 + }, + { + "name": "Put", + "file": "/home/ilya/A/db/db_test.cc", + "line": 1747, + "ccn": 1, + "nloc": 1, + "params": 3 + }, + { + "name": "Delete", + "file": "/home/ilya/A/db/db_test.cc", + "line": 1751, + "ccn": 1, + "nloc": 1, + "params": 2 + }, + { + "name": "Get", + "file": "/home/ilya/A/db/db_test.cc", + "line": 1754, + "ccn": 1, + "nloc": 2, + "params": 3 + }, + { + "name": "GetSnapshot", + "file": "/home/ilya/A/db/db_test.cc", + "line": 1774, + "ccn": 1, + "nloc": 3, + "params": 0 + }, + { + "name": "ReleaseSnapshot", + "file": "/home/ilya/A/db/db_test.cc", + "line": 1779, + "ccn": 1, + "nloc": 1, + "params": 1 + }, + { + "name": "Write", + "file": "/home/ilya/A/db/db_test.cc", + "line": 1785, + "ccn": 1, + "nloc": 11, + "params": 2 + }, + { + "name": "Put", + "file": "/home/ilya/A/db/db_test.cc", + "line": 1788, + "ccn": 1, + "nloc": 1, + "params": 2 + }, + { + "name": "Delete", + "file": "/home/ilya/A/db/db_test.cc", + "line": 1790, + "ccn": 1, + "nloc": 1, + "params": 1 + }, + { + "name": "GetProperty", + "file": "/home/ilya/A/db/db_test.cc", + "line": 1798, + "ccn": 1, + "nloc": 1, + "params": 2 + }, + { + "name": "CompactRange", + "file": "/home/ilya/A/db/db_test.cc", + "line": 1804, + "ccn": 1, + "nloc": 0, + "params": 2 + }, + { + "name": "Valid", + "file": "/home/ilya/A/db/db_test.cc", + "line": 1815, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "SeekToFirst", + "file": "/home/ilya/A/db/db_test.cc", + "line": 1819, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "Seek", + "file": "/home/ilya/A/db/db_test.cc", + "line": 1825, + "ccn": 1, + "nloc": 1, + "params": 1 + }, + { + "name": "Next", + "file": "/home/ilya/A/db/db_test.cc", + "line": 1829, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "Prev", + "file": "/home/ilya/A/db/db_test.cc", + "line": 1830, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "key", + "file": "/home/ilya/A/db/db_test.cc", + "line": 1832, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "value", + "file": "/home/ilya/A/db/db_test.cc", + "line": 1834, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "status", + "file": "/home/ilya/A/db/db_test.cc", + "line": 1835, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "PackSequenceAndType", + "file": "/home/ilya/A/db/dbformat.cc", + "line": 2, + "ccn": 1, + "nloc": 3, + "params": 2 + }, + { + "name": "AppendInternalKey", + "file": "/home/ilya/A/db/dbformat.cc", + "line": 8, + "ccn": 1, + "nloc": 2, + "params": 2 + }, + { + "name": "ParsedInternalKey", + "file": "/home/ilya/A/db/dbformat.h", + "line": 30, + "ccn": 1, + "nloc": 0, + "params": 0 + }, + { + "name": "InternalKeyEncodingLength", + "file": "/home/ilya/A/db/dbformat.h", + "line": 36, + "ccn": 1, + "nloc": 1, + "params": 1 + }, + { + "name": "ExtractUserKey", + "file": "/home/ilya/A/db/dbformat.h", + "line": 40, + "ccn": 1, + "nloc": 2, + "params": 1 + }, + { + "name": "user_comparator", + "file": "/home/ilya/A/db/dbformat.h", + "line": 56, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "InternalKey", + "file": "/home/ilya/A/db/dbformat.h", + "line": 69, + "ccn": 1, + "nloc": 0, + "params": 0 + }, + { + "name": "InternalKey", + "file": "/home/ilya/A/db/dbformat.h", + "line": 71, + "ccn": 1, + "nloc": 1, + "params": 3 + }, + { + "name": "DecodeFrom", + "file": "/home/ilya/A/db/dbformat.h", + "line": 75, + "ccn": 1, + "nloc": 2, + "params": 1 + }, + { + "name": "Encode", + "file": "/home/ilya/A/db/dbformat.h", + "line": 77, + "ccn": 1, + "nloc": 2, + "params": 0 + }, + { + "name": "user_key", + "file": "/home/ilya/A/db/dbformat.h", + "line": 80, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "SetFrom", + "file": "/home/ilya/A/db/dbformat.h", + "line": 81, + "ccn": 1, + "nloc": 2, + "params": 1 + }, + { + "name": "Clear", + "file": "/home/ilya/A/db/dbformat.h", + "line": 85, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "memtable_key", + "file": "/home/ilya/A/db/dbformat.h", + "line": 108, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "internal_key", + "file": "/home/ilya/A/db/dbformat.h", + "line": 109, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "user_key", + "file": "/home/ilya/A/db/dbformat.h", + "line": 111, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "IKey", + "file": "/home/ilya/A/db/dbformat_test.cc", + "line": 1, + "ccn": 1, + "nloc": 3, + "params": 3 + }, + { + "name": "Shorten", + "file": "/home/ilya/A/db/dbformat_test.cc", + "line": 8, + "ccn": 1, + "nloc": 3, + "params": 2 + }, + { + "name": "ShortSuccessor", + "file": "/home/ilya/A/db/dbformat_test.cc", + "line": 15, + "ccn": 1, + "nloc": 3, + "params": 1 + }, + { + "name": "TestKey", + "file": "/home/ilya/A/db/dbformat_test.cc", + "line": 21, + "ccn": 1, + "nloc": 8, + "params": 3 + }, + { + "name": "Corruption", + "file": "/home/ilya/A/db/dumpfile.cc", + "line": 22, + "ccn": 1, + "nloc": 6, + "params": 2 + }, + { + "name": "Put", + "file": "/home/ilya/A/db/dumpfile.cc", + "line": 55, + "ccn": 1, + "nloc": 6, + "params": 2 + }, + { + "name": "Delete", + "file": "/home/ilya/A/db/dumpfile.cc", + "line": 61, + "ccn": 1, + "nloc": 4, + "params": 1 + }, + { + "name": "DumpLog", + "file": "/home/ilya/A/db/dumpfile.cc", + "line": 95, + "ccn": 1, + "nloc": 1, + "params": 3 + }, + { + "name": "DumpDescriptor", + "file": "/home/ilya/A/db/dumpfile.cc", + "line": 109, + "ccn": 1, + "nloc": 1, + "params": 3 + }, + { + "name": "SyncDir", + "file": "/home/ilya/A/db/fault_injection_test.cc", + "line": 17, + "ccn": 1, + "nloc": 1, + "params": 1 + }, + { + "name": "pos_at_last_flush_", + "file": "/home/ilya/A/db/fault_injection_test.cc", + "line": 58, + "ccn": 1, + "nloc": 0, + "params": 1 + }, + { + "name": "IsFullySynced", + "file": "/home/ilya/A/db/fault_injection_test.cc", + "line": 61, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "db_", + "file": "/home/ilya/A/db/fault_injection_test.cc", + "line": 321, + "ccn": 1, + "nloc": 7, + "params": 1 + }, + { + "name": "ReuseLogs", + "file": "/home/ilya/A/db/fault_injection_test.cc", + "line": 334, + "ccn": 1, + "nloc": 1, + "params": 1 + }, + { + "name": "ReadValue", + "file": "/home/ilya/A/db/fault_injection_test.cc", + "line": 345, + "ccn": 1, + "nloc": 5, + "params": 2 + }, + { + "name": "Key", + "file": "/home/ilya/A/db/fault_injection_test.cc", + "line": 373, + "ccn": 1, + "nloc": 4, + "params": 2 + }, + { + "name": "Value", + "file": "/home/ilya/A/db/fault_injection_test.cc", + "line": 380, + "ccn": 1, + "nloc": 2, + "params": 2 + }, + { + "name": "OpenDB", + "file": "/home/ilya/A/db/fault_injection_test.cc", + "line": 383, + "ccn": 1, + "nloc": 4, + "params": 0 + }, + { + "name": "CloseDB", + "file": "/home/ilya/A/db/fault_injection_test.cc", + "line": 388, + "ccn": 1, + "nloc": 2, + "params": 0 + }, + { + "name": "PartialCompactTestPreFault", + "file": "/home/ilya/A/db/fault_injection_test.cc", + "line": 412, + "ccn": 1, + "nloc": 4, + "params": 2 + }, + { + "name": "PartialCompactTestReopenWithFault", + "file": "/home/ilya/A/db/fault_injection_test.cc", + "line": 419, + "ccn": 1, + "nloc": 8, + "params": 3 + }, + { + "name": "NoWriteTestPreFault", + "file": "/home/ilya/A/db/fault_injection_test.cc", + "line": 433, + "ccn": 1, + "nloc": 0, + "params": 0 + }, + { + "name": "NoWriteTestReopenWithFault", + "file": "/home/ilya/A/db/fault_injection_test.cc", + "line": 434, + "ccn": 1, + "nloc": 3, + "params": 1 + }, + { + "name": "MakeFileName", + "file": "/home/ilya/A/db/filename.cc", + "line": 5, + "ccn": 1, + "nloc": 4, + "params": 3 + }, + { + "name": "LogFileName", + "file": "/home/ilya/A/db/filename.cc", + "line": 18, + "ccn": 1, + "nloc": 2, + "params": 2 + }, + { + "name": "TableFileName", + "file": "/home/ilya/A/db/filename.cc", + "line": 21, + "ccn": 1, + "nloc": 2, + "params": 2 + }, + { + "name": "SSTTableFileName", + "file": "/home/ilya/A/db/filename.cc", + "line": 24, + "ccn": 1, + "nloc": 2, + "params": 2 + }, + { + "name": "DescriptorFileName", + "file": "/home/ilya/A/db/filename.cc", + "line": 29, + "ccn": 1, + "nloc": 5, + "params": 2 + }, + { + "name": "CurrentFileName", + "file": "/home/ilya/A/db/filename.cc", + "line": 38, + "ccn": 1, + "nloc": 1, + "params": 1 + }, + { + "name": "LockFileName", + "file": "/home/ilya/A/db/filename.cc", + "line": 40, + "ccn": 1, + "nloc": 1, + "params": 1 + }, + { + "name": "TempFileName", + "file": "/home/ilya/A/db/filename.cc", + "line": 43, + "ccn": 1, + "nloc": 2, + "params": 2 + }, + { + "name": "InfoLogFileName", + "file": "/home/ilya/A/db/filename.cc", + "line": 47, + "ccn": 1, + "nloc": 1, + "params": 1 + }, + { + "name": "OldInfoLogFileName", + "file": "/home/ilya/A/db/filename.cc", + "line": 51, + "ccn": 1, + "nloc": 1, + "params": 1 + }, + { + "name": "Append", + "file": "/home/ilya/A/db/leveldbutil.cc", + "line": 2, + "ccn": 1, + "nloc": 2, + "params": 1 + }, + { + "name": "Close", + "file": "/home/ilya/A/db/leveldbutil.cc", + "line": 8, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "Flush", + "file": "/home/ilya/A/db/leveldbutil.cc", + "line": 11, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "Sync", + "file": "/home/ilya/A/db/leveldbutil.cc", + "line": 14, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "Usage", + "file": "/home/ilya/A/db/leveldbutil.cc", + "line": 25, + "ccn": 1, + "nloc": 4, + "params": 0 + }, + { + "name": "resyncing_", + "file": "/home/ilya/A/db/log_reader.cc", + "line": 19, + "ccn": 1, + "nloc": 0, + "params": 1 + }, + { + "name": "NumberString", + "file": "/home/ilya/A/db/log_test.cc", + "line": 9, + "ccn": 1, + "nloc": 3, + "params": 1 + }, + { + "name": "RandomSkewedString", + "file": "/home/ilya/A/db/log_test.cc", + "line": 16, + "ccn": 1, + "nloc": 1, + "params": 2 + }, + { + "name": "ReopenForAppend", + "file": "/home/ilya/A/db/log_test.cc", + "line": 30, + "ccn": 1, + "nloc": 2, + "params": 0 + }, + { + "name": "Write", + "file": "/home/ilya/A/db/log_test.cc", + "line": 35, + "ccn": 1, + "nloc": 2, + "params": 1 + }, + { + "name": "WrittenBytes", + "file": "/home/ilya/A/db/log_test.cc", + "line": 39, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "IncrementByte", + "file": "/home/ilya/A/db/log_test.cc", + "line": 54, + "ccn": 1, + "nloc": 1, + "params": 2 + }, + { + "name": "SetByte", + "file": "/home/ilya/A/db/log_test.cc", + "line": 58, + "ccn": 1, + "nloc": 1, + "params": 2 + }, + { + "name": "ShrinkSize", + "file": "/home/ilya/A/db/log_test.cc", "line": 60, "ccn": 1, + "nloc": 1, + "params": 1 + }, + { + "name": "FixChecksum", + "file": "/home/ilya/A/db/log_test.cc", + "line": 65, + "ccn": 1, + "nloc": 3, + "params": 2 + }, + { + "name": "ForceError", + "file": "/home/ilya/A/db/log_test.cc", + "line": 73, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "DroppedBytes", + "file": "/home/ilya/A/db/log_test.cc", + "line": 78, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "ReportMessage", + "file": "/home/ilya/A/db/log_test.cc", + "line": 79, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "StartReadingAt", + "file": "/home/ilya/A/db/log_test.cc", + "line": 97, + "ccn": 1, + "nloc": 2, + "params": 1 + }, + { + "name": "CheckOffsetPastEndReturnsNoRecords", + "file": "/home/ilya/A/db/log_test.cc", + "line": 103, + "ccn": 1, + "nloc": 9, + "params": 1 + }, + { + "name": "Close", + "file": "/home/ilya/A/db/log_test.cc", + "line": 145, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "Flush", + "file": "/home/ilya/A/db/log_test.cc", + "line": 146, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "Sync", + "file": "/home/ilya/A/db/log_test.cc", + "line": 146, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "Append", + "file": "/home/ilya/A/db/log_test.cc", + "line": 147, + "ccn": 1, + "nloc": 2, + "params": 1 + }, + { + "name": "Corruption", + "file": "/home/ilya/A/db/log_test.cc", + "line": 180, + "ccn": 1, + "nloc": 2, + "params": 2 + }, + { + "name": "TEST_F", + "file": "/home/ilya/A/db/log_test.cc", + "line": 310, + "ccn": 1, + "nloc": 5, + "params": 2 + }, + { + "name": "GetLengthPrefixedSlice", + "file": "/home/ilya/A/db/memtable.cc", + "line": 2, + "ccn": 1, + "nloc": 4, + "params": 1 + }, + { + "name": "EncodeKey", + "file": "/home/ilya/A/db/memtable.cc", + "line": 24, + "ccn": 1, + "nloc": 4, + "params": 2 + }, + { + "name": "Valid", + "file": "/home/ilya/A/db/memtable.cc", + "line": 37, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "Seek", + "file": "/home/ilya/A/db/memtable.cc", + "line": 38, + "ccn": 1, + "nloc": 1, + "params": 1 + }, + { + "name": "SeekToFirst", + "file": "/home/ilya/A/db/memtable.cc", + "line": 39, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "SeekToLast", + "file": "/home/ilya/A/db/memtable.cc", + "line": 41, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "Next", + "file": "/home/ilya/A/db/memtable.cc", + "line": 42, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "Prev", + "file": "/home/ilya/A/db/memtable.cc", + "line": 46, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "key", + "file": "/home/ilya/A/db/memtable.cc", + "line": 47, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "value", + "file": "/home/ilya/A/db/memtable.cc", + "line": 49, + "ccn": 1, + "nloc": 2, + "params": 0 + }, + { + "name": "status", + "file": "/home/ilya/A/db/memtable.cc", + "line": 55, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "Ref", + "file": "/home/ilya/A/db/memtable.h", + "line": 13, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "dbfull", + "file": "/home/ilya/A/db/recovery_test.cc", + "line": 12, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "env", + "file": "/home/ilya/A/db/recovery_test.cc", + "line": 14, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "Close", + "file": "/home/ilya/A/db/recovery_test.cc", + "line": 27, + "ccn": 1, + "nloc": 2, + "params": 0 + }, + { + "name": "Open", + "file": "/home/ilya/A/db/recovery_test.cc", + "line": 45, + "ccn": 1, + "nloc": 2, + "params": 1 + }, + { + "name": "Put", + "file": "/home/ilya/A/db/recovery_test.cc", + "line": 52, + "ccn": 1, + "nloc": 1, + "params": 2 + }, + { + "name": "LogName", + "file": "/home/ilya/A/db/recovery_test.cc", + "line": 77, + "ccn": 1, + "nloc": 1, + "params": 1 + }, + { + "name": "RemoveManifestFile", + "file": "/home/ilya/A/db/recovery_test.cc", + "line": 91, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "FirstLogFile", + "file": "/home/ilya/A/db/recovery_test.cc", + "line": 96, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "NumLogs", + "file": "/home/ilya/A/db/recovery_test.cc", + "line": 110, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "NumTables", + "file": "/home/ilya/A/db/recovery_test.cc", + "line": 113, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "FileSize", + "file": "/home/ilya/A/db/recovery_test.cc", + "line": 115, + "ccn": 1, + "nloc": 3, + "params": 1 + }, + { + "name": "CompactMemTable", + "file": "/home/ilya/A/db/recovery_test.cc", + "line": 118, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "MakeLogFile", + "file": "/home/ilya/A/db/recovery_test.cc", + "line": 119, + "ccn": 1, + "nloc": 10, + "params": 4 + }, + { + "name": "next_file_number_", + "file": "/home/ilya/A/db/repair.cc", + "line": 13, + "ccn": 1, + "nloc": 1, + "params": 1 + }, + { + "name": "Corruption", + "file": "/home/ilya/A/db/repair.cc", + "line": 87, + "ccn": 1, + "nloc": 3, + "params": 2 + }, + { + "name": "NewTableIterator", + "file": "/home/ilya/A/db/repair.cc", + "line": 157, + "ccn": 1, + "nloc": 3, + "params": 1 + }, + { + "name": "RepairDB", + "file": "/home/ilya/A/db/repair.cc", + "line": 335, + "ccn": 1, + "nloc": 2, + "params": 2 + }, + { + "name": "GetMaxHeight", + "file": "/home/ilya/A/db/skiplist.h", + "line": 24, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "Equal", + "file": "/home/ilya/A/db/skiplist.h", + "line": 31, + "ccn": 1, + "nloc": 1, + "params": 2 + }, + { + "name": "Next", + "file": "/home/ilya/A/db/skiplist.h", + "line": 54, + "ccn": 1, + "nloc": 2, + "params": 1 + }, + { + "name": "SetNext", + "file": "/home/ilya/A/db/skiplist.h", + "line": 57, + "ccn": 1, + "nloc": 2, + "params": 2 + }, + { + "name": "NoBarrier_Next", + "file": "/home/ilya/A/db/skiplist.h", + "line": 60, + "ccn": 1, + "nloc": 2, + "params": 1 + }, + { + "name": "NoBarrier_SetNext", + "file": "/home/ilya/A/db/skiplist.h", + "line": 63, + "ccn": 1, + "nloc": 2, + "params": 2 + }, + { + "name": "key", + "file": "/home/ilya/A/db/skiplist_test.cc", + "line": 112, + "ccn": 1, + "nloc": 1, + "params": 1 + }, + { + "name": "gen", + "file": "/home/ilya/A/db/skiplist_test.cc", + "line": 114, + "ccn": 1, + "nloc": 1, + "params": 1 + }, + { + "name": "hash", + "file": "/home/ilya/A/db/skiplist_test.cc", + "line": 117, + "ccn": 1, + "nloc": 1, + "params": 1 + }, + { + "name": "HashNumbers", + "file": "/home/ilya/A/db/skiplist_test.cc", + "line": 118, + "ccn": 1, + "nloc": 2, + "params": 2 + }, + { + "name": "MakeKey", + "file": "/home/ilya/A/db/skiplist_test.cc", + "line": 122, + "ccn": 1, + "nloc": 4, + "params": 2 + }, + { + "name": "IsValidKey", + "file": "/home/ilya/A/db/skiplist_test.cc", + "line": 130, + "ccn": 1, + "nloc": 1, + "params": 1 + }, + { + "name": "Set", + "file": "/home/ilya/A/db/skiplist_test.cc", + "line": 140, + "ccn": 1, + "nloc": 1, + "params": 2 + }, + { + "name": "Get", + "file": "/home/ilya/A/db/skiplist_test.cc", + "line": 144, + "ccn": 1, + "nloc": 1, + "params": 1 + }, + { + "name": "WriteStep", + "file": "/home/ilya/A/db/skiplist_test.cc", + "line": 149, + "ccn": 1, + "nloc": 5, + "params": 1 + }, + { + "name": "sequence_number_", + "file": "/home/ilya/A/db/snapshot.h", + "line": 5, + "ccn": 1, + "nloc": 0, + "params": 1 + }, + { + "name": "sequence_number", + "file": "/home/ilya/A/db/snapshot.h", + "line": 6, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "empty", + "file": "/home/ilya/A/db/snapshot.h", + "line": 22, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "oldest", + "file": "/home/ilya/A/db/snapshot.h", + "line": 25, + "ccn": 1, + "nloc": 2, + "params": 0 + }, + { + "name": "newest", + "file": "/home/ilya/A/db/snapshot.h", + "line": 27, + "ccn": 1, + "nloc": 2, + "params": 0 + }, + { + "name": "DeleteEntry", + "file": "/home/ilya/A/db/table_cache.cc", + "line": 3, + "ccn": 1, + "nloc": 4, + "params": 2 + }, + { + "name": "UnrefEntry", + "file": "/home/ilya/A/db/table_cache.cc", + "line": 10, + "ccn": 1, + "nloc": 3, + "params": 2 + }, + { + "name": "VersionEdit", + "file": "/home/ilya/A/db/version_edit.h", + "line": 18, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "SetComparatorName", + "file": "/home/ilya/A/db/version_edit.h", + "line": 22, + "ccn": 1, + "nloc": 2, + "params": 1 + }, + { + "name": "SetLogNumber", + "file": "/home/ilya/A/db/version_edit.h", + "line": 24, + "ccn": 1, + "nloc": 2, + "params": 1 + }, + { + "name": "SetPrevLogNumber", + "file": "/home/ilya/A/db/version_edit.h", + "line": 26, + "ccn": 1, + "nloc": 2, + "params": 1 + }, + { + "name": "SetNextFile", + "file": "/home/ilya/A/db/version_edit.h", + "line": 31, + "ccn": 1, + "nloc": 2, + "params": 1 + }, + { + "name": "SetLastSequence", + "file": "/home/ilya/A/db/version_edit.h", + "line": 37, + "ccn": 1, + "nloc": 2, + "params": 1 + }, + { + "name": "SetCompactPointer", + "file": "/home/ilya/A/db/version_edit.h", + "line": 41, + "ccn": 1, + "nloc": 1, + "params": 2 + }, + { + "name": "AddFile", + "file": "/home/ilya/A/db/version_edit.h", + "line": 46, + "ccn": 1, + "nloc": 6, + "params": 5 + }, + { + "name": "RemoveFile", + "file": "/home/ilya/A/db/version_edit.h", + "line": 57, + "ccn": 1, + "nloc": 1, + "params": 2 + }, + { + "name": "TestEncodeDecode", + "file": "/home/ilya/A/db/version_edit_test.cc", + "line": 1, + "ccn": 1, + "nloc": 7, + "params": 1 + }, + { + "name": "TargetFileSize", + "file": "/home/ilya/A/db/version_set.cc", + "line": 3, + "ccn": 1, + "nloc": 1, + "params": 1 + }, + { + "name": "MaxGrandParentOverlapBytes", + "file": "/home/ilya/A/db/version_set.cc", + "line": 10, + "ccn": 1, + "nloc": 1, + "params": 1 + }, + { + "name": "ExpandedCompactionByteSizeLimit", + "file": "/home/ilya/A/db/version_set.cc", + "line": 14, + "ccn": 1, + "nloc": 1, + "params": 1 + }, + { + "name": "MaxFileSizeForLevel", + "file": "/home/ilya/A/db/version_set.cc", + "line": 28, + "ccn": 1, + "nloc": 1, + "params": 2 + }, + { + "name": "AfterFile", + "file": "/home/ilya/A/db/version_set.cc", + "line": 60, + "ccn": 1, + "nloc": 2, + "params": 3 + }, + { + "name": "BeforeFile", + "file": "/home/ilya/A/db/version_set.cc", + "line": 72, + "ccn": 1, + "nloc": 2, + "params": 3 + }, + { + "name": "Valid", + "file": "/home/ilya/A/db/version_set.cc", + "line": 118, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "Seek", + "file": "/home/ilya/A/db/version_set.cc", + "line": 121, + "ccn": 1, + "nloc": 1, + "params": 1 + }, + { + "name": "SeekToFirst", + "file": "/home/ilya/A/db/version_set.cc", + "line": 123, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "SeekToLast", + "file": "/home/ilya/A/db/version_set.cc", + "line": 123, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "Next", + "file": "/home/ilya/A/db/version_set.cc", + "line": 125, + "ccn": 1, + "nloc": 2, + "params": 0 + }, + { + "name": "key", + "file": "/home/ilya/A/db/version_set.cc", + "line": 129, + "ccn": 1, + "nloc": 2, + "params": 0 + }, + { + "name": "value", + "file": "/home/ilya/A/db/version_set.cc", + "line": 132, + "ccn": 1, + "nloc": 4, + "params": 0 + }, + { + "name": "status", + "file": "/home/ilya/A/db/version_set.cc", + "line": 143, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "NewestFirst", + "file": "/home/ilya/A/db/version_set.cc", + "line": 206, + "ccn": 1, + "nloc": 1, + "params": 2 + }, + { + "name": "current_", + "file": "/home/ilya/A/db/version_set.cc", + "line": 612, + "ccn": 1, + "nloc": 1, + "params": 1 + }, + { + "name": "NumFiles", + "file": "/home/ilya/A/db/version_set.h", + "line": 52, + "ccn": 1, + "nloc": 1, + "params": 1 + }, + { + "name": "compaction_level_", + "file": "/home/ilya/A/db/version_set.h", + "line": 64, + "ccn": 1, + "nloc": 0, + "params": 1 + }, + { + "name": "current", + "file": "/home/ilya/A/db/version_set.h", + "line": 89, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "ManifestFileNumber", + "file": "/home/ilya/A/db/version_set.h", + "line": 91, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "NewFileNumber", + "file": "/home/ilya/A/db/version_set.h", + "line": 96, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "LastSequence", + "file": "/home/ilya/A/db/version_set.h", + "line": 102, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "SetLastSequence", + "file": "/home/ilya/A/db/version_set.h", + "line": 103, + "ccn": 1, + "nloc": 2, + "params": 1 + }, + { + "name": "LogNumber", + "file": "/home/ilya/A/db/version_set.h", + "line": 105, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "PrevLogNumber", + "file": "/home/ilya/A/db/version_set.h", + "line": 107, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "NeedsCompaction", + "file": "/home/ilya/A/db/version_set.h", + "line": 114, + "ccn": 1, + "nloc": 2, + "params": 0 + }, + { + "name": "level", + "file": "/home/ilya/A/db/version_set.h", + "line": 161, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "edit", + "file": "/home/ilya/A/db/version_set.h", + "line": 162, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "num_input_files", + "file": "/home/ilya/A/db/version_set.h", + "line": 164, + "ccn": 1, + "nloc": 1, + "params": 1 + }, + { + "name": "input", + "file": "/home/ilya/A/db/version_set.h", + "line": 169, + "ccn": 1, + "nloc": 1, + "params": 2 + }, + { + "name": "MaxOutputFileSize", + "file": "/home/ilya/A/db/version_set.h", + "line": 170, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "Add", + "file": "/home/ilya/A/db/version_set_test.cc", + "line": 8, + "ccn": 1, + "nloc": 5, + "params": 4 + }, + { + "name": "Find", + "file": "/home/ilya/A/db/version_set_test.cc", + "line": 25, + "ccn": 1, + "nloc": 3, + "params": 1 + }, + { + "name": "Overlaps", + "file": "/home/ilya/A/db/version_set_test.cc", + "line": 29, + "ccn": 1, + "nloc": 6, + "params": 2 + }, + { + "name": "CreateFileMetaData", + "file": "/home/ilya/A/db/version_set_test.cc", + "line": 174, + "ccn": 1, + "nloc": 6, + "params": 3 + }, + { + "name": "Put", + "file": "/home/ilya/A/db/write_batch.cc", + "line": 94, + "ccn": 1, + "nloc": 2, + "params": 2 + }, + { + "name": "Delete", + "file": "/home/ilya/A/db/write_batch.cc", + "line": 99, + "ccn": 1, + "nloc": 2, + "params": 1 + }, + { + "name": "Contents", + "file": "/home/ilya/A/db/write_batch_internal.h", + "line": 15, + "ccn": 1, + "nloc": 1, + "params": 1 + }, + { + "name": "ByteSize", + "file": "/home/ilya/A/db/write_batch_internal.h", + "line": 16, + "ccn": 1, + "nloc": 1, + "params": 1 + } + ] + }, + "helpers/memenv": { + "files": [ + "/home/ilya/A/helpers/memenv/memenv.cc", + "/home/ilya/A/helpers/memenv/memenv.h", + "/home/ilya/A/helpers/memenv/memenv_test.cc" + ], + "language": "cpp", + "total_nloc": 176, + "total_functions": 31, + "avg_ccn": 1.77, + "max_ccn": 6, + "heavy_functions_count": 0, + "heavy_functions_ratio": 0.0, + "coupling_out": 3, + "coupling_in": 1, + "instability": 0.75, + "has_cycles": true, + "dependencies": [ + "db", + "port", + "util" + ], + "dependents": [ + "util" + ], + "functions": [ + { + "name": "Read", + "file": "/home/ilya/A/helpers/memenv/memenv.cc", + "line": 39, + "ccn": 6, + "nloc": 30, + "params": 4 + }, + { + "name": "Append", + "file": "/home/ilya/A/helpers/memenv/memenv.cc", + "line": 85, + "ccn": 4, + "nloc": 21, + "params": 1 + }, + { + "name": "Unref", + "file": "/home/ilya/A/helpers/memenv/memenv.cc", + "line": 16, + "ccn": 3, + "nloc": 12, + "params": 0 + }, + { + "name": "Skip", + "file": "/home/ilya/A/helpers/memenv/memenv.cc", + "line": 139, + "ccn": 3, + "nloc": 9, + "params": 1 + }, + { + "name": "GetChildren", + "file": "/home/ilya/A/helpers/memenv/memenv.cc", + "line": 259, + "ccn": 3, + "nloc": 10, + "params": 2 + }, + { + "name": "Truncate", + "file": "/home/ilya/A/helpers/memenv/memenv.cc", + "line": 30, + "ccn": 2, + "nloc": 6, + "params": 0 + }, + { + "name": "Read", + "file": "/home/ilya/A/helpers/memenv/memenv.cc", + "line": 127, + "ccn": 2, + "nloc": 5, + "params": 3 + }, + { + "name": "NewSequentialFile", + "file": "/home/ilya/A/helpers/memenv/memenv.cc", + "line": 200, + "ccn": 2, "nloc": 7, "params": 2 }, { - "name": "(anonymous)", - "file": "/home/claude/vkr/B/src/index.mjs", + "name": "NewRandomAccessFile", + "file": "/home/ilya/A/helpers/memenv/memenv.cc", + "line": 210, + "ccn": 2, + "nloc": 7, + "params": 2 + }, + { + "name": "NewWritableFile", + "file": "/home/ilya/A/helpers/memenv/memenv.cc", + "line": 227, + "ccn": 2, + "nloc": 13, + "params": 2 + }, + { + "name": "NewAppendableFile", + "file": "/home/ilya/A/helpers/memenv/memenv.cc", + "line": 244, + "ccn": 2, + "nloc": 9, + "params": 2 + }, + { + "name": "EXCLUSIVE_LOCKS_REQUIRED", + "file": "/home/ilya/A/helpers/memenv/memenv.cc", + "line": 280, + "ccn": 2, + "nloc": 5, + "params": 1 + }, + { + "name": "RemoveFile", + "file": "/home/ilya/A/helpers/memenv/memenv.cc", + "line": 288, + "ccn": 2, + "nloc": 6, + "params": 1 + }, + { + "name": "GetFileSize", + "file": "/home/ilya/A/helpers/memenv/memenv.cc", + "line": 302, + "ccn": 2, + "nloc": 6, + "params": 2 + }, + { + "name": "RenameFile", + "file": "/home/ilya/A/helpers/memenv/memenv.cc", + "line": 312, + "ccn": 2, + "nloc": 8, + "params": 2 + }, + { + "name": "Ref", + "file": "/home/ilya/A/helpers/memenv/memenv.cc", + "line": 14, + "ccn": 1, + "nloc": 2, + "params": 0 + }, + { + "name": "Size", + "file": "/home/ilya/A/helpers/memenv/memenv.cc", + "line": 27, + "ccn": 1, + "nloc": 2, + "params": 0 + }, + { + "name": "Read", + "file": "/home/ilya/A/helpers/memenv/memenv.cc", + "line": 158, + "ccn": 1, + "nloc": 1, + "params": 4 + }, + { + "name": "Append", + "file": "/home/ilya/A/helpers/memenv/memenv.cc", + "line": 172, + "ccn": 1, + "nloc": 1, + "params": 1 + }, + { + "name": "Close", + "file": "/home/ilya/A/helpers/memenv/memenv.cc", + "line": 174, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "Flush", + "file": "/home/ilya/A/helpers/memenv/memenv.cc", + "line": 179, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "Sync", + "file": "/home/ilya/A/helpers/memenv/memenv.cc", + "line": 184, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "Logv", + "file": "/home/ilya/A/helpers/memenv/memenv.cc", + "line": 187, + "ccn": 1, + "nloc": 0, + "params": 2 + }, + { + "name": "FileExists", + "file": "/home/ilya/A/helpers/memenv/memenv.cc", + "line": 256, + "ccn": 1, + "nloc": 2, + "params": 1 + }, + { + "name": "CreateDir", + "file": "/home/ilya/A/helpers/memenv/memenv.cc", + "line": 295, + "ccn": 1, + "nloc": 1, + "params": 1 + }, + { + "name": "RemoveDir", + "file": "/home/ilya/A/helpers/memenv/memenv.cc", + "line": 299, + "ccn": 1, + "nloc": 1, + "params": 1 + }, + { + "name": "LockFile", + "file": "/home/ilya/A/helpers/memenv/memenv.cc", + "line": 324, + "ccn": 1, + "nloc": 2, + "params": 2 + }, + { + "name": "UnlockFile", + "file": "/home/ilya/A/helpers/memenv/memenv.cc", + "line": 331, + "ccn": 1, + "nloc": 2, + "params": 1 + }, + { + "name": "GetTestDirectory", + "file": "/home/ilya/A/helpers/memenv/memenv.cc", + "line": 333, + "ccn": 1, + "nloc": 2, + "params": 1 + }, + { + "name": "NewLogger", + "file": "/home/ilya/A/helpers/memenv/memenv.cc", + "line": 336, + "ccn": 1, + "nloc": 2, + "params": 2 + }, + { + "name": "NewMemEnv", + "file": "/home/ilya/A/helpers/memenv/memenv.cc", + "line": 346, + "ccn": 1, + "nloc": 1, + "params": 1 + } + ] + }, + "include/leveldb": { + "files": [ + "/home/ilya/A/include/leveldb/c.h", + "/home/ilya/A/include/leveldb/cache.h", + "/home/ilya/A/include/leveldb/comparator.h", + "/home/ilya/A/include/leveldb/db.h", + "/home/ilya/A/include/leveldb/dumpfile.h", + "/home/ilya/A/include/leveldb/env.h", + "/home/ilya/A/include/leveldb/export.h", + "/home/ilya/A/include/leveldb/filter_policy.h", + "/home/ilya/A/include/leveldb/iterator.h", + "/home/ilya/A/include/leveldb/options.h", + "/home/ilya/A/include/leveldb/slice.h", + "/home/ilya/A/include/leveldb/status.h", + "/home/ilya/A/include/leveldb/table.h", + "/home/ilya/A/include/leveldb/table_builder.h", + "/home/ilya/A/include/leveldb/write_batch.h" + ], + "language": "cpp", + "total_nloc": 43, + "total_functions": 41, + "avg_ccn": 1.0, + "max_ccn": 1, + "heavy_functions_count": 0, + "heavy_functions_ratio": 0.0, + "coupling_out": 0, + "coupling_in": 0, + "instability": 0.0, + "has_cycles": false, + "dependencies": [], + "dependents": [], + "functions": [ + { + "name": "Prune", + "file": "/home/ilya/A/include/leveldb/cache.h", + "line": 16, + "ccn": 1, + "nloc": 0, + "params": 0 + }, + { + "name": "target", + "file": "/home/ilya/A/include/leveldb/env.h", + "line": 116, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "NewSequentialFile", + "file": "/home/ilya/A/include/leveldb/env.h", + "line": 116, + "ccn": 1, + "nloc": 1, + "params": 2 + }, + { + "name": "NewRandomAccessFile", + "file": "/home/ilya/A/include/leveldb/env.h", + "line": 119, + "ccn": 1, + "nloc": 1, + "params": 2 + }, + { + "name": "NewWritableFile", + "file": "/home/ilya/A/include/leveldb/env.h", + "line": 123, + "ccn": 1, + "nloc": 1, + "params": 2 + }, + { + "name": "NewAppendableFile", + "file": "/home/ilya/A/include/leveldb/env.h", + "line": 125, + "ccn": 1, + "nloc": 1, + "params": 2 + }, + { + "name": "FileExists", + "file": "/home/ilya/A/include/leveldb/env.h", + "line": 128, + "ccn": 1, + "nloc": 1, + "params": 1 + }, + { + "name": "GetChildren", + "file": "/home/ilya/A/include/leveldb/env.h", + "line": 129, + "ccn": 1, + "nloc": 1, + "params": 2 + }, + { + "name": "RemoveFile", + "file": "/home/ilya/A/include/leveldb/env.h", + "line": 134, + "ccn": 1, + "nloc": 1, + "params": 1 + }, + { + "name": "CreateDir", + "file": "/home/ilya/A/include/leveldb/env.h", + "line": 135, + "ccn": 1, + "nloc": 1, + "params": 1 + }, + { + "name": "RemoveDir", + "file": "/home/ilya/A/include/leveldb/env.h", + "line": 136, + "ccn": 1, + "nloc": 1, + "params": 1 + }, + { + "name": "GetFileSize", + "file": "/home/ilya/A/include/leveldb/env.h", + "line": 139, + "ccn": 1, + "nloc": 1, + "params": 2 + }, + { + "name": "RenameFile", + "file": "/home/ilya/A/include/leveldb/env.h", + "line": 142, + "ccn": 1, + "nloc": 1, + "params": 2 + }, + { + "name": "LockFile", + "file": "/home/ilya/A/include/leveldb/env.h", + "line": 146, + "ccn": 1, + "nloc": 1, + "params": 2 + }, + { + "name": "UnlockFile", + "file": "/home/ilya/A/include/leveldb/env.h", + "line": 148, + "ccn": 1, + "nloc": 1, + "params": 1 + }, + { + "name": "GetTestDirectory", + "file": "/home/ilya/A/include/leveldb/env.h", + "line": 155, + "ccn": 1, + "nloc": 1, + "params": 1 + }, + { + "name": "NewLogger", + "file": "/home/ilya/A/include/leveldb/env.h", + "line": 157, + "ccn": 1, + "nloc": 1, + "params": 2 + }, + { + "name": "NowMicros", + "file": "/home/ilya/A/include/leveldb/env.h", + "line": 159, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "SleepForMicroseconds", + "file": "/home/ilya/A/include/leveldb/env.h", + "line": 161, + "ccn": 1, + "nloc": 1, + "params": 1 + }, + { + "name": "IsEmpty", + "file": "/home/ilya/A/include/leveldb/iterator.h", + "line": 22, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "Run", + "file": "/home/ilya/A/include/leveldb/iterator.h", + "line": 28, + "ccn": 1, + "nloc": 2, + "params": 0 + }, + { + "name": "data", + "file": "/home/ilya/A/include/leveldb/slice.h", + "line": 11, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "size", + "file": "/home/ilya/A/include/leveldb/slice.h", + "line": 12, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "empty", + "file": "/home/ilya/A/include/leveldb/slice.h", + "line": 13, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "begin", + "file": "/home/ilya/A/include/leveldb/slice.h", + "line": 15, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "end", + "file": "/home/ilya/A/include/leveldb/slice.h", + "line": 16, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "clear", + "file": "/home/ilya/A/include/leveldb/slice.h", + "line": 27, + "ccn": 1, + "nloc": 2, + "params": 0 + }, + { + "name": "remove_prefix", + "file": "/home/ilya/A/include/leveldb/slice.h", + "line": 30, + "ccn": 1, + "nloc": 3, + "params": 1 + }, + { + "name": "ToString", + "file": "/home/ilya/A/include/leveldb/slice.h", + "line": 33, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "starts_with", + "file": "/home/ilya/A/include/leveldb/slice.h", + "line": 36, + "ccn": 1, + "nloc": 1, + "params": 1 + }, + { + "name": "Status", + "file": "/home/ilya/A/include/leveldb/status.h", + "line": 3, + "ccn": 1, + "nloc": 0, + "params": 0 + }, + { + "name": "Status", + "file": "/home/ilya/A/include/leveldb/status.h", + "line": 8, + "ccn": 1, + "nloc": 1, + "params": 1 + }, + { + "name": "OK", + "file": "/home/ilya/A/include/leveldb/status.h", + "line": 9, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "ok", + "file": "/home/ilya/A/include/leveldb/status.h", + "line": 36, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "IsNotFound", + "file": "/home/ilya/A/include/leveldb/status.h", + "line": 39, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "IsCorruption", + "file": "/home/ilya/A/include/leveldb/status.h", + "line": 40, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "IsIOError", + "file": "/home/ilya/A/include/leveldb/status.h", + "line": 41, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "IsNotSupportedError", + "file": "/home/ilya/A/include/leveldb/status.h", + "line": 43, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "IsInvalidArgument", + "file": "/home/ilya/A/include/leveldb/status.h", + "line": 44, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "code", + "file": "/home/ilya/A/include/leveldb/status.h", + "line": 50, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "ok", + "file": "/home/ilya/A/include/leveldb/table_builder.h", + "line": 24, + "ccn": 1, + "nloc": 1, + "params": 0 + } + ] + }, + "port": { + "files": [ + "/home/ilya/A/port/port.h", + "/home/ilya/A/port/port_example.h", + "/home/ilya/A/port/port_stdcxx.h", + "/home/ilya/A/port/thread_annotations.h" + ], + "language": "cpp", + "total_nloc": 94, + "total_functions": 10, + "avg_ccn": 2.2, + "max_ccn": 4, + "heavy_functions_count": 0, + "heavy_functions_ratio": 0.0, + "coupling_out": 0, + "coupling_in": 4, + "instability": 0.0, + "has_cycles": false, + "dependencies": [], + "dependents": [ + "db", + "helpers/memenv", + "table", + "util" + ], + "functions": [ + { + "name": "Zstd_Compress", + "file": "/home/ilya/A/port/port_stdcxx.h", + "line": 93, + "ccn": 4, + "nloc": 24, + "params": 4 + }, + { + "name": "Zstd_Uncompress", + "file": "/home/ilya/A/port/port_stdcxx.h", + "line": 136, + "ccn": 4, + "nloc": 18, + "params": 3 + }, + { + "name": "Zstd_GetUncompressedLength", + "file": "/home/ilya/A/port/port_stdcxx.h", + "line": 123, + "ccn": 3, + "nloc": 11, + "params": 3 + }, + { + "name": "Snappy_Compress", + "file": "/home/ilya/A/port/port_stdcxx.h", + "line": 57, + "ccn": 2, + "nloc": 12, + "params": 3 + }, + { + "name": "Snappy_GetUncompressedLength", + "file": "/home/ilya/A/port/port_stdcxx.h", + "line": 74, + "ccn": 2, + "nloc": 8, + "params": 3 + }, + { + "name": "Snappy_Uncompress", + "file": "/home/ilya/A/port/port_stdcxx.h", + "line": 86, + "ccn": 2, + "nloc": 8, + "params": 3 + }, + { + "name": "AcceleratedCRC32C", + "file": "/home/ilya/A/port/port_stdcxx.h", + "line": 155, + "ccn": 2, + "nloc": 8, + "params": 3 + }, + { + "name": "Wait", + "file": "/home/ilya/A/port/port_stdcxx.h", + "line": 41, + "ccn": 1, + "nloc": 3, + "params": 0 + }, + { + "name": "Signal", + "file": "/home/ilya/A/port/port_stdcxx.h", + "line": 50, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "SignalAll", + "file": "/home/ilya/A/port/port_stdcxx.h", + "line": 52, + "ccn": 1, + "nloc": 1, + "params": 0 + } + ] + }, + "table": { + "files": [ + "/home/ilya/A/table/block.cc", + "/home/ilya/A/table/block.h", + "/home/ilya/A/table/block_builder.cc", + "/home/ilya/A/table/block_builder.h", + "/home/ilya/A/table/filter_block.cc", + "/home/ilya/A/table/filter_block.h", + "/home/ilya/A/table/filter_block_test.cc", + "/home/ilya/A/table/format.cc", + "/home/ilya/A/table/format.h", + "/home/ilya/A/table/iterator.cc", + "/home/ilya/A/table/iterator_wrapper.h", + "/home/ilya/A/table/merger.cc", + "/home/ilya/A/table/merger.h", + "/home/ilya/A/table/table.cc", + "/home/ilya/A/table/table_builder.cc", + "/home/ilya/A/table/table_test.cc", + "/home/ilya/A/table/two_level_iterator.cc", + "/home/ilya/A/table/two_level_iterator.h" + ], + "language": "cpp", + "total_nloc": 692, + "total_functions": 132, + "avg_ccn": 1.82, + "max_ccn": 17, + "heavy_functions_count": 3, + "heavy_functions_ratio": 0.023, + "coupling_out": 3, + "coupling_in": 1, + "instability": 0.75, + "has_cycles": true, + "dependencies": [ + "db", + "port", + "util" + ], + "dependents": [ + "db" + ], + "functions": [ + { + "name": "TestRandomAccess", + "file": "/home/ilya/A/table/table_test.cc", + "line": 434, + "ccn": 17, + "nloc": 61, + "params": 3 + }, + { + "name": "ReadBlock", + "file": "/home/ilya/A/table/format.cc", + "line": 51, + "ccn": 13, + "nloc": 79, + "params": 4 + }, + { + "name": "Seek", + "file": "/home/ilya/A/table/block.cc", + "line": 110, + "ccn": 11, + "nloc": 44, + "params": 1 + }, + { + "name": "DecodeEntry", + "file": "/home/ilya/A/table/block.cc", + "line": 29, + "ccn": 7, + "nloc": 15, + "params": 5 + }, + { + "name": "Init", + "file": "/home/ilya/A/table/table_test.cc", + "line": 360, + "ccn": 6, + "nloc": 22, + "params": 1 + }, + { + "name": "PickRandomKey", + "file": "/home/ilya/A/table/table_test.cc", + "line": 521, + "ccn": 6, + "nloc": 21, + "params": 2 + }, + { + "name": "Prev", + "file": "/home/ilya/A/table/block.cc", + "line": 95, + "ccn": 5, + "nloc": 13, + "params": 0 + }, + { + "name": "Next", + "file": "/home/ilya/A/table/merger.cc", + "line": 40, + "ccn": 5, + "nloc": 16, + "params": 0 + }, + { + "name": "Prev", + "file": "/home/ilya/A/table/merger.cc", + "line": 60, + "ccn": 5, + "nloc": 17, + "params": 0 + }, + { + "name": "ParseNextKey", + "file": "/home/ilya/A/table/block.cc", + "line": 174, + "ccn": 4, + "nloc": 23, + "params": 0 + }, + { + "name": "owned_", + "file": "/home/ilya/A/table/block.cc", + "line": 14, + "ccn": 3, + "nloc": 10, + "params": 1 + }, + { + "name": "KeyMayMatch", + "file": "/home/ilya/A/table/filter_block_test.cc", + "line": 14, + "ccn": 3, + "nloc": 7, + "params": 2 + }, + { + "name": "status", + "file": "/home/ilya/A/table/merger.cc", + "line": 84, + "ccn": 3, + "nloc": 8, + "params": 0 + }, + { + "name": "NewMergingIterator", + "file": "/home/ilya/A/table/merger.cc", + "line": 132, + "ccn": 3, + "nloc": 8, + "params": 3 + }, + { + "name": "Read", + "file": "/home/ilya/A/table/table_test.cc", + "line": 93, + "ccn": 3, + "nloc": 9, + "params": 4 + }, + { + "name": "CompressionSupported", + "file": "/home/ilya/A/table/table_test.cc", + "line": 730, + "ccn": 3, + "nloc": 8, + "params": 1 + }, + { + "name": "status", + "file": "/home/ilya/A/table/two_level_iterator.cc", + "line": 27, + "ccn": 3, + "nloc": 7, + "params": 0 + }, + { + "name": "SeekToLast", + "file": "/home/ilya/A/table/block.cc", + "line": 165, + "ccn": 2, + "nloc": 3, + "params": 0 + }, + { + "name": "CreateFilter", + "file": "/home/ilya/A/table/filter_block_test.cc", + "line": 5, + "ccn": 2, + "nloc": 4, + "params": 3 + }, + { + "name": "Set", + "file": "/home/ilya/A/table/iterator_wrapper.h", + "line": 13, + "ccn": 2, + "nloc": 7, + "params": 1 + }, + { + "name": "Update", + "file": "/home/ilya/A/table/iterator_wrapper.h", + "line": 39, + "ccn": 2, + "nloc": 4, + "params": 0 + }, + { + "name": "direction_", + "file": "/home/ilya/A/table/merger.cc", + "line": 9, + "ccn": 2, + "nloc": 3, + "params": 1 + }, + { + "name": "SeekToFirst", + "file": "/home/ilya/A/table/merger.cc", + "line": 18, + "ccn": 2, + "nloc": 5, + "params": 0 + }, + { + "name": "SeekToLast", + "file": "/home/ilya/A/table/merger.cc", + "line": 24, + "ccn": 2, + "nloc": 5, + "params": 0 + }, + { + "name": "Seek", + "file": "/home/ilya/A/table/merger.cc", + "line": 31, + "ccn": 2, + "nloc": 5, + "params": 1 + }, + { + "name": "Reverse", + "file": "/home/ilya/A/table/table_test.cc", + "line": 5, + "ccn": 2, + "nloc": 7, + "params": 1 + }, + { + "name": "Increment", + "file": "/home/ilya/A/table/table_test.cc", + "line": 47, + "ccn": 2, + "nloc": 8, + "params": 2 + }, + { + "name": "Finish", + "file": "/home/ilya/A/table/table_test.cc", + "line": 120, + "ccn": 2, + "nloc": 8, + "params": 3 + }, + { + "name": "FinishImpl", + "file": "/home/ilya/A/table/table_test.cc", + "line": 149, + "ccn": 2, + "nloc": 13, + "params": 2 + }, + { + "name": "FinishImpl", + "file": "/home/ilya/A/table/table_test.cc", + "line": 179, + "ccn": 2, + "nloc": 14, + "params": 2 + }, + { + "name": "key", + "file": "/home/ilya/A/table/table_test.cc", + "line": 241, + "ccn": 2, + "nloc": 7, + "params": 0 + }, + { + "name": "FinishImpl", + "file": "/home/ilya/A/table/table_test.cc", + "line": 270, + "ccn": 2, + "nloc": 9, + "params": 2 + }, + { + "name": "FinishImpl", + "file": "/home/ilya/A/table/table_test.cc", + "line": 293, + "ccn": 2, + "nloc": 9, + "params": 2 + }, + { + "name": "TestForwardScan", + "file": "/home/ilya/A/table/table_test.cc", + "line": 405, + "ccn": 2, + "nloc": 10, + "params": 2 + }, + { + "name": "TestBackwardScan", + "file": "/home/ilya/A/table/table_test.cc", + "line": 420, + "ccn": 2, + "nloc": 10, + "params": 2 + }, + { + "name": "ToString", + "file": "/home/ilya/A/table/table_test.cc", + "line": 500, + "ccn": 2, + "nloc": 5, + "params": 2 + }, + { + "name": "ToString", + "file": "/home/ilya/A/table/table_test.cc", + "line": 507, + "ccn": 2, + "nloc": 5, + "params": 2 + }, + { + "name": "ToString", + "file": "/home/ilya/A/table/table_test.cc", + "line": 515, + "ccn": 2, + "nloc": 5, + "params": 1 + }, + { + "name": "TEST_F", + "file": "/home/ilya/A/table/table_test.cc", + "line": 544, + "ccn": 2, + "nloc": 5, + "params": 2 + }, + { + "name": "TEST_F", + "file": "/home/ilya/A/table/table_test.cc", + "line": 573, + "ccn": 2, + "nloc": 6, + "params": 2 + }, + { + "name": "Between", + "file": "/home/ilya/A/table/table_test.cc", + "line": 683, + "ccn": 2, + "nloc": 7, + "params": 3 + }, + { + "name": "SaveError", + "file": "/home/ilya/A/table/two_level_iterator.cc", + "line": 37, + "ccn": 2, + "nloc": 1, + "params": 1 + }, + { + "name": "Compare", + "file": "/home/ilya/A/table/block.cc", + "line": 60, + "ccn": 1, + "nloc": 1, + "params": 2 + }, + { + "name": "NextEntryOffset", + "file": "/home/ilya/A/table/block.cc", + "line": 62, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "GetRestartPoint", + "file": "/home/ilya/A/table/block.cc", + "line": 66, + "ccn": 1, + "nloc": 2, + "params": 1 + }, + { + "name": "SeekToRestartPoint", + "file": "/home/ilya/A/table/block.cc", + "line": 68, + "ccn": 1, + "nloc": 4, + "params": 1 + }, + { + "name": "restart_index_", + "file": "/home/ilya/A/table/block.cc", + "line": 82, + "ccn": 1, + "nloc": 1, + "params": 1 + }, + { + "name": "Valid", + "file": "/home/ilya/A/table/block.cc", + "line": 84, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "status", + "file": "/home/ilya/A/table/block.cc", + "line": 86, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "key", + "file": "/home/ilya/A/table/block.cc", + "line": 86, + "ccn": 1, + "nloc": 2, + "params": 0 + }, + { + "name": "value", + "file": "/home/ilya/A/table/block.cc", + "line": 89, + "ccn": 1, + "nloc": 2, + "params": 0 + }, + { + "name": "Next", + "file": "/home/ilya/A/table/block.cc", + "line": 92, + "ccn": 1, + "nloc": 2, + "params": 0 + }, + { + "name": "SeekToFirst", + "file": "/home/ilya/A/table/block.cc", + "line": 164, + "ccn": 1, + "nloc": 2, + "params": 0 + }, + { + "name": "CorruptionError", + "file": "/home/ilya/A/table/block.cc", + "line": 171, + "ccn": 1, + "nloc": 5, + "params": 0 + }, + { + "name": "size", + "file": "/home/ilya/A/table/block.h", + "line": 11, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "empty", + "file": "/home/ilya/A/table/block_builder.h", + "line": 21, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "policy_", + "file": "/home/ilya/A/table/filter_block.cc", + "line": 5, + "ccn": 1, + "nloc": 0, + "params": 1 + }, + { + "name": "Name", + "file": "/home/ilya/A/table/filter_block_test.cc", + "line": 3, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "offset", + "file": "/home/ilya/A/table/format.h", + "line": 9, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "set_offset", + "file": "/home/ilya/A/table/format.h", + "line": 12, + "ccn": 1, + "nloc": 1, + "params": 1 + }, + { + "name": "size", + "file": "/home/ilya/A/table/format.h", + "line": 15, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "set_size", + "file": "/home/ilya/A/table/format.h", + "line": 18, + "ccn": 1, + "nloc": 1, + "params": 1 + }, + { + "name": "metaindex_handle", + "file": "/home/ilya/A/table/format.h", + "line": 31, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "set_metaindex_handle", + "file": "/home/ilya/A/table/format.h", + "line": 32, + "ccn": 1, + "nloc": 1, + "params": 1 + }, + { + "name": "index_handle", + "file": "/home/ilya/A/table/format.h", + "line": 35, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "set_index_handle", + "file": "/home/ilya/A/table/format.h", + "line": 38, + "ccn": 1, + "nloc": 1, + "params": 1 + }, + { + "name": "Valid", + "file": "/home/ilya/A/table/iterator.cc", + "line": 34, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "Seek", + "file": "/home/ilya/A/table/iterator.cc", + "line": 37, + "ccn": 1, + "nloc": 0, + "params": 1 + }, + { + "name": "SeekToFirst", + "file": "/home/ilya/A/table/iterator.cc", + "line": 43, + "ccn": 1, + "nloc": 0, + "params": 0 + }, + { + "name": "SeekToLast", + "file": "/home/ilya/A/table/iterator.cc", + "line": 43, + "ccn": 1, + "nloc": 0, + "params": 0 + }, + { + "name": "Next", + "file": "/home/ilya/A/table/iterator.cc", + "line": 45, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "Prev", + "file": "/home/ilya/A/table/iterator.cc", + "line": 46, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "key", + "file": "/home/ilya/A/table/iterator.cc", + "line": 48, + "ccn": 1, + "nloc": 2, + "params": 0 + }, + { + "name": "value", + "file": "/home/ilya/A/table/iterator.cc", + "line": 49, + "ccn": 1, + "nloc": 2, + "params": 0 + }, + { + "name": "status", + "file": "/home/ilya/A/table/iterator.cc", + "line": 52, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "NewEmptyIterator", + "file": "/home/ilya/A/table/iterator.cc", + "line": 54, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "NewErrorIterator", + "file": "/home/ilya/A/table/iterator.cc", + "line": 58, + "ccn": 1, + "nloc": 1, + "params": 1 + }, + { + "name": "iter", + "file": "/home/ilya/A/table/iterator_wrapper.h", + "line": 9, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "Valid", + "file": "/home/ilya/A/table/iterator_wrapper.h", + "line": 15, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "key", + "file": "/home/ilya/A/table/iterator_wrapper.h", + "line": 16, + "ccn": 1, + "nloc": 2, + "params": 0 + }, + { + "name": "value", + "file": "/home/ilya/A/table/iterator_wrapper.h", + "line": 19, + "ccn": 1, + "nloc": 2, + "params": 0 + }, + { + "name": "status", + "file": "/home/ilya/A/table/iterator_wrapper.h", + "line": 20, + "ccn": 1, + "nloc": 2, + "params": 0 + }, + { + "name": "Next", + "file": "/home/ilya/A/table/iterator_wrapper.h", + "line": 22, + "ccn": 1, + "nloc": 3, + "params": 0 + }, + { + "name": "Prev", + "file": "/home/ilya/A/table/iterator_wrapper.h", + "line": 24, + "ccn": 1, + "nloc": 3, + "params": 0 + }, + { + "name": "Seek", + "file": "/home/ilya/A/table/iterator_wrapper.h", + "line": 25, + "ccn": 1, + "nloc": 3, + "params": 1 + }, + { + "name": "SeekToFirst", + "file": "/home/ilya/A/table/iterator_wrapper.h", + "line": 29, + "ccn": 1, + "nloc": 3, + "params": 0 + }, + { + "name": "SeekToLast", + "file": "/home/ilya/A/table/iterator_wrapper.h", + "line": 36, + "ccn": 1, + "nloc": 3, + "params": 0 + }, + { + "name": "Valid", + "file": "/home/ilya/A/table/merger.cc", + "line": 16, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "key", + "file": "/home/ilya/A/table/merger.cc", + "line": 74, + "ccn": 1, + "nloc": 2, + "params": 0 + }, + { + "name": "value", + "file": "/home/ilya/A/table/merger.cc", + "line": 81, + "ccn": 1, + "nloc": 2, + "params": 0 + }, + { + "name": "DeleteBlock", + "file": "/home/ilya/A/table/table.cc", + "line": 101, + "ccn": 1, + "nloc": 1, + "params": 2 + }, + { + "name": "DeleteCachedBlock", + "file": "/home/ilya/A/table/table.cc", + "line": 104, + "ccn": 1, + "nloc": 2, + "params": 2 + }, + { + "name": "ReleaseBlock", + "file": "/home/ilya/A/table/table.cc", + "line": 111, + "ccn": 1, + "nloc": 3, + "params": 2 + }, + { + "name": "pending_index_entry", + "file": "/home/ilya/A/table/table_builder.cc", + "line": 22, + "ccn": 1, + "nloc": 1, + "params": 1 + }, + { + "name": "Name", + "file": "/home/ilya/A/table/table_test.cc", + "line": 19, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "Compare", + "file": "/home/ilya/A/table/table_test.cc", + "line": 21, + "ccn": 1, + "nloc": 1, + "params": 2 + }, + { + "name": "FindShortestSeparator", + "file": "/home/ilya/A/table/table_test.cc", + "line": 28, + "ccn": 1, + "nloc": 4, + "params": 2 + }, + { + "name": "FindShortSuccessor", + "file": "/home/ilya/A/table/table_test.cc", + "line": 39, + "ccn": 1, + "nloc": 3, + "params": 1 + }, + { + "name": "contents", + "file": "/home/ilya/A/table/table_test.cc", + "line": 68, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "Close", + "file": "/home/ilya/A/table/table_test.cc", + "line": 70, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "Flush", + "file": "/home/ilya/A/table/table_test.cc", + "line": 72, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "Sync", + "file": "/home/ilya/A/table/table_test.cc", + "line": 73, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "Append", + "file": "/home/ilya/A/table/table_test.cc", + "line": 78, + "ccn": 1, + "nloc": 2, + "params": 1 + }, + { + "name": "Size", + "file": "/home/ilya/A/table/table_test.cc", + "line": 91, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "Add", + "file": "/home/ilya/A/table/table_test.cc", + "line": 119, + "ccn": 1, + "nloc": 1, + "params": 2 + }, + { + "name": "data", + "file": "/home/ilya/A/table/table_test.cc", + "line": 138, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "db", + "file": "/home/ilya/A/table/table_test.cc", + "line": 139, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "NewIterator", + "file": "/home/ilya/A/table/table_test.cc", + "line": 164, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "NewIterator", + "file": "/home/ilya/A/table/table_test.cc", + "line": 197, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "ApproximateOffsetOf", + "file": "/home/ilya/A/table/table_test.cc", + "line": 201, + "ccn": 1, + "nloc": 1, + "params": 1 + }, + { + "name": "Reset", + "file": "/home/ilya/A/table/table_test.cc", + "line": 208, + "ccn": 1, + "nloc": 4, + "params": 0 + }, + { + "name": "Valid", + "file": "/home/ilya/A/table/table_test.cc", + "line": 225, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "Seek", + "file": "/home/ilya/A/table/table_test.cc", + "line": 228, + "ccn": 1, + "nloc": 4, + "params": 1 + }, + { + "name": "SeekToFirst", + "file": "/home/ilya/A/table/table_test.cc", + "line": 234, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "SeekToLast", + "file": "/home/ilya/A/table/table_test.cc", + "line": 234, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "Next", + "file": "/home/ilya/A/table/table_test.cc", + "line": 237, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "Prev", + "file": "/home/ilya/A/table/table_test.cc", + "line": 238, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "value", + "file": "/home/ilya/A/table/table_test.cc", + "line": 254, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "status", + "file": "/home/ilya/A/table/table_test.cc", + "line": 259, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "NewIterator", + "file": "/home/ilya/A/table/table_test.cc", + "line": 279, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "NewIterator", + "file": "/home/ilya/A/table/table_test.cc", + "line": 306, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "db", + "file": "/home/ilya/A/table/table_test.cc", + "line": 309, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "NewDB", + "file": "/home/ilya/A/table/table_test.cc", + "line": 309, + "ccn": 1, + "nloc": 10, + "params": 0 + }, + { + "name": "Add", + "file": "/home/ilya/A/table/table_test.cc", + "line": 392, + "ccn": 1, + "nloc": 1, + "params": 2 + }, + { + "name": "Test", + "file": "/home/ilya/A/table/table_test.cc", + "line": 397, + "ccn": 1, + "nloc": 6, + "params": 1 + }, + { + "name": "db", + "file": "/home/ilya/A/table/table_test.cc", + "line": 541, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "TEST_F", + "file": "/home/ilya/A/table/table_test.cc", + "line": 552, + "ccn": 1, + "nloc": 15, + "params": 2 + }, + { + "name": "Valid", + "file": "/home/ilya/A/table/two_level_iterator.cc", + "line": 20, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "key", + "file": "/home/ilya/A/table/two_level_iterator.cc", + "line": 21, + "ccn": 1, + "nloc": 2, + "params": 0 + }, + { + "name": "value", + "file": "/home/ilya/A/table/two_level_iterator.cc", + "line": 23, + "ccn": 1, + "nloc": 2, + "params": 0 + }, + { + "name": "data_iter_", + "file": "/home/ilya/A/table/two_level_iterator.cc", + "line": 65, + "ccn": 1, + "nloc": 0, + "params": 1 + }, + { + "name": "NewTwoLevelIterator", + "file": "/home/ilya/A/table/two_level_iterator.cc", + "line": 141, + "ccn": 1, + "nloc": 1, + "params": 4 + } + ] + }, + "util": { + "files": [ + "/home/ilya/A/util/arena.cc", + "/home/ilya/A/util/arena.h", + "/home/ilya/A/util/arena_test.cc", + "/home/ilya/A/util/bloom.cc", + "/home/ilya/A/util/bloom_test.cc", + "/home/ilya/A/util/cache.cc", + "/home/ilya/A/util/cache_test.cc", + "/home/ilya/A/util/coding.cc", + "/home/ilya/A/util/coding.h", + "/home/ilya/A/util/coding_test.cc", + "/home/ilya/A/util/comparator.cc", + "/home/ilya/A/util/crc32c.cc", + "/home/ilya/A/util/crc32c.h", + "/home/ilya/A/util/crc32c_test.cc", + "/home/ilya/A/util/env.cc", + "/home/ilya/A/util/env_posix.cc", + "/home/ilya/A/util/env_posix_test.cc", + "/home/ilya/A/util/env_posix_test_helper.h", + "/home/ilya/A/util/env_test.cc", + "/home/ilya/A/util/env_windows.cc", + "/home/ilya/A/util/env_windows_test.cc", + "/home/ilya/A/util/env_windows_test_helper.h", + "/home/ilya/A/util/filter_policy.cc", + "/home/ilya/A/util/hash.cc", + "/home/ilya/A/util/hash.h", + "/home/ilya/A/util/hash_test.cc", + "/home/ilya/A/util/histogram.cc", + "/home/ilya/A/util/histogram.h", + "/home/ilya/A/util/logging.cc", + "/home/ilya/A/util/logging.h", + "/home/ilya/A/util/logging_test.cc", + "/home/ilya/A/util/mutexlock.h", + "/home/ilya/A/util/no_destructor.h", + "/home/ilya/A/util/no_destructor_test.cc", + "/home/ilya/A/util/options.cc", + "/home/ilya/A/util/posix_logger.h", + "/home/ilya/A/util/random.h", + "/home/ilya/A/util/status.cc", + "/home/ilya/A/util/status_test.cc", + "/home/ilya/A/util/testutil.cc", + "/home/ilya/A/util/testutil.h", + "/home/ilya/A/util/windows_logger.h" + ], + "language": "cpp", + "total_nloc": 1517, + "total_functions": 206, + "avg_ccn": 2.02, + "max_ccn": 17, + "heavy_functions_count": 1, + "heavy_functions_ratio": 0.005, + "coupling_out": 2, + "coupling_in": 3, + "instability": 0.4, + "has_cycles": true, + "dependencies": [ + "helpers/memenv", + "port" + ], + "dependents": [ + "db", + "helpers/memenv", + "table" + ], + "functions": [ + { + "name": "Extend", + "file": "/home/ilya/A/util/crc32c.cc", + "line": 254, + "ccn": 17, + "nloc": 73, + "params": 3 + }, + { + "name": "GetChildren", + "file": "/home/ilya/A/util/env_windows.cc", + "line": 417, + "ccn": 7, + "nloc": 24, + "params": 2 + }, + { + "name": "Logv", + "file": "/home/ilya/A/util/posix_logger.h", + "line": 13, + "ccn": 7, + "nloc": 58, + "params": 2 + }, + { + "name": "Logv", + "file": "/home/ilya/A/util/windows_logger.h", + "line": 13, + "ccn": 7, + "nloc": 55, + "params": 2 + }, + { + "name": "NewRandomAccessFile", + "file": "/home/ilya/A/util/env_posix.cc", + "line": 372, + "ccn": 6, + "nloc": 27, + "params": 2 + }, + { + "name": "NewRandomAccessFile", + "file": "/home/ilya/A/util/env_windows.cc", + "line": 329, + "ccn": 6, + "nloc": 41, + "params": 2 + }, + { + "name": "KeyMayMatch", + "file": "/home/ilya/A/util/bloom.cc", + "line": 34, + "ccn": 5, + "nloc": 16, + "params": 2 + }, + { + "name": "EncodeVarint32", + "file": "/home/ilya/A/util/coding.cc", + "line": 10, + "ccn": 5, + "nloc": 24, + "params": 2 + }, + { + "name": "DoWriteStringToFile", + "file": "/home/ilya/A/util/env.cc", + "line": 31, + "ccn": 5, + "nloc": 17, + "params": 4 + }, + { + "name": "ReadFileToString", + "file": "/home/ilya/A/util/env.cc", + "line": 65, + "ccn": 5, + "nloc": 22, + "params": 3 + }, + { + "name": "Read", + "file": "/home/ilya/A/util/env_posix.cc", + "line": 123, + "ccn": 5, + "nloc": 19, + "params": 4 + }, + { + "name": "SyncFd", + "file": "/home/ilya/A/util/env_posix.cc", + "line": 252, + "ccn": 5, + "nloc": 14, + "params": 2 + }, + { + "name": "Hash", + "file": "/home/ilya/A/util/hash.cc", + "line": 3, + "ccn": 5, + "nloc": 25, + "params": 3 + }, + { + "name": "CreateFilter", + "file": "/home/ilya/A/util/bloom.cc", + "line": 17, + "ccn": 4, + "nloc": 17, + "params": 3 + }, + { + "name": "NextLength", + "file": "/home/ilya/A/util/bloom_test.cc", + "line": 78, + "ccn": 4, + "nloc": 10, + "params": 1 + }, + { + "name": "Resize", + "file": "/home/ilya/A/util/cache.cc", + "line": 44, + "ccn": 4, + "nloc": 23, + "params": 0 + }, + { + "name": "FindShortestSeparator", + "file": "/home/ilya/A/util/comparator.cc", + "line": 18, + "ccn": 4, + "nloc": 16, + "params": 2 + }, + { + "name": "Read", + "file": "/home/ilya/A/util/env_posix.cc", + "line": 88, + "ccn": 4, + "nloc": 14, + "params": 3 + }, + { + "name": "Append", + "file": "/home/ilya/A/util/env_posix.cc", + "line": 187, + "ccn": 4, + "nloc": 20, + "params": 1 + }, + { + "name": "WriteUnbuffered", + "file": "/home/ilya/A/util/env_posix.cc", + "line": 237, + "ccn": 4, + "nloc": 12, + "params": 2 + }, + { + "name": "LockFile", + "file": "/home/ilya/A/util/env_posix.cc", + "line": 476, + "ccn": 4, + "nloc": 17, + "params": 2 + }, + { + "name": "MaxOpenFiles", + "file": "/home/ilya/A/util/env_posix.cc", + "line": 589, + "ccn": 4, + "nloc": 16, + "params": 0 + }, + { + "name": "main", + "file": "/home/ilya/A/util/env_posix_test.cc", + "line": 219, + "ccn": 4, + "nloc": 12, + "params": 2 + }, + { + "name": "Append", + "file": "/home/ilya/A/util/env_windows.cc", + "line": 213, + "ccn": 4, + "nloc": 20, + "params": 1 + }, + { + "name": "RenameFile", + "file": "/home/ilya/A/util/env_windows.cc", + "line": 475, + "ccn": 4, + "nloc": 16, + "params": 2 + }, + { + "name": "ConsumeDecimalNumber", + "file": "/home/ilya/A/util/logging.cc", + "line": 31, + "ccn": 4, + "nloc": 20, + "params": 2 + }, + { + "name": "Build", + "file": "/home/ilya/A/util/bloom_test.cc", + "line": 17, + "ccn": 3, + "nloc": 9, + "params": 0 + }, + { + "name": "DumpFilter", + "file": "/home/ilya/A/util/bloom_test.cc", + "line": 36, + "ccn": 3, + "nloc": 8, + "params": 0 + }, + { + "name": "FalsePositiveRate", + "file": "/home/ilya/A/util/bloom_test.cc", + "line": 50, + "ccn": 3, + "nloc": 8, + "params": 0 + }, + { + "name": "Insert", + "file": "/home/ilya/A/util/cache.cc", + "line": 28, + "ccn": 3, + "nloc": 11, + "params": 1 + }, + { + "name": "GetVarint32PtrFallback", + "file": "/home/ilya/A/util/coding.cc", + "line": 69, + "ccn": 3, + "nloc": 13, + "params": 3 + }, + { + "name": "GetVarint64Ptr", + "file": "/home/ilya/A/util/coding.cc", + "line": 101, + "ccn": 3, + "nloc": 13, + "params": 3 + }, + { + "name": "GetVarint32Ptr", + "file": "/home/ilya/A/util/coding.h", + "line": 67, + "ccn": 3, + "nloc": 8, + "params": 3 + }, + { + "name": "FindShortSuccessor", + "file": "/home/ilya/A/util/comparator.cc", + "line": 42, + "ccn": 3, + "nloc": 9, + "params": 1 + }, + { + "name": "Sync", + "file": "/home/ilya/A/util/env_posix.cc", + "line": 227, + "ccn": 3, + "nloc": 9, + "params": 0 + }, + { + "name": "SyncDirIfManifest", + "file": "/home/ilya/A/util/env_posix.cc", + "line": 245, + "ccn": 3, + "nloc": 12, + "params": 0 + }, + { + "name": "GetChildren", + "file": "/home/ilya/A/util/env_posix.cc", + "line": 435, + "ccn": 3, + "nloc": 11, + "params": 2 + }, + { + "name": "NewLogger", + "file": "/home/ilya/A/util/env_posix.cc", + "line": 538, + "ccn": 3, + "nloc": 15, + "params": 2 + }, + { + "name": "TestCloseOnExecHelperMain", + "file": "/home/ilya/A/util/env_posix_test.cc", + "line": 26, + "ccn": 3, + "nloc": 11, + "params": 1 + }, + { + "name": "GetOpenFileDescriptors", + "file": "/home/ilya/A/util/env_posix_test.cc", + "line": 38, + "ccn": 3, + "nloc": 10, + "params": 1 + }, + { + "name": "Read", + "file": "/home/ilya/A/util/env_windows.cc", + "line": 155, + "ccn": 3, + "nloc": 14, + "params": 4 + }, + { + "name": "Sync", + "file": "/home/ilya/A/util/env_windows.cc", + "line": 241, + "ccn": 3, + "nloc": 9, + "params": 0 + }, + { + "name": "LockFile", + "file": "/home/ilya/A/util/env_windows.cc", + "line": 492, + "ccn": 3, + "nloc": 14, + "params": 2 + }, + { + "name": "GetTestDirectory", + "file": "/home/ilya/A/util/env_windows.cc", + "line": 531, + "ccn": 3, + "nloc": 14, + "params": 1 + }, + { + "name": "AppendEscapedStringTo", + "file": "/home/ilya/A/util/logging.cc", + "line": 10, + "ccn": 3, + "nloc": 11, + "params": 2 + }, + { + "name": "CompressibleString", + "file": "/home/ilya/A/util/testutil.cc", + "line": 23, + "ccn": 3, + "nloc": 10, + "params": 4 + }, + { + "name": "Matches", + "file": "/home/ilya/A/util/bloom_test.cc", + "line": 48, + "ccn": 2, + "nloc": 4, + "params": 1 + }, + { + "name": "Remove", + "file": "/home/ilya/A/util/cache.cc", + "line": 33, + "ccn": 2, + "nloc": 7, + "params": 2 + }, + { + "name": "FindPointer", + "file": "/home/ilya/A/util/cache.cc", + "line": 37, + "ccn": 2, + "nloc": 5, + "params": 2 + }, + { + "name": "Prune", + "file": "/home/ilya/A/util/cache.cc", + "line": 262, + "ccn": 2, + "nloc": 3, + "params": 0 + }, + { + "name": "TotalCharge", + "file": "/home/ilya/A/util/cache.cc", + "line": 267, + "ccn": 2, + "nloc": 5, + "params": 0 + }, + { + "name": "Lookup", + "file": "/home/ilya/A/util/cache_test.cc", + "line": 30, + "ccn": 2, + "nloc": 6, + "params": 1 + }, + { + "name": "EncodeVarint64", + "file": "/home/ilya/A/util/coding.cc", + "line": 42, + "ccn": 2, + "nloc": 8, + "params": 2 + }, + { + "name": "VarintLength", + "file": "/home/ilya/A/util/coding.cc", + "line": 66, + "ccn": 2, + "nloc": 6, + "params": 1 + }, + { + "name": "GetVarint32", + "file": "/home/ilya/A/util/coding.cc", + "line": 90, + "ccn": 2, + "nloc": 9, + "params": 2 + }, + { + "name": "GetVarint64", + "file": "/home/ilya/A/util/coding.cc", + "line": 118, + "ccn": 2, + "nloc": 9, + "params": 2 + }, + { + "name": "GetLengthPrefixedSlice", + "file": "/home/ilya/A/util/coding.cc", + "line": 128, + "ccn": 2, + "nloc": 8, + "params": 2 + }, + { + "name": "Log", + "file": "/home/ilya/A/util/env.cc", + "line": 28, + "ccn": 2, + "nloc": 6, + "params": 3 + }, + { + "name": "PosixError", + "file": "/home/ilya/A/util/env_posix.cc", + "line": 43, + "ccn": 2, + "nloc": 5, + "params": 2 + }, + { + "name": "Acquire", + "file": "/home/ilya/A/util/env_posix.cc", + "line": 57, + "ccn": 2, + "nloc": 8, + "params": 0 + }, + { + "name": "Skip", + "file": "/home/ilya/A/util/env_posix.cc", + "line": 99, + "ccn": 2, + "nloc": 4, + "params": 1 + }, + { + "name": "Read", + "file": "/home/ilya/A/util/env_posix.cc", + "line": 168, + "ccn": 2, + "nloc": 6, + "params": 4 + }, + { + "name": "Close", + "file": "/home/ilya/A/util/env_posix.cc", + "line": 215, + "ccn": 2, + "nloc": 7, + "params": 0 + }, + { + "name": "Dirname", + "file": "/home/ilya/A/util/env_posix.cc", + "line": 267, + "ccn": 2, + "nloc": 6, + "params": 1 + }, + { + "name": "Basename", + "file": "/home/ilya/A/util/env_posix.cc", + "line": 283, + "ccn": 2, + "nloc": 7, + "params": 1 + }, + { + "name": "NewSequentialFile", + "file": "/home/ilya/A/util/env_posix.cc", + "line": 358, + "ccn": 2, + "nloc": 7, + "params": 2 + }, + { + "name": "NewWritableFile", + "file": "/home/ilya/A/util/env_posix.cc", + "line": 405, + "ccn": 2, + "nloc": 8, + "params": 2 + }, + { + "name": "NewAppendableFile", + "file": "/home/ilya/A/util/env_posix.cc", + "line": 422, + "ccn": 2, + "nloc": 8, + "params": 2 + }, + { + "name": "RemoveFile", + "file": "/home/ilya/A/util/env_posix.cc", + "line": 445, + "ccn": 2, + "nloc": 4, + "params": 1 + }, + { + "name": "CreateDir", + "file": "/home/ilya/A/util/env_posix.cc", + "line": 449, + "ccn": 2, + "nloc": 4, + "params": 1 + }, + { + "name": "RemoveDir", + "file": "/home/ilya/A/util/env_posix.cc", + "line": 457, + "ccn": 2, + "nloc": 4, + "params": 1 + }, + { + "name": "GetFileSize", + "file": "/home/ilya/A/util/env_posix.cc", + "line": 462, + "ccn": 2, + "nloc": 7, + "params": 2 + }, + { + "name": "RenameFile", + "file": "/home/ilya/A/util/env_posix.cc", + "line": 471, + "ccn": 2, + "nloc": 4, + "params": 2 + }, + { + "name": "UnlockFile", + "file": "/home/ilya/A/util/env_posix.cc", + "line": 498, + "ccn": 2, + "nloc": 8, + "params": 1 + }, + { + "name": "GetTestDirectory", + "file": "/home/ilya/A/util/env_posix.cc", + "line": 525, + "ccn": 2, + "nloc": 11, + "params": 1 + }, + { + "name": "SingletonEnv", + "file": "/home/ilya/A/util/env_posix.cc", + "line": 656, + "ccn": 2, + "nloc": 12, + "params": 0 + }, + { + "name": "AssertEnvNotInitialized", + "file": "/home/ilya/A/util/env_posix.cc", + "line": 681, + "ccn": 2, + "nloc": 3, + "params": 0 + }, + { + "name": "GetNewlyOpenedFileDescriptor", + "file": "/home/ilya/A/util/env_posix_test.cc", + "line": 48, + "ccn": 2, + "nloc": 10, + "params": 2 + }, + { + "name": "CheckCloseOnExecDoesNotLeakFDs", + "file": "/home/ilya/A/util/env_posix_test.cc", + "line": 55, + "ccn": 2, + "nloc": 23, + "params": 1 + }, + { + "name": "GetWindowsErrorMessage", + "file": "/home/ilya/A/util/env_windows.cc", + "line": 25, + "ccn": 2, + "nloc": 13, + "params": 1 + }, + { + "name": "WindowsError", + "file": "/home/ilya/A/util/env_windows.cc", + "line": 45, + "ccn": 2, + "nloc": 3, + "params": 2 + }, + { + "name": "Close", + "file": "/home/ilya/A/util/env_windows.cc", + "line": 66, + "ccn": 2, + "nloc": 6, + "params": 0 + }, + { + "name": "Acquire", + "file": "/home/ilya/A/util/env_windows.cc", + "line": 90, + "ccn": 2, + "nloc": 5, + "params": 0 + }, + { + "name": "Read", + "file": "/home/ilya/A/util/env_windows.cc", + "line": 122, + "ccn": 2, + "nloc": 8, + "params": 3 + }, + { + "name": "Skip", + "file": "/home/ilya/A/util/env_windows.cc", + "line": 137, + "ccn": 2, + "nloc": 6, + "params": 1 + }, + { + "name": "Read", + "file": "/home/ilya/A/util/env_windows.cc", + "line": 189, + "ccn": 2, + "nloc": 6, + "params": 4 + }, + { + "name": "Close", + "file": "/home/ilya/A/util/env_windows.cc", + "line": 235, + "ccn": 2, + "nloc": 5, + "params": 0 + }, + { + "name": "WriteUnbuffered", + "file": "/home/ilya/A/util/env_windows.cc", + "line": 259, + "ccn": 2, + "nloc": 7, + "params": 2 + }, + { + "name": "LockOrUnlock", + "file": "/home/ilya/A/util/env_windows.cc", + "line": 275, + "ccn": 2, + "nloc": 11, + "params": 2 + }, + { + "name": "NewSequentialFile", + "file": "/home/ilya/A/util/env_windows.cc", + "line": 305, + "ccn": 2, + "nloc": 12, + "params": 2 + }, + { + "name": "NewWritableFile", + "file": "/home/ilya/A/util/env_windows.cc", + "line": 379, + "ccn": 2, + "nloc": 12, + "params": 2 + }, + { + "name": "NewAppendableFile", + "file": "/home/ilya/A/util/env_windows.cc", + "line": 399, + "ccn": 2, + "nloc": 12, + "params": 2 + }, + { + "name": "RemoveFile", + "file": "/home/ilya/A/util/env_windows.cc", + "line": 444, + "ccn": 2, + "nloc": 4, + "params": 1 + }, + { + "name": "CreateDir", + "file": "/home/ilya/A/util/env_windows.cc", + "line": 448, + "ccn": 2, + "nloc": 4, + "params": 1 + }, + { + "name": "RemoveDir", + "file": "/home/ilya/A/util/env_windows.cc", + "line": 454, + "ccn": 2, + "nloc": 4, + "params": 1 + }, + { + "name": "GetFileSize", + "file": "/home/ilya/A/util/env_windows.cc", + "line": 460, + "ccn": 2, + "nloc": 10, + "params": 2 + }, + { + "name": "UnlockFile", + "file": "/home/ilya/A/util/env_windows.cc", + "line": 511, + "ccn": 2, + "nloc": 8, + "params": 1 + }, + { + "name": "NewLogger", + "file": "/home/ilya/A/util/env_windows.cc", + "line": 547, + "ccn": 2, + "nloc": 8, + "params": 2 + }, + { + "name": "SingletonEnv", + "file": "/home/ilya/A/util/env_windows.cc", + "line": 615, + "ccn": 2, + "nloc": 12, + "params": 0 + }, + { + "name": "AssertEnvNotInitialized", + "file": "/home/ilya/A/util/env_windows.cc", + "line": 636, + "ccn": 2, + "nloc": 3, + "params": 0 + }, + { + "name": "Next", + "file": "/home/ilya/A/util/random.h", + "line": 9, + "ccn": 2, + "nloc": 8, + "params": 0 + }, + { + "name": "RandomString", + "file": "/home/ilya/A/util/testutil.cc", + "line": 2, + "ccn": 2, + "nloc": 5, + "params": 3 + }, + { + "name": "RandomKey", + "file": "/home/ilya/A/util/testutil.cc", + "line": 11, + "ccn": 2, + "nloc": 7, + "params": 2 + }, + { + "name": "NewWritableFile", + "file": "/home/ilya/A/util/testutil.h", + "line": 32, + "ccn": 2, + "nloc": 6, + "params": 2 + }, + { + "name": "NewAppendableFile", + "file": "/home/ilya/A/util/testutil.h", + "line": 40, + "ccn": 2, + "nloc": 6, + "params": 2 + }, + { + "name": "MemoryUsage", + "file": "/home/ilya/A/util/arena.h", + "line": 14, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "BloomHash", + "file": "/home/ilya/A/util/bloom.cc", + "line": 2, + "ccn": 1, + "nloc": 1, + "params": 1 + }, + { + "name": "Name", + "file": "/home/ilya/A/util/bloom.cc", + "line": 14, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "NewBloomFilterPolicy", + "file": "/home/ilya/A/util/bloom.cc", + "line": 52, + "ccn": 1, + "nloc": 1, + "params": 1 + }, + { + "name": "Key", + "file": "/home/ilya/A/util/bloom_test.cc", + "line": 2, + "ccn": 1, + "nloc": 2, + "params": 2 + }, + { + "name": "Reset", + "file": "/home/ilya/A/util/bloom_test.cc", + "line": 11, + "ccn": 1, + "nloc": 2, + "params": 0 + }, + { + "name": "Add", + "file": "/home/ilya/A/util/bloom_test.cc", + "line": 15, + "ccn": 1, + "nloc": 1, + "params": 1 + }, + { + "name": "FilterSize", + "file": "/home/ilya/A/util/bloom_test.cc", + "line": 35, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "key", + "file": "/home/ilya/A/util/cache.cc", + "line": 22, + "ccn": 1, + "nloc": 2, + "params": 0 + }, + { + "name": "Lookup", + "file": "/home/ilya/A/util/cache.cc", + "line": 26, + "ccn": 1, + "nloc": 1, + "params": 2 + }, + { + "name": "SetCapacity", + "file": "/home/ilya/A/util/cache.cc", + "line": 65, + "ccn": 1, + "nloc": 1, + "params": 1 + }, + { + "name": "TotalCharge", + "file": "/home/ilya/A/util/cache.cc", + "line": 75, + "ccn": 1, + "nloc": 2, + "params": 0 + }, + { + "name": "HashSlice", + "file": "/home/ilya/A/util/cache.cc", + "line": 207, + "ccn": 1, + "nloc": 1, + "params": 1 + }, + { + "name": "Shard", + "file": "/home/ilya/A/util/cache.cc", + "line": 210, + "ccn": 1, + "nloc": 1, + "params": 1 + }, + { + "name": "Lookup", + "file": "/home/ilya/A/util/cache.cc", + "line": 235, + "ccn": 1, + "nloc": 2, + "params": 1 + }, + { + "name": "Release", + "file": "/home/ilya/A/util/cache.cc", + "line": 245, + "ccn": 1, + "nloc": 2, + "params": 1 + }, + { + "name": "Erase", + "file": "/home/ilya/A/util/cache.cc", + "line": 248, + "ccn": 1, + "nloc": 2, + "params": 1 + }, + { + "name": "Value", + "file": "/home/ilya/A/util/cache.cc", + "line": 254, + "ccn": 1, + "nloc": 1, + "params": 1 + }, + { + "name": "NewId", + "file": "/home/ilya/A/util/cache.cc", + "line": 259, + "ccn": 1, + "nloc": 2, + "params": 0 + }, + { + "name": "NewLRUCache", + "file": "/home/ilya/A/util/cache.cc", + "line": 270, + "ccn": 1, + "nloc": 1, + "params": 1 + }, + { + "name": "EncodeKey", + "file": "/home/ilya/A/util/cache_test.cc", + "line": 2, + "ccn": 1, + "nloc": 3, + "params": 1 + }, + { + "name": "DecodeKey", + "file": "/home/ilya/A/util/cache_test.cc", + "line": 3, + "ccn": 1, + "nloc": 2, + "params": 1 + }, + { + "name": "EncodeValue", + "file": "/home/ilya/A/util/cache_test.cc", + "line": 9, + "ccn": 1, + "nloc": 1, + "params": 1 + }, + { + "name": "DecodeValue", + "file": "/home/ilya/A/util/cache_test.cc", + "line": 14, + "ccn": 1, + "nloc": 1, + "params": 1 + }, + { + "name": "Deleter", + "file": "/home/ilya/A/util/cache_test.cc", + "line": 17, + "ccn": 1, + "nloc": 2, + "params": 2 + }, + { + "name": "Insert", + "file": "/home/ilya/A/util/cache_test.cc", + "line": 39, + "ccn": 1, + "nloc": 2, + "params": 3 + }, + { + "name": "InsertAndReturnHandle", + "file": "/home/ilya/A/util/cache_test.cc", + "line": 45, + "ccn": 1, + "nloc": 2, + "params": 3 + }, + { + "name": "Erase", + "file": "/home/ilya/A/util/cache_test.cc", + "line": 53, + "ccn": 1, + "nloc": 1, + "params": 1 + }, + { + "name": "PutFixed32", + "file": "/home/ilya/A/util/coding.cc", + "line": 1, + "ccn": 1, + "nloc": 3, + "params": 2 + }, + { + "name": "PutFixed64", + "file": "/home/ilya/A/util/coding.cc", + "line": 3, + "ccn": 1, + "nloc": 3, + "params": 2 + }, + { + "name": "PutVarint32", + "file": "/home/ilya/A/util/coding.cc", + "line": 36, + "ccn": 1, + "nloc": 3, + "params": 2 + }, + { + "name": "PutVarint64", + "file": "/home/ilya/A/util/coding.cc", + "line": 53, + "ccn": 1, + "nloc": 3, + "params": 2 + }, + { + "name": "PutLengthPrefixedSlice", + "file": "/home/ilya/A/util/coding.cc", + "line": 58, + "ccn": 1, + "nloc": 2, + "params": 2 + }, + { + "name": "EncodeFixed32", + "file": "/home/ilya/A/util/coding.h", + "line": 27, + "ccn": 1, + "nloc": 5, + "params": 2 + }, + { + "name": "EncodeFixed64", + "file": "/home/ilya/A/util/coding.h", + "line": 33, + "ccn": 1, + "nloc": 9, + "params": 2 + }, + { + "name": "DecodeFixed32", + "file": "/home/ilya/A/util/coding.h", + "line": 45, + "ccn": 1, + "nloc": 5, + "params": 1 + }, + { + "name": "DecodeFixed64", + "file": "/home/ilya/A/util/coding.h", + "line": 51, + "ccn": 1, + "nloc": 9, + "params": 1 + }, + { + "name": "TEST", + "file": "/home/ilya/A/util/coding_test.cc", + "line": 41, + "ccn": 1, + "nloc": 18, + "params": 2 + }, + { + "name": "Name", + "file": "/home/ilya/A/util/comparator.cc", + "line": 9, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "Compare", + "file": "/home/ilya/A/util/comparator.cc", + "line": 12, + "ccn": 1, + "nloc": 1, + "params": 2 + }, + { + "name": "BytewiseComparator", + "file": "/home/ilya/A/util/comparator.cc", + "line": 48, + "ccn": 1, + "nloc": 2, + "params": 0 + }, + { + "name": "ReadUint32LE", + "file": "/home/ilya/A/util/crc32c.cc", + "line": 240, + "ccn": 1, + "nloc": 1, + "params": 1 + }, + { + "name": "RoundUp", + "file": "/home/ilya/A/util/crc32c.cc", + "line": 242, + "ccn": 1, + "nloc": 3, + "params": 1 + }, + { + "name": "CanAccelerateCRC32C", + "file": "/home/ilya/A/util/crc32c.cc", + "line": 246, + "ccn": 1, + "nloc": 4, + "params": 0 + }, + { + "name": "Value", + "file": "/home/ilya/A/util/crc32c.h", + "line": 5, + "ccn": 1, + "nloc": 1, + "params": 2 + }, + { + "name": "Mask", + "file": "/home/ilya/A/util/crc32c.h", + "line": 12, + "ccn": 1, + "nloc": 1, + "params": 1 + }, + { + "name": "Unmask", + "file": "/home/ilya/A/util/crc32c.h", + "line": 15, + "ccn": 1, + "nloc": 2, + "params": 1 + }, + { + "name": "WriteStringToFile", + "file": "/home/ilya/A/util/env.cc", + "line": 51, + "ccn": 1, + "nloc": 1, + "params": 3 + }, + { + "name": "WriteStringToFileSync", + "file": "/home/ilya/A/util/env.cc", + "line": 57, + "ccn": 1, + "nloc": 1, + "params": 3 + }, + { + "name": "acquires_allowed_", + "file": "/home/ilya/A/util/env_posix.cc", + "line": 52, + "ccn": 1, + "nloc": 1, + "params": 1 + }, + { + "name": "Release", + "file": "/home/ilya/A/util/env_posix.cc", + "line": 70, + "ccn": 1, + "nloc": 4, + "params": 0 + }, + { + "name": "Flush", + "file": "/home/ilya/A/util/env_posix.cc", + "line": 226, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "FlushBuffer", + "file": "/home/ilya/A/util/env_posix.cc", + "line": 235, + "ccn": 1, + "nloc": 3, + "params": 0 + }, + { + "name": "IsManifest", + "file": "/home/ilya/A/util/env_posix.cc", + "line": 298, + "ccn": 1, + "nloc": 1, + "params": 1 + }, + { + "name": "LockOrUnlock", + "file": "/home/ilya/A/util/env_posix.cc", + "line": 307, + "ccn": 1, + "nloc": 8, + "params": 2 + }, + { + "name": "fd", + "file": "/home/ilya/A/util/env_posix.cc", + "line": 325, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "filename", + "file": "/home/ilya/A/util/env_posix.cc", + "line": 326, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "FileExists", + "file": "/home/ilya/A/util/env_posix.cc", + "line": 430, + "ccn": 1, + "nloc": 1, + "params": 1 + }, + { + "name": "NowMicros", + "file": "/home/ilya/A/util/env_posix.cc", + "line": 555, + "ccn": 1, + "nloc": 4, + "params": 0 + }, + { + "name": "SleepForMicroseconds", + "file": "/home/ilya/A/util/env_posix.cc", + "line": 560, + "ccn": 1, + "nloc": 1, + "params": 1 + }, + { + "name": "BackgroundThreadEntryPoint", + "file": "/home/ilya/A/util/env_posix.cc", + "line": 563, + "ccn": 1, + "nloc": 1, + "params": 1 + }, + { + "name": "MaxMmaps", + "file": "/home/ilya/A/util/env_posix.cc", + "line": 589, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "env", + "file": "/home/ilya/A/util/env_posix.cc", + "line": 681, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "GetArgvZero", + "file": "/home/ilya/A/util/env_posix_test.cc", + "line": 18, + "ccn": 1, + "nloc": 2, + "params": 0 + }, + { + "name": "GetMaxFileDescriptor", + "file": "/home/ilya/A/util/env_posix_test.cc", + "line": 35, + "ccn": 1, + "nloc": 3, + "params": 1 + }, + { + "name": "SetFileLimits", + "file": "/home/ilya/A/util/env_posix_test.cc", + "line": 86, + "ccn": 1, + "nloc": 2, + "params": 2 + }, + { + "name": "Run", + "file": "/home/ilya/A/util/env_test.cc", + "line": 57, + "ccn": 1, + "nloc": 5, + "params": 1 + }, + { + "name": "Run", + "file": "/home/ilya/A/util/env_test.cc", + "line": 78, + "ccn": 1, + "nloc": 6, + "params": 1 + }, + { + "name": "ThreadBody", + "file": "/home/ilya/A/util/env_test.cc", + "line": 123, + "ccn": 1, + "nloc": 6, + "params": 1 + }, + { + "name": "ScopedHandle", + "file": "/home/ilya/A/util/env_windows.cc", + "line": 55, + "ccn": 1, + "nloc": 0, + "params": 1 + }, + { + "name": "is_valid", + "file": "/home/ilya/A/util/env_windows.cc", + "line": 68, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "get", + "file": "/home/ilya/A/util/env_windows.cc", + "line": 73, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "Release", + "file": "/home/ilya/A/util/env_windows.cc", "line": 74, "ccn": 1, "nloc": 3, "params": 0 }, { - "name": "addModuleRoutes", - "file": "/home/claude/vkr/B/src/index.mjs", - "line": 70, - "ccn": 1, - "nloc": 7, - "params": 3 - }, - { - "name": "(anonymous)", - "file": "/home/claude/vkr/B/src/index.mjs", - "line": 85, - "ccn": 1, - "nloc": 3, - "params": 0 - }, - { - "name": "addUknownRoute", - "file": "/home/claude/vkr/B/src/index.mjs", - "line": 80, - "ccn": 1, - "nloc": 8, - "params": 1 - }, - { - "name": "(anonymous)", - "file": "/home/claude/vkr/B/src/index.mjs", - "line": 95, - "ccn": 1, - "nloc": 3, - "params": 0 - }, - { - "name": "addErrHandler", - "file": "/home/claude/vkr/B/src/index.mjs", - "line": 91, - "ccn": 1, - "nloc": 7, - "params": 1 - }, - { - "name": "runExpressServer", - "file": "/home/claude/vkr/B/src/index.mjs", - "line": 116, - "ccn": 1, - "nloc": 11, - "params": 1 - }, - { - "name": "float32ArrayToBuffer", - "file": "/home/claude/vkr/B/src/utils.mjs", - "line": 56, - "ccn": 1, - "nloc": 4, - "params": 1 - }, - { - "name": "clamp", - "file": "/home/claude/vkr/B/src/utils.mjs", - "line": 61, + "name": "acquires_allowed_", + "file": "/home/ilya/A/util/env_windows.cc", + "line": 81, "ccn": 1, "nloc": 1, - "params": 3 - } - ] - }, - "src/database": { - "files": [ - "/home/claude/vkr/B/src/database/dbQueries.mjs", - "/home/claude/vkr/B/src/database/dbRepository.mjs" - ], - "language": "mixed", - "total_nloc": 32, - "total_functions": 4, - "avg_ccn": 1.0, - "max_ccn": 1, - "heavy_functions_count": 0, - "heavy_functions_ratio": 0.0, - "coupling_out": 1, - "coupling_in": 2, - "instability": 0.333, - "has_cycles": true, - "dependencies": [ - "src" - ], - "dependents": [ - "src", - "src/routes" - ], - "functions": [ - { - "name": "addVector", - "file": "/home/claude/vkr/B/src/database/dbRepository.mjs", - "line": 11, - "ccn": 1, - "nloc": 9, - "params": 3 - }, - { - "name": "updateVector", - "file": "/home/claude/vkr/B/src/database/dbRepository.mjs", - "line": 21, - "ccn": 1, - "nloc": 9, - "params": 3 - }, - { - "name": "deleteVector", - "file": "/home/claude/vkr/B/src/database/dbRepository.mjs", - "line": 31, - "ccn": 1, - "nloc": 4, "params": 1 }, { - "name": "getNearestVector", - "file": "/home/claude/vkr/B/src/database/dbRepository.mjs", - "line": 36, - "ccn": 1, - "nloc": 10, - "params": 4 - } - ] - }, - "src/error-handlers": { - "files": [ - "/home/claude/vkr/B/src/error-handlers/errorHandler.mjs" - ], - "language": "mixed", - "total_nloc": 37, - "total_functions": 3, - "avg_ccn": 2.0, - "max_ccn": 3, - "heavy_functions_count": 0, - "heavy_functions_ratio": 0.0, - "coupling_out": 2, - "coupling_in": 1, - "instability": 0.667, - "has_cycles": true, - "dependencies": [ - "src", - "src/middlewares" - ], - "dependents": [ - "src" - ], - "functions": [ - { - "name": "generateResponse", - "file": "/home/claude/vkr/B/src/error-handlers/errorHandler.mjs", - "line": 90, - "ccn": 3, - "nloc": 16, - "params": 2 - }, - { - "name": "handleErrorCase", - "file": "/home/claude/vkr/B/src/error-handlers/errorHandler.mjs", - "line": 107, - "ccn": 2, - "nloc": 10, - "params": 3 - }, - { - "name": "logError", - "file": "/home/claude/vkr/B/src/error-handlers/errorHandler.mjs", - "line": 78, - "ccn": 1, - "nloc": 11, - "params": 3 - } - ] - }, - "src/middlewares": { - "files": [ - "/home/claude/vkr/B/src/middlewares/addLogInfo.mjs", - "/home/claude/vkr/B/src/middlewares/builder.mjs", - "/home/claude/vkr/B/src/middlewares/index.mjs", - "/home/claude/vkr/B/src/middlewares/logger.mjs", - "/home/claude/vkr/B/src/middlewares/parser.mjs" - ], - "language": "mixed", - "total_nloc": 267, - "total_functions": 15, - "avg_ccn": 3.53, - "max_ccn": 8, - "heavy_functions_count": 0, - "heavy_functions_ratio": 0.0, - "coupling_out": 1, - "coupling_in": 3, - "instability": 0.25, - "has_cycles": true, - "dependencies": [ - "src" - ], - "dependents": [ - "src", - "src/error-handlers", - "src/routes" - ], - "functions": [ - { - "name": "findBoundary", - "file": "/home/claude/vkr/B/src/middlewares/parser.mjs", - "line": 78, - "ccn": 8, - "nloc": 27, - "params": 3 - }, - { - "name": "parsePart", - "file": "/home/claude/vkr/B/src/middlewares/parser.mjs", - "line": 106, - "ccn": 7, - "nloc": 34, - "params": 1 - }, - { - "name": "parse", - "file": "/home/claude/vkr/B/src/middlewares/parser.mjs", - "line": 14, - "ccn": 6, - "nloc": 38, - "params": 3 - }, - { - "name": "getNextPart", - "file": "/home/claude/vkr/B/src/middlewares/parser.mjs", - "line": 159, - "ccn": 6, - "nloc": 39, - "params": 3 - }, - { - "name": "parseMultipart", - "file": "/home/claude/vkr/B/src/middlewares/parser.mjs", - "line": 205, - "ccn": 6, - "nloc": 35, - "params": 2 - }, - { - "name": "getBoundary", - "file": "/home/claude/vkr/B/src/middlewares/parser.mjs", - "line": 146, - "ccn": 4, - "nloc": 12, - "params": 1 - }, - { - "name": "(anonymous)", - "file": "/home/claude/vkr/B/src/middlewares/parser.mjs", - "line": 42, - "ccn": 3, - "nloc": 6, - "params": 0 - }, - { - "name": "boundaryValid", - "file": "/home/claude/vkr/B/src/middlewares/parser.mjs", - "line": 68, - "ccn": 3, - "nloc": 9, - "params": 3 - }, - { - "name": "(anonymous)", - "file": "/home/claude/vkr/B/src/middlewares/builder.mjs", - "line": 18, - "ccn": 2, - "nloc": 12, - "params": 0 - }, - { - "name": "(anonymous)", - "file": "/home/claude/vkr/B/src/middlewares/builder.mjs", - "line": 40, - "ccn": 2, - "nloc": 15, - "params": 0 - }, - { - "name": "(anonymous)", - "file": "/home/claude/vkr/B/src/middlewares/parser.mjs", - "line": 32, - "ccn": 2, - "nloc": 6, - "params": 0 - }, - { - "name": "addLogInfo", - "file": "/home/claude/vkr/B/src/middlewares/addLogInfo.mjs", - "line": 3, - "ccn": 1, - "nloc": 6, - "params": 3 - }, - { - "name": "buildMultipart", - "file": "/home/claude/vkr/B/src/middlewares/builder.mjs", - "line": 12, - "ccn": 1, - "nloc": 15, - "params": 2 - }, - { - "name": "customSuccessMessage", - "file": "/home/claude/vkr/B/src/middlewares/logger.mjs", - "line": 26, - "ccn": 1, - "nloc": 9, - "params": 3 - }, - { - "name": "(anonymous)", - "file": "/home/claude/vkr/B/src/middlewares/parser.mjs", - "line": 51, + "name": "Release", + "file": "/home/ilya/A/util/env_windows.cc", + "line": 102, "ccn": 1, "nloc": 4, "params": 0 - } - ] - }, - "src/routes": { - "files": [ - "/home/claude/vkr/B/src/routes/add.mjs", - "/home/claude/vkr/B/src/routes/compare.mjs", - "/home/claude/vkr/B/src/routes/delete.mjs", - "/home/claude/vkr/B/src/routes/extract.mjs", - "/home/claude/vkr/B/src/routes/health.mjs", - "/home/claude/vkr/B/src/routes/identify.mjs", - "/home/claude/vkr/B/src/routes/index.mjs", - "/home/claude/vkr/B/src/routes/match.mjs", - "/home/claude/vkr/B/src/routes/memory.mjs", - "/home/claude/vkr/B/src/routes/update.mjs", - "/home/claude/vkr/B/src/routes/verify.mjs" - ], - "language": "mixed", - "total_nloc": 635, - "total_functions": 24, - "avg_ccn": 6.46, - "max_ccn": 21, - "heavy_functions_count": 5, - "heavy_functions_ratio": 0.208, - "coupling_out": 3, - "coupling_in": 1, - "instability": 0.75, - "has_cycles": true, - "dependencies": [ - "src", - "src/database", - "src/middlewares" - ], - "dependents": [ - "src" - ], - "functions": [ - { - "name": "(anonymous)", - "file": "/home/claude/vkr/B/src/routes/identify.mjs", - "line": 19, - "ccn": 21, - "nloc": 79, - "params": 0 }, { - "name": "(anonymous)", - "file": "/home/claude/vkr/B/src/routes/add.mjs", - "line": 13, - "ccn": 16, - "nloc": 65, - "params": 0 - }, - { - "name": "(anonymous)", - "file": "/home/claude/vkr/B/src/routes/match.mjs", - "line": 13, - "ccn": 16, - "nloc": 71, - "params": 0 - }, - { - "name": "(anonymous)", - "file": "/home/claude/vkr/B/src/routes/update.mjs", - "line": 11, - "ccn": 16, - "nloc": 61, - "params": 0 - }, - { - "name": "(anonymous)", - "file": "/home/claude/vkr/B/src/routes/verify.mjs", - "line": 19, - "ccn": 15, - "nloc": 62, - "params": 0 - }, - { - "name": "(anonymous)", - "file": "/home/claude/vkr/B/src/routes/compare.mjs", - "line": 9, - "ccn": 9, - "nloc": 46, - "params": 0 - }, - { - "name": "(anonymous)", - "file": "/home/claude/vkr/B/src/routes/extract.mjs", - "line": 8, - "ccn": 9, - "nloc": 27, - "params": 0 - }, - { - "name": "(anonymous)", - "file": "/home/claude/vkr/B/src/routes/health.mjs", - "line": 19, - "ccn": 7, - "nloc": 47, - "params": 0 - }, - { - "name": "(anonymous)", - "file": "/home/claude/vkr/B/src/routes/delete.mjs", - "line": 8, - "ccn": 5, - "nloc": 21, - "params": 0 - }, - { - "name": "verifyParams", - "file": "/home/claude/vkr/B/src/routes/identify.mjs", - "line": 121, - "ccn": 5, - "nloc": 11, - "params": 1 - }, - { - "name": "verifyParams", - "file": "/home/claude/vkr/B/src/routes/match.mjs", - "line": 125, - "ccn": 5, - "nloc": 11, - "params": 1 - }, - { - "name": "getId", - "file": "/home/claude/vkr/B/src/routes/add.mjs", - "line": 95, - "ccn": 4, - "nloc": 10, - "params": 1 - }, - { - "name": "getId", - "file": "/home/claude/vkr/B/src/routes/delete.mjs", - "line": 44, - "ccn": 4, - "nloc": 10, - "params": 1 - }, - { - "name": "getId", - "file": "/home/claude/vkr/B/src/routes/update.mjs", - "line": 108, - "ccn": 4, - "nloc": 10, - "params": 1 - }, - { - "name": "(anonymous)", - "file": "/home/claude/vkr/B/src/routes/memory.mjs", - "line": 6, - "ccn": 3, - "nloc": 16, - "params": 0 - }, - { - "name": "parseTemplate", - "file": "/home/claude/vkr/B/src/routes/add.mjs", - "line": 83, - "ccn": 2, - "nloc": 11, - "params": 1 - }, - { - "name": "parseTemplate", - "file": "/home/claude/vkr/B/src/routes/delete.mjs", - "line": 32, - "ccn": 2, - "nloc": 11, - "params": 1 - }, - { - "name": "parseMeta", - "file": "/home/claude/vkr/B/src/routes/identify.mjs", - "line": 109, - "ccn": 2, - "nloc": 11, - "params": 1 - }, - { - "name": "parseMeta", - "file": "/home/claude/vkr/B/src/routes/match.mjs", - "line": 100, - "ccn": 2, - "nloc": 11, - "params": 1 - }, - { - "name": "parseVectors", - "file": "/home/claude/vkr/B/src/routes/match.mjs", - "line": 112, - "ccn": 2, - "nloc": 11, - "params": 1 - }, - { - "name": "parseTemplate", - "file": "/home/claude/vkr/B/src/routes/update.mjs", - "line": 84, - "ccn": 2, - "nloc": 11, - "params": 1 - }, - { - "name": "parseVectors", - "file": "/home/claude/vkr/B/src/routes/update.mjs", - "line": 96, - "ccn": 2, - "nloc": 11, - "params": 1 - }, - { - "name": "(anonymous)", - "file": "/home/claude/vkr/B/src/routes/identify.mjs", - "line": 87, + "name": "Flush", + "file": "/home/ilya/A/util/env_windows.cc", + "line": 240, "ccn": 1, - "nloc": 6, + "nloc": 1, "params": 0 }, { - "name": "(anonymous)", - "file": "/home/claude/vkr/B/src/routes/match.mjs", - "line": 85, + "name": "FlushBuffer", + "file": "/home/ilya/A/util/env_windows.cc", + "line": 252, + "ccn": 1, + "nloc": 3, + "params": 0 + }, + { + "name": "handle", + "file": "/home/ilya/A/util/env_windows.cc", + "line": 293, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "filename", + "file": "/home/ilya/A/util/env_windows.cc", + "line": 294, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "FileExists", + "file": "/home/ilya/A/util/env_windows.cc", + "line": 414, + "ccn": 1, + "nloc": 1, + "params": 1 + }, + { + "name": "NowMicros", + "file": "/home/ilya/A/util/env_windows.cc", + "line": 553, "ccn": 1, "nloc": 5, "params": 0 + }, + { + "name": "SleepForMicroseconds", + "file": "/home/ilya/A/util/env_windows.cc", + "line": 561, + "ccn": 1, + "nloc": 1, + "params": 1 + }, + { + "name": "BackgroundThreadEntryPoint", + "file": "/home/ilya/A/util/env_windows.cc", + "line": 566, + "ccn": 1, + "nloc": 1, + "params": 1 + }, + { + "name": "MaxMmaps", + "file": "/home/ilya/A/util/env_windows.cc", + "line": 577, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "env", + "file": "/home/ilya/A/util/env_windows.cc", + "line": 635, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "SetFileLimits", + "file": "/home/ilya/A/util/env_windows_test.cc", + "line": 3, + "ccn": 1, + "nloc": 1, + "params": 1 + }, + { + "name": "main", + "file": "/home/ilya/A/util/env_windows_test.cc", + "line": 39, + "ccn": 1, + "nloc": 3, + "params": 2 + }, + { + "name": "Histogram", + "file": "/home/ilya/A/util/histogram.h", + "line": 3, + "ccn": 1, + "nloc": 0, + "params": 0 + }, + { + "name": "AppendNumberTo", + "file": "/home/ilya/A/util/logging.cc", + "line": 2, + "ccn": 1, + "nloc": 3, + "params": 2 + }, + { + "name": "NumberToString", + "file": "/home/ilya/A/util/logging.cc", + "line": 24, + "ccn": 1, + "nloc": 3, + "params": 1 + }, + { + "name": "EscapeString", + "file": "/home/ilya/A/util/logging.cc", + "line": 28, + "ccn": 1, + "nloc": 3, + "params": 1 + }, + { + "name": "ConsumeDecimalNumberRoundtripTest", + "file": "/home/ilya/A/util/logging_test.cc", + "line": 32, + "ccn": 1, + "nloc": 9, + "params": 2 + }, + { + "name": "ConsumeDecimalNumberOverflowTest", + "file": "/home/ilya/A/util/logging_test.cc", + "line": 78, + "ccn": 1, + "nloc": 4, + "params": 1 + }, + { + "name": "ConsumeDecimalNumberNoDigitsTest", + "file": "/home/ilya/A/util/logging_test.cc", + "line": 104, + "ccn": 1, + "nloc": 6, + "params": 1 + }, + { + "name": "NoDestructor", + "file": "/home/ilya/A/util/no_destructor.h", + "line": 6, + "ccn": 1, + "nloc": 11, + "params": 1 + }, + { + "name": "get", + "file": "/home/ilya/A/util/no_destructor.h", + "line": 26, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "Uniform", + "file": "/home/ilya/A/util/random.h", + "line": 22, + "ccn": 1, + "nloc": 1, + "params": 1 + }, + { + "name": "OneIn", + "file": "/home/ilya/A/util/random.h", + "line": 26, + "ccn": 1, + "nloc": 1, + "params": 1 + }, + { + "name": "Skewed", + "file": "/home/ilya/A/util/random.h", + "line": 27, + "ccn": 1, + "nloc": 1, + "params": 1 + }, + { + "name": "RandomSeed", + "file": "/home/ilya/A/util/testutil.h", + "line": 12, + "ccn": 1, + "nloc": 1, + "params": 0 + }, + { + "name": "num_writable_file_errors_", + "file": "/home/ilya/A/util/testutil.h", + "line": 29, + "ccn": 1, + "nloc": 0, + "params": 1 } ] } diff --git a/prog/arch-researcher/models.py b/prog/arch-researcher/models.py index 4a08146..0fbedcd 100644 --- a/prog/arch-researcher/models.py +++ b/prog/arch-researcher/models.py @@ -23,7 +23,7 @@ class FunctionMetrics: ccn: int # Цикломатическая сложность (McCabe) nloc: int # Строк кода без комментариев params: int # Число параметров - language: str # "cpp" | "js" + language: str # "cpp" @property def is_complex(self) -> bool: @@ -40,7 +40,7 @@ class ModuleMetrics: name: str # Имя модуля (путь относительно корня) files: List[str] = field(default_factory=list) functions: List[FunctionMetrics] = field(default_factory=list) - language: str = "mixed" # "cpp" | "js" | "mixed" + language: str = "" # "cpp" # Агрегированные показатели (заполняются MetricsEngine) total_nloc: int = 0 diff --git a/prog/arch-researcher/utils/code_analyzer.py b/prog/arch-researcher/utils/code_analyzer.py index dfc20a4..ea2b057 100644 --- a/prog/arch-researcher/utils/code_analyzer.py +++ b/prog/arch-researcher/utils/code_analyzer.py @@ -5,7 +5,7 @@ методом подсчёта ветвлений в тексте кода (лексический подход), аналогично тому, как это делает библиотека lizard. -Поддерживаемые языки: C, C++, JavaScript, TypeScript. +Поддерживаемые языки: C, C++. Точность: comparable с lizard при отсутствии установленного Clang. Для продакшн-использования рекомендуется установить lizard: @@ -15,8 +15,6 @@ from __future__ import annotations import re -import tokenize -import io from dataclasses import dataclass from pathlib import Path from typing import List, Optional @@ -29,35 +27,17 @@ _BRANCH_KEYWORDS_CPP = re.compile( re.MULTILINE, ) -_BRANCH_KEYWORDS_JS = re.compile( - r'\b(if|else\s+if|for|while|do|switch|case|catch|&&|\|\||\?(?!:))\b', - re.MULTILINE, -) - # Сигнатуры функций C/C++ _CPP_FUNC = re.compile( r'^(?:[\w:*&<>\s]+?)\s+(\w+)\s*\(([^)]*)\)\s*(?:const\s*)?(?:override\s*)?(?:noexcept[^{]*)?\{', re.MULTILINE, ) -# Сигнатуры функций JS/TS -_JS_FUNC = re.compile( - r'(?:' - r'function\s+(\w+)\s*\(([^)]*)\)' # function foo(...) - r'|(?:const|let|var)\s+(\w+)\s*=\s*(?:async\s*)?\(([^)]*)\)\s*=>' # arrow - r'|(\w+)\s*:\s*(?:async\s*)?function\s*\(([^)]*)\)' # method: function - r'|(?:async\s+)?(\w+)\s*\(([^)]*)\)\s*\{' # method shorthand - r')', - re.MULTILINE, -) - # Строки и комментарии — для удаления перед анализом _CPP_COMMENT_LINE = re.compile(r'//[^\n]*') _CPP_COMMENT_BLOCK = re.compile(r'/\*.*?\*/', re.DOTALL) _CPP_STRING = re.compile(r'"(?:[^"\\]|\\.)*"|\'(?:[^\'\\]|\\.)*\'') -_JS_TEMPLATE = re.compile(r'`[^`]*`', re.DOTALL) - @dataclass class FunctionInfo: @@ -90,18 +70,15 @@ def analyze_file(file_path: str) -> Optional[FileAnalysisResult]: path = Path(file_path) suffix = path.suffix.lower() + if suffix not in (".cpp", ".cxx", ".cc", ".c", ".hpp", ".hxx", ".h"): + return None + try: text = path.read_text(encoding="utf-8", errors="replace") except OSError: return None - if suffix in (".cpp", ".cxx", ".cc", ".c", ".hpp", ".hxx", ".h"): - functions = _analyze_cpp(text, file_path) - elif suffix in (".js", ".mjs", ".cjs", ".ts"): - functions = _analyze_js(text, file_path) - else: - return None - + functions = _analyze_cpp(text, file_path) return FileAnalysisResult(filename=file_path, function_list=functions) @@ -149,63 +126,6 @@ def _analyze_cpp(text: str, filename: str) -> List[FunctionInfo]: return functions -# ------------------------------------------------------------------ -# JavaScript / TypeScript анализ -# ------------------------------------------------------------------ - -def _analyze_js(text: str, filename: str) -> List[FunctionInfo]: - """Анализирует JS/TS код.""" - # Удаляем шаблонные строки и комментарии - clean = _CPP_COMMENT_BLOCK.sub(' ', text) - clean = _CPP_COMMENT_LINE.sub('', clean) - clean = _JS_TEMPLATE.sub('``', clean) - clean = _CPP_STRING.sub('""', clean) - - functions: List[FunctionInfo] = [] - seen_positions: set = set() - - for match in _JS_FUNC.finditer(clean): - # Определяем имя и параметры из разных групп - name = ( - match.group(1) or match.group(3) or - match.group(5) or match.group(7) or "anonymous" - ) - params_str = ( - match.group(2) or match.group(4) or - match.group(6) or match.group(8) or "" - ) - - start_pos = match.start() - if start_pos in seen_positions: - continue - seen_positions.add(start_pos) - - start_line = text[:start_pos].count('\n') + 1 - - # Ищем открывающую фигурную скобку - brace_pos = clean.find('{', match.end()) - if brace_pos == -1: - continue - - body = _extract_body(clean, brace_pos) - if body is None: - continue - - nloc = _count_nloc(body) - ccn = 1 + len(_BRANCH_KEYWORDS_JS.findall(body)) - params = _count_params(params_str) - - functions.append(FunctionInfo( - name=name, - start_line=start_line, - nloc=nloc, - cyclomatic_complexity=ccn, - parameter_count=params, - )) - - return functions - - # ------------------------------------------------------------------ # Вспомогательные функции # ------------------------------------------------------------------