terminal/src/buffer/out/textBufferCellIterator.hpp
Dustin L. Howett eb2be374fd
Fix SA for Visual Studio 16.8 (#8551)
I added `enum class` to one thing and decided that that was quite enough
before disabling the `enum class` warning.

Looks like 16.8 made more map/vector operations noexcept, so we have to
re-annotate to remain compliant.
2020-12-11 05:04:30 +00:00

70 lines
2 KiB
C++

/*++
Copyright (c) Microsoft Corporation
Licensed under the MIT license.
Module Name:
- textBufferCellIterator.hpp
Abstract:
- This module abstracts walking through text on the screen
- It is currently intended for read-only operations
Author(s):
- Michael Niksa (MiNiksa) 29-Jun-2018
--*/
#pragma once
#include "AttrRowIterator.hpp"
#include "CharRow.hpp"
#include "OutputCellView.hpp"
#include "../../types/inc/viewport.hpp"
class TextBuffer;
class TextBufferCellIterator
{
public:
TextBufferCellIterator(const TextBuffer& buffer, COORD pos);
TextBufferCellIterator(const TextBuffer& buffer, COORD pos, const Microsoft::Console::Types::Viewport limits);
operator bool() const noexcept;
bool operator==(const TextBufferCellIterator& it) const noexcept;
bool operator!=(const TextBufferCellIterator& it) const noexcept;
TextBufferCellIterator& operator+=(const ptrdiff_t& movement);
TextBufferCellIterator& operator-=(const ptrdiff_t& movement);
TextBufferCellIterator& operator++();
TextBufferCellIterator& operator--();
TextBufferCellIterator operator++(int);
TextBufferCellIterator operator--(int);
TextBufferCellIterator operator+(const ptrdiff_t& movement);
TextBufferCellIterator operator-(const ptrdiff_t& movement);
ptrdiff_t operator-(const TextBufferCellIterator& it);
const OutputCellView& operator*() const noexcept;
const OutputCellView* operator->() const noexcept;
protected:
void _SetPos(const COORD newPos);
void _GenerateView();
static const ROW* s_GetRow(const TextBuffer& buffer, const COORD pos);
OutputCellView _view;
const ROW* _pRow;
AttrRowIterator _attrIter;
const TextBuffer& _buffer;
const Microsoft::Console::Types::Viewport _bounds;
bool _exceeded;
COORD _pos;
#if UNIT_TESTING
friend class TextBufferIteratorTests;
friend class TextBufferTests;
friend class ApiRoutinesTests;
#endif
};