/usr/include/gdcm-2.6/gdcmByteBuffer.h is in libgdcm2-dev 2.6.3-3ubuntu3.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 | /*=========================================================================
Program: GDCM (Grassroots DICOM). A DICOM library
Copyright (c) 2006-2011 Mathieu Malaterre
All rights reserved.
See Copyright.txt or http://gdcm.sourceforge.net/Copyright.html for details.
This software is distributed WITHOUT ANY WARRANTY; without even
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the above copyright notice for more information.
=========================================================================*/
#ifndef GDCMBYTEBUFFER_H
#define GDCMBYTEBUFFER_H
#include "gdcmTypes.h"
#include <vector>
#include <assert.h>
#include <string.h> // memmove
#error should not be used
namespace gdcm
{
/**
* \brief ByteBuffer
*
* Detailled description here
* \note
* looks like a std::streambuf or std::filebuf class with the get and
* peek pointer
*/
class ByteBuffer
{
static const int InitBufferSize = 1024;
public:
ByteBuffer() : Start(0), End(0),Limit(0) {}
char *Get(int len)
{
char *buffer = &Internal[0];
if (len > Limit - End)
{
// FIXME avoid integer overflow
int neededSize = len + (End - Start);
if (neededSize <= Limit - buffer)
{
memmove(buffer, Start, End - Start);
End = buffer + (End - Start);
Start = buffer;
}
else
{
char *newBuf;
int bufferSize = Limit - Start;
if ( bufferSize == 0 )
{
bufferSize = InitBufferSize;
}
do
{
bufferSize *= 2;
} while (bufferSize < neededSize);
//newBuf = malloc(bufferSize);
try
{
Internal.reserve(bufferSize);
newBuf = &Internal[0];
}
catch(...)
{
//errorCode = NoMemoryError;
return 0;
}
Limit = newBuf + bufferSize;
if (Start)
{
memcpy(newBuf, Start, End - Start);
}
End = newBuf + (End - Start);
Start = /*buffer =*/ newBuf;
}
}
assert( (int)Internal.capacity() >= len );
return End;
}
void UpdatePosition() {}
void ShiftEnd(int len) {
End += len;
}
const char *GetStart() const {
return Start;
}
private:
typedef std::vector<char> CharVector;
const char *Start;
char *End;
const char *Limit;
CharVector Internal;
};
} // end namespace gdcm
#endif //GDCMBYTEBUFFER_H
|