Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
att
GitHub Repository: att/ast
Path: blob/master/src/lib/libvdelta/vdelta.h
1808 views
1
/***********************************************************************
2
* *
3
* This software is part of the ast package *
4
* Copyright (c) 1995-2011 AT&T Intellectual Property *
5
* and is licensed under the *
6
* Eclipse Public License, Version 1.0 *
7
* by AT&T Intellectual Property *
8
* *
9
* A copy of the License is available at *
10
* http://www.eclipse.org/org/documents/epl-v10.html *
11
* (with md5 checksum b35adb5213ca9657e911e9befb180842) *
12
* *
13
* Information and Software Systems Research *
14
* AT&T Research *
15
* Florham Park NJ *
16
* *
17
* Phong Vo <[email protected]> *
18
* *
19
***********************************************************************/
20
#ifndef _VDELTA_H
21
#define _VDELTA_H 1
22
23
/* Header for the vdelta library
24
** Written by Kiem-Phong Vo ([email protected])
25
*/
26
27
/* standardize conventions */
28
#ifndef __KPV__
29
#define __KPV__ 1
30
31
/* The symbol __STD_C indicates that the language is ANSI-C or C++ */
32
#ifndef __STD_C
33
#ifdef __STDC__
34
#define __STD_C 1
35
#else
36
#if __cplusplus || c_plusplus
37
#define __STD_C 1
38
#else
39
#define __STD_C 0
40
#endif /*__cplusplus*/
41
#endif /*__STDC__*/
42
#endif /*__STD_C*/
43
44
/* For C++, extern symbols must be protected against name mangling */
45
#ifndef _BEGIN_EXTERNS_
46
#if __cplusplus || c_plusplus
47
#define _BEGIN_EXTERNS_ extern "C" {
48
#define _END_EXTERNS_ }
49
#else
50
#define _BEGIN_EXTERNS_
51
#define _END_EXTERNS_
52
#endif
53
#endif /*_BEGIN_EXTERNS_*/
54
55
/* _ARG_ simplifies function prototypes between K&R-C and more modern Cs */
56
#ifndef _ARG_
57
#if __STD_C
58
#define _ARG_(x) x
59
#else
60
#define _ARG_(x) ()
61
#endif
62
#endif /*_ARG_*/
63
64
/* The type Void_t is properly defined so that Void_t* can address any type */
65
#ifndef Void_t
66
#if __STD_C
67
#define Void_t void
68
#else
69
#define Void_t char
70
#endif
71
#endif /*Void_t*/
72
73
/* The below are for DLLs on systems such as WINDOWS that only
74
** allows pointers across client ** and library code.
75
*/
76
#ifndef _PTR_
77
#if _DLL_INDIRECT_DATA && !defined(_DLL) /* building client code */
78
#define _ADR_ /* cannot export whole structs - data access via ptrs */
79
#define _PTR_ *
80
#else /* library code or a normal system */
81
#define _ADR_ & /* exporting whole struct is ok */
82
#define _PTR_
83
#endif
84
#endif /*_PTR_*/
85
86
#endif /*__KPV__*/
87
88
/* user-supplied functions to do io */
89
typedef struct _vddisc_s Vddisc_t;
90
typedef int(* Vdio_f)_ARG_((Void_t*, int, long, Vddisc_t*));
91
struct _vddisc_s
92
{ long size; /* total data size */
93
Void_t* data; /* data array */
94
Vdio_f readf; /* to read data */
95
Vdio_f writef; /* to write data */
96
};
97
98
/* magic header for delta output */
99
#define VD_MAGIC "\026\004\000\002"
100
#define VD_MAGIC_OLD "vd02"
101
102
_BEGIN_EXTERNS_
103
extern long vddelta _ARG_((Vddisc_t*,Vddisc_t*,Vddisc_t*));
104
extern long vdupdate _ARG_((Vddisc_t*,Vddisc_t*,Vddisc_t*));
105
extern int vdsqueeze _ARG_((Void_t*, int, Void_t*));
106
extern int vdexpand _ARG_((Void_t*, int, Void_t*));
107
_END_EXTERNS_
108
109
#endif /*_VDELTA_H*/
110
111