Skip to content
This repository has been archived by the owner on Sep 27, 2023. It is now read-only.

Commit

Permalink
add RawPackage based on CachedPackage
Browse files Browse the repository at this point in the history
  • Loading branch information
aakropotkin committed Jul 2, 2023
1 parent 7634104 commit 2d939bd
Show file tree
Hide file tree
Showing 6 changed files with 352 additions and 223 deletions.
128 changes: 6 additions & 122 deletions include/flox/drv-cache.hh
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
#include <nix/eval-cache.hh>
#include "flox/sqlite.hh"
#include "flox/package.hh"
#include "flox/raw-package.hh"


/* -------------------------------------------------------------------------- */
Expand All @@ -30,134 +31,17 @@ class RawPackageSet;

/* -------------------------------------------------------------------------- */

class CachedPackage : public Package {
protected:
std::vector<std::string> _pathS;

private:
std::string _fullname;
std::string _pname;
std::optional<std::string> _version;
std::optional<std::string> _semver;
std::optional<std::string> _license;
std::vector<std::string> _outputs;
std::vector<std::string> _outputsToInstall;
std::optional<bool> _broken;
std::optional<bool> _unfree;
bool _hasMetaAttr;
bool _hasPnameAttr;
bool _hasVersionAttr;

class CachedPackage : public RawPackage {
public:
CachedPackage(
const std::vector<std::string_view> & pathS = {}
, std::string_view fullname = {}
, std::string_view pname = {}
, std::optional<std::string_view> version = std::nullopt
, std::optional<std::string_view> semver = std::nullopt
, std::optional<std::string_view> license = std::nullopt
, const std::vector<std::string_view> & outputs = { "out" }
, const std::vector<std::string_view> & outputsToInstall = { "out" }
, std::optional<bool> broken = std::nullopt
, std::optional<bool> unfree = std::nullopt
, bool hasMetaAttr = false
, bool hasPnameAttr = false
, bool hasVersionAttr = false
) : _pname( pname )
, _version( version )
, _semver( semver )
, _license( license )
, _broken( broken )
, _unfree( unfree )
, _hasMetaAttr( hasMetaAttr )
, _hasPnameAttr( hasPnameAttr )
, _hasVersionAttr( hasVersionAttr )
{
for ( auto & s : pathS ) { this->_pathS.emplace_back( s ); }
for ( auto & s : outputs ) { this->_outputs.emplace_back( s ); }
for ( auto & s : outputsToInstall )
{
this->_outputsToInstall.emplace_back( s );
}
}

std::vector<std::string>
getPathStrs() const override
{
return this->_pathS;
}
std::string
getFullName() const override
{
return this->_fullname;
}
std::string
getPname() const override
{
return this->_pname;
}
std::optional<std::string>
getVersion() const override
{
return this->_version;
}
std::optional<std::string>
getSemver() const override
{
return this->_semver;
}
std::optional<std::string>
getLicense() const override
{
return this->_license;
}
std::vector<std::string>
getOutputs() const override
{
return this->_outputs;
}
std::optional<bool>
isBroken() const override
{
return this->_broken;
}
std::optional<bool>
isUnfree() const override
{
return this->_unfree;
}
bool
hasMetaAttr() const override
{
return this->_hasMetaAttr;
}
bool
hasPnameAttr() const override
{
return this->_hasPnameAttr;
}
bool
hasVersionAttr() const override
{
return this->_hasVersionAttr;
}
std::vector<std::string>
getOutputsToInstall() const override
{
return this->_outputsToInstall;
}

CachedPackage() : RawPackage() {}
CachedPackage( const nlohmann::json & drvInfo ) : RawPackage( drvInfo ) {};
CachedPackage( nlohmann::json && drvInfo ) : RawPackage( drvInfo ) {};
CachedPackage( DrvDb & db
, std::string_view subtree
, std::string_view system
, const std::vector<std::string> & path
);

CachedPackage( const nlohmann::json & drvInfo );

friend RawPackageSet;

}; /* End class `CachedPackage' */
};


/* -------------------------------------------------------------------------- */
Expand Down
26 changes: 13 additions & 13 deletions include/flox/raw-package-set.hh
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
#include <optional>
#include "flox/util.hh"
#include "flox/package-set.hh"
#include "flox/drv-cache.hh"
#include "flox/raw-package.hh"


/* -------------------------------------------------------------------------- */
Expand All @@ -20,16 +20,16 @@ namespace flox {

/* -------------------------------------------------------------------------- */

using CachedPackageMap =
std::unordered_map<std::list<std::string_view>, nix::ref<CachedPackage>>;
using RawPackageMap =
std::unordered_map<std::list<std::string_view>, nix::ref<RawPackage>>;


/* -------------------------------------------------------------------------- */

class RawPackageSet : public PackageSet {

protected:
CachedPackageMap _pkgs;
RawPackageMap _pkgs;

private:
subtree_type _subtree;
Expand All @@ -40,7 +40,7 @@ class RawPackageSet : public PackageSet {
public:

RawPackageSet(
CachedPackageMap pkgs
RawPackageMap pkgs
, subtree_type subtree
, std::string_view system
, std::optional<std::string_view> stability
Expand Down Expand Up @@ -99,15 +99,15 @@ class RawPackageSet : public PackageSet {
}

void
addPackage( CachedPackage && p )
addPackage( RawPackage && p )
{
std::list<std::string_view> relPath;
auto it = p._pathS.cbegin();
it += ( p.getSubtreeType() == resolve::ST_CATALOG ) ? 3 : 2;
for ( ; it != p._pathS.cend(); ++it ) { relPath.push_back( * it ); }
this->_pkgs.emplace(
std::move( relPath )
, nix::make_ref<CachedPackage>( p )
, nix::make_ref<RawPackage>( p )
);
}

Expand All @@ -121,25 +121,25 @@ class RawPackageSet : public PackageSet {
struct iterator_impl
{
using value_type =
std::conditional<IS_CONST, const CachedPackage, CachedPackage>::type;
std::conditional<IS_CONST, const RawPackage, RawPackage>::type;
using reference = value_type &;
using pointer = nix::ref<value_type>;

using container_type =
std::conditional<IS_CONST, const CachedPackageMap
, CachedPackageMap
std::conditional<IS_CONST, const RawPackageMap
, RawPackageMap
>::type;

using wrapped_iter_type =
std::conditional<IS_CONST, CachedPackageMap::const_iterator
, CachedPackageMap::iterator
std::conditional<IS_CONST, RawPackageMap::const_iterator
, RawPackageMap::iterator
>::type;

private:
container_type * _pkgs;
wrapped_iter_type _end;
wrapped_iter_type _it;
std::shared_ptr<CachedPackage> _ptr;
std::shared_ptr<RawPackage> _ptr;

public:

Expand Down
Loading

0 comments on commit 2d939bd

Please sign in to comment.