~ubuntu-branches/ubuntu/saucy/darktable/saucy

« back to all changes in this revision

Viewing changes to src/rawspeed/RawSpeed/FileMap.cpp

  • Committer: Bazaar Package Importer
  • Author(s): David Bremner
  • Date: 2011-08-02 21:32:31 UTC
  • mfrom: (1.1.2 upstream)
  • Revision ID: james.westby@ubuntu.com-20110802213231-r9v63trgyk1e822j
Tags: 0.9.1-1
New upstream release

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
#include "StdAfx.h"
2
 
#include "FileMap.h"
3
 
/*
4
 
    RawSpeed - RAW file decoder.
5
 
 
6
 
    Copyright (C) 2009 Klaus Post
7
 
 
8
 
    This library is free software; you can redistribute it and/or
9
 
    modify it under the terms of the GNU Lesser General Public
10
 
    License as published by the Free Software Foundation; either
11
 
    version 2 of the License, or (at your option) any later version.
12
 
 
13
 
    This library is distributed in the hope that it will be useful,
14
 
    but WITHOUT ANY WARRANTY; without even the implied warranty of
15
 
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16
 
    Lesser General Public License for more details.
17
 
 
18
 
    You should have received a copy of the GNU Lesser General Public
19
 
    License along with this library; if not, write to the Free Software
20
 
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
21
 
 
22
 
    http://www.klauspost.com
23
 
*/
24
 
 
25
 
namespace RawSpeed {
26
 
 
27
 
FileMap::FileMap(uint32 _size) : size(_size) {
28
 
  if (!size)
29
 
    throw FileIOException("Filemap of 0 bytes not possible");
30
 
  data = (uchar8*)_aligned_malloc(size + 4, 16);
31
 
  if (!data) {
32
 
    throw FileIOException("Not enough memory to open file.");
33
 
  }
34
 
  mOwnAlloc = true;
35
 
}
36
 
 
37
 
FileMap::FileMap(uchar8* _data, uint32 _size): data(_data), size(_size) {
38
 
  mOwnAlloc = false;
39
 
}
40
 
 
41
 
 
42
 
FileMap::~FileMap(void) {
43
 
  if (data && mOwnAlloc) {
44
 
    _aligned_free(data);
45
 
  }
46
 
  data = 0;
47
 
  size = 0;
48
 
}
49
 
 
50
 
FileMap* FileMap::clone() {
51
 
  FileMap *new_map = new FileMap(size);
52
 
  memcpy(new_map->data, data, size);
53
 
  return new_map;
54
 
}
55
 
 
56
 
FileMap* FileMap::cloneRandomSize() {
57
 
  uint32 new_size = (rand() | (rand() << 15)) % size;
58
 
  FileMap *new_map = new FileMap(new_size);
59
 
  memcpy(new_map->data, data, new_size);
60
 
  return new_map;
61
 
}
62
 
 
63
 
void FileMap::corrupt(int errors) {
64
 
  for (int i = 0; i < errors; i++) {
65
 
    uint32 pos = (rand() | (rand() << 15)) % size;
66
 
    data[pos] = rand() & 0xff;
67
 
  }
68
 
}
69
 
 
70
 
const uchar8* FileMap::getData( uint32 offset )
71
 
{
72
 
  if (offset >= size)
73
 
    throw IOException("FileMap: Attempting to read out of file.");
74
 
  return &data[offset];
75
 
}
76
 
} // namespace RawSpeed