mirror of
https://github.com/tfussell/xlnt.git
synced 2024-03-22 13:11:17 +08:00
add pole back as actual files in the repo
This commit is contained in:
parent
54fd9a01de
commit
ee7f9bdb03
1
third-party/pole/AUTHORS
vendored
Normal file
1
third-party/pole/AUTHORS
vendored
Normal file
|
@ -0,0 +1 @@
|
||||||
|
Ariya Hidayat <ariya@kde.org>
|
21
third-party/pole/COMPILERS.txt
vendored
Normal file
21
third-party/pole/COMPILERS.txt
vendored
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
|
||||||
|
Borland C++ Compiler 5.5.1
|
||||||
|
------------------------------
|
||||||
|
The command-line Borland C++ Compiler version 5.5.1 is available for free
|
||||||
|
(as 'free' in 'free beer') from:
|
||||||
|
http://www.borland.com/products/downloads/download_cbuilder.html
|
||||||
|
|
||||||
|
OpenWatcom 1.3
|
||||||
|
------------------------------
|
||||||
|
OpenWatcom 1.3 does not have STL implementation, therefore you need to
|
||||||
|
install STLport (tested with version 4.6, earlier version may or may not
|
||||||
|
work). Because mainstream STLport can not be used directly with OpenWatcom,
|
||||||
|
please download and use the patched version from this site:
|
||||||
|
http://www.ecet.vtc.edu/~pchapin/OW/index.html
|
||||||
|
|
||||||
|
Digital Mars 8.41n
|
||||||
|
-------------------------------
|
||||||
|
Digital Mars command-line C/C++ compilers are available for download
|
||||||
|
from http://www.digitalmars.com. STLport is required and must be
|
||||||
|
installed as well.
|
||||||
|
|
24
third-party/pole/ChangeLog
vendored
Normal file
24
third-party/pole/ChangeLog
vendored
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
POLE 0.3
|
||||||
|
|
||||||
|
* changed license to two-clause BSD license
|
||||||
|
* fixed potential lock-up on corrupted file, bug reported by
|
||||||
|
Andrew Ziem <ahziem1@mailbolt.com>
|
||||||
|
* fixed error reading very huge file (larger than 13 MB)
|
||||||
|
* ported POLEView to Qt 4, making it available also for Windows
|
||||||
|
* assorted user-interface improvements in POLEView
|
||||||
|
|
||||||
|
POLE 0.2 (released March 2005)
|
||||||
|
|
||||||
|
* changed license to BSD license
|
||||||
|
* poleview: graphical tool to view a structured storage
|
||||||
|
* fixed occasional incorrect reading of big file
|
||||||
|
* fixed rare memory problem, found by valgrind
|
||||||
|
* fixed compile with Microsoft Visual C++ and Borland C++ (Windows)
|
||||||
|
* modified storage to become stateless (with better API)
|
||||||
|
* performance improvement, especially with very large file
|
||||||
|
|
||||||
|
POLE 0.1 (released March 2004)
|
||||||
|
|
||||||
|
* initial release
|
||||||
|
* support for reading structured storages, even large ones
|
||||||
|
* no support yet for creating or modifying a storage
|
25
third-party/pole/LICENSE
vendored
Normal file
25
third-party/pole/LICENSE
vendored
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
POLE - Portable C++ library to access OLE Storage
|
||||||
|
Copyright (C) 2002-2007 Ariya Hidayat (ariya@kde.org). All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions
|
||||||
|
are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright
|
||||||
|
notice, this list of conditions and the following disclaimer.
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
notice, this list of conditions and the following disclaimer in the
|
||||||
|
documentation and/or other materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
||||||
|
IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||||
|
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||||
|
THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
|
72
third-party/pole/README
vendored
Normal file
72
third-party/pole/README
vendored
Normal file
|
@ -0,0 +1,72 @@
|
||||||
|
POLE - portable library for structured storage
|
||||||
|
|
||||||
|
POLE is a portable C++ library to create and read structured storage. With a
|
||||||
|
structured storage, you can store files inside another file, or you can even
|
||||||
|
create complex directory tree, if you want to. The structured storage created by
|
||||||
|
POLE is compatible with Microsoft structured storage, also sometimes called as
|
||||||
|
OLE Compound Document, which are used among others in Microsoft Office. However,
|
||||||
|
POLE has the advantage that it's portable (i.e you can read or write a
|
||||||
|
structured storage in any supported platform), you don't need to rely on Windows
|
||||||
|
library.
|
||||||
|
|
||||||
|
Download
|
||||||
|
==========
|
||||||
|
|
||||||
|
Source code is available at http://developer.berlios.de/projects/pole/.
|
||||||
|
Please always use the latest stable version.
|
||||||
|
|
||||||
|
Install
|
||||||
|
========
|
||||||
|
|
||||||
|
To compile POLE, you need a C++ compiler, with standard C++ library which
|
||||||
|
supports STL (Standard Template Library). On Linux and other Unices, g++ will do
|
||||||
|
the job.
|
||||||
|
|
||||||
|
POLE is just a library, you have to integrate it as part of your
|
||||||
|
application/project. Since it consists of one source file and one header file,
|
||||||
|
it doesn't make much sense to compile POLE as separate library (either static or
|
||||||
|
dynamic). Simply add these files to your project and you're done.
|
||||||
|
|
||||||
|
The source tarball of POLE demonstrates the use of POLE to build poledump, a
|
||||||
|
small utility to extract any stream inside a structured storage. If you use g++
|
||||||
|
as the compiler, you can compile poledump using the following command:
|
||||||
|
|
||||||
|
g++ -o poledump pole.cpp poledump.cpp
|
||||||
|
|
||||||
|
You may use poledump like the example below:
|
||||||
|
|
||||||
|
poledump budget.xls Workbook result.xls
|
||||||
|
|
||||||
|
The above command will extract a stream named Workbook inside Excel document
|
||||||
|
(budget.xls) and save it as result.xls. File result.xls will still be recognized
|
||||||
|
as a valid workbook (in raw format). Launch Microsoft Excel, open this file, and
|
||||||
|
convince yourself.
|
||||||
|
|
||||||
|
Copyright and License
|
||||||
|
=====================
|
||||||
|
|
||||||
|
POLE - Portable C++ library to access OLE Storage
|
||||||
|
Copyright (C) 2002-2007 Ariya Hidayat (ariya@kde.org). All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions
|
||||||
|
are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright
|
||||||
|
notice, this list of conditions and the following disclaimer.
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
notice, this list of conditions and the following disclaimer in the
|
||||||
|
documentation and/or other materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
||||||
|
IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||||
|
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||||
|
THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
|
1190
third-party/pole/pole.cpp
vendored
Normal file
1190
third-party/pole/pole.cpp
vendored
Normal file
File diff suppressed because it is too large
Load Diff
358
third-party/pole/pole.h
vendored
Normal file
358
third-party/pole/pole.h
vendored
Normal file
|
@ -0,0 +1,358 @@
|
||||||
|
/* POLE - Portable C++ library to access OLE Storage
|
||||||
|
Copyright (C) 2002-2007 Ariya Hidayat (ariya@kde.org).
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions
|
||||||
|
are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright
|
||||||
|
notice, this list of conditions and the following disclaimer.
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
notice, this list of conditions and the following disclaimer in the
|
||||||
|
documentation and/or other materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
||||||
|
IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||||
|
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||||
|
THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef POLE_H
|
||||||
|
#define POLE_H
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
#include <list>
|
||||||
|
#include <fstream>
|
||||||
|
#include <iostream>
|
||||||
|
#include <list>
|
||||||
|
#include <string>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
namespace POLE
|
||||||
|
{
|
||||||
|
|
||||||
|
class StorageIO;
|
||||||
|
class Stream;
|
||||||
|
class StreamIO;
|
||||||
|
class DirTree;
|
||||||
|
class DirEntry;
|
||||||
|
|
||||||
|
class Storage
|
||||||
|
{
|
||||||
|
friend class Stream;
|
||||||
|
friend class StreamOut;
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
// for Storage::result()
|
||||||
|
enum { Ok, OpenFailed, NotOLE, BadOLE, UnknownError };
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructs a storage with name filename.
|
||||||
|
**/
|
||||||
|
Storage( char* bytes, unsigned long length );
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Destroys the storage.
|
||||||
|
**/
|
||||||
|
~Storage();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Opens the storage. Returns true if no error occurs.
|
||||||
|
**/
|
||||||
|
bool open();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Closes the storage.
|
||||||
|
**/
|
||||||
|
void close();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the error code of last operation.
|
||||||
|
**/
|
||||||
|
int result();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Finds all stream and directories in given path.
|
||||||
|
**/
|
||||||
|
std::list<std::string> entries( const std::string& path = "/" );
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns true if specified entry name is a directory.
|
||||||
|
*/
|
||||||
|
bool isDirectory( const std::string& name );
|
||||||
|
|
||||||
|
DirTree* dirTree();
|
||||||
|
|
||||||
|
StorageIO* storageIO();
|
||||||
|
|
||||||
|
std::list<DirEntry *> dirEntries( const std::string& path = "/" );
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Finds and returns a stream with the specified name.
|
||||||
|
* If reuse is true, this function returns the already created stream
|
||||||
|
* (if any). Otherwise it will create the stream.
|
||||||
|
*
|
||||||
|
* When errors occur, this function returns NULL.
|
||||||
|
*
|
||||||
|
* You do not need to delete the created stream, it will be handled
|
||||||
|
* automatically.
|
||||||
|
**/
|
||||||
|
Stream* stream( const std::string& name, bool reuse = true );
|
||||||
|
//Stream* stream( const std::string& name, int mode = Stream::ReadOnly, bool reuse = true );
|
||||||
|
|
||||||
|
private:
|
||||||
|
StorageIO* io;
|
||||||
|
|
||||||
|
// no copy or assign
|
||||||
|
Storage( const Storage& );
|
||||||
|
Storage& operator=( const Storage& );
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
class Stream
|
||||||
|
{
|
||||||
|
friend class Storage;
|
||||||
|
friend class StorageIO;
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new stream.
|
||||||
|
*/
|
||||||
|
// name must be absolute, e.g "/Workbook"
|
||||||
|
Stream( Storage* storage, const std::string& name );
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Destroys the stream.
|
||||||
|
*/
|
||||||
|
~Stream();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the full stream name.
|
||||||
|
*/
|
||||||
|
std::string fullName();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the stream size.
|
||||||
|
**/
|
||||||
|
unsigned long size();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the current read/write position.
|
||||||
|
**/
|
||||||
|
unsigned long tell();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the read/write position.
|
||||||
|
**/
|
||||||
|
void seek( unsigned long pos );
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reads a byte.
|
||||||
|
**/
|
||||||
|
int getch();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reads a block of data.
|
||||||
|
**/
|
||||||
|
unsigned long read( unsigned char* data, unsigned long maxlen );
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns true if the read/write position is past the file.
|
||||||
|
**/
|
||||||
|
bool eof();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns true whenever error occurs.
|
||||||
|
**/
|
||||||
|
bool fail();
|
||||||
|
|
||||||
|
private:
|
||||||
|
StreamIO* io;
|
||||||
|
|
||||||
|
// no copy or assign
|
||||||
|
Stream( const Stream& );
|
||||||
|
Stream& operator=( const Stream& );
|
||||||
|
};
|
||||||
|
|
||||||
|
class Header
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
unsigned char id[8]; // signature, or magic identifier
|
||||||
|
unsigned b_shift; // bbat->blockSize = 1 << b_shift
|
||||||
|
unsigned s_shift; // sbat->blockSize = 1 << s_shift
|
||||||
|
unsigned num_bat; // blocks allocated for big bat
|
||||||
|
unsigned dirent_start; // starting block for directory info
|
||||||
|
unsigned threshold; // switch from small to big file (usually 4K)
|
||||||
|
unsigned sbat_start; // starting block index to store small bat
|
||||||
|
unsigned num_sbat; // blocks allocated for small bat
|
||||||
|
unsigned mbat_start; // starting block to store meta bat
|
||||||
|
unsigned num_mbat; // blocks allocated for meta bat
|
||||||
|
unsigned long bb_blocks[109];
|
||||||
|
|
||||||
|
Header();
|
||||||
|
bool valid();
|
||||||
|
void load( const unsigned char* buffer );
|
||||||
|
void save( unsigned char* buffer );
|
||||||
|
void debug();
|
||||||
|
};
|
||||||
|
|
||||||
|
class AllocTable
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
static const unsigned Eof;
|
||||||
|
static const unsigned Avail;
|
||||||
|
static const unsigned Bat;
|
||||||
|
static const unsigned MetaBat;
|
||||||
|
unsigned blockSize;
|
||||||
|
AllocTable();
|
||||||
|
void clear();
|
||||||
|
unsigned long count();
|
||||||
|
void resize( unsigned long newsize );
|
||||||
|
void preserve( unsigned long n );
|
||||||
|
void set( unsigned long index, unsigned long val );
|
||||||
|
unsigned unused();
|
||||||
|
void setChain( std::vector<unsigned long> );
|
||||||
|
std::vector<unsigned long> follow( unsigned long start );
|
||||||
|
unsigned long operator[](unsigned long index );
|
||||||
|
void load( const unsigned char* buffer, unsigned len );
|
||||||
|
void save( unsigned char* buffer );
|
||||||
|
unsigned size();
|
||||||
|
void debug();
|
||||||
|
private:
|
||||||
|
std::vector<unsigned long> data;
|
||||||
|
AllocTable( const AllocTable& );
|
||||||
|
AllocTable& operator=( const AllocTable& );
|
||||||
|
};
|
||||||
|
|
||||||
|
class DirEntry
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
bool valid; // false if invalid (should be skipped)
|
||||||
|
std::string name; // the name, not in unicode anymore
|
||||||
|
bool dir; // true if directory
|
||||||
|
unsigned long size; // size (not valid if directory)
|
||||||
|
unsigned long start; // starting block
|
||||||
|
unsigned prev; // previous sibling
|
||||||
|
unsigned next; // next sibling
|
||||||
|
unsigned child; // first child
|
||||||
|
|
||||||
|
DirEntry(): valid(false), name(), dir(false), size(0), start(0),
|
||||||
|
prev(0), next(0), child(0) {}
|
||||||
|
};
|
||||||
|
|
||||||
|
class DirTree
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
static const unsigned End;
|
||||||
|
DirTree();
|
||||||
|
void clear();
|
||||||
|
unsigned entryCount();
|
||||||
|
DirEntry* entry( unsigned index );
|
||||||
|
DirEntry* entry( const std::string& name, bool create=false );
|
||||||
|
int indexOf( DirEntry* e );
|
||||||
|
int parent( unsigned index );
|
||||||
|
std::string fullName( unsigned index );
|
||||||
|
std::vector<unsigned> children( unsigned index );
|
||||||
|
void load( unsigned char* buffer, unsigned len );
|
||||||
|
void save( unsigned char* buffer );
|
||||||
|
unsigned size();
|
||||||
|
void debug();
|
||||||
|
private:
|
||||||
|
std::vector<DirEntry> entries;
|
||||||
|
DirTree( const DirTree& );
|
||||||
|
DirTree& operator=( const DirTree& );
|
||||||
|
};
|
||||||
|
|
||||||
|
class StorageIO
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
Storage* storage; // owner
|
||||||
|
unsigned char *filedata;
|
||||||
|
unsigned long dataLength;
|
||||||
|
int result; // result of operation
|
||||||
|
bool opened; // true if file is opened
|
||||||
|
unsigned long filesize; // size of the file
|
||||||
|
|
||||||
|
Header* header; // storage header
|
||||||
|
DirTree* dirtree; // directory tree
|
||||||
|
AllocTable* bbat; // allocation table for big blocks
|
||||||
|
AllocTable* sbat; // allocation table for small blocks
|
||||||
|
|
||||||
|
std::vector<unsigned long> sb_blocks; // blocks for "small" files
|
||||||
|
|
||||||
|
std::list<Stream*> streams;
|
||||||
|
|
||||||
|
StorageIO( Storage* storage, char* bytes, unsigned long length );
|
||||||
|
~StorageIO();
|
||||||
|
|
||||||
|
bool open();
|
||||||
|
void close();
|
||||||
|
void flush();
|
||||||
|
void load();
|
||||||
|
void create();
|
||||||
|
|
||||||
|
unsigned long loadBigBlocks( std::vector<unsigned long> blocks, unsigned char* buffer, unsigned long maxlen );
|
||||||
|
|
||||||
|
unsigned long loadBigBlock( unsigned long block, unsigned char* buffer, unsigned long maxlen );
|
||||||
|
|
||||||
|
unsigned long loadSmallBlocks( std::vector<unsigned long> blocks, unsigned char* buffer, unsigned long maxlen );
|
||||||
|
|
||||||
|
unsigned long loadSmallBlock( unsigned long block, unsigned char* buffer, unsigned long maxlen );
|
||||||
|
|
||||||
|
StreamIO* streamIO( const std::string& name );
|
||||||
|
|
||||||
|
private:
|
||||||
|
// no copy or assign
|
||||||
|
StorageIO( const StorageIO& );
|
||||||
|
StorageIO& operator=( const StorageIO& );
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
class StreamIO
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
StorageIO* io;
|
||||||
|
DirEntry* entry;
|
||||||
|
std::string fullName;
|
||||||
|
bool eof;
|
||||||
|
bool fail;
|
||||||
|
|
||||||
|
StreamIO( StorageIO* io, DirEntry* entry );
|
||||||
|
~StreamIO();
|
||||||
|
unsigned long size();
|
||||||
|
void seek( unsigned long pos );
|
||||||
|
unsigned long tell();
|
||||||
|
int getch();
|
||||||
|
unsigned long read( unsigned char* data, unsigned long maxlen );
|
||||||
|
unsigned long read( unsigned long pos, unsigned char* data, unsigned long maxlen );
|
||||||
|
|
||||||
|
|
||||||
|
private:
|
||||||
|
std::vector<unsigned long> blocks;
|
||||||
|
|
||||||
|
// no copy or assign
|
||||||
|
StreamIO( const StreamIO& );
|
||||||
|
StreamIO& operator=( const StreamIO& );
|
||||||
|
|
||||||
|
// pointer for read
|
||||||
|
unsigned long m_pos;
|
||||||
|
|
||||||
|
// simple cache system to speed-up getch()
|
||||||
|
unsigned char* cache_data;
|
||||||
|
unsigned long cache_size;
|
||||||
|
unsigned long cache_pos;
|
||||||
|
void updateCache();
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace POLE
|
||||||
|
|
||||||
|
|
||||||
|
#endif // POLE_H
|
Loading…
Reference in New Issue
Block a user