File: cfgacc.cpp

package info (click to toggle)
crystalspace 0.94-20020412-3
  • links: PTS
  • area: main
  • in suites: woody
  • size: 62,276 kB
  • ctags: 52,843
  • sloc: cpp: 274,783; ansic: 6,608; perl: 6,276; objc: 3,952; asm: 2,942; python: 2,354; php: 542; pascal: 530; sh: 430; makefile: 370; awk: 193
file content (82 lines) | stat: -rw-r--r-- 2,282 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
/*
    Copyright (C) 2001 by Martin Geisse <mgeisse@gmx.net>

    This library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Library General Public
    License as published by the Free Software Foundation; either
    version 2 of the License, or (at your option) any later version.

    This library 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
    Library General Public License for more details.

    You should have received a copy of the GNU Library General Public
    License along with this library; if not, write to the Free
    Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/

#include "cssysdef.h"
#include "csutil/cfgacc.h"
#include "iutil/eventh.h"
#include "iutil/comp.h"
#include "iutil/vfs.h"
#include "iutil/plugin.h"
#include "iutil/cfgmgr.h"
#include "iutil/objreg.h"

csConfigAccess::csConfigAccess()
{
  object_reg = NULL;
}

csConfigAccess::csConfigAccess(iObjectRegistry *object_reg, const char *fname,
  bool vfs, int priority)
{
  AddConfig (object_reg, fname, vfs, priority);
}

csConfigAccess::~csConfigAccess()
{
  if (object_reg)
  {
    iConfigManager* cfgmgr = CS_QUERY_REGISTRY (object_reg, iConfigManager);
    if (cfgmgr)
    {
      int i;
      for (i = 0; i < ConfigFiles.Length (); i++)
	cfgmgr->RemoveDomain ((iConfigFile *)ConfigFiles.Get (i));
      cfgmgr->DecRef ();
    }
  }
}

void csConfigAccess::AddConfig (iObjectRegistry *object_reg, const char *fname,
  bool vfs, int priority)
{
  csConfigAccess::object_reg = object_reg;
  iConfigManager* cfgmgr = CS_QUERY_REGISTRY (object_reg, iConfigManager);
  iVFS* VFS = NULL;
  if (vfs)
  {
    VFS = CS_QUERY_REGISTRY (object_reg, iVFS);
    //CS_ASSERT (VFS != NULL);
  }
  ConfigFiles.Push (cfgmgr->AddDomain (fname, VFS, priority));
  cfgmgr->DecRef ();
  if (VFS) VFS->DecRef ();
}

iConfigFile *csConfigAccess::operator->()
{
  iConfigFile* cfg = CS_QUERY_REGISTRY (object_reg, iConfigManager);
  cfg->DecRef ();
  return cfg;
}

csConfigAccess::operator iConfigFile* ()
{
  iConfigFile* cfg = CS_QUERY_REGISTRY (object_reg, iConfigManager);
  cfg->DecRef ();
  return cfg;
}