/*
*******************************************************************************
*
*   Copyright (C) 2000, International Business Machines
*   Corporation and others.  All Rights Reserved.
*
*******************************************************************************
*
* File reslist.h
*
* Modification History:
*
*   Date        Name        Description
*   02/21/00    weiv        Creation.
*******************************************************************************
*/

#ifndef RESLIST_H
#define RESLIST_H

#define KEY_SPACE_SIZE 65532
#define RESLIST_MAX_INT_VECTOR 2048

#include "unicode/utypes.h"
#include "unicode/ures.h"
#include "unicode/ustring.h"
#include "uresdata.h"
#include "cmemory.h"
#include "cstring.h"
#include "unewdata.h"

/* Resource bundle root table */
struct SRBRoot {
  char *fLocale;
  uint16_t fKeyPoint;
  char *fKeys;
  int32_t fCount;
  struct SResource *fRoot; 
};

struct SRBRoot *bundle_open(UErrorCode *status);
/*void bundle_write(struct SRBRoot *bundle, const char *outputDir, const char *filename, UErrorCode *status);*/
void bundle_write(struct SRBRoot *bundle, const char *outputDir, UErrorCode *status);
void bundle_close(struct SRBRoot *bundle, UErrorCode *status);
void bundle_setlocale(struct SRBRoot *bundle, UChar *locale, UErrorCode *status);
uint16_t bundle_addtag(struct SRBRoot *bundle, const char *tag, UErrorCode *status);

/* Various resource types */

struct SResTable {
    uint16_t fCount;
    uint32_t fChildrenSize;
    struct SResource *fFirst;
    struct SRBRoot *fRoot;
};

struct SResource* table_open(struct SRBRoot *bundle, char *tag, UErrorCode *status);
void table_close(struct SResource *table, UErrorCode *status);
void table_add(struct SResource *table, struct SResource *res, UErrorCode *status);
struct SResource *table_get(struct SResource *table, char *key, UErrorCode *status);

struct SResArray {
    uint32_t fCount;
    uint32_t fChildrenSize;
    struct SResource *fFirst;
    struct SResource *fLast;
};

struct SResource* array_open(struct SRBRoot *bundle, char *tag, UErrorCode *status);
void array_close(struct SResource *array, UErrorCode *status);
void array_add(struct SResource *array, struct SResource *res, UErrorCode *status);

struct SResString {
    uint32_t fLength;
    UChar *fChars;
};

struct SResource *string_open(struct SRBRoot *bundle, char *tag, UChar *value, int32_t len, UErrorCode *status);
void string_close(struct SResource *string, UErrorCode *status);

struct SResIntVector {
    uint32_t fCount;
    uint32_t *fArray;
};

struct SResource* intvector_open(struct SRBRoot *bundle, char *tag, UErrorCode *status);
void intvector_close(struct SResource *intvector, UErrorCode *status);
void intvector_add(struct SResource *intvector, int32_t value, UErrorCode *status);

struct SResInt {
    uint32_t fValue;
};

struct SResource *int_open(struct SRBRoot *bundle, char *tag, int32_t value, UErrorCode *status);
void int_close(struct SResource *intres, UErrorCode *status);

struct SResBinary {
    uint32_t fLength;
    uint8_t *fData;
};

struct SResource *bin_open(struct SRBRoot *bundle, const char *tag, uint32_t length, uint8_t *data, UErrorCode *status);
void bin_close(struct SResource *binres, UErrorCode *status);

/* Resource place holder */

struct SResource {
    UResType fType;
    uint16_t fKey;
    uint32_t fSize; /* Size in bytes outside the header part */
    struct SResource *fNext; /*This is for internal chaining while building*/
    union {
        struct SResTable fTable;
        struct SResArray fArray;
        struct SResString fString;
        struct SResIntVector fIntVector;
        struct SResInt fIntValue;
        struct SResBinary fBinaryValue;
    } u;
};

void res_close(struct SResource *res, UErrorCode *status);




#endif /* #ifndef RESLIST_H */
