From 6c205f4859588fc8dad786dce5f2fa32c75fd3f3 Mon Sep 17 00:00:00 2001 From: Adrian Kummerländer Date: Fri, 18 Apr 2014 22:19:46 +0200 Subject: Code style improvements * marked assignment and equality operators as deleted instead of making them private * XercesParserLiaison is stored in a std::shared_ptr specialization instance for scope guarding * moved implementation details into InputXSLT namespace --- src/read_file_command.h | 39 ++++++++++++++++++++------------------- src/read_xml_file_command.h | 39 +++++++++++++++++++++------------------ src/utility.h | 10 ++++++++-- test.cc | 4 ++-- 4 files changed, 51 insertions(+), 41 deletions(-) diff --git a/src/read_file_command.h b/src/read_file_command.h index 837ec04..5e47c36 100644 --- a/src/read_file_command.h +++ b/src/read_file_command.h @@ -7,17 +7,17 @@ #include "utility.h" -namespace xalan = xalanc_1_11; +namespace InputXSLT { class FunctionReadFile : public xalan::Function { public: virtual xalan::XObjectPtr execute( - xalan::XPathExecutionContext& executionContext, - xalan::XalanNode* context, - const xalan::Function::XObjectArgVectorType& args, + xalan::XPathExecutionContext& executionContext, + xalan::XalanNode* context, + const xalan::Function::XObjectArgVectorType& arguments, const xalan::Locator* locator ) const { - if ( args.size() != 1 ) { + if ( arguments.size() != 1 ) { xalan::XPathExecutionContext::GetAndReleaseCachedString guard( executionContext ); @@ -25,21 +25,21 @@ class FunctionReadFile : public xalan::Function { generalError(executionContext, context, locator); } - xalan::CharVectorType tmpFileName; - std::string fileName; + xalan::CharVectorType fileNameVector; + std::string fileNameString; - args[0]->str().transcode(tmpFileName); + arguments[0]->str().transcode(fileNameVector); std::move( - tmpFileName.begin(), - tmpFileName.end(), - fileName.begin() + fileNameVector.begin(), + fileNameVector.end(), + fileNameString.begin() ); - std::string content(readFile(fileName)); - return executionContext.getXObjectFactory().createString( - xalan::XalanDOMString(content.data()) + xalan::XalanDOMString( + InputXSLT::readFile(fileNameString).data() + ) ); } @@ -47,15 +47,16 @@ class FunctionReadFile : public xalan::Function { return xalan::XalanCopyConstruct(manager, *this); } - protected: + FunctionReadFile& operator=(const FunctionReadFile&) = delete; + bool operator==(const FunctionReadFile&) const = delete; + + private: const xalan::XalanDOMString& getError(xalan::XalanDOMString& result) const { result.assign("The read-file() function expects one argument."); return result; } - private: - FunctionReadFile& operator=(const FunctionReadFile&); - bool operator==(const FunctionReadFile&) const; - }; + +} diff --git a/src/read_xml_file_command.h b/src/read_xml_file_command.h index 96b6c5d..8aee39f 100644 --- a/src/read_xml_file_command.h +++ b/src/read_xml_file_command.h @@ -8,17 +8,19 @@ #include "utility.h" -namespace xalan = xalanc_1_11; +#include + +namespace InputXSLT { class FunctionReadXmlFile : public xalan::Function { public: virtual xalan::XObjectPtr execute( - xalan::XPathExecutionContext& executionContext, - xalan::XalanNode* context, - const xalan::Function::XObjectArgVectorType& args, - const xalan::Locator* locator + xalan::XPathExecutionContext& executionContext, + xalan::XalanNode* context, + const xalan::Function::XObjectArgVectorType& arguments, + const xalan::Locator* locator ) const { - if ( args.size() != 1 ) { + if ( arguments.size() != 1 ) { xalan::XPathExecutionContext::GetAndReleaseCachedString guard( executionContext ); @@ -26,14 +28,14 @@ class FunctionReadXmlFile : public xalan::Function { generalError(executionContext, context, locator); } - if ( this->liaison == nullptr ) { - const_cast(this)->liaison = new xalan::XercesParserLiaison(); + if ( !this->parser_ ) { + this->parser_ = std::make_shared(); } - xalan::XSLTInputSource file(args[0]->str()); - return executionContext.getXObjectFactory().createNodeSet( - liaison->parseXMLStream(file) + this->parser_->parseXMLStream( + xalan::XSLTInputSource(arguments[0]->str()) + ) ); } @@ -41,17 +43,18 @@ class FunctionReadXmlFile : public xalan::Function { return xalan::XalanCopyConstruct(manager, *this); } - protected: - xalan::XercesParserLiaison* liaison = nullptr; + FunctionReadXmlFile& operator=(const FunctionReadXmlFile&) = delete; + bool operator==(const FunctionReadXmlFile&) const = delete; + + private: + mutable std::shared_ptr parser_; const xalan::XalanDOMString& getError(xalan::XalanDOMString& result) const { - result.assign("The read-file() function expects one argument."); + result.assign("The read-xml-file() function expects one argument."); return result; } - private: - FunctionReadXmlFile& operator=(const FunctionReadXmlFile&); - bool operator==(const FunctionReadXmlFile&) const; - }; + +} diff --git a/src/utility.h b/src/utility.h index 9c88b38..82f52aa 100644 --- a/src/utility.h +++ b/src/utility.h @@ -8,6 +8,8 @@ #include #include +namespace xalan = xalanc_1_11; + namespace { const int OpenFlags = O_RDONLY; @@ -15,6 +17,8 @@ const mode_t OpenMode = S_IRUSR | S_IWUSR; } +namespace InputXSLT { + std::string readFile(const std::string& path) { int descriptor( open(path.data(), OpenFlags, OpenMode) @@ -29,11 +33,11 @@ std::string readFile(const std::string& path) { fstat(descriptor, &info); const std::size_t size(info.st_size); - char* buffer(new char[size]); + char* const buffer(new char[size]); ssize_t readSize(read( descriptor, - reinterpret_cast(buffer), + static_cast(buffer), size )); @@ -50,4 +54,6 @@ std::string readFile(const std::string& path) { } } +} + #endif // UTILITY_H_ diff --git a/test.cc b/test.cc index bc6f0b2..d6b45bf 100644 --- a/test.cc +++ b/test.cc @@ -19,13 +19,13 @@ int main() { transformer.installExternalFunction( customNamespace, xalan::XalanDOMString("read-file"), - FunctionReadFile() + InputXSLT::FunctionReadFile() ); transformer.installExternalFunction( customNamespace, xalan::XalanDOMString("read-xml-file"), - FunctionReadXmlFile() + InputXSLT::FunctionReadXmlFile() ); xalan::XSLTInputSource input("../dummy/in.xml"); -- cgit v1.2.3