projects
/
pintos-anon
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Clean up inode code:
[pintos-anon]
/
src
/
lib
/
kernel
/
bitmap.c
diff --git
a/src/lib/kernel/bitmap.c
b/src/lib/kernel/bitmap.c
index ea6ce5f9f82103cbea2ad09004cfa602c888627d..009482d9b55b210b3ac241b48d98cb7a435b89dc 100644
(file)
--- a/
src/lib/kernel/bitmap.c
+++ b/
src/lib/kernel/bitmap.c
@@
-46,18
+46,18
@@
bit_mask (size_t bit_idx)
return (elem_type) 1 << (bit_idx % ELEM_BITS);
}
return (elem_type) 1 << (bit_idx % ELEM_BITS);
}
-/* Returns the number of elements required for B
's
bits. */
+/* Returns the number of elements required for B
IT_CNT
bits. */
static inline size_t
static inline size_t
-elem_cnt (
const struct bitmap *b)
+elem_cnt (
size_t bit_cnt)
{
{
- return DIV_ROUND_UP (b
->b
it_cnt, ELEM_BITS);
+ return DIV_ROUND_UP (bit_cnt, ELEM_BITS);
}
}
-/* Returns the number of bytes required
by B's elemen
ts. */
+/* Returns the number of bytes required
for BIT_CNT bi
ts. */
static inline size_t
static inline size_t
-byte_cnt (
const struct bitmap *b)
+byte_cnt (
size_t bit_cnt)
{
{
- return sizeof (elem_type) * elem_cnt (b);
+ return sizeof (elem_type) * elem_cnt (b
it_cnt
);
}
/* Returns a bit mask in which the bits actually used in the last
}
/* Returns a bit mask in which the bits actually used in the last
@@
-80,7
+80,7
@@
bitmap_create (size_t bit_cnt)
if (b != NULL)
{
b->bit_cnt = bit_cnt;
if (b != NULL)
{
b->bit_cnt = bit_cnt;
- b->bits = malloc (byte_cnt (b));
+ b->bits = malloc (byte_cnt (b
it_cnt
));
if (b->bits != NULL || bit_cnt == 0)
{
bitmap_set_all (b, false);
if (b->bits != NULL || bit_cnt == 0)
{
bitmap_set_all (b, false);
@@
-132,19
+132,18
@@
bitmap_set_all (struct bitmap *b, bool value)
bitmap_set_multiple (b, 0, bitmap_size (b), value);
}
bitmap_set_multiple (b, 0, bitmap_size (b), value);
}
-/* Sets the bits numbered START through END, exclusive, in B to
- VALUE. */
+/* Sets the CNT bits starting at START in B to VALUE. */
void
void
-bitmap_set_multiple (struct bitmap *b, size_t start, size_t
end
, bool value)
+bitmap_set_multiple (struct bitmap *b, size_t start, size_t
cnt
, bool value)
{
{
- size_t i
dx
;
+ size_t i;
ASSERT (b != NULL);
ASSERT (b != NULL);
- ASSERT (start <=
end
);
- ASSERT (
end
<= b->bit_cnt);
+ ASSERT (start <=
b->bit_cnt
);
+ ASSERT (
start + cnt
<= b->bit_cnt);
- for (i
dx = start; idx < end; idx
++)
- bitmap_set (b,
idx
, value);
+ for (i
= 0; i < cnt; i
++)
+ bitmap_set (b,
start + i
, value);
}
/* Atomically sets the bit numbered IDX in B to true. */
}
/* Atomically sets the bit numbered IDX in B to true. */
@@
-187,19
+186,19
@@
bitmap_test (const struct bitmap *b, size_t idx)
return (b->bits[elem_idx (idx)] & bit_mask (idx)) != 0;
}
return (b->bits[elem_idx (idx)] & bit_mask (idx)) != 0;
}
-/* Returns true if any
bit from START to END, exclusive,
is set
+/* Returns true if any
of the CNT bits starting at START
is set
to VALUE. */
static bool
to VALUE. */
static bool
-contains (const struct bitmap *b, size_t start, size_t
end
, bool value)
+contains (const struct bitmap *b, size_t start, size_t
cnt
, bool value)
{
{
- size_t i
dx
;
+ size_t i;
ASSERT (b != NULL);
ASSERT (b != NULL);
- ASSERT (start <=
end
);
- ASSERT (
end
<= b->bit_cnt);
+ ASSERT (start <=
b->bit_cnt
);
+ ASSERT (
start + cnt
<= b->bit_cnt);
- for (i
dx = start; idx < end; idx
++)
- if (bitmap_test (b,
idx
) == value)
+ for (i
= 0; i < cnt; i
++)
+ if (bitmap_test (b,
start + i
) == value)
return true;
return false;
}
return true;
return false;
}
@@
-218,7
+217,7
@@
bitmap_scan (const struct bitmap *b, size_t start, size_t cnt, bool value)
if (cnt <= b->bit_cnt)
for (idx = start, last = b->bit_cnt - cnt; idx <= last; idx++)
if (cnt <= b->bit_cnt)
for (idx = start, last = b->bit_cnt - cnt; idx <= last; idx++)
- if (!contains (b, idx,
idx +
cnt, !value))
+ if (!contains (b, idx, cnt, !value))
return idx;
return BITMAP_ERROR;
}
return idx;
return BITMAP_ERROR;
}
@@
-235,49
+234,50
@@
bitmap_scan_and_flip (struct bitmap *b, size_t start, size_t cnt, bool value)
{
size_t idx = bitmap_scan (b, start, cnt, value);
if (idx != BITMAP_ERROR)
{
size_t idx = bitmap_scan (b, start, cnt, value);
if (idx != BITMAP_ERROR)
- bitmap_set_multiple (b, idx,
idx +
cnt, !value);
+ bitmap_set_multiple (b, idx, cnt, !value);
return idx;
}
return idx;
}
-/* Returns the number of bits in B between START and
END
,
+/* Returns the number of bits in B between START and
START + CNT
,
exclusive, that are set to VALUE. */
size_t
exclusive, that are set to VALUE. */
size_t
-bitmap_count (const struct bitmap *b, size_t start, size_t
end
, bool value)
+bitmap_count (const struct bitmap *b, size_t start, size_t
cnt
, bool value)
{
{
- size_t i
dx,
cnt;
+ size_t i
, value_
cnt;
ASSERT (b != NULL);
ASSERT (b != NULL);
- ASSERT (start <=
end
);
- ASSERT (
end
<= b->bit_cnt);
+ ASSERT (start <=
b->bit_cnt
);
+ ASSERT (
start + cnt
<= b->bit_cnt);
- cnt = 0;
- for (idx = start; idx < end; idx++)
- cnt += bitmap_test (b, idx) == value;
- return cnt;
+ value_cnt = 0;
+ for (i = 0; i < cnt; i++)
+ if (bitmap_test (b, start + i) == value)
+ value_cnt++;
+ return value_cnt;
}
}
-/* Returns true if any bits in B between START and
END
,
+/* Returns true if any bits in B between START and
START + CNT
,
exclusive, are set to true, and false otherwise.*/
bool
exclusive, are set to true, and false otherwise.*/
bool
-bitmap_any (const struct bitmap *b, size_t start, size_t
end
)
+bitmap_any (const struct bitmap *b, size_t start, size_t
cnt
)
{
{
- return contains (b, start,
end
, true);
+ return contains (b, start,
cnt
, true);
}
}
-/* Returns true if no bits in B between START and
END, exclusive
,
- are set to true, and false otherwise.*/
+/* Returns true if no bits in B between START and
START + CNT
,
+
exclusive,
are set to true, and false otherwise.*/
bool
bool
-bitmap_none (const struct bitmap *b, size_t start, size_t
end
)
+bitmap_none (const struct bitmap *b, size_t start, size_t
cnt
)
{
{
- return !contains (b, start,
end
, true);
+ return !contains (b, start,
cnt
, true);
}
}
-/* Returns true if every bit in B between START and
END
,
+/* Returns true if every bit in B between START and
START + CNT
,
exclusive, is set to true, and false otherwise. */
bool
exclusive, is set to true, and false otherwise. */
bool
-bitmap_all (const struct bitmap *b, size_t start, size_t
end
)
+bitmap_all (const struct bitmap *b, size_t start, size_t
cnt
)
{
{
- return !contains (b, start,
end
, false);
+ return !contains (b, start,
cnt
, false);
}
#ifdef FILESYS
}
#ifdef FILESYS
@@
-285,7
+285,7
@@
bitmap_all (const struct bitmap *b, size_t start, size_t end)
size_t
bitmap_file_size (const struct bitmap *b)
{
size_t
bitmap_file_size (const struct bitmap *b)
{
- return byte_cnt (b);
+ return byte_cnt (b
->bit_cnt
);
}
/* Reads FILE into B, ignoring errors. */
}
/* Reads FILE into B, ignoring errors. */
@@
-294,8
+294,8
@@
bitmap_read (struct bitmap *b, struct file *file)
{
if (b->bit_cnt > 0)
{
{
if (b->bit_cnt > 0)
{
- file_read_at (file, b->bits, byte_cnt (b), 0);
- b->bits[elem_cnt (b) - 1] &= last_mask (b);
+ file_read_at (file, b->bits, byte_cnt (b
->bit_cnt
), 0);
+ b->bits[elem_cnt (b
->bit_cnt
) - 1] &= last_mask (b);
}
}
}
}
@@
-303,7
+303,7
@@
bitmap_read (struct bitmap *b, struct file *file)
void
bitmap_write (const struct bitmap *b, struct file *file)
{
void
bitmap_write (const struct bitmap *b, struct file *file)
{
- file_write_at (file, b->bits, byte_cnt (b), 0);
+ file_write_at (file, b->bits, byte_cnt (b
->bit_cnt
), 0);
}
#endif /* FILESYS */
}
#endif /* FILESYS */
@@
-311,7
+311,7
@@
bitmap_write (const struct bitmap *b, struct file *file)
void
bitmap_dump (const struct bitmap *b)
{
void
bitmap_dump (const struct bitmap *b)
{
- hex_dump (0, b->bits, byte_cnt (b), false);
+ hex_dump (0, b->bits, byte_cnt (b
->bit_cnt
), false);
}
/* Returns the number of bytes required to accomodate a bitmap
}
/* Returns the number of bytes required to accomodate a bitmap
@@
-319,9
+319,7
@@
bitmap_dump (const struct bitmap *b)
size_t
bitmap_needed_bytes (size_t bit_cnt)
{
size_t
bitmap_needed_bytes (size_t bit_cnt)
{
- struct bitmap b;
- b.bit_cnt = bit_cnt;
- return byte_cnt (&b) + sizeof b;
+ return sizeof (struct bitmap) + byte_cnt (bit_cnt);
}
/* Creates and returns a bitmap with BIT_CNT bits in the
}
/* Creates and returns a bitmap with BIT_CNT bits in the