mirror of
https://github.com/RGBCube/serenity
synced 2025-05-27 23:35:08 +00:00

Commit 6a6f19a72
broke the cell position display in the top left of the
Spreadsheet window and the title of the cell type dialog, causing the
application to crash when interacting with cells beyond column FE.
75 lines
2.2 KiB
C++
75 lines
2.2 KiB
C++
/*
|
|
* Copyright (c) 2020, the SerenityOS developers.
|
|
* All rights reserved.
|
|
*
|
|
* Redistribution and use in source and binary forms, with or without
|
|
* modification, are permitted provided that the following conditions are met:
|
|
*
|
|
* 1. Redistributions of source code must retain the above copyright notice, this
|
|
* list of conditions and the following disclaimer.
|
|
*
|
|
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
|
* this list of conditions and the following disclaimer in the documentation
|
|
* and/or other materials provided with the distribution.
|
|
*
|
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
|
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
|
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
|
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
|
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include <AK/String.h>
|
|
#include <AK/Types.h>
|
|
#include <AK/URL.h>
|
|
|
|
namespace Spreadsheet {
|
|
|
|
class Sheet;
|
|
|
|
struct Position {
|
|
Position() = default;
|
|
|
|
Position(size_t column, size_t row)
|
|
: column(column)
|
|
, row(row)
|
|
, m_hash(pair_int_hash(column, row))
|
|
{
|
|
}
|
|
|
|
ALWAYS_INLINE u32 hash() const
|
|
{
|
|
if (m_hash == 0)
|
|
return m_hash = int_hash(column * 65537 + row);
|
|
|
|
return m_hash;
|
|
}
|
|
|
|
bool operator==(const Position& other) const
|
|
{
|
|
return row == other.row && column == other.column;
|
|
}
|
|
|
|
bool operator!=(const Position& other) const
|
|
{
|
|
return !(other == *this);
|
|
}
|
|
|
|
String to_cell_identifier(const Sheet& sheet) const;
|
|
URL to_url(const Sheet& sheet) const;
|
|
|
|
size_t column { 0 };
|
|
size_t row { 0 };
|
|
|
|
private:
|
|
mutable u32 m_hash { 0 };
|
|
};
|
|
|
|
}
|