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

At least pretend to have a slightly standards-compliant pair

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