-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
consolidated implementation, prepared release 1.2.0 (#5)
* consolidated implementation between .NET standard and core by using the IndexRange class * prepared release 1.2.0
- Loading branch information
Showing
14 changed files
with
605 additions
and
66 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,207 @@ | ||
# Remove the line below if you want to inherit .editorconfig settings from higher directories | ||
root = true | ||
|
||
# C# files | ||
[*.cs] | ||
|
||
#### Core EditorConfig Options #### | ||
|
||
# Indentation and spacing | ||
indent_size = 4 | ||
indent_style = space | ||
tab_width = 4 | ||
|
||
# New line preferences | ||
end_of_line = crlf | ||
insert_final_newline = true | ||
|
||
#### .NET Coding Conventions #### | ||
|
||
# Organize usings | ||
dotnet_separate_import_directive_groups = false | ||
dotnet_sort_system_directives_first = false | ||
file_header_template = Copyright (c) Sebastian Fischer. All Rights Reserved.\nLicensed under the MIT License. | ||
|
||
# this. and Me. preferences | ||
dotnet_style_qualification_for_event = true:suggestion | ||
dotnet_style_qualification_for_field = true | ||
dotnet_style_qualification_for_method = true:suggestion | ||
dotnet_style_qualification_for_property = true:suggestion | ||
|
||
# Language keywords vs BCL types preferences | ||
dotnet_style_predefined_type_for_locals_parameters_members = true | ||
dotnet_style_predefined_type_for_member_access = true | ||
|
||
# Parentheses preferences | ||
dotnet_style_parentheses_in_arithmetic_binary_operators = always_for_clarity | ||
dotnet_style_parentheses_in_other_binary_operators = always_for_clarity | ||
dotnet_style_parentheses_in_other_operators = never_if_unnecessary | ||
dotnet_style_parentheses_in_relational_binary_operators = always_for_clarity | ||
|
||
# Modifier preferences | ||
dotnet_style_require_accessibility_modifiers = for_non_interface_members | ||
|
||
# Expression-level preferences | ||
dotnet_style_coalesce_expression = true | ||
dotnet_style_collection_initializer = true:silent | ||
dotnet_style_explicit_tuple_names = true | ||
dotnet_style_null_propagation = true | ||
dotnet_style_object_initializer = true:silent | ||
dotnet_style_operator_placement_when_wrapping = beginning_of_line | ||
dotnet_style_prefer_auto_properties = true:suggestion | ||
dotnet_style_prefer_compound_assignment = true | ||
dotnet_style_prefer_conditional_expression_over_assignment = true | ||
dotnet_style_prefer_conditional_expression_over_return = true | ||
dotnet_style_prefer_inferred_anonymous_type_member_names = true | ||
dotnet_style_prefer_inferred_tuple_names = true | ||
dotnet_style_prefer_is_null_check_over_reference_equality_method = true | ||
dotnet_style_prefer_simplified_boolean_expressions = true | ||
dotnet_style_prefer_simplified_interpolation = true | ||
|
||
# Field preferences | ||
dotnet_style_readonly_field = true | ||
|
||
# Parameter preferences | ||
dotnet_code_quality_unused_parameters = all | ||
|
||
# Suppression preferences | ||
dotnet_remove_unnecessary_suppression_exclusions = none | ||
|
||
#### C# Coding Conventions #### | ||
|
||
# var preferences | ||
csharp_style_var_elsewhere = false:suggestion | ||
csharp_style_var_for_built_in_types = false:suggestion | ||
csharp_style_var_when_type_is_apparent = false:suggestion | ||
|
||
# Expression-bodied members | ||
csharp_style_expression_bodied_accessors = true | ||
csharp_style_expression_bodied_constructors = false | ||
csharp_style_expression_bodied_indexers = true | ||
csharp_style_expression_bodied_lambdas = true | ||
csharp_style_expression_bodied_local_functions = false | ||
csharp_style_expression_bodied_methods = false | ||
csharp_style_expression_bodied_operators = false | ||
csharp_style_expression_bodied_properties = true | ||
|
||
# Pattern matching preferences | ||
csharp_style_pattern_matching_over_as_with_null_check = true | ||
csharp_style_pattern_matching_over_is_with_cast_check = true | ||
csharp_style_prefer_not_pattern = true | ||
csharp_style_prefer_pattern_matching = true | ||
csharp_style_prefer_switch_expression = false:silent | ||
|
||
# Null-checking preferences | ||
csharp_style_conditional_delegate_call = true | ||
|
||
# Modifier preferences | ||
csharp_prefer_static_local_function = true | ||
csharp_preferred_modifier_order = public,private,protected,internal,static,extern,new,virtual,abstract,sealed,override,readonly,unsafe,volatile,async | ||
|
||
# Code-block preferences | ||
csharp_prefer_braces = true:suggestion | ||
csharp_prefer_simple_using_statement = false | ||
|
||
# Expression-level preferences | ||
csharp_prefer_simple_default_expression = true | ||
csharp_style_deconstructed_variable_declaration = true | ||
csharp_style_implicit_object_creation_when_type_is_apparent = true | ||
csharp_style_inlined_variable_declaration = true | ||
csharp_style_pattern_local_over_anonymous_function = true | ||
csharp_style_prefer_index_operator = true | ||
csharp_style_prefer_range_operator = true | ||
csharp_style_throw_expression = true | ||
csharp_style_unused_value_assignment_preference = discard_variable | ||
csharp_style_unused_value_expression_statement_preference = discard_variable | ||
|
||
# 'using' directive preferences | ||
csharp_using_directive_placement = outside_namespace | ||
|
||
#### C# Formatting Rules #### | ||
|
||
# New line preferences | ||
csharp_new_line_before_catch = true | ||
csharp_new_line_before_else = true | ||
csharp_new_line_before_finally = true | ||
csharp_new_line_before_members_in_anonymous_types = true | ||
csharp_new_line_before_members_in_object_initializers = true | ||
csharp_new_line_before_open_brace = all | ||
csharp_new_line_between_query_expression_clauses = true | ||
|
||
# Indentation preferences | ||
csharp_indent_block_contents = true | ||
csharp_indent_braces = false | ||
csharp_indent_case_contents = true | ||
csharp_indent_case_contents_when_block = true | ||
csharp_indent_labels = one_less_than_current | ||
csharp_indent_switch_labels = true | ||
|
||
# Space preferences | ||
csharp_space_after_cast = false | ||
csharp_space_after_colon_in_inheritance_clause = true | ||
csharp_space_after_comma = true | ||
csharp_space_after_dot = false | ||
csharp_space_after_keywords_in_control_flow_statements = true | ||
csharp_space_after_semicolon_in_for_statement = true | ||
csharp_space_around_binary_operators = before_and_after | ||
csharp_space_around_declaration_statements = false | ||
csharp_space_before_colon_in_inheritance_clause = true | ||
csharp_space_before_comma = false | ||
csharp_space_before_dot = false | ||
csharp_space_before_open_square_brackets = false | ||
csharp_space_before_semicolon_in_for_statement = false | ||
csharp_space_between_empty_square_brackets = false | ||
csharp_space_between_method_call_empty_parameter_list_parentheses = false | ||
csharp_space_between_method_call_name_and_opening_parenthesis = false | ||
csharp_space_between_method_call_parameter_list_parentheses = false | ||
csharp_space_between_method_declaration_empty_parameter_list_parentheses = false | ||
csharp_space_between_method_declaration_name_and_open_parenthesis = false | ||
csharp_space_between_method_declaration_parameter_list_parentheses = false | ||
csharp_space_between_parentheses = false | ||
csharp_space_between_square_brackets = false | ||
|
||
# Wrapping preferences | ||
csharp_preserve_single_line_blocks = true | ||
csharp_preserve_single_line_statements = true | ||
|
||
#### Naming styles #### | ||
|
||
# Naming rules | ||
|
||
dotnet_naming_rule.interface_should_be_begins_with_i.severity = suggestion | ||
dotnet_naming_rule.interface_should_be_begins_with_i.symbols = interface | ||
dotnet_naming_rule.interface_should_be_begins_with_i.style = begins_with_i | ||
|
||
dotnet_naming_rule.types_should_be_pascal_case.severity = suggestion | ||
dotnet_naming_rule.types_should_be_pascal_case.symbols = types | ||
dotnet_naming_rule.types_should_be_pascal_case.style = pascal_case | ||
|
||
dotnet_naming_rule.non_field_members_should_be_pascal_case.severity = suggestion | ||
dotnet_naming_rule.non_field_members_should_be_pascal_case.symbols = non_field_members | ||
dotnet_naming_rule.non_field_members_should_be_pascal_case.style = pascal_case | ||
|
||
# Symbol specifications | ||
|
||
dotnet_naming_symbols.interface.applicable_kinds = interface | ||
dotnet_naming_symbols.interface.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected | ||
dotnet_naming_symbols.interface.required_modifiers = | ||
|
||
dotnet_naming_symbols.types.applicable_kinds = class, struct, interface, enum | ||
dotnet_naming_symbols.types.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected | ||
dotnet_naming_symbols.types.required_modifiers = | ||
|
||
dotnet_naming_symbols.non_field_members.applicable_kinds = property, event, method | ||
dotnet_naming_symbols.non_field_members.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected | ||
dotnet_naming_symbols.non_field_members.required_modifiers = | ||
|
||
# Naming styles | ||
|
||
dotnet_naming_style.pascal_case.required_prefix = | ||
dotnet_naming_style.pascal_case.required_suffix = | ||
dotnet_naming_style.pascal_case.word_separator = | ||
dotnet_naming_style.pascal_case.capitalization = pascal_case | ||
|
||
dotnet_naming_style.begins_with_i.required_prefix = I | ||
dotnet_naming_style.begins_with_i.required_suffix = | ||
dotnet_naming_style.begins_with_i.word_separator = | ||
dotnet_naming_style.begins_with_i.capitalization = pascal_case |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,96 @@ | ||
// Copyright (c) Sebastian Fischer. All Rights Reserved. | ||
// Licensed under the MIT License. | ||
|
||
using System.Collections.Generic; | ||
using System.Linq; | ||
|
||
namespace spkl.Diffs | ||
{ | ||
/// <summary> | ||
/// Encapsulates a range of indexes that can be enumerated. | ||
/// </summary> | ||
public readonly ref struct IndexRange | ||
{ | ||
private readonly int start; | ||
|
||
private readonly int length; | ||
|
||
/// <summary> | ||
/// The start of the range, i.e. the first index. | ||
/// </summary> | ||
public int Start => this.start; | ||
|
||
/// <summary> | ||
/// The length of the range, i.e. the number of indexes in the range. | ||
/// </summary> | ||
public int Length => this.length; | ||
|
||
/// <summary> | ||
/// Creates a new instance with the specified <paramref name="start"/> and <paramref name="length"/>. | ||
/// </summary> | ||
public IndexRange(int start, int length) | ||
{ | ||
this.start = start; | ||
this.length = length; | ||
} | ||
|
||
/// <summary> | ||
/// Gets the index at the specified offset. | ||
/// Offset '0' equals <see cref="Start"/>. | ||
/// </summary> | ||
/// <returns>The offset of the index to get.</returns> | ||
public int this[int offset] | ||
{ | ||
get => offset + this.start; | ||
} | ||
|
||
/// <summary> | ||
/// Creates a new <see cref="IndexRange"/> by trimming <paramref name="count"/> number of indexes from the start of this instance. | ||
/// </summary> | ||
/// <param name="count">Number of indexes to trim from the start.</param> | ||
/// <returns>A new instance with a smaller range.</returns> | ||
public IndexRange TrimStart(int count) | ||
{ | ||
return new IndexRange(this.start + count, this.length - count); | ||
} | ||
|
||
/// <summary> | ||
/// Creates a new <see cref="IndexRange"/> by trimming <paramref name="count"/> number of indexes from the end of this instance. | ||
/// </summary> | ||
/// <param name="count">Number of indexes to trim from the end.</param> | ||
/// <returns>A new instance with a smaller range.</returns> | ||
public IndexRange TrimEnd(int count) | ||
{ | ||
return new IndexRange(this.start, this.length - count); | ||
} | ||
|
||
/// <summary> | ||
/// Creates a new <see cref="IndexRange"/> by specifying the indexes of the indexes to start and end with. | ||
/// </summary> | ||
/// <param name="startIndex">The index of the index in this range to start the new range with.</param> | ||
/// <param name="endIndexExclusive">The index of the index in this range that is the first one not contained in the new range.</param> | ||
/// <returns>A new instance with a smaller range.</returns> | ||
public IndexRange Range(int startIndex, int endIndexExclusive) | ||
{ | ||
return new IndexRange(this.start + startIndex, endIndexExclusive - startIndex); | ||
} | ||
|
||
/// <summary> | ||
/// Creates a new <see cref="IndexRange"/> that starts with the index that is at index <paramref name="startIndex"/> of this instance. | ||
/// The last index of the new instance is the same as in this instance. | ||
/// This is equal to calling <see cref="TrimStart(int)"/>. | ||
/// </summary> | ||
/// <param name="startIndex">The index of the index in this range to start the new range with.</param> | ||
/// <returns>A new instance with a smaller range.</returns> | ||
public IndexRange Range(int startIndex) | ||
{ | ||
return this.TrimStart(startIndex); | ||
} | ||
|
||
/// <inheritdoc cref="IEnumerable{T}.GetEnumerator"/> | ||
public IEnumerator<int> GetEnumerator() | ||
{ | ||
return Enumerable.Range(this.start, this.length).GetEnumerator(); | ||
} | ||
} | ||
} |
Oops, something went wrong.