123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- #ifndef CORE_STACK_HPP
- #define CORE_STACK_HPP
- #include "core/data/ArrayList.hpp"
- #include "core/data/List.hpp"
- namespace Core {
- namespace Internal {
- template<typename T, typename S>
- class BaseStack final {
- S data{};
- public:
- template<typename... Args>
- check_return Error push(Args&&... args) {
- return data.add(Core::forward<Args>(args)...);
- }
- void clear() {
- data.clear();
- }
- check_return Error pop() {
- int index = data.getLength();
- if(index <= 0) {
- return Error::INVALID_STATE;
- }
- return data.removeBySwap(index - 1);
- }
- bool isEmpty() const {
- return data.getLength() == 0;
- }
- T& peek() {
- return data[data.getLength() - 1];
- }
- const T& peek() const {
- return data[data.getLength() - 1];
- }
- template<typename String>
- check_return Error toString(String& s) const {
- return s.append(data);
- }
- };
- }
- template<typename T>
- using ListStack = Internal::BaseStack<T, List<T>>;
- template<typename T, int N>
- using ArrayStack = Internal::BaseStack<T, ArrayList<T, N>>;
- }
- #endif
|