Skip to content

AVector#

An std::vector with AUI extensions.

Header:#include <AUI/Common/AVector.h>
CMake:aui_link(my_target PUBLIC aui::core)

Examples#

examples/app/minesweeper/src/MinesweeperWindow.h

Minesweeper Game - Minesweeper game implementation driven by ass.

    int mBombs;
    int mOpenedCells;

    _<AViewContainer> mGrid;
    AVector<FieldCell> mField;

    void openCell(int x, int y, bool doGameLoseIfBomb);
    int countBombsAround(int x, int y);
    bool isValidCell(int x, int y) { return x >= 0 && x < mFieldColumns && y >= 0 && y < mFieldRows; }
    FieldCell& fieldAt(int x, int y) { return mField[mFieldColumns * y + x]; }

examples/7guis/cells/src/Functions.h

7GUIs Cells - Spreadsheet processor (Excel).

namespace functions {
struct Ctx {
    const Spreadsheet& spreadsheet;
    AVector<formula::Value> args;
};
using Invocable = std::function<formula::Value(Ctx ctx)>;

const AMap<AString, Invocable>& predefined();
}

examples/7guis/cells/src/Spreadsheet.h

7GUIs Cells - Spreadsheet processor (Excel).

    glm::uvec2 size() const { return mSize; }

private:
    glm::uvec2 mSize;
    AVector<_unique<Cell>> mCells;
};

examples/7guis/cells/src/Tokens.h

7GUIs Cells - Spreadsheet processor (Excel).

};

using Any = std::variant<Identifier, Double, Semicolon, LPar, RPar, Colon, Plus, Minus, Asterisk, Slash, LAngle, RAngle, StringLiteral>;

AVector<token::Any> parse(aui::no_escape<ATokenizer> t);

}   // namespace token

examples/7guis/cells/src/AST.cpp

