(file) Return to CIMQualifierList.cpp CVS log (file) (dir) Up to [Pegasus] / pegasus / src / Pegasus / Common

Diff for /pegasus/src/Pegasus/Common/CIMQualifierList.cpp between version 1.34 and 1.67

version 1.34, 2002/05/15 12:28:21 version 1.67, 2008/10/01 04:46:17
Line 1 
Line 1 
 //%/////////////////////////////////////////////////////////////////////////////  //%2006////////////////////////////////////////////////////////////////////////
 // //
 // Copyright (c) 2000, 2001 The Open group, BMC Software, Tivoli Systems, IBM  // Copyright (c) 2000, 2001, 2002 BMC Software; Hewlett-Packard Development
   // Company, L.P.; IBM Corp.; The Open Group; Tivoli Systems.
   // Copyright (c) 2003 BMC Software; Hewlett-Packard Development Company, L.P.;
   // IBM Corp.; EMC Corporation, The Open Group.
   // Copyright (c) 2004 BMC Software; Hewlett-Packard Development Company, L.P.;
   // IBM Corp.; EMC Corporation; VERITAS Software Corporation; The Open Group.
   // Copyright (c) 2005 Hewlett-Packard Development Company, L.P.; IBM Corp.;
   // EMC Corporation; VERITAS Software Corporation; The Open Group.
   // Copyright (c) 2006 Hewlett-Packard Development Company, L.P.; IBM Corp.;
   // EMC Corporation; Symantec Corporation; The Open Group.
 // //
 // Permission is hereby granted, free of charge, to any person obtaining a copy // Permission is hereby granted, free of charge, to any person obtaining a copy
 // of this software and associated documentation files (the "Software"), to // of this software and associated documentation files (the "Software"), to
Line 20 
Line 29 
 // //
 //============================================================================== //==============================================================================
 // //
 // Author: Mike Brasher (mbrasher@bmc.com)  
 //  
 // Modified By: Karl Schopmeyer (k.schopmeyer@opengroup.org)  
 //  
 //%///////////////////////////////////////////////////////////////////////////// //%/////////////////////////////////////////////////////////////////////////////
  
 #include "CIMQualifierList.h" #include "CIMQualifierList.h"
 #include "DeclContext.h" #include "DeclContext.h"
   #include "Resolver.h"
 #include "CIMQualifierDecl.h" #include "CIMQualifierDecl.h"
 #include "CIMName.h" #include "CIMName.h"
 #include "Indentor.h"  
 #include "XmlWriter.h" #include "XmlWriter.h"
 #include "MofWriter.h"  
 #include <Pegasus/Common/Tracer.h> #include <Pegasus/Common/Tracer.h>
   #include <Pegasus/Common/MessageLoader.h>
   #include "StrLit.h"
   #include "ArrayIterator.h"
   #include "CIMQualifierRep.h"
  
 PEGASUS_NAMESPACE_BEGIN PEGASUS_NAMESPACE_BEGIN
 PEGASUS_USING_STD; PEGASUS_USING_STD;
  
 CIMQualifierList::CIMQualifierList()  static CIMName _KEY("Key");
   
   CIMQualifierList::CIMQualifierList() :
                       _keyIndex(PEGASUS_ORDEREDSET_INDEX_UNKNOWN)
 { {
  
 } }
