Added utility functions and iOS ports of SkWindow, SkOSFile, SkFontHost, and SkImageDecoder
the iOSSampleApp in experimental currently includes all the following files but only uses SkOSWindow_iOS and SkOSFile_iOS
http://codereview.appspot.com/4657047/
git-svn-id: http://skia.googlecode.com/svn/trunk@1706 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/src/utils/ios/SkOSFile_iOS.mm b/src/utils/ios/SkOSFile_iOS.mm
new file mode 100755
index 0000000..33c572a
--- /dev/null
+++ b/src/utils/ios/SkOSFile_iOS.mm
@@ -0,0 +1,94 @@
+/*
+ Copyright 2010, Tetrark Inc.
+*/
+
+#include "SkOSFile.h"
+#include "SkString.h"
+
+struct SkFILE {
+ NSData* fData;
+ size_t fOffset;
+ size_t fLength;
+};
+
+SkFILE* sk_fopen(const char cpath[], SkFILE_Flags flags) {
+ if (flags & kWrite_SkFILE_Flag) {
+ return NULL;
+ }
+
+ SkString cname, csuffix;
+
+ const char* start = strrchr(cpath, '/');
+ if (NULL == start) {
+ start = cpath;
+ } else {
+ start += 1;
+ }
+ const char* stop = strrchr(cpath, '.');
+ if (NULL == stop) {
+ return NULL;
+ } else {
+ stop += 1;
+ }
+
+ cname.set(start, stop - start - 1);
+ csuffix.set(stop);
+
+ NSBundle* bundle = [NSBundle mainBundle];
+ NSString* name = [NSString stringWithUTF8String:cname.c_str()];
+ NSString* suffix = [NSString stringWithUTF8String:csuffix.c_str()];
+ NSString* path = [bundle pathForResource:name ofType:suffix];
+ NSData* data = [NSData dataWithContentsOfMappedFile:path];
+
+ if (data) {
+ [data retain];
+ SkFILE* rec = new SkFILE;
+ rec->fData = data;
+ rec->fOffset = 0;
+ rec->fLength = [data length];
+ return reinterpret_cast<SkFILE*>(rec);
+ }
+ return NULL;
+}
+
+size_t sk_fgetsize(SkFILE* rec) {
+ SkASSERT(rec);
+ return rec->fLength;
+}
+
+bool sk_frewind(SkFILE* rec) {
+ SkASSERT(rec);
+ rec->fOffset = 0;
+ return true;
+}
+
+size_t sk_fread(void* buffer, size_t byteCount, SkFILE* rec) {
+ if (NULL == buffer) {
+ return rec->fLength;
+ } else {
+ size_t remaining = rec->fLength - rec->fOffset;
+ if (byteCount > remaining) {
+ byteCount = remaining;
+ }
+ memcpy(buffer, (char*)[rec->fData bytes] + rec->fOffset, byteCount);
+ rec->fOffset += byteCount;
+ SkASSERT(rec->fOffset <= rec->fLength);
+ return byteCount;
+ }
+}
+
+size_t sk_fwrite(const void* buffer, size_t byteCount, SkFILE* f) {
+ SkASSERT(!"Not supported yet");
+ return 0;
+}
+
+void sk_fflush(SkFILE* f) {
+ SkASSERT(!"Not supported yet");
+}
+
+void sk_fclose(SkFILE* rec) {
+ SkASSERT(rec);
+ [rec->fData release];
+ delete rec;
+}
+