package SPVM::Point;

1;

=head1 Name

SPVM::Point - Point

=head1 Usage

  use Point;
  
  my $point = Point->new;
  my $point = Point->new(1, 2);

  $point->set_x(1);
  $point->set_y(2);
  
  my $x = $point->x;
  my $y = $point->y;
  
  my $point_string = $point->to_string;

=head1 Description

C<Point> is a class for a point.

=head1 Interfaces

C<Point> class has the following interfaces.

=over 2

=item * L<Stringable|SPVM::Stringable>

=item * L<Cloneable|SPVM::Cloneable>

=back

=head1 Fields

=head2 x

  has x : rw protected int;

C<x>.

=head2 y

  has y : rw protected int;

C<y>.

=head1 Class Methods

=head2 new

  static method new : Point ($x = 0 : int, $y = 0 : int);

Create a new C<Point> object with $x and $y.

=head1 Instance Methods

=head2 init

  protected method init : Point ($x = 0 : int, $y = 0 : int)

Initializes L</"x"> and L</"y">.

=head2 clear

  method clear : void ();

Sets L</"x"> and L</"y"> to 0.

=head2 clone

  method clone : Point ();

Creates a new C<Point> object that clones myself.

=head2 to_string

  method to_string : string ();

Stringifies the C<Point> object as the following format.

  (1,2)

=head1 Copyright & License

Copyright (c) 2023 Yuki Kimoto

MIT License