rlc/tbf: Move v_b into DL window

Move functions resend_needed(), mark_for_resend(), update(),
move_window(), state(), count_unacked() out of v_b directly into the UL
window and provide a function get_state in v_b to access the v_b
elements.
diff --git a/src/rlc.cpp b/src/rlc.cpp
index f3a25b2..0df1655 100644
--- a/src/rlc.cpp
+++ b/src/rlc.cpp
@@ -46,24 +46,24 @@
 		mark_invalid(i);
 }
 
-int gprs_rlc_v_b::resend_needed(const gprs_rlc_dl_window &w)
+int gprs_rlc_dl_window::resend_needed()
 {
-	for (uint16_t bsn = w.v_a(); bsn != w.v_s(); bsn = (bsn + 1) & w.mod_sns()) {
-		if (is_nacked(bsn) || is_resend(bsn))
+	for (uint16_t bsn = v_a(); bsn != v_s(); bsn = (bsn + 1) & mod_sns()) {
+		if (m_v_b.is_nacked(bsn) || m_v_b.is_resend(bsn))
 			return bsn;
 	}
 
 	return -1;
 }
 
-int gprs_rlc_v_b::mark_for_resend(const gprs_rlc_dl_window &w)
+int gprs_rlc_dl_window::mark_for_resend()
 {
 	int resend = 0;
 
-	for (uint16_t bsn = w.v_a(); bsn != w.v_s(); bsn = (bsn + 1) & w.mod_sns()) {
-		if (is_unacked(bsn)) {
+	for (uint16_t bsn = v_a(); bsn != v_s(); bsn = (bsn + 1) & mod_sns()) {
+		if (m_v_b.is_unacked(bsn)) {
 			/* mark to be re-send */
-			mark_resend(bsn);
+			m_v_b.mark_resend(bsn);
 			resend += 1;
 		}
 	}
@@ -71,13 +71,13 @@
 	return resend;
 }
 
-int gprs_rlc_v_b::count_unacked(const gprs_rlc_dl_window &w)
+int gprs_rlc_dl_window::count_unacked()
 {
 	uint16_t unacked = 0;
 	uint16_t bsn;
 
-	for (bsn = w.v_a(); bsn != w.v_s(); bsn = (bsn + 1) & w.mod_sns()) {
-		if (!is_acked(bsn))
+	for (bsn = v_a(); bsn != v_s(); bsn = (bsn + 1) & mod_sns()) {
+		if (!m_v_b.is_acked(bsn))
 			unacked += 1;
 	}
 
@@ -89,40 +89,39 @@
 	return (ssn - 1 - bitnum) & mod_sns;
 }
 
-void gprs_rlc_v_b::update(BTS *bts, char *show_rbb, uint8_t ssn,
-			const gprs_rlc_dl_window &w,
+void gprs_rlc_dl_window::update(BTS *bts, char *show_rbb, uint8_t ssn,
 			uint16_t *lost, uint16_t *received)
 {
 	/* SSN - 1 is in range V(A)..V(S)-1 */
-	for (int bitpos = 0; bitpos < w.ws(); bitpos++) {
-		uint16_t bsn = bitnum_to_bsn(bitpos, ssn, w.mod_sns());
+	for (int bitpos = 0; bitpos < ws(); bitpos++) {
+		uint16_t bsn = bitnum_to_bsn(bitpos, ssn, mod_sns());
 
-		if (bsn == ((w.v_a() - 1) & w.mod_sns()))
+		if (bsn == ((v_a() - 1) & mod_sns()))
 			break;
 
-		if (show_rbb[w.ws() - 1 - bitpos] == 'R') {
+		if (show_rbb[ws() - 1 - bitpos] == 'R') {
 			LOGP(DRLCMACDL, LOGL_DEBUG, "- got ack for BSN=%d\n", bsn);
-			if (!is_acked(bsn))
+			if (!m_v_b.is_acked(bsn))
 				*received += 1;
-			mark_acked(bsn);
+			m_v_b.mark_acked(bsn);
 		} else {
 			LOGP(DRLCMACDL, LOGL_DEBUG, "- got NACK for BSN=%d\n", bsn);
-			mark_nacked(bsn);
+			m_v_b.mark_nacked(bsn);
 			bts->rlc_nacked();
 			*lost += 1;
 		}
 	}
 }
 
-int gprs_rlc_v_b::move_window(const gprs_rlc_dl_window &w)
+int gprs_rlc_dl_window::move_window()
 {
 	int i;
 	uint16_t bsn;
 	int moved = 0;
 
-	for (i = 0, bsn = w.v_a(); bsn != w.v_s(); i++, bsn = (bsn + 1) & w.mod_sns()) {
-		if (is_acked(bsn)) {
-			mark_invalid(bsn);
+	for (i = 0, bsn = v_a(); bsn != v_s(); i++, bsn = (bsn + 1) & mod_sns()) {
+		if (m_v_b.is_acked(bsn)) {
+			m_v_b.mark_invalid(bsn);
 			moved += 1;
 		} else
 			break;
@@ -131,14 +130,14 @@
 	return moved;
 }
 
-void gprs_rlc_v_b::state(char *show_v_b, const gprs_rlc_dl_window &w)
+void gprs_rlc_dl_window::state(char *show_v_b)
 {
 	int i;
 	uint16_t bsn;
 
-	for (i = 0, bsn = w.v_a(); bsn != w.v_s(); i++, bsn = (bsn + 1) & w.mod_sns()) {
+	for (i = 0, bsn = v_a(); bsn != v_s(); i++, bsn = (bsn + 1) & mod_sns()) {
 		uint16_t index = bsn & mod_sns_half();
-		show_v_b[i] = m_v_b[index];
+		show_v_b[i] = m_v_b.get_state(index);
 		if (show_v_b[i] == 0)
 			show_v_b[i] = ' ';
 	}