root/juggler/tags/1.0.7/Sound/vjSoundFactory.cpp

Revision 8789, 3.2 kB (checked in by patrickh, 7 years ago)

Copyright update.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
Line 
1 /*************** <auto-copyright.pl BEGIN do not edit this line> **************
2  *
3  * VR Juggler is (C) Copyright 1998, 1999, 2000, 2001, 2002
4  *   by Iowa State University
5  *
6  * Original Authors:
7  *   Allen Bierbaum, Christopher Just,
8  *   Patrick Hartling, Kevin Meinert,
9  *   Carolina Cruz-Neira, Albert Baker
10  *
11  * This library is free software; you can redistribute it and/or
12  * modify it under the terms of the GNU Library General Public
13  * License as published by the Free Software Foundation; either
14  * version 2 of the License, or (at your option) any later version.
15  *
16  * This library is distributed in the hope that it will be useful,
17  * but WITHOUT ANY WARRANTY; without even the implied warranty of
18  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
19  * Library General Public License for more details.
20  *
21  * You should have received a copy of the GNU Library General Public
22  * License along with this library; if not, write to the
23  * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
24  * Boston, MA 02111-1307, USA.
25  *
26  * -----------------------------------------------------------------
27  * File:          $RCSfile$
28  * Date modified: $Date$
29  * Version:       $Revision$
30  * -----------------------------------------------------------------
31  *
32  *************** <auto-copyright.pl END do not edit this line> ***************/
33
34 #include <Sound/vjSoundFactory.h>
35 #include <Sound/vjSoundEngineConstructor.h>
36
37
38 //std::vector< vjSoundEngineConstructorBase* > vjSoundFactory::mConstructors;
39 //vjSoundFactory* vjSoundFactory::_instance = NULL;   //: The singleton instance ptr
40 vjSingletonImp(vjSoundFactory);
41
42 vjSoundFactory::vjSoundFactory()
43 {
44 }
45
46 // register a creator to the factory.
47 // this is intended to be used by each api's registration method
48
49 void vjSoundFactory::registerConstructor( vjSoundEngineConstructorBase* constructor )
50 {
51    vjASSERT(constructor != NULL);
52    mConstructors.push_back(constructor);     // Add the constructor to the list
53    std::cout << "vjSoundFactory::registerConstructor: Sound engine registered for: "
54              << constructor->getChunkType().c_str()
55              << "   :" << (void*)constructor
56              << " type:" << typeid(*constructor).name() << std::endl;
57 }
58
59 bool vjSoundFactory::recognizeEngine(vjConfigChunk* chunk)
60 {
61         if(vjSoundFactory::findConstructor(chunk) == -1)
62       return false;
63    else
64       return true;
65 }
66
67
68 vjSoundEngine* vjSoundFactory::loadEngine(vjConfigChunk* chunk)
69 {
70         vjASSERT(recognizeEngine(chunk));
71
72    int index = findConstructor(chunk);
73
74    vjSoundEngine* new_engine;
75    vjSoundEngineConstructorBase* constructor = mConstructors[index];
76
77    vjDEBUG(vjDBG_INPUT_MGR,3) << "vjSoundFactory::loadEngine: Loading device: "
78               << chunk->getType() << "  with: "
79               << typeid(*constructor).name() << std::endl << vjDEBUG_FLUSH;
80
81    new_engine = constructor->createEngine(chunk);
82    return new_engine;
83 }
84
85 int vjSoundFactory::findConstructor(vjConfigChunk* chunk)
86 {
87    std::string chunk_type;
88    chunk_type = (std::string)chunk->getType();
89    
90    for (unsigned int i = 0; i < mConstructors.size(); i++)
91    {
92       // Get next constructor
93       vjSoundEngineConstructorBase* construct = mConstructors[i];
94       vjASSERT(construct != NULL);
95
96       if(construct->getChunkType() == chunk_type)
97          return i;
98    }
99
100    return -1;
101 }
Note: See TracBrowser for help on using the browser.