#ifndef _CAUDIOGROUPSET
#define _CAUDIOGROUPSET

#include "Kyoto/TToken.hpp"

#include "rstl/auto_ptr.hpp"
#include "rstl/optional_object.hpp"
#include "rstl/single_ptr.hpp"
#include "rstl/string.hpp"

#include "Kyoto/CResFactory.hpp"

class CInputStream;
class CAudioGrpSetLoc {
public:
  CAudioGrpSetLoc(const rstl::auto_ptr< uchar >& data, int length);
  const rstl::string& GetBaseDirName() const { return x10_baseDirName; }
  const rstl::string& GetGroupSetName() const { return x20_groupSetName; }
  void FreeSampleBuffer();
  uint AramUsage() const;
  const void* GetPool() const;
  const void* GetProject() const;
  const void* GetSample() const;
  const void* GetSampleDir() const;

private:
  rstl::auto_ptr< uchar > x0_data;
  rstl::auto_ptr< uchar > x8_;
  rstl::string x10_baseDirName;
  rstl::string x20_groupSetName;
  uint x30_;
  uint x34_;
  uint x38_;
  uint x3c_;
  uint x40_;
};

class CAudioGroupSet {
public:
  CAudioGroupSet(const TLockedToken< CAudioGrpSetLoc >& group);
  ~CAudioGroupSet();
  void Reload();
  void FreeSampleBuffer();
  void FreeAllBuffers();

private:
  rstl::string x0_baseDir;
  rstl::string x10_groupSetName;
  rstl::optional_object< TLockedToken< CAudioGrpSetLoc > > x20_groupSetTok;
};

#endif // _CAUDIOGROUPSET
