/* * Copyright 2013, Haiku, Inc. All Rights Reserved. * Distributed under the terms of the MIT License. * * Authors: * Ingo Weinhold */ #include #include #include #include namespace BPackageKit { class BSolverPackageSpecifierList::Vector : public std::vector { public: Vector() : std::vector() { } Vector(const std::vector& other) : std::vector(other) { } }; BSolverPackageSpecifierList::BSolverPackageSpecifierList() : fSpecifiers(NULL) { } BSolverPackageSpecifierList::BSolverPackageSpecifierList( const BSolverPackageSpecifierList& other) : fSpecifiers(NULL) { *this = other; } BSolverPackageSpecifierList::~BSolverPackageSpecifierList() { delete fSpecifiers; } bool BSolverPackageSpecifierList::IsEmpty() const { return fSpecifiers == NULL || fSpecifiers->empty(); } int32 BSolverPackageSpecifierList::CountSpecifiers() const { return fSpecifiers != NULL ? fSpecifiers->size() : 0; } const BSolverPackageSpecifier* BSolverPackageSpecifierList::SpecifierAt(int32 index) const { if (fSpecifiers == NULL || index < 0 || (size_t)index >= fSpecifiers->size()) { return NULL; } return &(*fSpecifiers)[index]; } bool BSolverPackageSpecifierList::AppendSpecifier( const BSolverPackageSpecifier& specifier) { try { if (fSpecifiers == NULL) { fSpecifiers = new(std::nothrow) Vector; if (fSpecifiers == NULL) return false; } fSpecifiers->push_back(specifier); return true; } catch (std::bad_alloc&) { return false; } } bool BSolverPackageSpecifierList::AppendSpecifier(BSolverPackage* package) { return AppendSpecifier(BSolverPackageSpecifier(package)); } bool BSolverPackageSpecifierList::AppendSpecifier(const BString& selectString) { return AppendSpecifier(BSolverPackageSpecifier(selectString)); } bool BSolverPackageSpecifierList::AppendSpecifiers(const char* const* selectStrings, int32 count) { for (int32 i = 0; i < count; i++) { if (!AppendSpecifier(selectStrings[i])) { for (int32 k = i - 1; k >= 0; k--) fSpecifiers->pop_back(); return false; } } return true; } void BSolverPackageSpecifierList::MakeEmpty() { fSpecifiers->clear(); } BSolverPackageSpecifierList& BSolverPackageSpecifierList::operator=(const BSolverPackageSpecifierList& other) { if (this == &other) return *this; delete fSpecifiers; fSpecifiers = NULL; if (other.fSpecifiers == NULL) return *this; try { fSpecifiers = new(std::nothrow) Vector(*other.fSpecifiers); } catch (std::bad_alloc&) { } return *this; } } // namespace BPackageKit