#ifndef NON_EMPTY_INL_H_ #error "Direct inclusion of this file is not allowed, include non_empty.h" // For the sake of sane code completion. #include "non_empty.h" #endif #include namespace NYT { //////////////////////////////////////////////////////////////////////////////// template TNonEmpty::TNonEmpty(TContainer underlying) : Underlying_(std::move(underlying)) { YT_ASSERT(!Underlying_.empty()); } template template TNonEmpty::TNonEmpty(TIterator first, TIterator last) : TNonEmpty(TContainer(first, last)) { } template TNonEmpty::TNonEmpty(std::initializer_list values) : TNonEmpty(TContainer(values)) { } template typename TContainer::size_type TNonEmpty::size() const { return Underlying_.size(); } template void TNonEmpty::resize(size_type size) { YT_ASSERT(size > 0); Underlying_.resize(size); } template void TNonEmpty::resize(size_type size, const value_type& value) { YT_ASSERT(size > 0); Underlying_.resize(size, value); } template typename TContainer::iterator TNonEmpty::begin() { return Underlying_.begin(); } template typename TContainer::const_iterator TNonEmpty::begin() const { return Underlying_.begin(); } template typename TContainer::iterator TNonEmpty::end() { return Underlying_.end(); } template typename TContainer::const_iterator TNonEmpty::end() const { return Underlying_.end(); } template typename TContainer::reverse_iterator TNonEmpty::rbegin() { return Underlying_.rbegin(); } template typename TContainer::const_reverse_iterator TNonEmpty::rbegin() const { return Underlying_.rbegin(); } template typename TContainer::reverse_iterator TNonEmpty::rend() { return Underlying_.rend(); } template typename TContainer::const_reverse_iterator TNonEmpty::rend() const { return Underlying_.rend(); } template typename TContainer::pointer TNonEmpty::data() { return Underlying_.data(); } template typename TContainer::const_pointer TNonEmpty::data() const { return Underlying_.data(); } template typename TContainer::reference TNonEmpty::operator[](size_type index) { return Underlying_[index]; } template typename TContainer::const_reference TNonEmpty::operator[](size_type index) const { return Underlying_[index]; } template typename TContainer::reference TNonEmpty::front() { return Underlying_.front(); } template typename TContainer::const_reference TNonEmpty::front() const { return Underlying_.front(); } template typename TContainer::reference TNonEmpty::back() { return Underlying_.back(); } template typename TContainer::const_reference TNonEmpty::back() const { return Underlying_.back(); } template void TNonEmpty::push_back(const value_type& value) { Underlying_.push_back(value); } template void TNonEmpty::push_back(value_type&& value) { Underlying_.push_back(std::move(value)); } template template typename TContainer::reference TNonEmpty::emplace_back(TArgs&&... args) { return Underlying_.emplace_back(std::forward(args)...); } template void TNonEmpty::pop_back() { YT_ASSERT(Underlying_.size() > 1); Underlying_.pop_back(); } template const TContainer& TNonEmpty::Get() const { return Underlying_; } template TNonEmpty::operator const TContainer&() const { return Underlying_; } template void FormatValue(TStringBuilderBase* builder, const TNonEmpty& nonempty, TStringBuf spec) { FormatValue(builder, nonempty.Get(), spec); } //////////////////////////////////////////////////////////////////////////////// } // namespace NYT