Line 50 
Line 61 
  
 CIMQualifierList& CIMQualifierList::add(const CIMQualifier& qualifier) CIMQualifierList& CIMQualifierList::add(const CIMQualifier& qualifier)
 { {
     if (qualifier.isNull())      if (qualifier.isUninitialized())
         throw UninitializedHandle();          throw UninitializedObjectException();
  
     if (find(qualifier.getName()) != PEG_NOT_FOUND)     if (find(qualifier.getName()) != PEG_NOT_FOUND)
         throw AlreadyExists();      {
           MessageLoaderParms parms("Common.CIMQualifierList.QUALIFIER",
               "qualifier \"$0\"",
               qualifier.getName().getString());
           throw AlreadyExistsException(parms);
       }
  
     _qualifiers.append(qualifier);     _qualifiers.append(qualifier);
  
       // Update key index:
       if (_keyIndex == PEGASUS_ORDEREDSET_INDEX_UNKNOWN &&
               qualifier._rep->_name == _KEY)
           _keyIndex = _qualifiers.size()-1;
   
     return *this;     return *this;
 } }
 //ATTN: Why do we not do the outofbounds check here. KS 18 May 2k  
 CIMQualifier& CIMQualifierList::getQualifier(Uint32 pos)  CIMQualifier& CIMQualifierList::getQualifier(Uint32 index)
 { {
     return _qualifiers[pos];      return _qualifiers[index];
 } }
  
 //ATTN: added ks 18 may 2001. Should we have outofbounds?  void CIMQualifierList::removeQualifier(Uint32 index)
 void CIMQualifierList::removeQualifier(Uint32 pos)  
 { {
     _qualifiers.remove(pos);      _qualifiers.remove(index);
       _keyIndex = PEGASUS_ORDEREDSET_INDEX_UNKNOWN;
 } }
  
 Uint32 CIMQualifierList::find(const String& name) const  void CIMQualifierList::clear()
 {  
     for (Uint32 i = 0, n = _qualifiers.size(); i < n; i++)  
     {     {
         if (CIMName::equal(_qualifiers[i].getName(), name))      _qualifiers.clear();
             return i;  
     }     }
  
     return PEG_NOT_FOUND;  Uint32 CIMQualifierList::find(const CIMName& name) const
   {
       return _qualifiers.find(name, generateCIMNameTag(name));
 } }
 Boolean CIMQualifierList::isTrue(const String& name) const  
   Boolean CIMQualifierList::isTrue(const CIMName& name) const
 { {
     Uint32 pos = find(name);      Uint32 index = find(name);
  
     if (pos == PEG_NOT_FOUND)      if (index == PEG_NOT_FOUND)
         return false;         return false;
  
     Boolean flag;     Boolean flag;
     const CIMValue& value = getQualifier(pos).getValue();      const CIMValue& value = getQualifier(index).getValue();
  
     if (value.getType() != CIMType::BOOLEAN)      if (value.getType() != CIMTYPE_BOOLEAN)
         return false;         return false;
  
     value.get(flag);     value.get(flag);
     return flag;     return flag;
 } }
  
 Uint32 CIMQualifierList::findReverse(const String& name) const  
 {  
     for (Uint32 i = _qualifiers.size(); i; --i)  
     {  
         if (CIMName::equal(_qualifiers[i - 1].getName(), name))  
             return i - 1;  
     }  
   
     return PEG_NOT_FOUND;  
 }  
   
 void CIMQualifierList::resolve( void CIMQualifierList::resolve(
     DeclContext* declContext,     DeclContext* declContext,
     const String& nameSpace,      const CIMNamespaceName & nameSpace,
     Uint32 scope,                        // Scope of the entity being resolved.      CIMScope scope, // Scope of the entity being resolved.
     Boolean isInstancePart,     Boolean isInstancePart,
     CIMQualifierList& inheritedQualifiers,     CIMQualifierList& inheritedQualifiers,
     Boolean propagateQualifiers)        // Apparently not used ks 24 mar 2002     Boolean propagateQualifiers)        // Apparently not used ks 24 mar 2002
 { {
       _keyIndex = PEGASUS_ORDEREDSET_INDEX_UNKNOWN;
   
     PEG_METHOD_ENTER(TRC_OBJECTRESOLUTION, "CIMQualifierList::resolve()");     PEG_METHOD_ENTER(TRC_OBJECTRESOLUTION, "CIMQualifierList::resolve()");
     // For each qualifier in the qualifiers array, the following     // For each qualifier in the qualifiers array, the following
     // is checked:     // is checked:
Line 146 
Line 158 
                 CIMQualifierDecl qd = declContext->lookupQualifierDecl(                 CIMQualifierDecl qd = declContext->lookupQualifierDecl(
                         nameSpace, q.getName());                         nameSpace, q.getName());
  
                 if (qd.isNull())          if (qd.isUninitialized())
                         throw UndeclaredQualifier(q.getName());          {
               PEG_METHOD_EXIT();
               throw UndeclaredQualifier(q.getName().getString ());
           }
  
                 //----------------------------------------------------------------------                 //----------------------------------------------------------------------
                 // 2. Check the type and isArray.  Must be the same:                 // 2. Check the type and isArray.  Must be the same:
                 //----------------------------------------------------------------------                 //----------------------------------------------------------------------
  
                 if (!(q.getType() == qd.getType() && q.isArray() == qd.isArray()))                 if (!(q.getType() == qd.getType() && q.isArray() == qd.isArray()))
                         throw BadQualifierType(q.getName());          {
               PEG_METHOD_EXIT();
               throw BadQualifierType(q.getName().getString ());
           }
  
                 //----------------------------------------------------------------------                 //----------------------------------------------------------------------
                 // 3. Check the scope: Must be legal for this qualifier          // 3. If the qualifier is the EmbeddedInstance qualifier, then check
           // that the class specified by the qualifier exists in the namespace.
           //----------------------------------------------------------------------
           if (q.getName().equal(PEGASUS_QUALIFIERNAME_EMBEDDEDINSTANCE))
           {
               String className;
               q.getValue().get(className);
               CIMClass classDef = declContext->lookupClass(nameSpace,
                       CIMName(className));
               if (classDef.isUninitialized())
               {
                   String embeddedInstType("EmbeddedInstance(\"");
                   embeddedInstType = embeddedInstType + className + "\")";
                   PEG_METHOD_EXIT();
                   throw BadQualifierType(embeddedInstType);
               }
           }
   
           //----------------------------------------------------------------------
           // 4. Check the scope: Must be legal for this qualifier
                 //----------------------------------------------------------------------                 //----------------------------------------------------------------------
 //#if 0  
                         // ATTN:  These lines throw a bogus exception if the qualifier has                         // ATTN:  These lines throw a bogus exception if the qualifier has
                         // a valid scope (such as Scope::ASSOCIATION) which is not Scope::CLASS                         // a valid scope (such as Scope::ASSOCIATION) which is not Scope::CLASS
                         // ks Mar 2002. Reinstalled 23 March 2002 to test.                         // ks Mar 2002. Reinstalled 23 March 2002 to test.
  
                 if (!(qd.getScope() & scope))          if (!(qd.getScope().hasScope (scope)))
                         throw BadQualifierScope(qd.getName(), ScopeToString(scope));          {
 //#endif              PEG_METHOD_EXIT();
               throw BadQualifierScope
                   (qd.getName().getString (), scope.toString ());
           }
   
                 //----------------------------------------------------------------------                 //----------------------------------------------------------------------
                 // Resolve the qualifierflavor. Since Flavors are a combination of inheritance          // Resolve the qualifierflavor. Since Flavors are a combination of
                 // and input characteristics, resolve the inherited characteristics          // inheritance and input characteristics, resolve the inherited
                 // against those provided with the creation.  If there is a superclass          // characteristics against those provided with the creation.  If
                 // the flavor is resolved against that superclass.  If not, it is resolved          // there is a superclass the flavor is resolved against that
                 // against the declaration. If the flavor is disableoverride and tosubclass          // superclass.  If not, it is resolved against the declaration. If
                 // the resolved qualifier value must be identical to the original          // the flavor is disableoverride and tosubclass the resolved
           // qualifier value must be identical to the original
                 //----------------------------------------------------------------------                 //----------------------------------------------------------------------
                 // Test for Qualifier found in SuperClass. If found and qualifier                 // Test for Qualifier found in SuperClass. If found and qualifier
                 // is not overridable.                 // is not overridable.
                 // Abstract (not Overridable and restricted) can be found in subclasses                 // Abstract (not Overridable and restricted) can be found in subclasses
                 // Can have nonabstracts below abstracts. That is function of nottosubclass          // Can have nonabstracts below abstracts. That is function of
                 // Association (notOverridable and tosubclass) can be found in subclasses but          // nottosubclass Association (notOverridable and tosubclass) can be
                 // cannot be changed. No non-associatons below associations. In other words          // found in subclasses but cannot be changed. No non-associatons below
                 // once a class becomes an association, no subclass can override that definition          // associations. In other words once a class becomes an association,
                 // apparently          // no subclass can override that definition apparently
                 // Throw exception if DisableOverride and tosubclass and different value.          // Throw exception if DisableOverride and tosubclass and different
                 // Gets the source from superclass if qualifier exists or from declaraction          // value.  Gets the source from superclass if qualifier exists or from
                 // If we do not throw the exception, resolve the flavor from the inheritance          // declaraction.
                 // point and resolve against current input.          // If we do not throw the exception, resolve the flavor from the
                 // Diableoverride is defined in the CIM Spec to mean that the value cannot change          // inheritance point and resolve against current input.
                 // The other characteristics including the flavor can change apparently. Thus, we          // Diableoverride is defined in the CIM Spec to mean that the value
                 // need only confirm that the value is the same (2.2 pp 33).  Strange since we          // cannot change.
                 // would think that  override implies that you cannot override any of the          // The other characteristics including the flavor can change
                 // characteristics (value, type, flavor, etc.) This also leaves the question          // apparently. Thus, we need only confirm that the value is the same
                 // of NULL or no values.  The implication is that we must move the value          // (2.2 pp 33).  Strange since we would think that override implies
                 // from the superclass or declaration.          // that you cannot override any of the characteristics (value, type,
           // flavor, etc.) This also leaves the question of NULL or no values.
                 Uint32 pos = inheritedQualifiers.find(q.getName());          // The implication is that we must move the value from the superclass
           // or declaration.
                 //cout << "KSTEST Qualifier resolve inherit test " << q.getName()  
                 //<< " Inherited From " << ((pos == PEG_NOT_FOUND) ? "Declaration" : "superclass")          Uint32 index = inheritedQualifiers.find(q.getName());
                 //<< " Flavor " << q.getFlavor()  
                 //<< " inherited Flavor ";  
  
                 if (pos == PEG_NOT_FOUND)          if (index == PEG_NOT_FOUND)
                 {   // Qualifier does not exist in superclass                 {   // Qualifier does not exist in superclass
                         /* If from declaration, we can override the default value.                         /* If from declaration, we can override the default value.
                            However, we need some way to get the value if we have a Null.                            However, we need some way to get the value if we have a Null.
                         if (!qd.isFlavor(CIMFlavor::OVERRIDABLE) && qd.isFlavor(CIMFlavor::TOSUBCLASS))              if (!qd.getFlavor().hasFlavor(CIMFlavor::OVERRIDABLE) &&
                   qd.getFlavor().hasFlavor(CIMFlavor::TOSUBCLASS))
                         {                         {
                                 if(!(q.getValue() == qd.getValue()))  
                                         cout << "KSTEST QL err NSCL " << q.getName()  
                                         << " decl flavor " << qd.getFlavor() << " Flavor " << q.getFlavor()  
                                         << " Not override " << !qd.isFlavor(CIMFlavor::OVERRIDABLE)  
                                         << " tosubclass " <<  qd.isFlavor(CIMFlavor::TOSUBCLASS) << endl;  
                                 XmlWriter::printQualifierDeclElement(qd);  
                                 XmlWriter::printQualifierElement(q);  
                                         //throw BadQualifierOverride(q.getName());                                         //throw BadQualifierOverride(q.getName());
                         }                         }
                         //cout <<  qd.getFlavor() << endl;*/              */
                         // Do not allow change from disable override to enable override.                         // Do not allow change from disable override to enable override.
                         if(!qd.isFlavor(CIMFlavor::OVERRIDABLE) && q.isFlavor(CIMFlavor::OVERRIDABLE ))              if ((!qd.getFlavor ().hasFlavor(CIMFlavor::OVERRIDABLE))
                                 throw BadQualifierOverride(q.getName());                    && (q.getFlavor ().hasFlavor(CIMFlavor::OVERRIDABLE)))
               {
                   PEG_METHOD_EXIT();
                   throw BadQualifierOverride(q.getName().getString ());
               }
  
                         q.resolveFlavor(qd.getFlavor(), false);              Resolver::resolveQualifierFlavor(
                         /*if(!(q.getValue() == qd.getValue()))                  q, CIMFlavor (qd.getFlavor ()), false);
                                 cout << "KSTEST Flavor resolved from decl. " << q.getName()  
                                 << " decl flavor " << qd.getFlavor() << " Flavor " << q.getFlavor()  
                                 << " Not override " << !qd.isFlavor(CIMFlavor::OVERRIDABLE)  
                                 << " tosubclass " <<  qd.isFlavor(CIMFlavor::TOSUBCLASS) << endl;  
                          XmlWriter::printQualifierDeclElement(qd);  
                          XmlWriter::printQualifierElement(q); */  
                 }                 }
                 else                    // qualifier exists in superclass                 else                    // qualifier exists in superclass
                 {       ////// Make Const again                 {       ////// Make Const again
                         CIMQualifier iq = inheritedQualifiers.getQualifier(pos);              CIMQualifier iq = inheritedQualifiers.getQualifier(index);
                         // don't allow change override to notoverride.                         // don't allow change override to notoverride.
                         if(!iq.isFlavor(CIMFlavor::OVERRIDABLE) && q.isFlavor(CIMFlavor::OVERRIDABLE ))              if (!(iq.getFlavor ().hasFlavor(CIMFlavor::OVERRIDABLE))
                                 throw BadQualifierOverride(q.getName());                    && q.getFlavor ().hasFlavor (CIMFlavor::OVERRIDABLE))
               {
                   PEG_METHOD_EXIT();
                   throw BadQualifierOverride(q.getName().getString ());
               }
  
                         if (!iq.isFlavor(CIMFlavor::OVERRIDABLE) && iq.isFlavor(CIMFlavor::TOSUBCLASS))              if (!(iq.getFlavor ().hasFlavor(CIMFlavor::OVERRIDABLE))
                     && iq.getFlavor ().hasFlavor(CIMFlavor::TOSUBCLASS))
                         {                         {
                                 /*if(!(q.getValue() == iq.getvalue()))  
                                         cout << "KSTEST QL err inherit " << q.getName()  
                                         << " from superclass " << iq.getName()  
                                         << "   Superclass flavor " << iq.getFlavor()  
                                         << " Flavor " << q.getFlavor()  
                                         << endl;  
                                 XmlWriter::printQualifierElement(iq);  
                                 XmlWriter::printQualifierElement(q); */  
                                 // test if values the same.                                 // test if values the same.
                                 CIMValue qv = q.getValue();                                 CIMValue qv = q.getValue();
                                 CIMValue iqv = iq.getValue();                                 CIMValue iqv = iq.getValue();
                                 if(!(qv == iqv)) {                  if (!(qv == iqv))
                                         throw BadQualifierOverride(q.getName());                  {
                       PEG_METHOD_EXIT();
                       throw BadQualifierOverride(q.getName().getString());
                           }                           }
                         }                         }
                         //cout << iq.getFlavor()  << endl;  
                         q.resolveFlavor(iq.getFlavor(), true);              Resolver::resolveQualifierFlavor(
                   q, CIMFlavor(iq.getFlavor()), true);
                 }                 }
     }                                   // end of this objects qualifier loop     }                                   // end of this objects qualifier loop
  
Line 264 
Line 295 
     // Propagate qualifiers to subclass or to instance that do not have     // Propagate qualifiers to subclass or to instance that do not have
     // already have those qualifiers:     // already have those qualifiers:
     //--------------------------------------------------------------------------     //--------------------------------------------------------------------------
     //cout << "KSTEST. Inherited qualifiers ct = " << inheritedQualifiers.getCount() << endl;  
  
     for (Uint32 i = 0, n = inheritedQualifiers.getCount(); i < n; i++)     for (Uint32 i = 0, n = inheritedQualifiers.getCount(); i < n; i++)
     {     {
                 CIMQualifier iq = inheritedQualifiers.getQualifier(i);                 CIMQualifier iq = inheritedQualifiers.getQualifier(i);
                 //cout << "KSTEST inherited qualifier propagate loop " <<  iq.getName()  
                 //<< " flavor " << iq.getFlavor << " count " << i << endl;  
  
                 if (isInstancePart)                 if (isInstancePart)
                 {                 {
                         if (!iq.isFlavor(CIMFlavor::TOINSTANCE))              if (!(iq.getFlavor ().hasFlavor
                     (CIMFlavor::TOINSTANCE)))
                                 continue;                                 continue;
                 }                 }
                 else                 else
                 {                 {
                         if (!iq.isFlavor(CIMFlavor::TOSUBCLASS))              if (!(iq.getFlavor ().hasFlavor
                     (CIMFlavor::TOSUBCLASS)))
                                 continue;                                 continue;
                 }                 }
  
                 // If the qualifiers list does not already contain this qualifier,                 // If the qualifiers list does not already contain this qualifier,
                 // then propagate it (and set the propagated flag to true).      Else we                 // then propagate it (and set the propagated flag to true).      Else we
                 // keep current value. Note we have already eliminated any possibity that          // keep current value. Note we have already eliminated any possibity
                 // a nonoverridable qualifier can be in the list.          // that a nonoverridable qualifier can be in the list.
                 // Note that there is no exists() function ATTN:KS 25 Mar 2002                 // Note that there is no exists() function ATTN:KS 25 Mar 2002
                 if(find(iq.getName()) != PEG_NOT_FOUND)                 if(find(iq.getName()) != PEG_NOT_FOUND)
                         continue;                         continue;
  
                 CIMQualifier q = iq.clone();                 CIMQualifier q = iq.clone();
                 q.setPropagated(true);                 q.setPropagated(true);
                 _qualifiers.prepend(q);          _qualifiers.insert(0, q);
     }  
 }  
   
 void CIMQualifierList::toXml(Array<Sint8>& out) const  
 {  
     for (Uint32 i = 0, n = _qualifiers.size(); i < n; i++)  
         XmlWriter::appendQualifierElement(out, _qualifiers[i]);  
 } }
       PEG_METHOD_EXIT();
 /** toMof - Generates MOF output for a list of CIM Qualifiers.  
     The qualifiers may be class, property, parameter, etc.  
     The BNF for this is:  
     <pre>  
     qualifierList       = "[" qualifier *( "," qualifier ) "]"  
     </pre>  
     Produces qualifiers as a string on without nl.  
     */  
 void CIMQualifierList::toMof(Array<Sint8>& out) const  
 {  
     // if no qualifiers, return  
     if (_qualifiers.size() == 0)  
         return;  
   
     // Qualifier leading bracket.  
     out <<"[";  
   
     // Loop to list qualifiers  
     for (Uint32 i = 0, n = _qualifiers.size(); i < n; i++)  
     {  
         // if second or greater, add comma separator  
         if (i > 0)  
             out << ", \n";  
         MofWriter::appendQualifierElement(out, _qualifiers[i]);  
     }     }
  
     // Terminating bracket  
     out << "]";  
 }  
   
   
 void CIMQualifierList::print(PEGASUS_STD(ostream) &os) const void CIMQualifierList::print(PEGASUS_STD(ostream) &os) const
 { {
     Array<Sint8> tmp;      Buffer tmp;
     toXml(tmp);      for (Uint32 i = 0, n = getCount(); i < n; i++)
     tmp.append('\0');          XmlWriter::appendQualifierElement(tmp, _qualifiers[i]);
     os << tmp.getData() << PEGASUS_STD(endl);     os << tmp.getData() << PEGASUS_STD(endl);
 } }
  
