Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Avoid boxing while unpacking flags #8882

Merged
merged 1 commit into from
Mar 7, 2021
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
34 changes: 20 additions & 14 deletions GitCommands/Git/GitItemStatus.cs
Original file line number Diff line number Diff line change
Expand Up @@ -65,13 +65,13 @@ public GitItemStatus(string name)

public bool IsTracked
{
get => _flags.HasFlag(Flags.IsTracked);
get => HasFlag(Flags.IsTracked);
set => SetFlag(value, Flags.IsTracked);
}

public bool IsDeleted
{
get => _flags.HasFlag(Flags.IsDeleted);
get => HasFlag(Flags.IsDeleted);
set => SetFlag(value, Flags.IsDeleted);
}

Expand All @@ -81,55 +81,55 @@ public bool IsDeleted
/// </summary>
public bool IsChanged
{
get => _flags.HasFlag(Flags.IsChanged);
get => HasFlag(Flags.IsChanged);
set => SetFlag(value, Flags.IsChanged);
}

public bool IsNew
{
get => _flags.HasFlag(Flags.IsNew);
get => HasFlag(Flags.IsNew);
set => SetFlag(value, Flags.IsNew);
}

public bool IsIgnored
{
get => _flags.HasFlag(Flags.IsIgnored);
get => HasFlag(Flags.IsIgnored);
set => SetFlag(value, Flags.IsIgnored);
}

public bool IsRenamed
{
get => _flags.HasFlag(Flags.IsRenamed);
get => HasFlag(Flags.IsRenamed);
set => SetFlag(value, Flags.IsRenamed);
}

public bool IsCopied
{
get => _flags.HasFlag(Flags.IsCopied);
get => HasFlag(Flags.IsCopied);
set => SetFlag(value, Flags.IsCopied);
}

public bool IsConflict
{
get => _flags.HasFlag(Flags.IsConflict);
get => HasFlag(Flags.IsConflict);
set => SetFlag(value, Flags.IsConflict);
}

public bool IsAssumeUnchanged
{
get => _flags.HasFlag(Flags.IsAssumeUnchanged);
get => HasFlag(Flags.IsAssumeUnchanged);
set => SetFlag(value, Flags.IsAssumeUnchanged);
}

public bool IsSkipWorktree
{
get => _flags.HasFlag(Flags.IsSkipWorktree);
get => HasFlag(Flags.IsSkipWorktree);
set => SetFlag(value, Flags.IsSkipWorktree);
}

public bool IsSubmodule
{
get => _flags.HasFlag(Flags.IsSubmodule);
get => HasFlag(Flags.IsSubmodule);
set => SetFlag(value, Flags.IsSubmodule);
}

Expand All @@ -139,7 +139,7 @@ public bool IsSubmodule
/// </summary>
public bool IsDirty
{
get => _flags.HasFlag(Flags.IsDirty);
get => HasFlag(Flags.IsDirty);
set => SetFlag(value, Flags.IsDirty);
}

Expand All @@ -149,7 +149,7 @@ public bool IsDirty
/// </remarks>
public bool IsStatusOnly
{
get => _flags.HasFlag(Flags.IsStatusOnly);
get => HasFlag(Flags.IsStatusOnly);
set => SetFlag(value, Flags.IsStatusOnly);
}

Expand All @@ -159,10 +159,16 @@ public bool IsStatusOnly
/// </remarks>
public bool IsRangeDiff
{
get => _flags.HasFlag(Flags.IsRangeDiff);
get => HasFlag(Flags.IsRangeDiff);
set => SetFlag(value, Flags.IsRangeDiff);
}

private bool HasFlag(Flags flags)
{
// NOTE Enum.HasFlag boxes its argument
return (flags & _flags) == flags;
}
Comment on lines +166 to +170
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

BTW: The name of the enum Flags is misleading. It should be in singular.
I can read this better:

Suggested change
private bool HasFlag(Flags flags)
{
// NOTE Enum.HasFlag boxes its argument
return (flags & _flags) == flags;
}
private bool HasFlag(Flags flag)
{
// NOTE Enum.HasFlag boxes its argument
return (_flags & flag) == flag;
}

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The logic works equally well with multiple flags. The type is a flags enum, and has a plural name.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The logic works equally well with multiple flags.

This was clear to me. But Enum.HasFlag uses only singular. And nothing else is used here.

Better readability (as in other recent PRs):

Suggested change
private bool HasFlag(Flags flags)
{
// NOTE Enum.HasFlag boxes its argument
return (flags & _flags) == flags;
}
private bool HasFlag(Flags flags)
{
// NOTE Enum.HasFlag boxes its argument
return (_flags & flags) == flags;
}


private void SetFlag(bool isSet, Flags flag)
{
if (isSet)
Expand Down