/* Copyright 2018, UCAR/Unidata and OPeNDAP, Inc.
   See the COPYRIGHT file for more information. */

#ifndef D4BYTES_H
#define D4BYTES_H 1

typedef struct D4bytes {
  size_t alloc;
  size_t used;
  void* memory;
} D4bytes;

#if defined(_CPLUSPLUS_) || defined(__CPLUSPLUS__) || defined(__CPLUSPLUS)
extern "C" {
#endif

extern D4bytes* d4bytesnew(void);
extern void d4bytesfree(D4bytes*);
extern void* d4bytesalloc(D4bytes*,size_t);
extern void* d4byteszero(D4bytes*,size_t);
extern D4bytes* d4bytesconcat(D4bytes*,D4bytes*);

#define d4byteslength(d4) ((d4)->used)
#define d4bytesmemory(d4) ((d4)->memory)
#define d4bytesreset(d4) {(d4)->used = 0;}

#if defined(_CPLUSPLUS_) || defined(__CPLUSPLUS__) || defined(__CPLUSPLUS)
}
#endif

#endif /*D4BYTES_H*/