Line 360 
Line 354 
  
 void CIMQualifierList::cloneTo(CIMQualifierList& x) const void CIMQualifierList::cloneTo(CIMQualifierList& x) const
 { {
       x._keyIndex = PEGASUS_ORDEREDSET_INDEX_UNKNOWN;
     x._qualifiers.clear();     x._qualifiers.clear();
     x._qualifiers.reserve(_qualifiers.size());      x._qualifiers.reserveCapacity(_qualifiers.size());
  
     for (Uint32 i = 0, n = _qualifiers.size(); i < n; i++)     for (Uint32 i = 0, n = _qualifiers.size(); i < n; i++)
         x._qualifiers.append(_qualifiers[i].clone());         x._qualifiers.append(_qualifiers[i].clone());
       x._keyIndex = _keyIndex;
   }
   
   Boolean CIMQualifierList::isKey() const
   {
       static Uint32 _KEY_TAG = generateCIMNameTag(_KEY);
   
       // Resolve key index if unresolved.
   
       if (_keyIndex == PEGASUS_ORDEREDSET_INDEX_UNKNOWN)
       {
           Uint32 pos = _qualifiers.find(_KEY, _KEY_TAG);
           ((CIMQualifierList*)this)->_keyIndex = int(pos);
       }
   
       // If no key qualifier in list, then return false (default key value).
   
       if (_keyIndex == PEGASUS_ORDEREDSET_INDEX_NOTFOUND)
           return false;
   
       // Obtain value of key qualifier.
   
       const CIMValue& value = _qualifiers[_keyIndex]._rep->_value;
       if (!value.isNull() &&
           value.getType() == CIMTYPE_BOOLEAN)
       {
           Boolean boolVal;
           value.get(boolVal);
           return boolVal;
       }
   
       return false;
 } }
  
 PEGASUS_NAMESPACE_END PEGASUS_NAMESPACE_END


Legend:
Removed from v.1.34  
changed lines
  Added in v.1.67

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2