/*
 * PVVMUD a 3D MUD
 * Copyright (C) 1998-1999  Programvareverkstedet (pvv@pvv.org)
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 *
 */
#ifndef _GAMEVALUE_H
#define _GAMEVALUE_H

#include "pvvmud.H"
#include <hash_map>
#include <iostream>

class CGameValueObject {

public:

  CGameValueObject();
  ~CGameValueObject();

  int   type;
  union {
    BYTE   _byte;
    WORD   _word;
    DWORD  _dword;
    float  _float;
    double _double;
  } value;
  char *_ptr;

};

class CGameValue {
  enum {GV_INVALID=-1,GV_BYTE,GV_WORD,GV_DWORD,GV_FLOAT,GV_DOUBLE,GV_STRING};

  struct eqstr {
    bool operator()(const char* s1,const char* s2) const
    {
      return strcmp(s1,s2)==0;
    };
  };
  typedef hash_map<const char *, CGameValueObject *, hash<const char *>,eqstr> valhash;
  valhash hash;

public:

  CGameValue(void);
  ~CGameValue(void);

  void add(char *, BYTE *);
  void add(char *, WORD *);
  void add(char *, DWORD *);
  void add(char *, float *);
  void add(char *, double *);
  void add(char *, char *, int *);

  bool get(char *, BYTE *);
  bool get(char *, WORD *);
  bool get(char *, DWORD *);
  bool get(char *, float *);
  bool get(char *, double *);
  bool get(char *, char *, int *);

  bool load(iostream &readFile);
  bool save(iostream &saveFile);
};

#endif