7GUIs Cells - Spreadsheet processor (Excel).

            int priority = -1;
            _unique<BinaryOperatorNode> owning;
        };

        AVector<BinaryOperatorAndItsPriority> binaryOperators;

        auto putValue = [&](_unique<INode> node) {
            if (temporaryValue) {
                throw AException("SYNTAX");
            }

examples/7guis/cells/src/Tokens.cpp

7GUIs Cells - Spreadsheet processor (Excel).

 */

#include "Tokens.h"

AVector<token::Any> token::parse(aui::no_escape<ATokenizer> t) {
    AVector<token::Any> out;
    t->readChar();   // =
    try {
        while (!t->isEof()) {
            switch (char c = t->readChar()) {

examples/7guis/cells/src/main.cpp

7GUIs Cells - Spreadsheet processor (Excel).

            this,
            AGridSplitter::Builder()
                    .noDefaultSpacers()
                    .withItems([&] {
                        AVector<AVector<_<AView>>> views;
                        views.resize(mState->spreadsheet.size().y + 1);
                        for (auto& c : views) {
                            c.resize(mState->spreadsheet.size().x + 1);
                        }

Public Methods#

contains#


bool AVector::contains(const StoredType& value)
Returns
true if container contains an element, false otherwise.

findIf#


StoredType* AVector::findIf(Predicate&& predicate)

Finds element by predicate

Arguments
predicate
predicate
Returns
Pointer to the value on which the predicate returned true, nullptr otherwise

first#


StoredType& AVector::first()
Returns
the first element.
Sneaky assertions
Container is not empty.

Examples#

examples/ui/contacts/src/view/ContactDetailsView.cpp

AUI Contacts - Usage of AUI_DECLARATIVE_FOR to make a contacts-like application.

namespace {
_<AView> profilePhoto(const _<Contact>& contact) {
    return Centered {
        Label {} & contact->displayName.readProjected([](const AString& s) {
            return s.empty() ? "?" : AString(1, s.first()).uppercase();
        }) AUI_WITH_STYLE { Opacity(0.5f), FontSize { 32_dp } },
    } AUI_WITH_STYLE {
        FixedSize { 64_dp },
        BorderRadius { 32_dp },
        BackgroundGradient { AColor::GRAY.lighter(0.5f), AColor::GRAY, 163_deg },
examples/7guis/cells/src/AST.cpp

7GUIs Cells - Spreadsheet processor (Excel).

            // should assign it to some operator
            for (const auto& o : binaryOperators | ranges::views::reverse) {
                if (o.op->right == nullptr) {
                    o.op->right = std::move(temporaryValue);
                    AUI_ASSERT(binaryOperators.first().owning != nullptr);
                    return std::move(binaryOperators.first().owning);
                }
            }
            throw AException {};
        }
examples/7guis/cells/src/main.cpp

7GUIs Cells - Spreadsheet processor (Excel).

                      [](const AString& v) -> _<AView> { return Label { "{}"_format(v) }; },
                      [](const formula::Range& v) -> _<AView> { return Label { "#RANGE?" }; },
                    },
                    v));
            connect(getViews().first()->clicked, me::inflateEditor);
        });
    }

    void inflateEditor() {
        mState->currentExpression = mCell.expression;

const StoredType& AVector::first()
Returns
the first element.
Sneaky assertions
Container is not empty.

Examples#

examples/ui/contacts/src/view/ContactDetailsView.cpp

AUI Contacts - Usage of AUI_DECLARATIVE_FOR to make a contacts-like application.

namespace {
_<AView> profilePhoto(const _<Contact>& contact) {
    return Centered {
        Label {} & contact->displayName.readProjected([](const AString& s) {
            return s.empty() ? "?" : AString(1, s.first()).uppercase();
        }) AUI_WITH_STYLE { Opacity(0.5f), FontSize { 32_dp } },
    } AUI_WITH_STYLE {
        FixedSize { 64_dp },
        BorderRadius { 32_dp },
        BackgroundGradient { AColor::GRAY.lighter(0.5f), AColor::GRAY, 163_deg },
examples/7guis/cells/src/AST.cpp

7GUIs Cells - Spreadsheet processor (Excel).

            // should assign it to some operator
            for (const auto& o : binaryOperators | ranges::views::reverse) {
                if (o.op->right == nullptr) {
                    o.op->right = std::move(temporaryValue);
                    AUI_ASSERT(binaryOperators.first().owning != nullptr);
                    return std::move(binaryOperators.first().owning);
                }
            }
            throw AException {};
        }
examples/7guis/cells/src/main.cpp

7GUIs Cells - Spreadsheet processor (Excel).

                      [](const AString& v) -> _<AView> { return Label { "{}"_format(v) }; },
                      [](const formula::Range& v) -> _<AView> { return Label { "#RANGE?" }; },
                    },
                    v));
            connect(getViews().first()->clicked, me::inflateEditor);
        });
    }

    void inflateEditor() {
        mState->currentExpression = mCell.expression;

fromRange#


static auto AVector::fromRange(aui::range<Iterator> range, UnaryOperation&& transformer)

Constructs a new vector of transformed items of the range.

Arguments
range
items to transform from.
transformer
transformer function.
Returns
A new vector.

indexOf#


AOptional<size_t> AVector::indexOf(const StoredType& value)
Arguments
value
element to find.
Returns
index of the specified element. If element is not found, std::nullopt is returned.

insertAll#


template<typename OtherContainer >
iterator AVector::insertAll(const OtherContainer& c)
Arguments
c
other container
Returns
iterator pointing to the first element inserted.

Inserts all values of the specified container to the end.


template<typename OtherContainer >
iterator AVector::insertAll(OtherContainer&& c)
Arguments
c
other container
Returns
iterator pointing to the first element inserted.

Inserts all values of the specified container to the end.


template<typename OtherContainer >
iterator AVector::insertAll(iterator at, const OtherContainer& c)
Arguments
at
position to insert at.
c
other container
Returns
iterator pointing to the first element inserted.

Inserts all values of the specified container.


template<typename OtherContainer >
iterator AVector::insertAll(iterator at, OtherContainer&& c)
Arguments
at
position to insert at.
c
other container
Returns
iterator pointing to the first element inserted.

Inserts all values of the specified container.

isSubsetOf#


template<typename OtherContainer >
bool AVector::isSubsetOf(const OtherContainer& c)
Returns
true if c container is a subset of this container, false otherwise.

last#


StoredType& AVector::last()
Returns
the last element.
Sneaky assertions
Container is not empty.

Examples#

examples/7guis/cells/src/AST.cpp

7GUIs Cells - Spreadsheet processor (Excel).

            if (temporaryValue) {
                throw AException("SYNTAX");
            }
            if (!binaryOperators.empty()) {
                if (binaryOperators.last().op->right) {
                    throw AException {};
                }
                binaryOperators.last().op->right = std::move(node);
                return;
            }

const StoredType& AVector::last()
Returns
the last element.
Sneaky assertions
Container is not empty.

Examples#

examples/7guis/cells/src/AST.cpp

7GUIs Cells - Spreadsheet processor (Excel).

            if (temporaryValue) {
                throw AException("SYNTAX");
            }
            if (!binaryOperators.empty()) {
                if (binaryOperators.last().op->right) {
                    throw AException {};
                }
                binaryOperators.last().op->right = std::move(node);
                return;
            }

removeAll#


void AVector::removeAll(const StoredType& item)
Arguments
item
element to remove.

Removes all occurrences of item.


template<typename T, aui::mapper<const StoredType &, const T &> Projection >
void AVector::removeAll(const T& item, Projection projection)
Arguments
item
element to remove.
projection
callable that transforms const StoredType& to const T&. Can be any operator() cappable object, including lambda and pointer-to-member.

Removes all occurrences of item with specified projection.

removeAt#


void AVector::removeAt(size_t index)
Arguments
index
index of the element.

Removes element at the specified index.

Sneaky assertions
index points to the existing element.

removeFirst#


AOptional<std::size_t> AVector::removeFirst(const StoredType& item)
Arguments
item
element to remove.
Returns
If the item is removed, it's index returned.

Removes first occurrence of item.

removeIf#


template<aui::predicate<StoredType> Predicate >
void AVector::removeIf(Predicate&& predicate)
Arguments
predicate
predicate

Removes element if predicate(container[i]) == true.

removeIfFirst#


template<aui::predicate<StoredType> Predicate >
void AVector::removeIfFirst(Predicate&& predicate)
Arguments
predicate
predicate

Removes only the first element if predicate(container[i]) == true.