Rename SawCut library to CutList.Core
Rename the core library project from SawCut to CutList.Core for consistent branding across the solution. This includes: - Rename project folder and .csproj file - Update namespace from SawCut to CutList.Core - Update all using statements and project references Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
97
CutList.Core/BinItem.cs
Normal file
97
CutList.Core/BinItem.cs
Normal file
@@ -0,0 +1,97 @@
|
||||
using System;
|
||||
|
||||
namespace CutList.Core
|
||||
{
|
||||
/// <summary>
|
||||
/// Represents an item to be placed in a bin.
|
||||
/// Enforces business rules for valid items.
|
||||
/// </summary>
|
||||
public class BinItem
|
||||
{
|
||||
private string _name;
|
||||
private double _length;
|
||||
|
||||
public BinItem(string name, double length)
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(name))
|
||||
throw new ArgumentException("Item name cannot be empty", nameof(name));
|
||||
|
||||
if (length <= 0)
|
||||
throw new ArgumentException("Item length must be greater than zero", nameof(length));
|
||||
|
||||
_name = name;
|
||||
_length = length;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Parameterless constructor for serialization only.
|
||||
/// Use the parameterized constructor for creating valid instances.
|
||||
/// </summary>
|
||||
public BinItem()
|
||||
{
|
||||
}
|
||||
|
||||
public string Name
|
||||
{
|
||||
get => _name;
|
||||
set
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(value))
|
||||
throw new ArgumentException("Item name cannot be empty", nameof(value));
|
||||
_name = value;
|
||||
}
|
||||
}
|
||||
|
||||
public double Length
|
||||
{
|
||||
get => _length;
|
||||
set
|
||||
{
|
||||
if (value <= 0)
|
||||
throw new ArgumentException("Item length must be greater than zero", nameof(value));
|
||||
_length = value;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Checks if this item can fit in the given available length.
|
||||
/// </summary>
|
||||
public bool CanFitIn(double availableLength)
|
||||
{
|
||||
return Length <= availableLength;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Checks if this item can fit in the given available length with spacing.
|
||||
/// </summary>
|
||||
public bool CanFitInWithSpacing(double availableLength, double spacing)
|
||||
{
|
||||
return Length + spacing <= availableLength;
|
||||
}
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
return $"{Name} ({Length}\")";
|
||||
}
|
||||
|
||||
public override bool Equals(object? obj)
|
||||
{
|
||||
if (obj is BinItem other)
|
||||
{
|
||||
return Name == other.Name && Length.IsEqualTo(other.Length);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public override int GetHashCode()
|
||||
{
|
||||
unchecked
|
||||
{
|
||||
int hash = 17;
|
||||
hash = hash * 23 + (Name?.GetHashCode() ?? 0);
|
||||
hash = hash * 23 + Length.GetHashCode();
|
||||
return hash;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user