提交 b5cdc429 创建 作者: Austin Clements's avatar Austin Clements

At least pretend to have a slightly standards-compliant pair

上级 8e7e1dd4
......@@ -3,13 +3,19 @@
template<class A, class B>
class pair {
public:
A _a;
B _b;
typedef A first_type;
typedef B second_type;
pair(const A &a, const B &b) : _a(a), _b(b) {}
A first;
B second;
pair(const pair&) = default;
pair(pair&&) = default;
constexpr pair() : first(), second() {}
pair(const A &a, const B &b) : first(a), second(b) {}
bool operator==(const pair<A, B> &other) {
return _a == other._a && _b == other._b;
return first == other.first && second == other.second;
}
};
......@@ -29,7 +35,7 @@ class strbuf {
template<class A, class B>
pair<A, B>
mkpair(const A &a, const B &b)
make_pair(const A &a, const B &b)
{
return pair<A, B>(a, b);
}
......
......@@ -32,7 +32,7 @@
u64
bio_hash(const pair<u32, u64> &p)
{
return p._a ^ p._b;
return p.first ^ p.second;
}
static xns<pair<u32, u64>, buf*, bio_hash> *bufns;
......@@ -51,7 +51,7 @@ bget(u32 dev, u64 sector, int *writer)
loop:
// Try for cached block.
// XXX ignore dev
b = bufns->lookup(mkpair(dev, sector));
b = bufns->lookup(make_pair(dev, sector));
if (b) {
if (b->dev != dev || b->sector != sector)
panic("block mismatch");
......@@ -76,7 +76,7 @@ bget(u32 dev, u64 sector, int *writer)
b = new buf(dev, sector);
b->flags = B_BUSY;
*writer = 1;
if (bufns->insert(mkpair(b->dev, b->sector), b) < 0) {
if (bufns->insert(make_pair(b->dev, b->sector), b) < 0) {
gc_delayed(b);
goto loop;
}
......
......@@ -152,7 +152,7 @@ bfree(int dev, u64 x)
u64
ino_hash(const pair<u32, u32> &p)
{
return p._a ^ p._b;
return p.first ^ p.second;
}
static xns<pair<u32, u32>, inode*, ino_hash> *ins;
......@@ -268,7 +268,7 @@ igetnoref(u32 dev, u32 inum)
// Try for cached inode.
{
scoped_gc_epoch e;
struct inode *ip = ins->lookup(mkpair(dev, inum));
struct inode *ip = ins->lookup(make_pair(dev, inum));
if (ip) {
if (!(ip->flags & I_VALID)) {
acquire(&ip->lock);
......@@ -290,7 +290,7 @@ igetnoref(u32 dev, u32 inum)
snprintf(ip->lockname, sizeof(ip->lockname), "cv:ino:%d", ip->inum);
initlock(&ip->lock, ip->lockname+3, LOCKSTAT_FS);
initcondvar(&ip->cv, ip->lockname);
if (ins->insert(mkpair(ip->dev, ip->inum), ip) < 0) {
if (ins->insert(make_pair(ip->dev, ip->inum), ip) < 0) {
gc_delayed(ip);
goto retry;
}
......@@ -399,7 +399,7 @@ iput(struct inode *ip)
ip->gen += 1;
iupdate(ip);
ins->remove(mkpair(ip->dev, ip->inum), &ip);
ins->remove(make_pair(ip->dev, ip->inum), &ip);
gc_delayed(ip);
icache_free[mycpu()->id].x++;
return;
......
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论