diff --git a/.editorconfig b/.editorconfig
deleted file mode 100644
index f5ca14e..0000000
--- a/.editorconfig
+++ /dev/null
@@ -1,312 +0,0 @@
-# This file is for unifying the coding style for different editors and IDEs.
-# More information at http://EditorConfig.org
-
-# No .editorconfig files above the root directory
-root = true
-
-[*]
-charset = utf-8
-end_of_line = lf
-indent_size = 4
-indent_style = space
-insert_final_newline = false
-max_line_length = 130
-tab_width = 4
-trim_trailing_whitespace = true
-ij_continuation_indent_size = 8
-ij_formatter_off_tag=@formatter:off
-ij_formatter_on_tag = @formatter:on
-ij_formatter_tags_enabled = true
-ij_smart_tabs = false
-ij_visual_guides = none
-ij_wrap_on_typing = false
-
-[*.java]
-indent_size = 3
-tab_width = 3
-ij_continuation_indent_size = 6
-ij_java_align_consecutive_assignments = false
-ij_java_align_consecutive_variable_declarations = false
-ij_java_align_group_field_declarations = false
-ij_java_align_multiline_annotation_parameters = false
-ij_java_align_multiline_array_initializer_expression = false
-ij_java_align_multiline_assignment = false
-ij_java_align_multiline_binary_operation = false
-ij_java_align_multiline_chained_methods = false
-ij_java_align_multiline_extends_list = false
-ij_java_align_multiline_for = true
-ij_java_align_multiline_method_parentheses = false
-ij_java_align_multiline_parameters = false
-ij_java_align_multiline_parameters_in_calls = false
-ij_java_align_multiline_parenthesized_expression = false
-ij_java_align_multiline_records = true
-ij_java_align_multiline_resources = false
-ij_java_align_multiline_ternary_operation = false
-ij_java_align_multiline_text_blocks = false
-ij_java_align_multiline_throws_list = false
-ij_java_align_subsequent_simple_methods = false
-ij_java_align_throws_keyword = false
-ij_java_annotation_parameter_wrap = off
-ij_java_array_initializer_new_line_after_left_brace = false
-ij_java_array_initializer_right_brace_on_new_line = false
-ij_java_array_initializer_wrap = normal
-ij_java_assert_statement_colon_on_next_line = false
-ij_java_assert_statement_wrap = off
-ij_java_assignment_wrap = off
-ij_java_binary_operation_sign_on_next_line = true
-ij_java_binary_operation_wrap = normal
-ij_java_blank_lines_after_anonymous_class_header = 0
-ij_java_blank_lines_after_class_header = 0
-ij_java_blank_lines_after_imports = 2
-ij_java_blank_lines_after_package = 1
-ij_java_blank_lines_around_class = 1
-ij_java_blank_lines_around_field = 0
-ij_java_blank_lines_around_field_in_interface = 0
-ij_java_blank_lines_around_initializer = 1
-ij_java_blank_lines_around_method = 1
-ij_java_blank_lines_around_method_in_interface = 1
-ij_java_blank_lines_before_class_end = 0
-ij_java_blank_lines_before_imports = 1
-ij_java_blank_lines_before_method_body = 0
-ij_java_blank_lines_before_package = 1
-ij_java_block_brace_style = end_of_line
-ij_java_block_comment_at_first_column = true
-ij_java_call_parameters_new_line_after_left_paren = false
-ij_java_call_parameters_right_paren_on_new_line = false
-ij_java_call_parameters_wrap = normal
-ij_java_case_statement_on_separate_line = true
-ij_java_catch_on_new_line = true
-ij_java_class_annotation_wrap = split_into_lines
-ij_java_class_brace_style = end_of_line
-ij_java_class_count_to_use_import_on_demand = 100
-ij_java_class_names_in_javadoc = 1
-ij_java_do_not_indent_top_level_class_members = false
-ij_java_do_not_wrap_after_single_annotation = false
-ij_java_do_while_brace_force = never
-ij_java_doc_add_blank_line_after_description = true
-ij_java_doc_add_blank_line_after_param_comments = false
-ij_java_doc_add_blank_line_after_return = false
-ij_java_doc_add_p_tag_on_empty_lines = true
-ij_java_doc_align_exception_comments = true
-ij_java_doc_align_param_comments = true
-ij_java_doc_do_not_wrap_if_one_line = false
-ij_java_doc_enable_formatting = true
-ij_java_doc_enable_leading_asterisks = true
-ij_java_doc_indent_on_continuation = false
-ij_java_doc_keep_empty_lines = false
-ij_java_doc_keep_empty_parameter_tag = true
-ij_java_doc_keep_empty_return_tag = true
-ij_java_doc_keep_empty_throws_tag = true
-ij_java_doc_keep_invalid_tags = true
-ij_java_doc_param_description_on_new_line = true
-ij_java_doc_preserve_line_breaks = true
-ij_java_doc_use_throws_not_exception_tag = true
-ij_java_else_on_new_line = true
-ij_java_entity_dd_suffix = EJB
-ij_java_entity_eb_suffix = Bean
-ij_java_entity_hi_suffix = Home
-ij_java_entity_lhi_prefix = Local
-ij_java_entity_lhi_suffix = Home
-ij_java_entity_li_prefix = Local
-ij_java_entity_pk_class = java.lang.String
-ij_java_entity_vo_suffix = VO
-ij_java_enum_constants_wrap = off
-ij_java_extends_keyword_wrap = normal
-ij_java_extends_list_wrap = normal
-ij_java_field_annotation_wrap = split_into_lines
-ij_java_finally_on_new_line = true
-ij_java_for_brace_force = never
-ij_java_for_statement_new_line_after_left_paren = false
-ij_java_for_statement_right_paren_on_new_line = false
-ij_java_for_statement_wrap = off
-ij_java_generate_final_locals = true
-ij_java_generate_final_parameters = true
-ij_java_if_brace_force = always
-ij_java_imports_layout = $*, |, de.hybris.**, |, com.hybris.**, |, java.**, |, javax.**, |, org.**, |, com.**, |, de.**, |, *
-ij_java_indent_case_from_switch = true
-ij_java_insert_inner_class_imports = false
-ij_java_insert_override_annotation = true
-ij_java_keep_blank_lines_before_right_brace = 10
-ij_java_keep_blank_lines_between_package_declaration_and_header = 2
-ij_java_keep_blank_lines_in_code = 10
-ij_java_keep_blank_lines_in_declarations = 10
-ij_java_keep_control_statement_in_one_line = false
-ij_java_keep_first_column_comment = false
-ij_java_keep_indents_on_empty_lines = false
-ij_java_keep_line_breaks = true
-ij_java_keep_multiple_expressions_in_one_line = false
-ij_java_keep_simple_blocks_in_one_line = false
-ij_java_keep_simple_classes_in_one_line = false
-ij_java_keep_simple_lambdas_in_one_line = false
-ij_java_keep_simple_methods_in_one_line = false
-ij_java_label_indent_absolute = false
-ij_java_label_indent_size = 0
-ij_java_lambda_brace_style = end_of_line
-ij_java_layout_static_imports_separately = true
-ij_java_line_comment_add_space = false
-ij_java_line_comment_at_first_column = true
-ij_java_message_dd_suffix = EJB
-ij_java_message_eb_suffix = Bean
-ij_java_method_annotation_wrap = split_into_lines
-ij_java_method_brace_style = end_of_line
-ij_java_method_call_chain_wrap = normal
-ij_java_method_parameters_new_line_after_left_paren = false
-ij_java_method_parameters_right_paren_on_new_line = false
-ij_java_method_parameters_wrap = normal
-ij_java_modifier_list_wrap = false
-ij_java_names_count_to_use_import_on_demand = 100
-ij_java_new_line_after_lparen_in_record_header = false
-ij_java_parameter_annotation_wrap = off
-ij_java_parentheses_expression_new_line_after_left_paren = false
-ij_java_parentheses_expression_right_paren_on_new_line = false
-ij_java_place_assignment_sign_on_next_line = false
-ij_java_prefer_longer_names = true
-ij_java_prefer_parameters_wrap = false
-ij_java_record_components_wrap = normal
-ij_java_repeat_synchronized = true
-ij_java_replace_instanceof_and_cast = false
-ij_java_replace_null_check = true
-ij_java_replace_sum_lambda_with_method_ref = true
-ij_java_resource_list_new_line_after_left_paren = false
-ij_java_resource_list_right_paren_on_new_line = false
-ij_java_resource_list_wrap = on_every_item
-ij_java_rparen_on_new_line_in_record_header = false
-ij_java_session_dd_suffix = EJB
-ij_java_session_eb_suffix = Bean
-ij_java_session_hi_suffix = Home
-ij_java_session_lhi_prefix = Local
-ij_java_session_lhi_suffix = Home
-ij_java_session_li_prefix = Local
-ij_java_session_si_suffix = Service
-ij_java_space_after_closing_angle_bracket_in_type_argument = false
-ij_java_space_after_colon = true
-ij_java_space_after_comma = true
-ij_java_space_after_comma_in_type_arguments = true
-ij_java_space_after_for_semicolon = true
-ij_java_space_after_quest = true
-ij_java_space_after_type_cast = true
-ij_java_space_before_annotation_array_initializer_left_brace = false
-ij_java_space_before_annotation_parameter_list = false
-ij_java_space_before_array_initializer_left_brace = true
-ij_java_space_before_catch_keyword = true
-ij_java_space_before_catch_left_brace = true
-ij_java_space_before_catch_parentheses = true
-ij_java_space_before_class_left_brace = true
-ij_java_space_before_colon = true
-ij_java_space_before_colon_in_foreach = true
-ij_java_space_before_comma = false
-ij_java_space_before_do_left_brace = true
-ij_java_space_before_else_keyword = true
-ij_java_space_before_else_left_brace = true
-ij_java_space_before_finally_keyword = true
-ij_java_space_before_finally_left_brace = true
-ij_java_space_before_for_left_brace = true
-ij_java_space_before_for_parentheses = true
-ij_java_space_before_for_semicolon = false
-ij_java_space_before_if_left_brace = true
-ij_java_space_before_if_parentheses = true
-ij_java_space_before_method_call_parentheses = false
-ij_java_space_before_method_left_brace = true
-ij_java_space_before_method_parentheses = false
-ij_java_space_before_opening_angle_bracket_in_type_parameter = false
-ij_java_space_before_quest = true
-ij_java_space_before_switch_left_brace = true
-ij_java_space_before_switch_parentheses = true
-ij_java_space_before_synchronized_left_brace = true
-ij_java_space_before_synchronized_parentheses = true
-ij_java_space_before_try_left_brace = true
-ij_java_space_before_try_parentheses = true
-ij_java_space_before_type_parameter_list = false
-ij_java_space_before_while_keyword = true
-ij_java_space_before_while_left_brace = true
-ij_java_space_before_while_parentheses = true
-ij_java_space_inside_one_line_enum_braces = false
-ij_java_space_within_empty_array_initializer_braces = false
-ij_java_space_within_empty_method_call_parentheses = false
-ij_java_space_within_empty_method_parentheses = false
-ij_java_spaces_around_additive_operators = true
-ij_java_spaces_around_assignment_operators = true
-ij_java_spaces_around_bitwise_operators = true
-ij_java_spaces_around_equality_operators = true
-ij_java_spaces_around_lambda_arrow = true
-ij_java_spaces_around_logical_operators = true
-ij_java_spaces_around_method_ref_dbl_colon = false
-ij_java_spaces_around_multiplicative_operators = true
-ij_java_spaces_around_relational_operators = true
-ij_java_spaces_around_shift_operators = true
-ij_java_spaces_around_type_bounds_in_type_parameters = true
-ij_java_spaces_around_unary_operator = false
-ij_java_spaces_within_angle_brackets = false
-ij_java_spaces_within_annotation_parentheses = false
-ij_java_spaces_within_array_initializer_braces = true
-ij_java_spaces_within_braces = false
-ij_java_spaces_within_brackets = false
-ij_java_spaces_within_cast_parentheses = false
-ij_java_spaces_within_catch_parentheses = false
-ij_java_spaces_within_for_parentheses = false
-ij_java_spaces_within_if_parentheses = false
-ij_java_spaces_within_method_call_parentheses = false
-ij_java_spaces_within_method_parentheses = false
-ij_java_spaces_within_parentheses = false
-ij_java_spaces_within_record_header = false
-ij_java_spaces_within_switch_parentheses = false
-ij_java_spaces_within_synchronized_parentheses = false
-ij_java_spaces_within_try_parentheses = false
-ij_java_spaces_within_while_parentheses = false
-ij_java_special_else_if_treatment = true
-ij_java_subclass_name_suffix = Impl
-ij_java_ternary_operation_signs_on_next_line = false
-ij_java_ternary_operation_wrap = on_every_item
-ij_java_test_name_suffix = Test
-ij_java_throws_keyword_wrap = normal
-ij_java_throws_list_wrap = normal
-ij_java_use_external_annotations = false
-ij_java_use_fq_class_names = false
-ij_java_use_relative_indents = false
-ij_java_use_single_class_imports = true
-ij_java_variable_annotation_wrap = off
-ij_java_visibility = public
-ij_java_while_brace_force = never
-ij_java_while_on_new_line = true
-ij_java_wrap_comments = true
-ij_java_wrap_first_method_in_call_chain = false
-ij_java_wrap_long_lines = false
-
-[.editorconfig]
-ij_editorconfig_align_group_field_declarations = false
-ij_editorconfig_space_after_colon = false
-ij_editorconfig_space_after_comma = true
-ij_editorconfig_space_before_colon = false
-ij_editorconfig_space_before_comma = false
-ij_editorconfig_spaces_around_assignment_operators = true
-
-[{*.ant,*.edmx,*.fxml,*.jhm,*.jnlp,*.jrxml,*.pom,*.qrc,*.rng,*.tld,*.wadl,*.wsdd,*.wsdl,*.xjb,*.xml,*.xsd,*.xsl,*.xslt,*.xul}]
-ij_xml_align_attributes = true
-ij_xml_align_text = false
-ij_xml_attribute_wrap = normal
-ij_xml_block_comment_at_first_column = true
-ij_xml_keep_blank_lines = 2
-ij_xml_keep_indents_on_empty_lines = false
-ij_xml_keep_line_breaks = true
-ij_xml_keep_line_breaks_in_text = true
-ij_xml_keep_whitespaces = false
-ij_xml_keep_whitespaces_around_cdata = preserve
-ij_xml_keep_whitespaces_inside_cdata = false
-ij_xml_line_comment_at_first_column = true
-ij_xml_space_after_tag_name = false
-ij_xml_space_around_equals_in_attribute = false
-ij_xml_space_inside_empty_tag = true
-ij_xml_text_wrap = normal
-
-[{*.yaml,*.yml}]
-indent_size = 2
-ij_yaml_align_values_properties = do_not_align
-ij_yaml_autoinsert_sequence_marker = true
-ij_yaml_block_mapping_on_new_line = false
-ij_yaml_indent_sequence_value = true
-ij_yaml_keep_indents_on_empty_lines = false
-ij_yaml_keep_line_breaks = true
-ij_yaml_sequence_on_new_line = false
-ij_yaml_space_before_colon = false
-ij_yaml_spaces_within_braces = true
-ij_yaml_spaces_within_brackets = true
diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS
deleted file mode 100644
index 1c48460..0000000
--- a/.github/CODEOWNERS
+++ /dev/null
@@ -1 +0,0 @@
-* @rabestro
diff --git a/.github/ISSUE_TEMPLATE/bug-issue.md b/.github/ISSUE_TEMPLATE/bug-issue.md
deleted file mode 100644
index ab645cc..0000000
--- a/.github/ISSUE_TEMPLATE/bug-issue.md
+++ /dev/null
@@ -1,46 +0,0 @@
----
-name: Bug Issue
-about: Use this template for reporting a bug
-labels: 'type:bug'
-
----
-
-Please make sure that this is a bug. As per our
-[GitHub Policy](https://github.com/tensorflow/tensorflow/blob/master/ISSUES.md),
-we only address code/doc bugs, performance issues, feature requests and
-build/installation issues on GitHub. tag:bug_template
-
-**System information**
-- Have I written custom code (as opposed to using a stock example script provided in TensorFlow):
-- OS Platform and Distribution (e.g., Linux Ubuntu 16.04):
-- Mobile device (e.g. iPhone 8, Pixel 2, Samsung Galaxy) if the issue happens on mobile device:
-- TensorFlow installed from (source or binary):
-- TensorFlow version (use command below):
-- Python version:
-- Bazel version (if compiling from source):
-- GCC/Compiler version (if compiling from source):
-- CUDA/cuDNN version:
-- GPU model and memory:
-
-You can collect some of this information using our environment capture
-[script](https://github.com/tensorflow/tensorflow/tree/master/tools/tf_env_collect.sh)
-You can also obtain the TensorFlow version with:
-1. TF 1.0: `python -c "import tensorflow as tf; print(tf.GIT_VERSION, tf.VERSION)"`
-2. TF 2.0: `python -c "import tensorflow as tf; print(tf.version.GIT_VERSION, tf.version.VERSION)"`
-
-**Describe the current behavior**
-
-**Describe the expected behavior**
-
-**[Contributing](https://www.tensorflow.org/community/contribute)**
-
-- Do you want to contribute a PR? (yes/no):
-- Briefly describe your candidate solution(if contributing):
-
-**Standalone code to reproduce the issue**
-Provide a reproducible test case that is the bare minimum necessary to generate
-the problem. If possible, please share a link to Colab/Jupyter/any notebook.
-
-**Other info / logs** Include any logs or source code that would be helpful to
-diagnose the problem. If including tracebacks, please include the full
-traceback. Large logs and files should be attached.
diff --git a/.github/ISSUE_TEMPLATE/feature-request.md b/.github/ISSUE_TEMPLATE/feature-request.md
deleted file mode 100644
index 0bc1613..0000000
--- a/.github/ISSUE_TEMPLATE/feature-request.md
+++ /dev/null
@@ -1,17 +0,0 @@
----
-name: Feature Request
-about: Use this template for raising a feature request
-labels: 'type:feature'
-
----
-
-Please make sure that this is a feature request. As per our [GitHub Policy](https://github.com/tensorflow/tensorflow/blob/master/ISSUES.md), we only address code/doc bugs, performance issues, feature requests and build/installation issues on GitHub. tag:feature_template
-
-
-**Describe the feature and the current behavior/state.**
-
-**Will this change the current api? How?**
-
-**Who will benefit with this feature?**
-
-**Any Other info.**
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
deleted file mode 100644
index 72b8671..0000000
--- a/.github/workflows/build.yml
+++ /dev/null
@@ -1,36 +0,0 @@
-name: Build
-on:
- push:
- branches:
- - master
- pull_request:
- types: [opened, synchronize, reopened]
-jobs:
- build:
- name: Build
- runs-on: ubuntu-latest
- steps:
- - uses: actions/checkout@v2
- with:
- fetch-depth: 0 # Shallow clones should be disabled for a better relevancy of analysis
- - name: Set up JDK 17
- uses: actions/setup-java@v1
- with:
- java-version: 17
- - name: Cache SonarCloud packages
- uses: actions/cache@v1
- with:
- path: ~/.sonar/cache
- key: ${{ runner.os }}-sonar
- restore-keys: ${{ runner.os }}-sonar
- - name: Cache Gradle packages
- uses: actions/cache@v1
- with:
- path: ~/.gradle/caches
- key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle') }}
- restore-keys: ${{ runner.os }}-gradle
- - name: Build and analyze
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # Needed to get PR information, if any
- SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
- run: ./gradlew build sonarqube --info
diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml
deleted file mode 100644
index a73edb8..0000000
--- a/.github/workflows/codeql-analysis.yml
+++ /dev/null
@@ -1,74 +0,0 @@
-# For most projects, this workflow file will not need changing; you simply need
-# to commit it to your repository.
-#
-# You may wish to alter this file to override the set of languages analyzed,
-# or to provide custom queries or build logic.
-#
-# ******** NOTE ********
-# We have attempted to detect the languages in your repository. Please check
-# the `language` matrix defined below to confirm you have the correct set of
-# supported CodeQL languages.
-#
-name: "CodeQL"
-
-on:
- push:
- branches: [ master ]
- pull_request:
- # The branches below must be a subset of the branches above
- branches: [ master ]
- schedule:
- - cron: '15 16 * * 1'
-
-jobs:
- analyze:
- name: Analyze
- runs-on: ubuntu-latest
- permissions:
- actions: read
- contents: read
- security-events: write
-
- strategy:
- fail-fast: false
- matrix:
- language: [ 'java' ]
- # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ]
- # Learn more about CodeQL language support at https://git.io/codeql-language-support
-
- steps:
- - name: Checkout repository
- uses: actions/checkout@v2
- - uses: actions/setup-java@v2
- with:
- distribution: 'temurin' # See 'Supported distributions' for available options
- java-version: '17'
-
- # Initializes the CodeQL tools for scanning.
- - name: Initialize CodeQL
- uses: github/codeql-action/init@v1
- with:
- languages: ${{ matrix.language }}
- # If you wish to specify custom queries, you can do so here or in a config file.
- # By default, queries listed here will override any specified in a config file.
- # Prefix the list here with "+" to use these queries and those in the config file.
- # queries: ./path/to/local/query, your-org/your-repo/queries@main
-
- # Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
- # If this step fails, then you should remove it and run the build manually (see below)
- - name: Autobuild
- uses: github/codeql-action/autobuild@v1
-
- # ℹ️ Command-line programs to run using the OS shell.
- # 📚 https://git.io/JvXDl
-
- # ✏️ If the Autobuild fails above, remove it and uncomment the following three lines
- # and modify them (or add more) to build your code if your project
- # uses a compiled language
-
- #- run: |
- # make bootstrap
- # make release
-
- - name: Perform CodeQL Analysis
- uses: github/codeql-action/analyze@v1
diff --git a/.gitignore b/.gitignore
deleted file mode 100644
index b1b10da..0000000
--- a/.gitignore
+++ /dev/null
@@ -1,37 +0,0 @@
-##############################
-## Java
-##############################
-.mtj.tmp/
-*.class
-*.jar
-*.war
-*.ear
-*.nar
-hs_err_pid*
-
-##############################
-## Gradle
-##############################
-bin/
-build/
-.gradle
-.gradletasknamecache
-gradle-app.setting
-!gradle-wrapper.jar
-
-##############################
-## IntelliJ
-##############################
-out/
-.idea/
-.idea_modules/
-*.iml
-*.ipr
-*.iws
-
-##############################
-## OS X
-##############################
-.DS_Store
-/algorithm/gradle.properties
-/sample/gradle.properties
diff --git a/.gitmessage b/.gitmessage
deleted file mode 100644
index 055d59b..0000000
--- a/.gitmessage
+++ /dev/null
@@ -1,44 +0,0 @@
-# : (Max 50 char, Why is this change necessary?)
-# |<---- Using a Maximum Of 50 Characters ---->|
-
-# |<---- Try To Limit Each Line to a Maximum Of 72 Characters ---->|
-# Explain how the commit addresses the issue
-
-# IMPORTANT!! Describe any side effects of the change.
-
-# Provide links or keys to any relevant tickets, articles or other resources
-# Examples: "Jira issue [ABC-123]" or "Closes Github issue #123"
-
-# --- COMMIT END ---
-# Type can be
-# feat (new feature)
-# fix (bug fix)
-# refactor (refactoring production code)
-# style (formatting, missing semi colons, etc; no code change)
-# docs (changes to documentation)
-# test (adding or refactoring tests; no production code change)
-# chore (updating grunt tasks etc; no production code change)
-# wip (work in progress commit to be squashed -- do not push!)**
-# --------------------
-# Remember to
-# - Capitalize the subject line
-# - Use the imperative mood in the subject line
-# - Do not end the subject line with a period
-# - Separate subject from body with a blank line
-# - Use the body to explain what and why vs. how
-# - Can use multiple lines with "-" for bullet points in body.
-# --------------------
-# ** wip commit type
-# A wip commit should only happen on a local branch. These commits are for
-# unfinished snapshots that should not be checked into a shared branch.
-# These commits should be squashed before changes are merged to
-# a shared branch.
-# --------------------
-# For more information about this template and useful commit messages, check out
-# - https://gist.github.com/median-man/3a7c4324005e96f02691f3a20aeac26b
-# - https://gist.github.com/adeekshith/cd4c95a064977cdc6c50
-# - https://robots.thoughtbot.com/5-useful-tips-for-a-better-commit-message
-# - https://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html
-# - https://8thlight.com/blog/kevin-liddle/2012/09/27/mind-your-git-manners.html
-#
-#
diff --git a/.idea/.gitignore b/.idea/.gitignore
deleted file mode 100644
index 13566b8..0000000
--- a/.idea/.gitignore
+++ /dev/null
@@ -1,8 +0,0 @@
-# Default ignored files
-/shelf/
-/workspace.xml
-# Editor-based HTTP Client requests
-/httpRequests/
-# Datasource local storage ignored files
-/dataSources/
-/dataSources.local.xml
diff --git a/.idea/codeStyles/codeStyleConfig.xml b/.idea/codeStyles/codeStyleConfig.xml
deleted file mode 100644
index a55e7a1..0000000
--- a/.idea/codeStyles/codeStyleConfig.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/compiler.xml b/.idea/compiler.xml
deleted file mode 100644
index b589d56..0000000
--- a/.idea/compiler.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/gradle.xml b/.idea/gradle.xml
deleted file mode 100644
index 3643ec5..0000000
--- a/.idea/gradle.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml
deleted file mode 100644
index 9c37e0e..0000000
--- a/.idea/jarRepositories.xml
+++ /dev/null
@@ -1,40 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
deleted file mode 100644
index 4cbd4e5..0000000
--- a/.idea/misc.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/scopes/SearchAlgorithms.xml b/.idea/scopes/SearchAlgorithms.xml
deleted file mode 100644
index 762eb69..0000000
--- a/.idea/scopes/SearchAlgorithms.xml
+++ /dev/null
@@ -1,3 +0,0 @@
-
-
-
\ No newline at end of file
diff --git a/.idea/uiDesigner.xml b/.idea/uiDesigner.xml
deleted file mode 100644
index e96534f..0000000
--- a/.idea/uiDesigner.xml
+++ /dev/null
@@ -1,124 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
deleted file mode 100644
index 94a25f7..0000000
--- a/.idea/vcs.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/CNAME b/CNAME
deleted file mode 100644
index e1f8911..0000000
--- a/CNAME
+++ /dev/null
@@ -1 +0,0 @@
-algorithms.jc.id.lv
\ No newline at end of file
diff --git a/LICENSE b/LICENSE
deleted file mode 100644
index 244293b..0000000
--- a/LICENSE
+++ /dev/null
@@ -1,21 +0,0 @@
-MIT License
-
-Copyright (c) 2022 Jegors Čemisovs
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
diff --git a/README.md b/README.md
deleted file mode 100644
index 8d95bb6..0000000
--- a/README.md
+++ /dev/null
@@ -1,139 +0,0 @@
-[](https://sonarcloud.io/summary/new_code?id=rabestro_algorithms)
-
-# Graph search algorithms
-
-The project implements an interface for the weighted graph, as well as two algorithms for finding a path in the graph.
-
-There are implementations and tests for two algorithms:
-
-- [Breadth-first search](https://en.wikipedia.org/wiki/Breadth-first_search)
-- [Dijkstra's Algorithm](https://en.wikipedia.org/wiki/Dijkstra%27s_algorithm)
-
-The implementation is written in Java 17. [API documentation](https://algorithms.jc.id.lv/docs/api/) is available. You
-can also see the [specifications](https://algorithms.jc.id.lv/docs/spock-reports/) generated with the spock-reports.
-
-## Demo. Graph Shell
-
-To demonstrate the work of search algorithms, I made a small console program '[Graph Shell](graph-shell/README.md)'. The program
-allows you to select [one of three build-in graph samples](#Graph-Samples) and search for a path using two algorithms. The source
-code of the program is located in `graph-shell` module.
-
-[](https://asciinema.org/a/468058)
-
-### Usage in other projects
-
-These algorithms used in the [Hypermetro](https://rabestro.github.io/hypermetro/) project, where they are
-utilized to find the optimal route in the metro schema.
-
-
-## How to use the algorithms in your program
-
-The first step is to create a graph structure. The Graph interface is generic, so you can use any Java type for vertex
-and any [Number](https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Number.html) type for distance.
-
-### Example
-
-In the following Java code we create a graph structure with eight nodes. We
-use [Character](https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Character.html) class for vertex
-identification and [Integer](https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Integer.html) for the
-distance. You can see the graphic representation of the scheme [here](docs/assets/complex.gif).
-
-```java
-var graph = Graph.of(Map.of(
- 'A', Map.of('B', 5, 'H', 2),
- 'B', Map.of('A', 5, 'C', 7),
- 'C', Map.of('B', 7, 'D', 3, 'G', 4),
- 'D', Map.of('C', 20, 'E', 4),
- 'E', Map.of('F', 5),
- 'F', Map.of('G', 6),
- 'G', Map.of('C', 4),
- 'H', Map.of('G', 3)
- ));
-```
-
-The second step is creating a search algorithm class. You can choose one of the two algorithms.
-
-### Example
-
-```java
-var fastest = new DijkstrasAlgorithm();
-var shortest = new BreadthFirstSearch();
-```
-
-Now we can search for the route.
-
-### Example
-
-```java
-var source = 'D';
-var target = 'C';
-
-var routeOne = shortest.findPath(graph, source, target);
-var routeTwo = fastest.findPath(graph, source, target);
-```
-
-As result, you get a list with the path.
-
-```java
-routeOne==['D','C']
- routeTwo==['D','E','F','G','C']
-```
-
-## Unit Tests
-
-Tests are written in Groove language. For unit testing, the [Spock Framework](https://spockframework.org/) was used. To test the operation of the algorithms, the following sample graphs were created.
-
-## Graph Samples
-
-### Small Graph Sample
-
-```mermaid
-flowchart LR
- A((A))
- B((B))
- C((C))
- A -->|7| B
- A -->|2| C
- B -->|3| A
- B -->|5| C
- C -->|1| A
- C -->|3| B
-```
-
-
-
-
-### Medium Graph Sample
-
-```mermaid
-flowchart LR
- A --> |5 | B
- B --> |5 | A
- B --> |10| C
- C --> |5 | D
- C --> |20| B
- D --> |5 | E
- E --> |5 | B
-```
-
-
-
-### Complex Graph Sample
-
-```mermaid
-flowchart LR
- A --> |5 | B
- A --> |2 | H
- B --> |5 | A
- B --> |7 | C
- C --> |7 | B
- C --> |3 | D
- C --> |4 | G
- D --> |20| C
- D --> |4 | E
- E --> |5 | F
- G --> |4 | C
- H --> |3 | G
-```
-
-
\ No newline at end of file
diff --git a/_config.yml b/_config.yml
index e8eb639..c419263 100644
--- a/_config.yml
+++ b/_config.yml
@@ -1,12 +1 @@
-theme: jekyll-theme-minimal
-title: Algorithms
-author: Jegors Čemisovs
-email: jegors.cemisovs@outlook.lv
-description: >
- Graph pathfinding algorithms.
-
-# social links
-twitter_username: rabestro # DO NOT include the @ character, or else the build will fail!
-github_username: rabestro # DO NOT include the @ character, or else the build will fail!
-
-show_excerpts: true # set to false to remove excerpts on the homepage
+theme: jekyll-theme-cayman
\ No newline at end of file
diff --git a/algorithm/build.gradle b/algorithm/build.gradle
deleted file mode 100644
index 655e701..0000000
--- a/algorithm/build.gradle
+++ /dev/null
@@ -1,86 +0,0 @@
-plugins {
- id 'groovy'
- id 'java-library'
- id 'maven-publish'
- id 'jacoco'
- id 'org.sonarqube' version '3.4.0.2513'
-}
-
-sonarqube {
- properties {
- property "sonar.projectKey", "rabestro_algorithms"
- property "sonar.organization", "rabestro"
- property "sonar.host.url", "https://sonarcloud.io"
- }
-}
-
-group 'lv.id.jc'
-version '1.1-SNAPSHOT'
-
-repositories {
- mavenCentral()
-}
-
-// Configures the publishing
-publishing {
- repositories {
- // The target repository
- maven {
- // Choose whatever name you want
- name = "Algorithms"
- // The url of the repository, where the artifacts will be published
- url = "https://maven.pkg.github.com/rabestro/algorithms"
- credentials {
- // The credentials (described in the next section)
- username = project.findProperty("gpr.user")
- password = project.findProperty("gpr.key")
- }
- }
- }
- publications {
- gpr(MavenPublication) {
- from(components.java)
- // Fixes the error with dynamic versions when using Spring Boot
- versionMapping {
- usage('java-api') {
- fromResolutionOf('runtimeClasspath')
- }
- usage('java-runtime') {
- fromResolutionResult(null)
- }
- }
- }
- }
-}
-
-dependencies {
- // Spock Framework
- testImplementation 'org.spockframework:spock-core:2.2-groovy-3.0'
- testImplementation 'org.codehaus.groovy:groovy-all:3.0.12'
-
- // Spock Reports
- testRuntimeClasspath('com.athaydes:spock-reports:2.3.1-groovy-3.0') {
- transitive = false // this avoids affecting your version of Groovy/Spock
- }
- // Required for spock-reports
- testImplementation 'org.slf4j:slf4j-api:2.0.1'
- testRuntimeClasspath 'org.slf4j:slf4j-simple:2.0.1'
-
- // JUnit 5 Parameterized Tests
- testImplementation 'org.junit.jupiter:junit-jupiter-params:5.8.1'
-}
-
-test {
- useJUnitPlatform()
- finalizedBy jacocoTestReport
-}
-
-jacocoTestReport {
- dependsOn test
-
- reports {
- xml.required = true
- csv.required = false
- html.outputLocation = layout.buildDirectory.dir('jacocoHtml')
- }
-}
diff --git a/algorithm/src/main/java/lv/id/jc/algorithm/graph/BreadthFirstSearch.java b/algorithm/src/main/java/lv/id/jc/algorithm/graph/BreadthFirstSearch.java
deleted file mode 100644
index b7e927d..0000000
--- a/algorithm/src/main/java/lv/id/jc/algorithm/graph/BreadthFirstSearch.java
+++ /dev/null
@@ -1,49 +0,0 @@
-package lv.id.jc.algorithm.graph;
-
-import java.util.ArrayDeque;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Objects;
-
-import static java.util.function.Predicate.not;
-import static java.util.stream.Stream.iterate;
-
-/**
- * Algorithm for finding the shortest paths between nodes in a graph.
- *
- * The algorithm doesn't take into account the distance between nodes.
- *
- * @param the type of vertex
- * @author Jegors Čemisovs
- * @since 1.0
- */
-public class BreadthFirstSearch implements SearchAlgorithm {
-
- @Override
- public List findPath(Graph graph, T source, T target) {
- var queue = new ArrayDeque();
- var visited = new HashSet();
- var previous = new HashMap();
- queue.add(source);
-
- while (!queue.isEmpty()) {
- var node = queue.removeFirst();
- if (target.equals(node)) {
- var path = new LinkedList();
- iterate(node, Objects::nonNull, previous::get).forEach(path::addFirst);
- return path;
- }
- visited.add(node);
- graph.edges(node).keySet().stream()
- .filter(not(visited::contains))
- .forEach(it -> {
- previous.computeIfAbsent(it, x -> node);
- queue.addLast(it);
- });
- }
- return List.of();
- }
-
-}
diff --git a/algorithm/src/main/java/lv/id/jc/algorithm/graph/DijkstrasAlgorithm.java b/algorithm/src/main/java/lv/id/jc/algorithm/graph/DijkstrasAlgorithm.java
deleted file mode 100644
index 41f7817..0000000
--- a/algorithm/src/main/java/lv/id/jc/algorithm/graph/DijkstrasAlgorithm.java
+++ /dev/null
@@ -1,49 +0,0 @@
-package lv.id.jc.algorithm.graph;
-
-import java.util.ArrayDeque;
-import java.util.HashMap;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Objects;
-
-import static java.util.stream.Stream.iterate;
-
-/**
- * Algorithm for finding the fastest paths between nodes in a graph.
- *
- * The algorithm uses information about edge's distance to find the fastest path.
- *
- * @param the type of vertex
- * @author Jegors Čemisovs
- * @since 1.0
- */
-public class DijkstrasAlgorithm implements SearchAlgorithm {
-
- @Override
- public List findPath(Graph graph, T source, T target) {
- var queue = new ArrayDeque();
- var distances = new HashMap();
- var previous = new HashMap();
- queue.add(source);
- distances.put(source, .0);
-
- while (!queue.isEmpty()) {
- var prev = queue.removeFirst();
- graph.edges(prev).forEach((node, time) -> {
- var distance = distances.get(prev) + time.doubleValue();
- if (distance < distances.getOrDefault(node, Double.MAX_VALUE)) {
- previous.put(node, prev);
- distances.put(node, distance);
- queue.addLast(node);
- }
- });
- }
- if (previous.containsKey(target) || source.equals(target)) {
- var path = new LinkedList();
- iterate(target, Objects::nonNull, previous::get).forEach(path::addFirst);
- return path;
- }
- return List.of();
- }
-
-}
diff --git a/algorithm/src/main/java/lv/id/jc/algorithm/graph/Graph.java b/algorithm/src/main/java/lv/id/jc/algorithm/graph/Graph.java
deleted file mode 100644
index 2b4de63..0000000
--- a/algorithm/src/main/java/lv/id/jc/algorithm/graph/Graph.java
+++ /dev/null
@@ -1,71 +0,0 @@
-package lv.id.jc.algorithm.graph;
-
-import java.util.List;
-import java.util.Map;
-import java.util.stream.IntStream;
-
-/**
- * An interface for weighted directed graph (network)
- *
- * @param the type of vertex in this graph
- * @author Jegors Čemisovs
- * @since 1.1
- */
-@FunctionalInterface
-public interface Graph {
- /**
- * Creates a Graph object by given schema.
- *
- * In a graph schema, each vertex is assigned an edge map.
- * If the vertex has no edges, then it should be assigned an empty map.
- *
- * @param schema of the graph
- * @param the type of vertex in this graph
- * @return graph object with given schema
- */
- static Graph of(Map> schema) {
- return () -> schema;
- }
-
- /**
- * The schema of this graph.
- *
- * In a graph schema, each vertex is assigned an edge map.
- * If the vertex has no edges, then it should be assigned an empty map.
- *
- * @return the graph scheme
- */
- Map> schema();
-
- /**
- * Returns the edges of the given vertex,
- * or {@code null} if this graph contains no given vertex.
- *
- *
A return value of {@code null} does not necessarily
- * indicate that the specified vertex is not present in the graph;
- * it's also possible that in the graph schema, {@code null} was specified
- * for the edges of this vertex instead of an empty map.
- *
- * @param vertex vertex
- * @return all links for the given vertex
- * or null if no such vertex in the graph
- */
- default Map edges(T vertex) {
- return schema().get(vertex);
- }
-
- /**
- * Calculate the distance for the given path
- *
- * @param path the list of vertices representing the path
- * @return distance for the given path as double
- * @throws NullPointerException if {@code path} is incorrect and contains more than one vertex
- */
- default double getDistance(List path) {
- return IntStream
- .range(1, path.size())
- .mapToObj(i -> edges(path.get(i - 1)).get(path.get(i)))
- .mapToDouble(Number::doubleValue)
- .sum();
- }
-}
diff --git a/algorithm/src/main/java/lv/id/jc/algorithm/graph/SearchAlgorithm.java b/algorithm/src/main/java/lv/id/jc/algorithm/graph/SearchAlgorithm.java
deleted file mode 100644
index cf8f54f..0000000
--- a/algorithm/src/main/java/lv/id/jc/algorithm/graph/SearchAlgorithm.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package lv.id.jc.algorithm.graph;
-
-import java.util.List;
-
-/**
- * A functional interface for graph search algorithm
- *
- * @param the type of vertex
- * @author Jegors Čemisovs
- * @since 1.0
- */
-@FunctionalInterface
-public interface SearchAlgorithm {
- /**
- * Find the path from the source node to the target
- *
- * @param graph The graph in which we search for the path
- * @param source Search starting point identifier
- * @param target Search finish point identifier
- * @return Path found or empty list if path cannot be found
- */
- List findPath(Graph graph, T source, T target);
-}
diff --git a/algorithm/src/main/java/lv/id/jc/algorithm/graph/package-info.java b/algorithm/src/main/java/lv/id/jc/algorithm/graph/package-info.java
deleted file mode 100644
index 28436e8..0000000
--- a/algorithm/src/main/java/lv/id/jc/algorithm/graph/package-info.java
+++ /dev/null
@@ -1,4 +0,0 @@
-/**
- * This package contains graph pathfinding algorithms.
- */
-package lv.id.jc.algorithm.graph;
\ No newline at end of file
diff --git a/algorithm/src/main/java/module-info.java b/algorithm/src/main/java/module-info.java
deleted file mode 100644
index 941d8df..0000000
--- a/algorithm/src/main/java/module-info.java
+++ /dev/null
@@ -1,8 +0,0 @@
-/**
- * The module contains an interface for a graph and an interface for a graph search algorithm.
- * There is an implementation of two search algorithms:
- * Dijkstra's algorithm and Breadth First Search algorithm.
- */
-module lv.id.jc.algorithm.graph {
- exports lv.id.jc.algorithm.graph;
-}
\ No newline at end of file
diff --git a/algorithm/src/test/groovy/lv/id/jc/algorithm/graph/BreadthFirstSearchSpec.groovy b/algorithm/src/test/groovy/lv/id/jc/algorithm/graph/BreadthFirstSearchSpec.groovy
deleted file mode 100644
index fba94a7..0000000
--- a/algorithm/src/test/groovy/lv/id/jc/algorithm/graph/BreadthFirstSearchSpec.groovy
+++ /dev/null
@@ -1,93 +0,0 @@
-package lv.id.jc.algorithm.graph
-
-import spock.lang.*
-
-@Title("Breadth First Search Algorithm")
-@See("https://en.wikipedia.org/wiki/Breadth-first_search")
-@Narrative("""
-Breadth First Search algorithm for finding the shortest paths between nodes in a graph
-""")
-class BreadthFirstSearchSpec extends Specification {
- @Subject
- def algorithm = new BreadthFirstSearch()
-
- def 'should find a route for simple graph'() {
- given:
- def graph = Graph.of([
- A: [B: 7, C: 2],
- B: [A: 3, C: 5],
- C: [A: 1, B: 3]
- ])
-
- when:
- def path = algorithm.findPath(graph, source, target)
-
- then:
- path == shortest
-
- and:
- graph.getDistance(path) == time as double
-
- where:
- source | target || time | shortest
- 'A' | 'A' || 0 | ['A']
- 'A' | 'B' || 7 | ['A', 'B']
- 'B' | 'C' || 5 | ['B', 'C']
- 'C' | 'B' || 3 | ['C', 'B']
- }
-
- def 'should find a route for complex graph'() {
- given:
- def graph = Graph.of([
- A: [B: 1],
- B: [A: 1, D: 1],
- C: [A: 1],
- D: [C: 1, E: 1],
- E: [F: 1],
- F: [D: 1, E: 1]])
-
- when:
- def path = algorithm.findPath(graph, source, target)
-
- then:
- path == shortest
-
- and:
- graph.getDistance(path) == time as double
-
- where:
- source | target || shortest
- 'A' | 'A' || ['A']
- 'B' | 'B' || ['B']
- 'A' | 'B' || ['A', 'B']
- 'B' | 'A' || ['B', 'A']
- 'A' | 'C' || ['A', 'B', 'D', 'C']
- 'C' | 'A' || ['C', 'A']
- 'E' | 'B' || ['E', 'F', 'D', 'C', 'A', 'B']
-
- and:
- time = shortest.size() - 1
- }
-
- def 'should thrown an exception for an empty graph'() {
- given:
- def graph = Graph.of([:])
-
- when:
- algorithm.findPath(graph, 'A', 'B')
-
- then:
- thrown NullPointerException
- }
-
- def "should return an empty path if can't find a route"() {
- given: 'a simple graph with no edge between nodes'
- def graph = Graph.of([A: [:], B: [:]])
-
- when:
- def path = algorithm.findPath(graph, 'A', 'B')
-
- then:
- path == []
- }
-}
diff --git a/algorithm/src/test/groovy/lv/id/jc/algorithm/graph/DijkstrasAlgorithmSpec.groovy b/algorithm/src/test/groovy/lv/id/jc/algorithm/graph/DijkstrasAlgorithmSpec.groovy
deleted file mode 100644
index ca30c65..0000000
--- a/algorithm/src/test/groovy/lv/id/jc/algorithm/graph/DijkstrasAlgorithmSpec.groovy
+++ /dev/null
@@ -1,127 +0,0 @@
-package lv.id.jc.algorithm.graph
-
-import spock.lang.*
-
-@Title("Dijkstra's Algorithm")
-@See("https://en.wikipedia.org/wiki/Dijkstra%27s_algorithm")
-@Narrative("""
-Dijkstra's algorithm is an algorithm for finding
-the fastest paths between nodes in a graph
-""")
-class DijkstrasAlgorithmSpec extends Specification {
-
- @Subject
- def algorithm = new DijkstrasAlgorithm()
-
- def 'should find a route for a simple graph'() {
- given:
- def graph = Graph.of([
- A: [B: 7, C: 2],
- B: [A: 3, C: 5],
- C: [A: 1, B: 3]
- ])
-
- when:
- def path = algorithm.findPath(graph, source, target)
- def time = graph.getDistance(path)
-
- then:
- path == fastestPath
- time == fastestTime
-
- where:
- source | target || fastestPath | fastestTime
- 'A' | 'A' || ['A'] | 0
- 'B' | 'A' || ['B', 'A'] | 3
- 'A' | 'B' || ['A', 'C', 'B'] | 5
- }
-
- def 'should find a route for a medium graph'() {
- given:
- def graph = Graph.of([
- A: [B: 5],
- B: [A: 5, C: 10],
- C: [B: 20, D: 5],
- D: [E: 5],
- E: [B: 5]
- ])
-
- when:
- def path = algorithm.findPath(graph, source, target)
-
- then:
- path == fastest
-
- and:
- graph.getDistance(path) == time as double
-
- where:
- source | target || time | fastest
- 'A' | 'A' || 0 | ['A']
- 'B' | 'B' || 0 | ['B']
- 'A' | 'B' || 5 | ['A', 'B']
- 'B' | 'A' || 5 | ['B', 'A']
- 'A' | 'C' || 15 | ['A', 'B', 'C']
- 'C' | 'A' || 20 | ['C', 'D', 'E', 'B', 'A']
- }
-
- def 'should find a route for a complex graph'() {
- given:
- def graph = Graph.of([
- A: [B: 5, H: 2],
- B: [A: 5, C: 7],
- C: [B: 7, D: 3, G: 4],
- D: [C: 20, E: 4],
- E: [F: 5],
- F: [G: 6],
- G: [C: 4],
- H: [G: 3]
- ])
-
- when:
- def path = algorithm.findPath(graph, source, target)
-
- then:
- path == fastest
-
- and:
- graph.getDistance(path) == time as double
-
- where:
- source | target || time | fastest
- 'A' | 'A' || 0 | ['A']
- 'B' | 'B' || 0 | ['B']
- 'A' | 'B' || 5 | ['A', 'B']
- 'B' | 'A' || 5 | ['B', 'A']
- 'A' | 'C' || 9 | ['A', 'H', 'G', 'C']
- 'C' | 'A' || 12 | ['C', 'B', 'A']
- 'A' | 'G' || 5 | ['A', 'H', 'G']
- 'C' | 'D' || 3 | ['C', 'D']
- 'D' | 'C' || 19 | ['D', 'E', 'F', 'G', 'C']
- 'B' | 'D' || 10 | ['B', 'C', 'D']
- 'D' | 'B' || 26 | ['D', 'E', 'F', 'G', 'C', 'B']
- 'D' | 'H' || 33 | ['D', 'E', 'F', 'G', 'C', 'B', 'A', 'H']
- }
-
- def 'should thrown NPE for an empty graph'() {
- given:
- def graph = Graph.of([:])
-
- when:
- algorithm.findPath(graph, 'A', 'B')
-
- then:
- thrown NullPointerException
- }
-
- def "should return an empty path if can't find a route"() {
- given: 'a simple graph with no edge between nodes'
- def graph = Graph.of([A: [:], B: [:]])
-
- when:
- def path = algorithm.findPath(graph, 'A', 'B')
-
- then:
- path == []
- }
-}
diff --git a/algorithm/src/test/groovy/lv/id/jc/algorithm/graph/GraphSpec.groovy b/algorithm/src/test/groovy/lv/id/jc/algorithm/graph/GraphSpec.groovy
deleted file mode 100644
index c2b3a50..0000000
--- a/algorithm/src/test/groovy/lv/id/jc/algorithm/graph/GraphSpec.groovy
+++ /dev/null
@@ -1,99 +0,0 @@
-package lv.id.jc.algorithm.graph
-
-import spock.lang.Narrative
-import spock.lang.Specification
-import spock.lang.Title
-
-@Title("Generic Graph")
-@Narrative("A generic implementation of Graph structure")
-class GraphSpec extends Specification {
-
- def "should return edges for a given node"() {
- given: 'a simple graph with three nodes'
- def graph = Graph.of([
- A: [B: 7, C: 2],
- B: [A: 3, C: 5],
- C: [A: 1, B: 3]
- ])
-
- expect: 'The method returns expected edges for given node'
- graph.edges(node) == expected
-
- where:
- node | expected
- 'A' | [B: 7, C: 2]
- 'B' | [A: 3, C: 5]
- 'C' | [A: 1, B: 3]
- }
-
- def 'should calculate distance for a path'() {
- given: "a complex graph with eight nodes"
- def graph = Graph.of([
- A: [B: 5, H: 2],
- B: [A: 5, C: 7],
- C: [B: 7, D: 3, G: 4],
- D: [C: 20, E: 4],
- E: [F: 5],
- F: [G: 6],
- G: [C: 4],
- H: [G: 3]
- ])
-
- expect: 'the distance for a path correctly calculated'
- graph.getDistance(path) == distance as double
-
- where: 'path and expected distance'
- path | distance
- ['A'] | 0
- ['A', 'B'] | 5
- ['B', 'A'] | 5
- ['A', 'B', 'A'] | 10
- ['A', 'B', 'A', 'B'] | 15
- ['C', 'D'] | 3
- ['D', 'C'] | 20
- ['D', 'E', 'F', 'G', 'C'] | 19
- }
-
- def 'should be zero distance for an empty path'() {
- given: 'any graph'
- def graph = Graph.of(_ as Map)
-
- expect: 'the distance is zero for an empty path'
- graph.getDistance([]) == 0
- }
-
- def 'should be zero distance for any one node path'() {
- given: 'any graph'
- def graph = Graph.of(_ as Map)
-
- expect: 'the zero distance for any one-node path'
- graph.getDistance(oneNodePath) == 0
-
- where: 'the node may be of any type and even non-existent'
- oneNodePath << [
- ['A'], ['B'], [2], ['X' as char], [12.56]
- ]
- }
-
- def 'should throw NPE for incorrect path'() {
- given: "a medium graph with five nodes"
- def graph = Graph.of([
- A: [B: 5],
- B: [A: 5, C: 10],
- C: [B: 20, D: 5],
- D: [E: 5],
- E: [B: 5]
- ])
-
- when: 'we call the method with incorrect path'
- graph.getDistance(incorrectPath)
-
- then: 'the NPE thrown'
- thrown NullPointerException
-
- where: 'path is more then one node'
- incorrectPath << [
- ['E', 'D'], ['A', 'C'], ['A', 'B', 'D']
- ]
- }
-}
\ No newline at end of file
diff --git a/algorithm/src/test/groovy/lv/id/jc/algorithm/graph/SearchAlgorithmsSpec.groovy b/algorithm/src/test/groovy/lv/id/jc/algorithm/graph/SearchAlgorithmsSpec.groovy
deleted file mode 100644
index 4182a97..0000000
--- a/algorithm/src/test/groovy/lv/id/jc/algorithm/graph/SearchAlgorithmsSpec.groovy
+++ /dev/null
@@ -1,61 +0,0 @@
-package lv.id.jc.algorithm.graph
-
-import spock.lang.*
-
-@Issue("30")
-@Title("Comparison of two algorithms")
-@See("https://en.wikipedia.org/wiki/Breadth-first_search")
-@See("https://en.wikipedia.org/wiki/Dijkstra%27s_algorithm")
-class SearchAlgorithmsSpec extends Specification {
- @Subject
- def bfsAlgorithm = new BreadthFirstSearch()
-
- @Subject
- def dijkstras = new DijkstrasAlgorithm()
-
- def 'should find a route for a complex graph'() {
- given: "a complex graph with eight nodes"
- def graph = Graph.of([
- A: [B: 5, H: 2],
- B: [A: 5, C: 7],
- C: [B: 7, D: 3, G: 4],
- D: [C: 20, E: 4],
- E: [F: 5],
- F: [G: 6],
- G: [C: 4],
- H: [G: 3]
- ])
-
- when: "we use Breadth First Search algorithm for the first route"
- def routeOne = bfsAlgorithm.findPath(graph, source, target)
-
- and: "we use Dijkstra's algorithm for the second route"
- def routeTwo = dijkstras.findPath(graph, source, target)
-
- then: "the first route is the shortest"
- routeOne == shortest
-
- and: 'the second route is the fastest'
- routeTwo == fastest
-
- and: 'the distance calculated correctly'
- graph.getDistance(routeOne) == t1 as double
- graph.getDistance(routeTwo) == t2 as double
-
- where:
- source | target || t1 | shortest | t2 | fastest
- 'A' | 'A' || 0 | ['A'] | 0 | ['A']
- 'B' | 'B' || 0 | ['B'] | 0 | ['B']
- 'A' | 'B' || 5 | ['A', 'B'] | 5 | ['A', 'B']
- 'B' | 'A' || 5 | ['B', 'A'] | 5 | ['B', 'A']
- 'A' | 'C' || 12 | ['A', 'B', 'C'] | 9 | ['A', 'H', 'G', 'C']
- 'C' | 'A' || 12 | ['C', 'B', 'A'] | 12 | ['C', 'B', 'A']
- 'A' | 'G' || 5 | ['A', 'H', 'G'] | 5 | ['A', 'H', 'G']
- 'C' | 'D' || 3 | ['C', 'D'] | 3 | ['C', 'D']
- 'D' | 'C' || 20 | ['D', 'C'] | 19 | ['D', 'E', 'F', 'G', 'C']
- 'B' | 'D' || 10 | ['B', 'C', 'D'] | 10 | ['B', 'C', 'D']
- 'D' | 'B' || 27 | ['D', 'C', 'B'] | 26 | ['D', 'E', 'F', 'G', 'C', 'B']
- 'D' | 'H' || 34 | ['D', 'C', 'B', 'A', 'H'] | 33 | ['D', 'E', 'F', 'G', 'C', 'B', 'A', 'H']
- }
-
-}
diff --git a/algorithm/src/test/java/lv/id/jc/algorithm/graph/DijkstrasAlgorithmTest.java b/algorithm/src/test/java/lv/id/jc/algorithm/graph/DijkstrasAlgorithmTest.java
deleted file mode 100644
index 6bf0c3e..0000000
--- a/algorithm/src/test/java/lv/id/jc/algorithm/graph/DijkstrasAlgorithmTest.java
+++ /dev/null
@@ -1,56 +0,0 @@
-package lv.id.jc.algorithm.graph;
-
-import org.junit.jupiter.api.DisplayName;
-import org.junit.jupiter.params.ParameterizedTest;
-import org.junit.jupiter.params.provider.Arguments;
-import org.junit.jupiter.params.provider.MethodSource;
-
-import java.util.*;
-import java.util.stream.Stream;
-
-import static org.junit.jupiter.api.Assertions.assertEquals;
-
-// Java 8 + JUnit 5 + Parameterized Test
-class DijkstrasAlgorithmTest {
-
- // Subject under test
- SearchAlgorithm algorithm = new DijkstrasAlgorithm<>();
-
- // Sample data
- private static Stream providePathTime() {
- return Stream.of(
- Arguments.of("A", "A", Collections.singletonList("A"), 0),
- Arguments.of("B", "A", Arrays.asList("B", "A"), 3),
- Arguments.of("A", "B", Arrays.asList("A", "C", "B"), 5)
- );
- }
-
- @ParameterizedTest
- @MethodSource("providePathTime")
- @DisplayName("should find a route for a simple graph")
- void testRouteForSimpleGraph(String source, String target, List fastestPath, double fastestTime) {
- // given
- Map fromA = new HashMap<>();
- fromA.put("B", 7);
- fromA.put("C", 2);
- Map fromB = new HashMap<>();
- fromB.put("A", 3);
- fromB.put("C", 5);
- Map fromC = new HashMap<>();
- fromC.put("A", 1);
- fromC.put("B", 3);
- Map> nodes = new HashMap<>();
- nodes.put("A", fromA);
- nodes.put("B", fromB);
- nodes.put("C", fromC);
- Graph graph = Graph.of(nodes);
-
- // when
- List path = algorithm.findPath(graph, source, target);
- double time = graph.getDistance(path);
-
- // then
- assertEquals(fastestPath, path);
- assertEquals(fastestTime, time);
- }
-}
\ No newline at end of file
diff --git a/algorithm/src/test/java/lv/id/jc/algorithm/graph/SearchAlgorithmsTest.java b/algorithm/src/test/java/lv/id/jc/algorithm/graph/SearchAlgorithmsTest.java
deleted file mode 100644
index 92f6bd0..0000000
--- a/algorithm/src/test/java/lv/id/jc/algorithm/graph/SearchAlgorithmsTest.java
+++ /dev/null
@@ -1,147 +0,0 @@
-package lv.id.jc.algorithm.graph;
-
-import org.junit.jupiter.api.AfterEach;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
-
-import java.util.ArrayList;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-
-import static org.junit.jupiter.api.Assertions.*;
-
-class SearchAlgorithmsTest {
-
- private SearchAlgorithm bfsAlgorithm;
- private SearchAlgorithm dijkstras;
- private Graph graph;
-
- @BeforeEach
- void setUp() {
- LinkedHashMap fromA = new LinkedHashMap<>();
- fromA.put("B", 5);
- fromA.put("H", 2);
- LinkedHashMap fromB = new LinkedHashMap<>();
- fromB.put("A", 5);
- fromB.put("C", 7);
- LinkedHashMap fromC = new LinkedHashMap<>();
- fromC.put("B", 7);
- fromC.put("D", 3);
- fromC.put("G", 4);
- LinkedHashMap fromD = new LinkedHashMap<>();
- fromD.put("C", 20);
- fromD.put("E", 4);
- LinkedHashMap fromE = new LinkedHashMap<>();
- fromE.put("F", 5);
- LinkedHashMap fromF = new LinkedHashMap<>();
- fromF.put("G", 6);
- LinkedHashMap fromG = new LinkedHashMap<>();
- fromG.put("C", 4);
- LinkedHashMap fromH = new LinkedHashMap<>();
- fromH.put("G", 3);
-
- LinkedHashMap> nodes = new LinkedHashMap<>();
- nodes.put("A", fromA);
- nodes.put("B", fromB);
- nodes.put("C", fromC);
- nodes.put("D", fromD);
- nodes.put("E", fromE);
- nodes.put("F", fromF);
- nodes.put("G", fromG);
- nodes.put("H", fromH);
-
- graph = Graph.of(nodes);
- dijkstras = new DijkstrasAlgorithm<>();
- bfsAlgorithm = new BreadthFirstSearch<>();
- }
-
- @AfterEach
- void tearDown() {
- graph = null;
- dijkstras = null;
- bfsAlgorithm = null;
- }
-
- @Test
- void testFindPathAA() {
- // Java 8
-
- // given
- String source = "A";
- String target = "A";
-
- List shortest = new ArrayList<>();
- shortest.add("A");
-
- List fastest = new ArrayList<>();
- fastest.add("A");
-
- // when
- List routeOne = bfsAlgorithm.findPath(graph, source, target);
- List routeTwo = dijkstras.findPath(graph, source, target);
-
- // then
- assertEquals(shortest, routeOne);
- assertEquals(fastest, routeTwo);
-
- assertEquals(0, graph.getDistance(shortest));
- assertEquals(0, graph.getDistance(fastest));
- }
-
- @Test
- void testFindPathBB() {
- // Java 11
-
- var source = "B";
- var target = "B";
-
- var shortest = List.of("B");
- var fastest = List.of("B");
-
- var routeOne = bfsAlgorithm.findPath(graph, source, target);
- var routeTwo = dijkstras.findPath(graph, source, target);
-
- assertEquals(shortest, routeOne);
- assertEquals(fastest, routeTwo);
-
- assertEquals(0, graph.getDistance(shortest));
- assertEquals(0, graph.getDistance(fastest));
- }
-
- @Test
- void testFindPathCD() {
- var source = "C";
- var target = "D";
-
- var shortest = List.of("C", "D");
- var fastest = List.of("C", "D");
-
- var routeOne = bfsAlgorithm.findPath(graph, source, target);
- var routeTwo = dijkstras.findPath(graph, source, target);
-
- assertEquals(shortest, routeOne);
- assertEquals(fastest, routeTwo);
-
- assertEquals(3, graph.getDistance(shortest));
- assertEquals(3, graph.getDistance(fastest));
- }
-
- @Test
- void testFindPathDC() {
- var source = "D";
- var target = "C";
- var shortest = List.of("D", "C");
- var fastest = List.of("D", "E", "F", "G", "C");
-
- var routeOne = bfsAlgorithm.findPath(graph, source, target);
- var routeTwo = dijkstras.findPath(graph, source, target);
-
- assertEquals(shortest, routeOne);
- assertEquals(fastest, routeTwo);
-
- assertEquals(20, graph.getDistance(shortest));
- assertEquals(19, graph.getDistance(fastest));
- }
-
-}
\ No newline at end of file
diff --git a/algorithm/src/test/resources/SpockConfig.groovy b/algorithm/src/test/resources/SpockConfig.groovy
deleted file mode 100644
index 9d1c0df..0000000
--- a/algorithm/src/test/resources/SpockConfig.groovy
+++ /dev/null
@@ -1,14 +0,0 @@
-report {
- issueNamePrefix 'Issue #'
- issueUrlPrefix 'https://github.com/rabestro/algorithms/issues/'
-}
-
-spockReports {
- set(['com.athaydes.spockframework.report.showCodeBlocks' : true,
- 'com.athaydes.spockframework.report.outputDir' : '../docs/spock-reports',
- 'com.athaydes.spockframework.report.projectName' : 'Graph search algorithms',
- 'com.athaydes.spockframework.report.projectVersion' : 1.1,
- 'com.athaydes.spockframework.report.internal.HtmlReportCreator.enabled': true,
- 'com.athaydes.spockframework.report.IReportCreator' : 'com.athaydes.spockframework.report.internal.HtmlReportCreator'
- ])
-}
\ No newline at end of file
diff --git a/docs/LICENSE b/docs/LICENSE
deleted file mode 100644
index 244293b..0000000
--- a/docs/LICENSE
+++ /dev/null
@@ -1,21 +0,0 @@
-MIT License
-
-Copyright (c) 2022 Jegors Čemisovs
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
diff --git a/docs/api/allclasses-index.html b/docs/api/allclasses-index.html
deleted file mode 100644
index 55a7bac..0000000
--- a/docs/api/allclasses-index.html
+++ /dev/null
@@ -1,87 +0,0 @@
-
-
-
-
-All Classes and Interfaces
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Starting from the Overview page, you can browse the documentation using the links in each page, and in the navigation bar at the top of each page. The Index and Search box allow you to navigate to specific declarations and summary pages, including: All Packages, All Classes and Interfaces
-
-
Search
-
You can search for definitions of modules, packages, types, fields, methods, system properties and other terms defined in the API, using some or all of the name, optionally using "camelCase" abbreviations. For example:
-
-
j.l.obj will match "java.lang.Object"
-
InpStr will match "java.io.InputStream"
-
HM.cK will match "java.util.HashMap.containsKey(Object)"
-The following sections describe the different kinds of pages in this collection.
-
-
Module
-
Each module has a page that contains a list of its packages, dependencies on other modules, and services, with a summary for each. These pages may contain the following categories:
-
-
Packages
-
Modules
-
Services
-
-
-
-
Package
-
Each package has a page that contains a list of its classes and interfaces, with a summary for each. These pages may contain the following categories:
-
-
Interfaces
-
Classes
-
Enum Classes
-
Exceptions
-
Errors
-
Annotation Interfaces
-
-
-
-
Class or Interface
-
Each class, interface, nested class and nested interface has its own separate page. Each of these pages has three sections consisting of a declaration and description, member summary tables, and detailed member descriptions. Entries in each of these sections are omitted if they are empty or not applicable.
-
-
Class Inheritance Diagram
-
Direct Subclasses
-
All Known Subinterfaces
-
All Known Implementing Classes
-
Class or Interface Declaration
-
Class or Interface Description
-
-
-
-
Nested Class Summary
-
Enum Constant Summary
-
Field Summary
-
Property Summary
-
Constructor Summary
-
Method Summary
-
Required Element Summary
-
Optional Element Summary
-
-
-
-
Enum Constant Details
-
Field Details
-
Property Details
-
Constructor Details
-
Method Details
-
Element Details
-
-
Note: Annotation interfaces have required and optional elements, but not methods. Only enum classes have enum constants. The components of a record class are displayed as part of the declaration of the record class. Properties are a feature of JavaFX.
-
The summary entries are alphabetical, while the detailed descriptions are in the order they appear in the source code. This preserves the logical groupings established by the programmer.
-
-
-
Other Files
-
Packages and modules may contain pages with additional information related to the declarations nearby.
-
-
-
Use
-
Each documented package, class and interface has its own Use page. This page describes what packages, classes, methods, constructors and fields use any part of the given class or package. Given a class or interface A, its Use page includes subclasses of A, fields declared as A, methods that return A, and methods and constructors with parameters of type A. You can access this page by first going to the package, class or interface, then clicking on the USE link in the navigation bar.
-
-
-
Tree (Class Hierarchy)
-
There is a Class Hierarchy page for all packages, plus a hierarchy for each package. Each hierarchy page contains a list of classes and a list of interfaces. Classes are organized by inheritance structure starting with java.lang.Object. Interfaces do not inherit from java.lang.Object.
-
-
When viewing the Overview page, clicking on TREE displays the hierarchy for all packages.
-
When viewing a particular package, class or interface page, clicking on TREE displays the hierarchy for only that package.
-
-
-
-
All Packages
-
The All Packages page contains an alphabetic index of all packages contained in the documentation.
-
-
-
All Classes and Interfaces
-
The All Classes and Interfaces page contains an alphabetic index of all classes and interfaces contained in the documentation, including annotation interfaces, enum classes, and record classes.
-
-
-
Index
-
The Index contains an alphabetic index of all classes, interfaces, constructors, methods, and fields in the documentation, as well as summary pages such as All Packages, All Classes and Interfaces.
-
-
-
-This help file applies to API documentation generated by the standard doclet.
-
-
-
-
diff --git a/docs/api/jquery-ui.overrides.css b/docs/api/jquery-ui.overrides.css
deleted file mode 100644
index f89acb6..0000000
--- a/docs/api/jquery-ui.overrides.css
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-.ui-state-active,
-.ui-widget-content .ui-state-active,
-.ui-widget-header .ui-state-active,
-a.ui-button:active,
-.ui-button:active,
-.ui-button.ui-state-active:hover {
- /* Overrides the color of selection used in jQuery UI */
- background: #F8981D;
-}
diff --git a/docs/api/legal/ADDITIONAL_LICENSE_INFO b/docs/api/legal/ADDITIONAL_LICENSE_INFO
deleted file mode 100644
index b62cc3e..0000000
--- a/docs/api/legal/ADDITIONAL_LICENSE_INFO
+++ /dev/null
@@ -1 +0,0 @@
-Please see ..\java.base\ADDITIONAL_LICENSE_INFO
diff --git a/docs/api/legal/ASSEMBLY_EXCEPTION b/docs/api/legal/ASSEMBLY_EXCEPTION
deleted file mode 100644
index 0d4cfb4..0000000
--- a/docs/api/legal/ASSEMBLY_EXCEPTION
+++ /dev/null
@@ -1 +0,0 @@
-Please see ..\java.base\ASSEMBLY_EXCEPTION
diff --git a/docs/api/legal/LICENSE b/docs/api/legal/LICENSE
deleted file mode 100644
index 4ad9fe4..0000000
--- a/docs/api/legal/LICENSE
+++ /dev/null
@@ -1 +0,0 @@
-Please see ..\java.base\LICENSE
diff --git a/docs/api/legal/jquery.md b/docs/api/legal/jquery.md
deleted file mode 100644
index 8054a34..0000000
--- a/docs/api/legal/jquery.md
+++ /dev/null
@@ -1,72 +0,0 @@
-## jQuery v3.5.1
-
-### jQuery License
-```
-jQuery v 3.5.1
-Copyright JS Foundation and other contributors, https://js.foundation/
-
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of this software and associated documentation files (the
-"Software"), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-******************************************
-
-The jQuery JavaScript Library v3.5.1 also includes Sizzle.js
-
-Sizzle.js includes the following license:
-
-Copyright JS Foundation and other contributors, https://js.foundation/
-
-This software consists of voluntary contributions made by many
-individuals. For exact contribution history, see the revision history
-available at https://github.com/jquery/sizzle
-
-The following license applies to all parts of this software except as
-documented below:
-
-====
-
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of this software and associated documentation files (the
-"Software"), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-====
-
-All files located in the node_modules and external directories are
-externally maintained libraries used by this software which have their
-own licenses; we recommend you read them, as their terms may differ from
-the terms above.
-
-*********************
-
-```
diff --git a/docs/api/legal/jqueryUI.md b/docs/api/legal/jqueryUI.md
deleted file mode 100644
index 8031bdb..0000000
--- a/docs/api/legal/jqueryUI.md
+++ /dev/null
@@ -1,49 +0,0 @@
-## jQuery UI v1.12.1
-
-### jQuery UI License
-```
-Copyright jQuery Foundation and other contributors, https://jquery.org/
-
-This software consists of voluntary contributions made by many
-individuals. For exact contribution history, see the revision history
-available at https://github.com/jquery/jquery-ui
-
-The following license applies to all parts of this software except as
-documented below:
-
-====
-
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of this software and associated documentation files (the
-"Software"), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-====
-
-Copyright and related rights for sample code are waived via CC0. Sample
-code is defined as all source code contained within the demos directory.
-
-CC0: http://creativecommons.org/publicdomain/zero/1.0/
-
-====
-
-All files located in the node_modules and external directories are
-externally maintained libraries used by this software which have their
-own licenses; we recommend you read them, as their terms may differ from
-the terms above.
-
-```
diff --git a/docs/api/lv.id.jc.algorithm.graph/lv/id/jc/algorithm/graph/BreadthFirstSearch.html b/docs/api/lv.id.jc.algorithm.graph/lv/id/jc/algorithm/graph/BreadthFirstSearch.html
deleted file mode 100644
index 9786ad2..0000000
--- a/docs/api/lv.id.jc.algorithm.graph/lv/id/jc/algorithm/graph/BreadthFirstSearch.html
+++ /dev/null
@@ -1,194 +0,0 @@
-
-
-
-
-BreadthFirstSearch
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
The schema of this graph.
-
- In a graph schema, each vertex is assigned an edge map.
- If the vertex has no edges, then it should be assigned an empty map.
Returns the edges of the given vertex,
- or null if this graph contains no given vertex.
-
-
A return value of null does not necessarily
- indicate that the specified vertex is not present in the graph;
- it's also possible that in the graph schema, null was specified
- for the edges of this vertex instead of an empty map.
-
-
Parameters:
-
vertex - vertex
-
Returns:
-
all links for the given vertex
- or null if no such vertex in the graph
Creates a Graph object by given schema.
-
- In a graph schema, each vertex is assigned an edge map.
- If the vertex has no edges, then it should be assigned an empty map.
The module contains an interface for a graph and an interface for a graph search algorithm.
- There is an implementation of two search algorithms:
- Dijkstra's algorithm and Breadth First Search algorithm.
").text(i.label)).appendTo(e)},_move:function(t,e){return this.menu.element.is(":visible")?this.menu.isFirstItem()&&/^previous/.test(t)||this.menu.isLastItem()&&/^next/.test(t)?(this.isMultiLine||this._value(this.term),this.menu.blur(),void 0):(this.menu[t](e),void 0):(this.search(null,e),void 0)},widget:function(){return this.menu.element},_value:function(){return this.valueMethod.apply(this.element,arguments)},_keyEvent:function(t,e){(!this.isMultiLine||this.menu.element.is(":visible"))&&(this._move(t,e),e.preventDefault())},_isContentEditable:function(t){if(!t.length)return!1;var e=t.prop("contentEditable");return"inherit"===e?this._isContentEditable(t.parent()):"true"===e}}),t.extend(t.ui.autocomplete,{escapeRegex:function(t){return t.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&")},filter:function(e,i){var s=RegExp(t.ui.autocomplete.escapeRegex(i),"i");return t.grep(e,function(t){return s.test(t.label||t.value||t)})}}),t.widget("ui.autocomplete",t.ui.autocomplete,{options:{messages:{noResults:"No search results.",results:function(t){return t+(t>1?" results are":" result is")+" available, use up and down arrow keys to navigate."}}},__response:function(e){var i;this._superApply(arguments),this.options.disabled||this.cancelSearch||(i=e&&e.length?this.options.messages.results(e.length):this.options.messages.noResults,this.liveRegion.children().hide(),t("
").text(i).appendTo(this.liveRegion))}}),t.ui.autocomplete});
\ No newline at end of file
diff --git a/docs/api/script-dir/jquery-ui.structure.min.css b/docs/api/script-dir/jquery-ui.structure.min.css
deleted file mode 100644
index e880892..0000000
--- a/docs/api/script-dir/jquery-ui.structure.min.css
+++ /dev/null
@@ -1,5 +0,0 @@
-/*! jQuery UI - v1.12.1 - 2018-12-06
-* http://jqueryui.com
-* Copyright jQuery Foundation and other contributors; Licensed MIT */
-
-.ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:before,.ui-helper-clearfix:after{content:"";display:table;border-collapse:collapse}.ui-helper-clearfix:after{clear:both}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-front{z-index:100}.ui-state-disabled{cursor:default!important;pointer-events:none}.ui-icon{display:inline-block;vertical-align:middle;margin-top:-.25em;position:relative;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-icon-block{left:50%;margin-left:-8px;display:block}.ui-widget-overlay{position:fixed;top:0;left:0;width:100%;height:100%}.ui-autocomplete{position:absolute;top:0;left:0;cursor:default}.ui-menu{list-style:none;padding:0;margin:0;display:block;outline:0}.ui-menu .ui-menu{position:absolute}.ui-menu .ui-menu-item{margin:0;cursor:pointer;list-style-image:url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7")}.ui-menu .ui-menu-item-wrapper{position:relative;padding:3px 1em 3px .4em}.ui-menu .ui-menu-divider{margin:5px 0;height:0;font-size:0;line-height:0;border-width:1px 0 0 0}.ui-menu .ui-state-focus,.ui-menu .ui-state-active{margin:-1px}.ui-menu-icons{position:relative}.ui-menu-icons .ui-menu-item-wrapper{padding-left:2em}.ui-menu .ui-icon{position:absolute;top:0;bottom:0;left:.2em;margin:auto 0}.ui-menu .ui-menu-icon{left:auto;right:0}
\ No newline at end of file
diff --git a/docs/api/script.js b/docs/api/script.js
deleted file mode 100644
index 864989c..0000000
--- a/docs/api/script.js
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
- * Copyright (c) 2013, 2020, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-var moduleSearchIndex;
-var packageSearchIndex;
-var typeSearchIndex;
-var memberSearchIndex;
-var tagSearchIndex;
-function loadScripts(doc, tag) {
- createElem(doc, tag, 'search.js');
-
- createElem(doc, tag, 'module-search-index.js');
- createElem(doc, tag, 'package-search-index.js');
- createElem(doc, tag, 'type-search-index.js');
- createElem(doc, tag, 'member-search-index.js');
- createElem(doc, tag, 'tag-search-index.js');
-}
-
-function createElem(doc, tag, path) {
- var script = doc.createElement(tag);
- var scriptElement = doc.getElementsByTagName(tag)[0];
- script.src = pathtoroot + path;
- scriptElement.parentNode.insertBefore(script, scriptElement);
-}
-
-function show(tableId, selected, columns) {
- if (tableId !== selected) {
- document.querySelectorAll('div.' + tableId + ':not(.' + selected + ')')
- .forEach(function(elem) {
- elem.style.display = 'none';
- });
- }
- document.querySelectorAll('div.' + selected)
- .forEach(function(elem, index) {
- elem.style.display = '';
- var isEvenRow = index % (columns * 2) < columns;
- elem.classList.remove(isEvenRow ? oddRowColor : evenRowColor);
- elem.classList.add(isEvenRow ? evenRowColor : oddRowColor);
- });
- updateTabs(tableId, selected);
-}
-
-function updateTabs(tableId, selected) {
- document.querySelector('div#' + tableId +' .summary-table')
- .setAttribute('aria-labelledby', selected);
- document.querySelectorAll('button[id^="' + tableId + '"]')
- .forEach(function(tab, index) {
- if (selected === tab.id || (tableId === selected && index === 0)) {
- tab.className = activeTableTab;
- tab.setAttribute('aria-selected', true);
- tab.setAttribute('tabindex',0);
- } else {
- tab.className = tableTab;
- tab.setAttribute('aria-selected', false);
- tab.setAttribute('tabindex',-1);
- }
- });
-}
-
-function switchTab(e) {
- var selected = document.querySelector('[aria-selected=true]');
- if (selected) {
- if ((e.keyCode === 37 || e.keyCode === 38) && selected.previousSibling) {
- // left or up arrow key pressed: move focus to previous tab
- selected.previousSibling.click();
- selected.previousSibling.focus();
- e.preventDefault();
- } else if ((e.keyCode === 39 || e.keyCode === 40) && selected.nextSibling) {
- // right or down arrow key pressed: move focus to next tab
- selected.nextSibling.click();
- selected.nextSibling.focus();
- e.preventDefault();
- }
- }
-}
-
-var updateSearchResults = function() {};
-
-function indexFilesLoaded() {
- return moduleSearchIndex
- && packageSearchIndex
- && typeSearchIndex
- && memberSearchIndex
- && tagSearchIndex;
-}
-
-// Workaround for scroll position not being included in browser history (8249133)
-document.addEventListener("DOMContentLoaded", function(e) {
- var contentDiv = document.querySelector("div.flex-content");
- window.addEventListener("popstate", function(e) {
- if (e.state !== null) {
- contentDiv.scrollTop = e.state;
- }
- });
- window.addEventListener("hashchange", function(e) {
- history.replaceState(contentDiv.scrollTop, document.title);
- });
- contentDiv.addEventListener("scroll", function(e) {
- var timeoutID;
- if (!timeoutID) {
- timeoutID = setTimeout(function() {
- history.replaceState(contentDiv.scrollTop, document.title);
- timeoutID = null;
- }, 100);
- }
- });
- if (!location.hash) {
- history.replaceState(contentDiv.scrollTop, document.title);
- }
-});
diff --git a/docs/api/search.js b/docs/api/search.js
deleted file mode 100644
index db3b2f4..0000000
--- a/docs/api/search.js
+++ /dev/null
@@ -1,354 +0,0 @@
-/*
- * Copyright (c) 2015, 2020, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-var noResult = {l: "No results found"};
-var loading = {l: "Loading search index..."};
-var catModules = "Modules";
-var catPackages = "Packages";
-var catTypes = "Classes and Interfaces";
-var catMembers = "Members";
-var catSearchTags = "Search Tags";
-var highlight = "$&";
-var searchPattern = "";
-var fallbackPattern = "";
-var RANKING_THRESHOLD = 2;
-var NO_MATCH = 0xffff;
-var MIN_RESULTS = 3;
-var MAX_RESULTS = 500;
-var UNNAMED = "";
-function escapeHtml(str) {
- return str.replace(//g, ">");
-}
-function getHighlightedText(item, matcher, fallbackMatcher) {
- var escapedItem = escapeHtml(item);
- var highlighted = escapedItem.replace(matcher, highlight);
- if (highlighted === escapedItem) {
- highlighted = escapedItem.replace(fallbackMatcher, highlight)
- }
- return highlighted;
-}
-function getURLPrefix(ui) {
- var urlPrefix="";
- var slash = "/";
- if (ui.item.category === catModules) {
- return ui.item.l + slash;
- } else if (ui.item.category === catPackages && ui.item.m) {
- return ui.item.m + slash;
- } else if (ui.item.category === catTypes || ui.item.category === catMembers) {
- if (ui.item.m) {
- urlPrefix = ui.item.m + slash;
- } else {
- $.each(packageSearchIndex, function(index, item) {
- if (item.m && ui.item.p === item.l) {
- urlPrefix = item.m + slash;
- }
- });
- }
- }
- return urlPrefix;
-}
-function createSearchPattern(term) {
- var pattern = "";
- var isWordToken = false;
- term.replace(/,\s*/g, ", ").trim().split(/\s+/).forEach(function(w, index) {
- if (index > 0) {
- // whitespace between identifiers is significant
- pattern += (isWordToken && /^\w/.test(w)) ? "\\s+" : "\\s*";
- }
- var tokens = w.split(/(?=[A-Z,.()<>[\/])/);
- for (var i = 0; i < tokens.length; i++) {
- var s = tokens[i];
- if (s === "") {
- continue;
- }
- pattern += $.ui.autocomplete.escapeRegex(s);
- isWordToken = /\w$/.test(s);
- if (isWordToken) {
- pattern += "([a-z0-9_$<>\\[\\]]*?)";
- }
- }
- });
- return pattern;
-}
-function createMatcher(pattern, flags) {
- var isCamelCase = /[A-Z]/.test(pattern);
- return new RegExp(pattern, flags + (isCamelCase ? "" : "i"));
-}
-var watermark = 'Search';
-$(function() {
- var search = $("#search-input");
- var reset = $("#reset-button");
- search.val('');
- search.prop("disabled", false);
- reset.prop("disabled", false);
- search.val(watermark).addClass('watermark');
- search.blur(function() {
- if ($(this).val().length === 0) {
- $(this).val(watermark).addClass('watermark');
- }
- });
- search.on('click keydown paste', function() {
- if ($(this).val() === watermark) {
- $(this).val('').removeClass('watermark');
- }
- });
- reset.click(function() {
- search.val('').focus();
- });
- search.focus()[0].setSelectionRange(0, 0);
-});
-$.widget("custom.catcomplete", $.ui.autocomplete, {
- _create: function() {
- this._super();
- this.widget().menu("option", "items", "> :not(.ui-autocomplete-category)");
- },
- _renderMenu: function(ul, items) {
- var rMenu = this;
- var currentCategory = "";
- rMenu.menu.bindings = $();
- $.each(items, function(index, item) {
- var li;
- if (item.category && item.category !== currentCategory) {
- ul.append("
-
-
-
-
-
-
-
diff --git a/docs/coverage/js/highlight.pack.js b/docs/coverage/js/highlight.pack.js
deleted file mode 100644
index 9d27897..0000000
--- a/docs/coverage/js/highlight.pack.js
+++ /dev/null
@@ -1 +0,0 @@
-var hljs=new function(){function l(o){return o.replace(/&/gm,"&").replace(//gm,">")}function b(p){for(var o=p.firstChild;o;o=o.nextSibling){if(o.nodeName=="CODE"){return o}if(!(o.nodeType==3&&o.nodeValue.match(/\s+/))){break}}}function h(p,o){return Array.prototype.map.call(p.childNodes,function(q){if(q.nodeType==3){return o?q.nodeValue.replace(/\n/g,""):q.nodeValue}if(q.nodeName=="BR"){return"\n"}return h(q,o)}).join("")}function a(q){var p=(q.className+" "+q.parentNode.className).split(/\s+/);p=p.map(function(r){return r.replace(/^language-/,"")});for(var o=0;o"}while(x.length||v.length){var u=t().splice(0,1)[0];y+=l(w.substr(p,u.offset-p));p=u.offset;if(u.event=="start"){y+=s(u.node);r.push(u.node)}else{if(u.event=="stop"){var o,q=r.length;do{q--;o=r[q];y+=(""+o.nodeName.toLowerCase()+">")}while(o!=u.node);r.splice(q,1);while(q'+L[0]+""}else{r+=L[0]}N=A.lR.lastIndex;L=A.lR.exec(K)}return r+K.substr(N)}function z(){if(A.sL&&!e[A.sL]){return l(w)}var r=A.sL?d(A.sL,w):g(w);if(A.r>0){v+=r.keyword_count;B+=r.r}return''+r.value+""}function J(){return A.sL!==undefined?z():G()}function I(L,r){var K=L.cN?'':"";if(L.rB){x+=K;w=""}else{if(L.eB){x+=l(r)+K;w=""}else{x+=K;w=r}}A=Object.create(L,{parent:{value:A}});B+=L.r}function C(K,r){w+=K;if(r===undefined){x+=J();return 0}var L=o(r,A);if(L){x+=J();I(L,r);return L.rB?0:r.length}var M=s(A,r);if(M){if(!(M.rE||M.eE)){w+=r}x+=J();do{if(A.cN){x+=""}A=A.parent}while(A!=M.parent);if(M.eE){x+=l(r)}w="";if(M.starts){I(M.starts,"")}return M.rE?0:r.length}if(t(r,A)){throw"Illegal"}w+=r;return r.length||1}var F=e[D];f(F);var A=F;var w="";var B=0;var v=0;var x="";try{var u,q,p=0;while(true){A.t.lastIndex=p;u=A.t.exec(E);if(!u){break}q=C(E.substr(p,u.index-p),u[0]);p=u.index+q}C(E.substr(p));return{r:B,keyword_count:v,value:x,language:D}}catch(H){if(H=="Illegal"){return{r:0,keyword_count:0,value:l(E)}}else{throw H}}}function g(s){var o={keyword_count:0,r:0,value:l(s)};var q=o;for(var p in e){if(!e.hasOwnProperty(p)){continue}var r=d(p,s);r.language=p;if(r.keyword_count+r.r>q.keyword_count+q.r){q=r}if(r.keyword_count+r.r>o.keyword_count+o.r){q=o;o=r}}if(q.language){o.second_best=q}return o}function i(q,p,o){if(p){q=q.replace(/^((<[^>]+>|\t)+)/gm,function(r,v,u,t){return v.replace(/\t/g,p)})}if(o){q=q.replace(/\n/g," ")}return q}function m(r,u,p){var v=h(r,p);var t=a(r);if(t=="no-highlight"){return}var w=t?d(t,v):g(v);t=w.language;var o=c(r);if(o.length){var q=document.createElement("pre");q.innerHTML=w.value;w.value=j(o,c(q),v)}w.value=i(w.value,u,p);var s=r.className;if(!s.match("(\\s|^)(language-)?"+t+"(\\s|$)")){s=s?(s+" "+t):t}r.innerHTML=w.value;r.className=s;r.result={language:t,kw:w.keyword_count,re:w.r};if(w.second_best){r.second_best={language:w.second_best.language,kw:w.second_best.keyword_count,re:w.second_best.r}}}function n(){if(n.called){return}n.called=true;Array.prototype.map.call(document.getElementsByTagName("pre"),b).filter(Boolean).forEach(function(o){m(o,hljs.tabReplace)})}function k(){window.addEventListener("DOMContentLoaded",n,false);window.addEventListener("load",n,false)}var e={};this.LANGUAGES=e;this.highlight=d;this.highlightAuto=g;this.fixMarkup=i;this.highlightBlock=m;this.initHighlighting=n;this.initHighlightingOnLoad=k;this.IR="[a-zA-Z][a-zA-Z0-9_]*";this.UIR="[a-zA-Z_][a-zA-Z0-9_]*";this.NR="\\b\\d+(\\.\\d+)?";this.CNR="(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)";this.BNR="\\b(0b[01]+)";this.RSR="!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|\\.|-|-=|/|/=|:|;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~";this.BE={b:"\\\\[\\s\\S]",r:0};this.ASM={cN:"string",b:"'",e:"'",i:"\\n",c:[this.BE],r:0};this.QSM={cN:"string",b:'"',e:'"',i:"\\n",c:[this.BE],r:0};this.CLCM={cN:"comment",b:"//",e:"$"};this.CBLCLM={cN:"comment",b:"/\\*",e:"\\*/"};this.HCM={cN:"comment",b:"#",e:"$"};this.NM={cN:"number",b:this.NR,r:0};this.CNM={cN:"number",b:this.CNR,r:0};this.BNM={cN:"number",b:this.BNR,r:0};this.inherit=function(q,r){var o={};for(var p in q){o[p]=q[p]}if(r){for(var p in r){o[p]=r[p]}}return o}}();hljs.LANGUAGES.actionscript=function(a){var d="[a-zA-Z_$][a-zA-Z0-9_$]*";var c="([*]|[a-zA-Z_$][a-zA-Z0-9_$]*)";var e={cN:"rest_arg",b:"[.]{3}",e:d,r:10};var b={cN:"title",b:d};return{k:{keyword:"as break case catch class const continue default delete do dynamic each else extends final finally for function get if implements import in include instanceof interface internal is namespace native new override package private protected public return set static super switch this throw try typeof use var void while with",literal:"true false null undefined"},c:[a.ASM,a.QSM,a.CLCM,a.CBLCLM,a.CNM,{cN:"package",bWK:true,e:"{",k:"package",c:[b]},{cN:"class",bWK:true,e:"{",k:"class interface",c:[{bWK:true,k:"extends implements"},b]},{cN:"preprocessor",bWK:true,e:";",k:"import include"},{cN:"function",bWK:true,e:"[{;]",k:"function",i:"\\S",c:[b,{cN:"params",b:"\\(",e:"\\)",c:[a.ASM,a.QSM,a.CLCM,a.CBLCLM,e]},{cN:"type",b:":",e:c,r:10}]}]}}(hljs);hljs.LANGUAGES.bash=function(a){var g="true false";var e="if then else elif fi for break continue while in do done echo exit return set declare";var c={cN:"variable",b:"\\$[a-zA-Z0-9_#]+"};var b={cN:"variable",b:"\\${([^}]|\\\\})+}"};var h={cN:"string",b:'"',e:'"',i:"\\n",c:[a.BE,c,b],r:0};var d={cN:"string",b:"'",e:"'",c:[{b:"''"}],r:0};var f={cN:"test_condition",b:"",e:"",c:[h,d,c,b],k:{literal:g},r:0};return{k:{keyword:e,literal:g},c:[{cN:"shebang",b:"(#!\\/bin\\/bash)|(#!\\/bin\\/sh)",r:10},c,b,a.HCM,h,d,a.inherit(f,{b:"\\[ ",e:" \\]",r:0}),a.inherit(f,{b:"\\[\\[ ",e:" \\]\\]"})]}}(hljs);hljs.LANGUAGES.coffeescript=function(c){var b={keyword:"in if for while finally new do return else break catch instanceof throw try this switch continue typeof delete debugger super then unless until loop of by when and or is isnt not",literal:"true false null undefined yes no on off ",reserved:"case default function var void with const let enum export import native __hasProp __extends __slice __bind __indexOf"};var a="[A-Za-z$_][0-9A-Za-z$_]*";var e={cN:"title",b:a};var d={cN:"subst",b:"#\\{",e:"}",k:b,c:[c.BNM,c.CNM]};return{k:b,c:[c.BNM,c.CNM,c.ASM,{cN:"string",b:'"""',e:'"""',c:[c.BE,d]},{cN:"string",b:'"',e:'"',c:[c.BE,d],r:0},{cN:"comment",b:"###",e:"###"},c.HCM,{cN:"regexp",b:"///",e:"///",c:[c.HCM]},{cN:"regexp",b:"//[gim]*"},{cN:"regexp",b:"/\\S(\\\\.|[^\\n])*/[gim]*"},{b:"`",e:"`",eB:true,eE:true,sL:"javascript"},{cN:"function",b:a+"\\s*=\\s*(\\(.+\\))?\\s*[-=]>",rB:true,c:[e,{cN:"params",b:"\\(",e:"\\)"}]},{cN:"class",bWK:true,k:"class",e:"$",i:":",c:[{bWK:true,k:"extends",eW:true,i:":",c:[e]},e]},{cN:"property",b:"@"+a}]}}(hljs);hljs.LANGUAGES.cpp=function(a){var b={keyword:"false int float while private char catch export virtual operator sizeof dynamic_cast|10 typedef const_cast|10 const struct for static_cast|10 union namespace unsigned long throw volatile static protected bool template mutable if public friend do return goto auto void enum else break new extern using true class asm case typeid short reinterpret_cast|10 default double register explicit signed typename try this switch continue wchar_t inline delete alignof char16_t char32_t constexpr decltype noexcept nullptr static_assert thread_local restrict _Bool complex",built_in:"std string cin cout cerr clog stringstream istringstream ostringstream auto_ptr deque list queue stack vector map set bitset multiset multimap unordered_set unordered_map unordered_multiset unordered_multimap array shared_ptr"};return{k:b,i:"",c:[a.CLCM,a.CBLCLM,a.QSM,{cN:"string",b:"'\\\\?.",e:"'",i:"."},{cN:"number",b:"\\b(\\d+(\\.\\d*)?|\\.\\d+)(u|U|l|L|ul|UL|f|F)"},a.CNM,{cN:"preprocessor",b:"#",e:"$"},{cN:"stl_container",b:"\\b(deque|list|queue|stack|vector|map|set|bitset|multiset|multimap|unordered_map|unordered_set|unordered_multiset|unordered_multimap|array)\\s*<",e:">",k:b,r:10,c:["self"]}]}}(hljs);hljs.LANGUAGES.cs=function(a){return{k:"abstract as base bool break byte case catch char checked class const continue decimal default delegate do double else enum event explicit extern false finally fixed float for foreach goto if implicit in int interface internal is lock long namespace new null object operator out override params private protected public readonly ref return sbyte sealed short sizeof stackalloc static string struct switch this throw true try typeof uint ulong unchecked unsafe ushort using virtual volatile void while ascending descending from get group into join let orderby partial select set value var where yield",c:[{cN:"comment",b:"///",e:"$",rB:true,c:[{cN:"xmlDocTag",b:"///|"},{cN:"xmlDocTag",b:"?",e:">"}]},a.CLCM,a.CBLCLM,{cN:"preprocessor",b:"#",e:"$",k:"if else elif endif define undef warning error line region endregion pragma checksum"},{cN:"string",b:'@"',e:'"',c:[{b:'""'}]},a.ASM,a.QSM,a.CNM]}}(hljs);hljs.LANGUAGES.css=function(a){var b={cN:"function",b:a.IR+"\\(",e:"\\)",c:[a.NM,a.ASM,a.QSM]};return{cI:true,i:"[=/|']",c:[a.CBLCLM,{cN:"id",b:"\\#[A-Za-z0-9_-]+"},{cN:"class",b:"\\.[A-Za-z0-9_-]+",r:0},{cN:"attr_selector",b:"\\[",e:"\\]",i:"$"},{cN:"pseudo",b:":(:)?[a-zA-Z0-9\\_\\-\\+\\(\\)\\\"\\']+"},{cN:"at_rule",b:"@(font-face|page)",l:"[a-z-]+",k:"font-face page"},{cN:"at_rule",b:"@",e:"[{;]",eE:true,k:"import page media charset",c:[b,a.ASM,a.QSM,a.NM]},{cN:"tag",b:a.IR,r:0},{cN:"rules",b:"{",e:"}",i:"[^\\s]",r:0,c:[a.CBLCLM,{cN:"rule",b:"[^\\s]",rB:true,e:";",eW:true,c:[{cN:"attribute",b:"[A-Z\\_\\.\\-]+",e:":",eE:true,i:"[^\\s]",starts:{cN:"value",eW:true,eE:true,c:[b,a.NM,a.QSM,a.ASM,a.CBLCLM,{cN:"hexcolor",b:"\\#[0-9A-F]+"},{cN:"important",b:"!important"}]}}]}]}]}}(hljs);hljs.LANGUAGES.diff=function(a){return{c:[{cN:"chunk",b:"^\\@\\@ +\\-\\d+,\\d+ +\\+\\d+,\\d+ +\\@\\@$",r:10},{cN:"chunk",b:"^\\*\\*\\* +\\d+,\\d+ +\\*\\*\\*\\*$",r:10},{cN:"chunk",b:"^\\-\\-\\- +\\d+,\\d+ +\\-\\-\\-\\-$",r:10},{cN:"header",b:"Index: ",e:"$"},{cN:"header",b:"=====",e:"=====$"},{cN:"header",b:"^\\-\\-\\-",e:"$"},{cN:"header",b:"^\\*{3} ",e:"$"},{cN:"header",b:"^\\+\\+\\+",e:"$"},{cN:"header",b:"\\*{5}",e:"\\*{5}$"},{cN:"addition",b:"^\\+",e:"$"},{cN:"deletion",b:"^\\-",e:"$"},{cN:"change",b:"^\\!",e:"$"}]}}(hljs);hljs.LANGUAGES.http=function(a){return{i:"\\S",c:[{cN:"status",b:"^HTTP/[0-9\\.]+",e:"$",c:[{cN:"number",b:"\\b\\d{3}\\b"}]},{cN:"request",b:"^[A-Z]+ (.*?) HTTP/[0-9\\.]+$",rB:true,e:"$",c:[{cN:"string",b:" ",e:" ",eB:true,eE:true}]},{cN:"attribute",b:"^\\w",e:": ",eE:true,i:"\\n|\\s|=",starts:{cN:"string",e:"$"}},{b:"\\n\\n",starts:{sL:"",eW:true}}]}}(hljs);hljs.LANGUAGES.ini=function(a){return{cI:true,i:"[^\\s]",c:[{cN:"comment",b:";",e:"$"},{cN:"title",b:"^\\[",e:"\\]"},{cN:"setting",b:"^[a-z0-9\\[\\]_-]+[ \\t]*=[ \\t]*",e:"$",c:[{cN:"value",eW:true,k:"on off true false yes no",c:[a.QSM,a.NM]}]}]}}(hljs);hljs.LANGUAGES.java=function(a){return{k:"false synchronized int abstract float private char boolean static null if const for true while long throw strictfp finally protected import native final return void enum else break transient new catch instanceof byte super volatile case assert short package default double public try this switch continue throws",c:[{cN:"javadoc",b:"/\\*\\*",e:"\\*/",c:[{cN:"javadoctag",b:"@[A-Za-z]+"}],r:10},a.CLCM,a.CBLCLM,a.ASM,a.QSM,{cN:"class",bWK:true,e:"{",k:"class interface",i:":",c:[{bWK:true,k:"extends implements",r:10},{cN:"title",b:a.UIR}]},a.CNM,{cN:"annotation",b:"@[A-Za-z]+"}]}}(hljs);hljs.LANGUAGES.javascript=function(a){return{k:{keyword:"in if for while finally var new function do return void else break catch instanceof with throw case default try this switch continue typeof delete let yield const",literal:"true false null undefined NaN Infinity"},c:[a.ASM,a.QSM,a.CLCM,a.CBLCLM,a.CNM,{b:"("+a.RSR+"|\\b(case|return|throw)\\b)\\s*",k:"return throw case",c:[a.CLCM,a.CBLCLM,{cN:"regexp",b:"/",e:"/[gim]*",i:"\\n",c:[{b:"\\\\/"}]},{b:"<",e:">;",sL:"xml"}],r:0},{cN:"function",bWK:true,e:"{",k:"function",c:[{cN:"title",b:"[A-Za-z$_][0-9A-Za-z$_]*"},{cN:"params",b:"\\(",e:"\\)",c:[a.CLCM,a.CBLCLM],i:"[\"'\\(]"}],i:"\\[|%"}]}}(hljs);hljs.LANGUAGES.json=function(a){var e={literal:"true false null"};var d=[a.QSM,a.CNM];var c={cN:"value",e:",",eW:true,eE:true,c:d,k:e};var b={b:"{",e:"}",c:[{cN:"attribute",b:'\\s*"',e:'"\\s*:\\s*',eB:true,eE:true,c:[a.BE],i:"\\n",starts:c}],i:"\\S"};var f={b:"\\[",e:"\\]",c:[a.inherit(c,{cN:null})],i:"\\S"};d.splice(d.length,0,b,f);return{c:d,k:e,i:"\\S"}}(hljs);hljs.LANGUAGES.kotlin=function(a){var b={cN:"string",b:'u?r?"""',e:'"""',r:10};return{defaultMode:{k:"package import as type class trait by where object this val var fun get set namespace if else try catch finally for while do super is throw return continue break when in abstract final enum open attribute override private protected public internal out lazy ref",c:[{cN:"javadoc",b:"/\\*\\*",e:"\\*/",c:[{cN:"javadoctag",b:"@[A-Za-z]+"}],r:10},a.CLCM,a.CBLCLM,a.ASM,a.QSM,b,{cN:"class",b:"((annotation )?class |trait )",e:"({|$)",k:"class trait",c:[{cN:"title",b:a.UIR},{cN:"params",b:"\\(",e:"\\)",c:[a.ASM,a.QSM,b]}]},a.CNM]}}}(hljs);hljs.LANGUAGES.xml=function(a){var c="[A-Za-z0-9\\._:-]+";var b={eW:true,c:[{cN:"attribute",b:c,r:0},{b:'="',rB:true,e:'"',c:[{cN:"value",b:'"',eW:true}]},{b:"='",rB:true,e:"'",c:[{cN:"value",b:"'",eW:true}]},{b:"=",c:[{cN:"value",b:"[^\\s/>]+"}]}]};return{cI:true,c:[{cN:"pi",b:"<\\?",e:"\\?>",r:10},{cN:"doctype",b:"",r:10,c:[{b:"\\[",e:"\\]"}]},{cN:"comment",b:"",r:10},{cN:"cdata",b:"<\\!\\[CDATA\\[",e:"\\]\\]>",r:10},{cN:"tag",b:"",rE:true,sL:"css"}},{cN:"tag",b:"
-
-
-
-
-
-
-Current scope: all classes
- |
-lv.id.jc.algorithm.graph
-
-
Coverage Summary for Package: lv.id.jc.algorithm.graph