X-Git-Url: http://git.localhorst.tv/?a=blobdiff_plain;f=src%2Floader%2FPagedAllocator.cpp;h=464d9d1f4d9c96de0abd1b7503353285d909152e;hb=abfa371d1d2c14052d4cbfc885b8383c6da7d499;hp=4853a1e6de9dd22af4aafa654b50aa3620575256;hpb=754442d4502b743a46831055484c3fa9fa621ec2;p=l2e.git diff --git a/src/loader/PagedAllocator.cpp b/src/loader/PagedAllocator.cpp index 4853a1e..464d9d1 100644 --- a/src/loader/PagedAllocator.cpp +++ b/src/loader/PagedAllocator.cpp @@ -1,13 +1,10 @@ -/* - * PagedAllocator.cpp - * - * Created on: Oct 9, 2012 - * Author: holy - */ - #include "PagedAllocator.h" +#include + using std::deque; +using std::runtime_error; + namespace loader { @@ -39,6 +36,25 @@ char *PagedAllocator::Alloc(unsigned int size) { return chunk; } +unsigned int PagedAllocator::PageOf(void *ptrIn) const { + char *ptr = reinterpret_cast(ptrIn); + unsigned int counter = 0; + for (deque::const_iterator i(pages.begin()), end(pages.end()); i != end; ++i, ++counter) { + if (ptr < *i) continue; + if (*i < ptr) return counter; + } + throw runtime_error("PagedAllocator::PageOf"); +} + +unsigned int PagedAllocator::PageOffsetOf(void *ptrIn) const { + char *ptr = reinterpret_cast(ptrIn); + for (deque::const_iterator i(pages.begin()), end(pages.end()); i != end; ++i) { + if (ptr < *i) continue; + if (*i < ptr) return ptr - *i; + } + throw runtime_error("PagedAllocator::PageOffsetOf"); +} + unsigned int PagedAllocator::Free() const { return pageSize - (head - CurrentPage()); }