1dcfce0a6a1820e04a45cadb41c45c79d7bf3ef4ayangsu@google.com/*
20511f38ce432faff67522e680e6106f22deb4a7bepoger@google.com * Copyright 2010 Google Inc.
30511f38ce432faff67522e680e6106f22deb4a7bepoger@google.com *
40511f38ce432faff67522e680e6106f22deb4a7bepoger@google.com * Use of this source code is governed by a BSD-style license that can be
50511f38ce432faff67522e680e6106f22deb4a7bepoger@google.com * found in the LICENSE file.
6dcfce0a6a1820e04a45cadb41c45c79d7bf3ef4ayangsu@google.com */
7dcfce0a6a1820e04a45cadb41c45c79d7bf3ef4ayangsu@google.com
8dcfce0a6a1820e04a45cadb41c45c79d7bf3ef4ayangsu@google.com#include "SkStream_NSData.h"
9dcfce0a6a1820e04a45cadb41c45c79d7bf3ef4ayangsu@google.com
10dcfce0a6a1820e04a45cadb41c45c79d7bf3ef4ayangsu@google.comNSData* NSData_dataWithStream(SkStream* stream) {
11dcfce0a6a1820e04a45cadb41c45c79d7bf3ef4ayangsu@google.com    size_t length = stream->getLength();
12dcfce0a6a1820e04a45cadb41c45c79d7bf3ef4ayangsu@google.com    void* src = malloc(length);
13dcfce0a6a1820e04a45cadb41c45c79d7bf3ef4ayangsu@google.com    size_t bytes = stream->read(src, length);
14dcfce0a6a1820e04a45cadb41c45c79d7bf3ef4ayangsu@google.com    SkASSERT(bytes == length);
15dcfce0a6a1820e04a45cadb41c45c79d7bf3ef4ayangsu@google.com    return [NSData dataWithBytesNoCopy:src length:length freeWhenDone:YES];
16dcfce0a6a1820e04a45cadb41c45c79d7bf3ef4ayangsu@google.com}
17dcfce0a6a1820e04a45cadb41c45c79d7bf3ef4ayangsu@google.com
18dcfce0a6a1820e04a45cadb41c45c79d7bf3ef4ayangsu@google.comNSData* NSData_dataFromResource(const char cname[], const char csuffix[]) {
19dcfce0a6a1820e04a45cadb41c45c79d7bf3ef4ayangsu@google.com    NSBundle* bundle = [NSBundle mainBundle];
20dcfce0a6a1820e04a45cadb41c45c79d7bf3ef4ayangsu@google.com    NSString* name = [NSString stringWithUTF8String:cname];
21dcfce0a6a1820e04a45cadb41c45c79d7bf3ef4ayangsu@google.com    NSString* suffix = [NSString stringWithUTF8String:csuffix];
22dcfce0a6a1820e04a45cadb41c45c79d7bf3ef4ayangsu@google.com    NSString* path = [bundle pathForResource:name ofType:suffix];
23dcfce0a6a1820e04a45cadb41c45c79d7bf3ef4ayangsu@google.com    return [NSData dataWithContentsOfMappedFile:path];
24dcfce0a6a1820e04a45cadb41c45c79d7bf3ef4ayangsu@google.com}
25dcfce0a6a1820e04a45cadb41c45c79d7bf3ef4ayangsu@google.com
26dcfce0a6a1820e04a45cadb41c45c79d7bf3ef4ayangsu@google.com///////////////////////////////////////////////////////////////////////////////
27dcfce0a6a1820e04a45cadb41c45c79d7bf3ef4ayangsu@google.com
28dcfce0a6a1820e04a45cadb41c45c79d7bf3ef4ayangsu@google.comSkStream_NSData::SkStream_NSData(NSData* data) {
29dcfce0a6a1820e04a45cadb41c45c79d7bf3ef4ayangsu@google.com    fNSData = data;
30dcfce0a6a1820e04a45cadb41c45c79d7bf3ef4ayangsu@google.com    [fNSData retain];
31dcfce0a6a1820e04a45cadb41c45c79d7bf3ef4ayangsu@google.com
32dcfce0a6a1820e04a45cadb41c45c79d7bf3ef4ayangsu@google.com    this->setMemory([fNSData bytes], [fNSData length], false);
33dcfce0a6a1820e04a45cadb41c45c79d7bf3ef4ayangsu@google.com}
34dcfce0a6a1820e04a45cadb41c45c79d7bf3ef4ayangsu@google.com
35dcfce0a6a1820e04a45cadb41c45c79d7bf3ef4ayangsu@google.comSkStream_NSData::~SkStream_NSData() {
36dcfce0a6a1820e04a45cadb41c45c79d7bf3ef4ayangsu@google.com    [fNSData release];
37dcfce0a6a1820e04a45cadb41c45c79d7bf3ef4ayangsu@google.com}
38dcfce0a6a1820e04a45cadb41c45c79d7bf3ef4ayangsu@google.com
39dcfce0a6a1820e04a45cadb41c45c79d7bf3ef4ayangsu@google.comSkStream_NSData* SkStream_NSData::CreateFromResource(const char name[],
40dcfce0a6a1820e04a45cadb41c45c79d7bf3ef4ayangsu@google.com                                                     const char suffix[]) {
41dcfce0a6a1820e04a45cadb41c45c79d7bf3ef4ayangsu@google.com    NSData* data = NSData_dataFromResource(name, suffix);
42dcfce0a6a1820e04a45cadb41c45c79d7bf3ef4ayangsu@google.com    return SkNEW_ARGS(SkStream_NSData, (data));
43dcfce0a6a1820e04a45cadb41c45c79d7bf3ef4ayangsu@google.com}
44dcfce0a6a1820e04a45cadb41c45c79d7bf3ef4ayangsu@google.com
45