1 /*
2 This product contains certain software code or other information
3 ("AT&T Software") proprietary to AT&T Corp. ("AT&T").  The AT&T
4 Software is provided to you "AS IS".  YOU ASSUME TOTAL RESPONSIBILITY
5 AND RISK FOR USE OF THE AT&T SOFTWARE.  AT&T DOES NOT MAKE, AND
6 EXPRESSLY DISCLAIMS, ANY EXPRESS OR IMPLIED WARRANTIES OF ANY KIND
7 WHATSOEVER, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
8 MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, WARRANTIES OF
9 TITLE OR NON-INFRINGEMENT OF ANY INTELLECTUAL PROPERTY RIGHTS, ANY
10 WARRANTIES ARISING BY USAGE OF TRADE, COURSE OF DEALING OR COURSE OF
11 PERFORMANCE, OR ANY WARRANTY THAT THE AT&T SOFTWARE IS "ERROR FREE" OR
12 WILL MEET YOUR REQUIREMENTS.
13 
14 Unless you accept a license to use the AT&T Software, you shall not
15 reverse compile, disassemble or otherwise reverse engineer this
16 product to ascertain the source code for any AT&T Software.
17 
18 (c) AT&T Corp. All rights reserved.  AT&T is a registered trademark of AT&T Corp.
19 
20 ***********************************************************************
21 
22 History:
23 
24       24/11/99  - initial release by Hartmut Liefke, liefke@seas.upenn.edu
25                                      Dan Suciu,      suciu@research.att.com
26 */
27 
28 //**************************************************************************
29 //**************************************************************************
30 
31 #pragma once
32 
33 #define MAX_BLOCKSIZE      (2L*1024L*1024L)
34 #define MIN_DATABLOCKSIZE  512
35 
36 struct UnpackDataBlock {
37    unsigned long     len;
38    UnpackDataBlock   *next;
39    // The data starts right after the last attribute !
40 
GetPtrUnpackDataBlock41    char *GetPtr() {  return (char *)(this+1);  }
GetLenUnpackDataBlock42    unsigned long GetLen() {  return len;  }
43 };
44 
45 struct UnpackMemBlock
46 {
47    unsigned long  len;
48    unsigned long  used;
49    UnpackMemBlock *next;
50 };
51 
52 class UnpackMemMan
53 {
54    UnpackMemBlock *firstblock,*lastblock;
55    unsigned long  curmaxblocksize;
56    unsigned long  neededmemoryspace;
57 
58    UnpackMemBlock *AllocateMemBlock(UnpackMemBlock **memblockref);
59 
60 public:
61    char Init(unsigned long myneededmemoryspace,unsigned long datablockcount);
62    UnpackDataBlock *AllocateDataBlocks(unsigned long len);
63 };
64