OSSIM - Open Source Software Image Map  Version 1.9.0 (20180803)
TiffStreamAdaptor.cpp
Go to the documentation of this file.
2 
3 
4 tsize_t ossim::TiffIStreamAdaptor::tiffRead(thandle_t st,tdata_t buffer,tsize_t size)
5 {
6  TiffIStreamAdaptor* streamAdaptor = static_cast<TiffIStreamAdaptor*>(st);
7  tsize_t result = -1;
8  std::shared_ptr<ossim::istream> is = streamAdaptor->getStream();
9  if(is)
10  {
11  if(!is->good()) is->clear();
12  is->read((char*)buffer, size);
13 
14  result = is->gcount();
15  }
16 
17  return result;
18 };
19 
20 tsize_t ossim::TiffIStreamAdaptor::tiffWrite(thandle_t st, tdata_t buffer,tsize_t size)
21 {
22  return -1;
23 };
24 
25 int ossim::TiffIStreamAdaptor::tiffClose(thandle_t st)
26 {
27  TiffIStreamAdaptor* streamAdaptor = static_cast<TiffIStreamAdaptor*>(st);
28 
29  streamAdaptor->close();
30 
31  return 0;
32 };
33 
34 toff_t ossim::TiffIStreamAdaptor::tiffSeek(thandle_t st,toff_t pos, int whence)
35 {
36  TiffIStreamAdaptor* streamAdaptor = static_cast<TiffIStreamAdaptor*>(st);
37  toff_t result = -1;
38  std::ios_base::seekdir seekDir = std::ios::beg;
39  std::shared_ptr<ossim::istream> is = streamAdaptor->getStream();
40 
41 
42  if(is)
43  {
44  // Because we are adapting, on each seek we need to clear our previous error so
45  // we can continue on. Do not want the stream to stay in a failed state.
46  //
47  if(!is->good()) is->clear();
48 
49  switch(whence)
50  {
51  case 0: // SEEK_SET
52  {
53  seekDir = std::ios::beg;
54  break;
55  }
56  case 1: // SEEK_CUR
57  {
58  seekDir = std::ios::cur;
59  break;
60  }
61  case 2: // SEEK_END
62  {
63  seekDir = std::ios::end;
64  break;
65  }
66  }
67 
68  is->seekg(pos, seekDir);
69  result = is->tellg();
70  }
71 
72  return result;
73 };
74 
75 toff_t ossim::TiffIStreamAdaptor::tiffSize(thandle_t st)
76 {
77  toff_t result = -1;
78  TiffIStreamAdaptor* streamAdaptor = static_cast<TiffIStreamAdaptor*>(st);
79  std::shared_ptr<ossim::istream> is = streamAdaptor->getStream();
80  if (is)
81  {
82  if(!is->good()) is->clear();
83  ossim_int64 currentOffset = is->tellg();
84  is->seekg(0, std::ios::end);
85  result = is->tellg();
86  is->seekg(currentOffset);
87  }
88  return result;
89 };
90 
91 int ossim::TiffIStreamAdaptor::tiffMap(thandle_t, tdata_t*, toff_t*)
92 {
93  return 0;
94 };
95 
96 void ossim::TiffIStreamAdaptor::tiffUnmap(thandle_t, tdata_t, toff_t)
97 {
98  return;
99 };
yy_size_t size
long long ossim_int64