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

Diff for /pegasus/src/Pegasus/Common/CIMMethodRep.cpp between version 1.11 and 1.58

version 1.11, 2001/06/16 23:09:59 version 1.58, 2008/04/11 17:14:03
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:  
 //  
 //%///////////////////////////////////////////////////////////////////////////// //%/////////////////////////////////////////////////////////////////////////////
  
 #include <cassert>  #include <Pegasus/Common/Config.h>
 #include "CIMMethod.h" #include "CIMMethod.h"
 #include "Indentor.h"  #include "CIMMethodRep.h"
   #include "Resolver.h"
 #include "CIMName.h" #include "CIMName.h"
 #include "CIMScope.h" #include "CIMScope.h"
 #include "XmlWriter.h"  #include <Pegasus/Common/MessageLoader.h>
   #include "StrLit.h"
  
 PEGASUS_NAMESPACE_BEGIN PEGASUS_NAMESPACE_BEGIN
  
 CIMMethodRep::CIMMethodRep(  CIMMethodRep::CIMMethodRep(const CIMMethodRep& x) :
     const String& name,      Sharable(),
     CIMType type,      _name(x._name),
     const String& classOrigin,      _type(x._type),
     Boolean propagated)      _classOrigin(x._classOrigin),
     : _name(name), _type(type),      _propagated(x._propagated),
     _classOrigin(classOrigin), _propagated(propagated)      _ownerCount(0)
 { {
     if (!CIMName::legal(name))      x._qualifiers.cloneTo(_qualifiers);
         throw IllegalName();      // Set the CIM name tag.
       _nameTag = generateCIMNameTag(_name);
     if (classOrigin.size() && !CIMName::legal(classOrigin))  
         throw IllegalName();  
  
     if (type == CIMType::NONE)      _parameters.reserveCapacity(x._parameters.size());
         throw NullType();  
 }  
  
 CIMMethodRep::~CIMMethodRep()      for (Uint32 i = 0, n = x._parameters.size(); i < n; i++)
 { {
           _parameters.append(x._parameters[i].clone());
 } }
   
 void CIMMethodRep::setName(const String& name)  
 {  
     if (!CIMName::legal(name))  
         throw IllegalName();  
   
     _name = name;  
 } }
  
 void CIMMethodRep::setClassOrigin(const String& classOrigin)  CIMMethodRep::CIMMethodRep(
       const CIMName& name,
       CIMType type,
       const CIMName& classOrigin,
       Boolean propagated)
       : _name(name), _type(type),
       _classOrigin(classOrigin),
       _propagated(propagated),
       _ownerCount(0)
 { {
     if (!CIMName::legal(classOrigin))      // ensure name is not null
         throw IllegalName();      if (name.isNull())
   
     _classOrigin = classOrigin;  
 }  
   
 void CIMMethodRep::addParameter(const CIMParameter& x)  
 { {
     if (!x)          throw UninitializedObjectException();
         throw UnitializedHandle();      }
       // Set the CIM name tag.
     if (findParameter(x.getName()) != PEG_NOT_FOUND)      _nameTag = generateCIMNameTag(_name);
         throw AlreadyExists();  
   
     _parameters.append(x);  
 } }
  
 Uint32 CIMMethodRep::findParameter(const String& name)  void CIMMethodRep::setName(const CIMName& name)
 { {
     for (Uint32 i = 0, n = _parameters.size(); i < n; i++)      // ensure name is not null
       if (name.isNull())
     {     {
         if (CIMName::equal(_parameters[i].getName(), name))          throw UninitializedObjectException();
             return i;  
     }     }
       if (_ownerCount != 0 && _name != name)
     return PEG_NOT_FOUND;      {
           MessageLoaderParms parms(
               "Common.CIMMethodRep.CONTAINED_METHOD_NAMECHANGEDEXCEPTION",
               "Attempted to change the name of a method"
                   " already in a container.");
           throw Exception(parms);
       }
       _name = name;
       // Set the CIM name tag.
       _nameTag = generateCIMNameTag(_name);
 } }
  
 CIMParameter CIMMethodRep::getParameter(Uint32 pos)  void CIMMethodRep::addParameter(const CIMParameter& x)
 { {
     if (pos >= _parameters.size())      if (x.isUninitialized())
         throw OutOfBounds();          throw UninitializedObjectException();
  
     return _parameters[pos];      if (findParameter(x.getName()) != PEG_NOT_FOUND)
       {
           MessageLoaderParms parms("Common.CIMMethodRep.PARAMETER",
               "parameter \"$0\"",
               x.getName().getString());
           throw AlreadyExistsException(parms);
 } }
  
 Uint32 CIMMethodRep::getParameterCount() const      _parameters.append(x);
 {  
     return _parameters.size();  
 } }
  
 void CIMMethodRep::resolve( void CIMMethodRep::resolve(
     DeclContext* declContext,     DeclContext* declContext,
     const String& nameSpace,      const CIMNamespaceName& nameSpace,
     const CIMConstMethod& inheritedMethod)     const CIMConstMethod& inheritedMethod)
 { {
     // ATTN: Check to see if this method has same signature as     // ATTN: Check to see if this method has same signature as
Line 119 
Line 127 
  
     // Check for type mismatch between return types.     // Check for type mismatch between return types.
  
     assert (inheritedMethod);      PEGASUS_ASSERT(!inheritedMethod.isUninitialized());
  
     // Validate the qualifiers of the method (according to     // Validate the qualifiers of the method (according to
     // superClass's method with the same name). This method     // superClass's method with the same name). This method
Line 130 
Line 138 
         nameSpace,         nameSpace,
         CIMScope::METHOD,         CIMScope::METHOD,
         false,         false,
         inheritedMethod._rep->_qualifiers);          inheritedMethod._rep->_qualifiers,
           true);
  
     // Validate each of the parameters:     // Validate each of the parameters:
  
     for (size_t i = 0; i < _parameters.size(); i++)      for (Uint32 i = 0; i < _parameters.size(); i++)
         _parameters[i].resolve(declContext, nameSpace);          Resolver::resolveParameter (_parameters[i], declContext, nameSpace);
  
     _classOrigin = inheritedMethod.getClassOrigin();     _classOrigin = inheritedMethod.getClassOrigin();
 } }
  
 void CIMMethodRep::resolve( void CIMMethodRep::resolve(
     DeclContext* declContext,     DeclContext* declContext,
     const String& nameSpace)      const CIMNamespaceName& nameSpace)
 { {
     // Validate the qualifiers:     // Validate the qualifiers:
  
Line 153 
Line 162 
         nameSpace,         nameSpace,
         CIMScope::METHOD,         CIMScope::METHOD,
         false,         false,
         dummy);          dummy,
           true);
  
     // Validate each of the parameters:     // Validate each of the parameters:
  
     for (size_t i = 0; i < _parameters.size(); i++)      for (Uint32 i = 0; i < _parameters.size(); i++)
         _parameters[i].resolve(declContext, nameSpace);          Resolver::resolveParameter (_parameters[i], declContext, nameSpace);
 }  
   
 static const char* _toString(Boolean x)  
 {  
     return x ? "true" : "false";  
 }  
   
 void CIMMethodRep::toXml(Array<Sint8>& out) const  
 {  
     out << "<METHOD";  
   
     out << " NAME=\"" << _name << "\"";  
   
     out << " TYPE=\"" << TypeToString(_type) << "\"";  
   
     if (_classOrigin.size())  
         out << " CLASSORIGIN=\"" << _classOrigin << "\"";  
   
     if (_propagated != false)  
         out << " PROPAGATED=\"" << _toString(_propagated) << "\"";  
   
     out << ">\n";  
   
     _qualifiers.toXml(out);  
   
     for (Uint32 i = 0, n = _parameters.size(); i < n; i++)  
         _parameters[i].toXml(out);  
   
     out << "</METHOD>\n";  
 } }
  
 void CIMMethodRep::print(PEGASUS_STD(ostream) &os) const  Boolean CIMMethodRep::identical(const CIMMethodRep* x) const
 {  
     Array<Sint8> tmp;  
     toXml(tmp);  
     tmp.append('\0');  
     os << tmp.getData() << PEGASUS_STD(endl);  
 }  
   
 CIMMethodRep::CIMMethodRep()  
 {  
   
 }  
   
 CIMMethodRep::CIMMethodRep(const CIMMethodRep& x) :  
     Sharable(),  
     _name(x._name),  
     _type(x._type),  
     _classOrigin(x._classOrigin),  
     _propagated(x._propagated)  
 { {
     x._qualifiers.cloneTo(_qualifiers);      // If the pointers are the same, the objects must be identical
       if (this == x)
     _parameters.reserve(x._parameters.size());  
   
     for (Uint32 i = 0, n = x._parameters.size(); i < n; i++)  
         _parameters.append(x._parameters[i].clone());  
 }  
   
 CIMMethodRep& CIMMethodRep::operator=(const CIMMethodRep& x)  
 { {
     return *this;          return true;
 } }
  
 Boolean CIMMethodRep::identical(const CIMMethodRep* x) const      if (!_name.equal (x->_name))
 {  
     if (_name != x->_name)  
         return false;         return false;
  
     if (_type != x->_type)     if (_type != x->_type)
Line 246 
Line 200 
     return true;     return true;
 } }
  
 void CIMMethodRep::setType(CIMType type)  
 {  
     _type = type;  
   
     if (type == CIMType::NONE)  
         throw NullType();  
 }  
   
 PEGASUS_NAMESPACE_END PEGASUS_NAMESPACE_END


Legend:
Removed from v.1.11  
changed lines
  Added in v.1.58

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2