aboutsummaryrefslogtreecommitdiff
path: root/Src/replicant/nu/ProgressTracker.h
diff options
context:
space:
mode:
authorJef <jef@targetspot.com>2024-09-24 08:54:57 -0400
committerJef <jef@targetspot.com>2024-09-24 08:54:57 -0400
commit20d28e80a5c861a9d5f449ea911ab75b4f37ad0d (patch)
tree12f17f78986871dd2cfb0a56e5e93b545c1ae0d0 /Src/replicant/nu/ProgressTracker.h
parent537bcbc86291b32fc04ae4133ce4d7cac8ebe9a7 (diff)
downloadwinamp-20d28e80a5c861a9d5f449ea911ab75b4f37ad0d.tar.gz
Initial community commit
Diffstat (limited to 'Src/replicant/nu/ProgressTracker.h')
-rw-r--r--Src/replicant/nu/ProgressTracker.h24
1 files changed, 24 insertions, 0 deletions
diff --git a/Src/replicant/nu/ProgressTracker.h b/Src/replicant/nu/ProgressTracker.h
new file mode 100644
index 00000000..83f01802
--- /dev/null
+++ b/Src/replicant/nu/ProgressTracker.h
@@ -0,0 +1,24 @@
+#pragma once
+#include "foundation/types.h"
+#include <map>
+#include "nu/AutoLock.h"
+
+/* Helper class for managing valid chunks in non-sequential scenarios
+e.g. progressive downloading */
+
+class ProgressTracker
+{
+public:
+ static const uint64_t null_position;
+ ProgressTracker();
+ void Write(uint64_t bytes_written);
+ bool Valid(uint64_t requested_position, uint64_t requested_end, uint64_t *available=0);
+ bool Seek(uint64_t requested_position, uint64_t requested_end, uint64_t *new_start, uint64_t *new_end);
+ void Dump();
+
+ typedef std::map<uint64_t, uint64_t> ChunkList;
+ ChunkList chunks;
+ uint64_t current_chunk;
+ uint64_t current_position;
+ nu::LockGuard list_guard;
+};