Since BObjectList is a template class, this only breaks ABI where BObjectList was exposed in public methods, and even then it's only a name mangling break and we should be able to add compatibility methods if necessary. (The old "bool owning" member variable is left intact for ABI compatibility, for the moment, though it's otherwise unused now.) Tracker's PoseList is the only remaining type that has a "bool owning" switch in the constructor rather than template parameters. This should significantly improve the output of static code analysis tools that previously detected list operations as causing use-after-frees and double-frees, as well as make code maintenance easier by making it easier to determine what list owns (or does not own) an object. It should also be a minor performance optimization, since the branches for calls to delete/free should now be optimized out altogether. Still boots to desktop and Tracker, Deskbar, Debugger all tested and verified as working. Change-Id: If2a24a6f0d22e7a506ef554fcfdd328907279ed4 Reviewed-on: https://review.haiku-os.org/c/haiku/+/8915 Reviewed-by: waddlesplash <[email protected]>
89 lines
2.1 KiB
C++
89 lines
2.1 KiB
C++
/*
|
|
* Copyright 2013, Haiku, Inc. All Rights Reserved.
|
|
* Distributed under the terms of the MIT License.
|
|
*/
|
|
#ifndef _PACKAGE__SOLVER_REPOSITORY_H_
|
|
#define _PACKAGE__SOLVER_REPOSITORY_H_
|
|
|
|
|
|
#include <ObjectList.h>
|
|
#include <package/PackageDefs.h>
|
|
#include <package/PackageInfoSet.h>
|
|
#include <String.h>
|
|
|
|
|
|
namespace BPackageKit {
|
|
|
|
|
|
class BPackageInfo;
|
|
class BRepositoryCache;
|
|
class BRepositoryConfig;
|
|
class BSolverPackage;
|
|
|
|
|
|
class BSolverRepository {
|
|
public:
|
|
enum BAllInstallationLocations {
|
|
B_ALL_INSTALLATION_LOCATIONS
|
|
};
|
|
|
|
typedef BPackageInfoSet::Iterator Iterator;
|
|
|
|
public:
|
|
BSolverRepository();
|
|
BSolverRepository(const BString& name);
|
|
BSolverRepository(
|
|
BPackageInstallationLocation location);
|
|
BSolverRepository(BAllInstallationLocations);
|
|
BSolverRepository(
|
|
const BRepositoryConfig& config);
|
|
virtual ~BSolverRepository();
|
|
|
|
status_t SetTo(const BString& name);
|
|
status_t SetTo(BPackageInstallationLocation location);
|
|
status_t SetTo(BAllInstallationLocations);
|
|
status_t SetTo(const BRepositoryConfig& config);
|
|
status_t SetTo(const BRepositoryCache& cache);
|
|
void Unset();
|
|
|
|
status_t InitCheck();
|
|
|
|
bool IsInstalled() const;
|
|
void SetInstalled(bool isInstalled);
|
|
|
|
BString Name() const;
|
|
|
|
int32 Priority() const;
|
|
void SetPriority(int32 priority);
|
|
// negative priority is fine
|
|
|
|
bool IsEmpty() const;
|
|
int32 CountPackages() const;
|
|
BSolverPackage* PackageAt(int32 index) const;
|
|
|
|
status_t AddPackage(const BPackageInfo& info,
|
|
BSolverPackage** _package = NULL);
|
|
status_t AddPackages(
|
|
BPackageInstallationLocation location);
|
|
bool RemovePackage(BSolverPackage* package);
|
|
bool DeletePackage(BSolverPackage* package);
|
|
|
|
uint64 ChangeCount() const;
|
|
|
|
private:
|
|
typedef BObjectList<BSolverPackage, true> PackageList;
|
|
|
|
private:
|
|
BString fName;
|
|
int32 fPriority;
|
|
bool fIsInstalled;
|
|
PackageList fPackages;
|
|
uint64 fChangeCount;
|
|
};
|
|
|
|
|
|
} // namespace BPackageKit
|
|
|
|
|
|
#endif // _PACKAGE__SOLVER_REPOSITORY_H_
|