[ https://issues.apache.org/jira/browse/XERCESC-415?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Boris Kolpackov closed XERCESC-415. ----------------------------------- Resolution: Won't Fix Assignee: (was: Xerces-C Developers Mailing List) I don't think it generally makes sense to allow copying of an input source. If you still believe this is a useful functionality, please reopen and describe a use case. > InputSource needs copy constructor and assignment operator > ---------------------------------------------------------- > > Key: XERCESC-415 > URL: https://issues.apache.org/jira/browse/XERCESC-415 > Project: Xerces-C++ > Issue Type: Bug > Components: SAX/SAX2 > Affects Versions: 1.7.0 > Environment: Operating System: All > Platform: All > Reporter: David Bertoni > > InputSource does not have a copy constructor or an assignment operator. Both > would be really handy for deriving classes. Current derived classes can > either > get the behavior by default, or avoid it by explicitly calling the default > constructor or not chaining up to the assignment operator. > Here's a diff with the implementations: > cvs diff InputSource.hpp (in directory V:\xml-xerces\c\src\xercesc\sax\) > Index: InputSource.hpp > =================================================================== > RCS file: /home/cvs/xml-xerces/c/src/xercesc/sax/InputSource.hpp,v > retrieving revision 1.2 > diff -r1.2 InputSource.hpp > 324a325,334 > > /** Copy constructor > > * @param src The instance to copy. > > */ > > InputSource(const InputSource& src); > > > > /** Assignment operator > > * @param src The instance that is the source of the assigment. > > */ > > InputSource& operator=(const InputSource& src); > > > 332,337d341 > < // > ----------------------------------------------------------------------- > < // Unimplemented constructors and operators > < // > ----------------------------------------------------------------------- > < InputSource(const InputSource&); > < void operator=(const InputSource&); > < > cvs diff InputSource.cpp (in directory V:\xml-xerces\c\src\xercesc\sax\) > Index: InputSource.cpp > =================================================================== > RCS file: /home/cvs/xml-xerces/c/src/xercesc/sax/InputSource.cpp,v > retrieving revision 1.1.1.1 > diff -r1.1.1.1 InputSource.cpp > 88a89 > > #include <xercesc/util/Janitor.hpp> > 177a179,219 > > } > > > > > > > > InputSource::InputSource(const InputSource& src) : > > > > fEncoding(src.fEncoding == 0 ? 0 : XMLString::replicate(src.fEncoding)) > > , fPublicId(src.fPublicId == 0 ? 0 : > > XMLString::replicate(src.fPublicId)) > > , fSystemId(src.fSystemId == 0 ? 0 : > > XMLString::replicate(src.fSystemId)) > > , fFatalErrorIfNotFound(src.fFatalErrorIfNotFound) > > { > > } > > > > InputSource& > > InputSource::operator=(const InputSource& src) > > { > > if (this != &src) > > { > > // For exception safety, make copies. This only slightly > > // less efficient than copying directly into our data members... > > ArrayJanitor<XMLCh> > > tempEncoding(XMLString::replicate(src.fEncoding)); > > ArrayJanitor<XMLCh> > > tempPublicId(XMLString::replicate(src.fPublicId)); > > ArrayJanitor<XMLCh> > > tempSystemId(XMLString::replicate(src.fSystemId)); > > > > // Swap the pointers... > > XMLCh* tempPtr = fEncoding; > > fEncoding = tempEncoding.release(); > > tempEncoding.reset(tempPtr); > > > > tempPtr = fPublicId; > > fPublicId = tempPublicId.release(); > > tempPublicId.reset(tempPtr); > > > > tempPtr = fSystemId; > > fSystemId = tempSystemId.release(); > > tempSystemId.reset(tempPtr); > > > > fFatalErrorIfNotFound = src.fFatalErrorIfNotFound; > > } > > > > return *this; -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online. --------------------------------------------------------------------- To unsubscribe, e-mail: c-dev-unsubscr...@xerces.apache.org For additional commands, e-mail: c-dev-h...@xerces.apache.org