You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@thrift.apache.org by dr...@apache.org on 2010/03/09 06:20:08 UTC

svn commit: r920682 - in /incubator/thrift/trunk: compiler/cpp/src/generate/t_cpp_generator.cc lib/cpp/src/TApplicationException.cpp lib/cpp/src/TApplicationException.h lib/cpp/src/Thrift.cpp lib/cpp/src/Thrift.h lib/cpp/src/protocol/TDenseProtocol.cpp

Author: dreiss
Date: Tue Mar  9 05:20:07 2010
New Revision: 920682

URL: http://svn.apache.org/viewvc?rev=920682&view=rev
Log:
cpp: Eliminate circular dependency between thrift libraries

Previously, Thrift.cpp contained TApplicationException, which was using
TProtocol methods, defined in TProtocol.h.  This caused a circular
dependency since libprotocol depends on Thrift.h.  This change moves
TApplicationException into its own file.

Added:
    incubator/thrift/trunk/lib/cpp/src/TApplicationException.cpp
    incubator/thrift/trunk/lib/cpp/src/TApplicationException.h
Modified:
    incubator/thrift/trunk/compiler/cpp/src/generate/t_cpp_generator.cc
    incubator/thrift/trunk/lib/cpp/src/Thrift.cpp
    incubator/thrift/trunk/lib/cpp/src/Thrift.h
    incubator/thrift/trunk/lib/cpp/src/protocol/TDenseProtocol.cpp

Modified: incubator/thrift/trunk/compiler/cpp/src/generate/t_cpp_generator.cc
URL: http://svn.apache.org/viewvc/incubator/thrift/trunk/compiler/cpp/src/generate/t_cpp_generator.cc?rev=920682&r1=920681&r2=920682&view=diff
==============================================================================
--- incubator/thrift/trunk/compiler/cpp/src/generate/t_cpp_generator.cc (original)
+++ incubator/thrift/trunk/compiler/cpp/src/generate/t_cpp_generator.cc Tue Mar  9 05:20:07 2010
@@ -270,6 +270,7 @@ void t_cpp_generator::init_generator() {
   // Include base types
   f_types_ <<
     "#include <Thrift.h>" << endl <<
+    "#include <TApplicationException.h>" << endl <<
     "#include <protocol/TProtocol.h>" << endl <<
     "#include <transport/TTransport.h>" << endl <<
     endl;

Added: incubator/thrift/trunk/lib/cpp/src/TApplicationException.cpp
URL: http://svn.apache.org/viewvc/incubator/thrift/trunk/lib/cpp/src/TApplicationException.cpp?rev=920682&view=auto
==============================================================================
--- incubator/thrift/trunk/lib/cpp/src/TApplicationException.cpp (added)
+++ incubator/thrift/trunk/lib/cpp/src/TApplicationException.cpp Tue Mar  9 05:20:07 2010
@@ -0,0 +1,80 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#include <TApplicationException.h>
+#include <protocol/TProtocol.h>
+
+namespace apache { namespace thrift {
+
+uint32_t TApplicationException::read(apache::thrift::protocol::TProtocol* iprot) {
+  uint32_t xfer = 0;
+  std::string fname;
+  apache::thrift::protocol::TType ftype;
+  int16_t fid;
+
+  xfer += iprot->readStructBegin(fname);
+
+  while (true) {
+    xfer += iprot->readFieldBegin(fname, ftype, fid);
+    if (ftype == apache::thrift::protocol::T_STOP) {
+      break;
+    }
+    switch (fid) {
+    case 1:
+      if (ftype == apache::thrift::protocol::T_STRING) {
+        xfer += iprot->readString(message_);
+      } else {
+        xfer += iprot->skip(ftype);
+      }
+      break;
+    case 2:
+      if (ftype == apache::thrift::protocol::T_I32) {
+        int32_t type;
+        xfer += iprot->readI32(type);
+        type_ = (TApplicationExceptionType)type;
+      } else {
+        xfer += iprot->skip(ftype);
+      }
+      break;
+    default:
+      xfer += iprot->skip(ftype);
+      break;
+    }
+    xfer += iprot->readFieldEnd();
+  }
+
+  xfer += iprot->readStructEnd();
+  return xfer;
+}
+
+uint32_t TApplicationException::write(apache::thrift::protocol::TProtocol* oprot) const {
+  uint32_t xfer = 0;
+  xfer += oprot->writeStructBegin("TApplicationException");
+  xfer += oprot->writeFieldBegin("message", apache::thrift::protocol::T_STRING, 1);
+  xfer += oprot->writeString(message_);
+  xfer += oprot->writeFieldEnd();
+  xfer += oprot->writeFieldBegin("type", apache::thrift::protocol::T_I32, 2);
+  xfer += oprot->writeI32(type_);
+  xfer += oprot->writeFieldEnd();
+  xfer += oprot->writeFieldStop();
+  xfer += oprot->writeStructEnd();
+  return xfer;
+}
+
+}} // apache::thrift

Added: incubator/thrift/trunk/lib/cpp/src/TApplicationException.h
URL: http://svn.apache.org/viewvc/incubator/thrift/trunk/lib/cpp/src/TApplicationException.h?rev=920682&view=auto
==============================================================================
--- incubator/thrift/trunk/lib/cpp/src/TApplicationException.h (added)
+++ incubator/thrift/trunk/lib/cpp/src/TApplicationException.h Tue Mar  9 05:20:07 2010
@@ -0,0 +1,105 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#ifndef _THRIFT_TAPPLICATIONEXCEPTION_H_
+#define _THRIFT_TAPPLICATIONEXCEPTION_H_ 1
+
+#include <Thrift.h>
+
+
+namespace apache { namespace thrift {
+
+namespace protocol {
+  class TProtocol;
+}
+
+class TApplicationException : public TException {
+ public:
+
+  /**
+   * Error codes for the various types of exceptions.
+   */
+  enum TApplicationExceptionType {
+    UNKNOWN = 0,
+    UNKNOWN_METHOD = 1,
+    INVALID_MESSAGE_TYPE = 2,
+    WRONG_METHOD_NAME = 3,
+    BAD_SEQUENCE_ID = 4,
+    MISSING_RESULT = 5
+  };
+
+  TApplicationException() :
+    TException(),
+    type_(UNKNOWN) {}
+
+  TApplicationException(TApplicationExceptionType type) :
+    TException(),
+    type_(type) {}
+
+  TApplicationException(const std::string& message) :
+    TException(message),
+    type_(UNKNOWN) {}
+
+  TApplicationException(TApplicationExceptionType type,
+                        const std::string& message) :
+    TException(message),
+    type_(type) {}
+
+  virtual ~TApplicationException() throw() {}
+
+  /**
+   * Returns an error code that provides information about the type of error
+   * that has occurred.
+   *
+   * @return Error code
+   */
+  TApplicationExceptionType getType() {
+    return type_;
+  }
+
+  virtual const char* what() const throw() {
+    if (message_.empty()) {
+      switch (type_) {
+        case UNKNOWN              : return "TApplicationException: Unknown application exception";
+        case UNKNOWN_METHOD       : return "TApplicationException: Unknown method";
+        case INVALID_MESSAGE_TYPE : return "TApplicationException: Invalid message type";
+        case WRONG_METHOD_NAME    : return "TApplicationException: Wrong method name";
+        case BAD_SEQUENCE_ID      : return "TApplicationException: Bad sequence identifier";
+        case MISSING_RESULT       : return "TApplicationException: Missing result";
+        default                   : return "TApplicationException: (Invalid exception type)";
+      };
+    } else {
+      return message_.c_str();
+    }
+  }
+
+  uint32_t read(protocol::TProtocol* iprot);
+  uint32_t write(protocol::TProtocol* oprot) const;
+
+ protected:
+  /**
+   * Error code
+   */
+  TApplicationExceptionType type_;
+
+};
+
+}} // apache::thrift
+
+#endif // #ifndef _THRIFT_TAPPLICATIONEXCEPTION_H_

Modified: incubator/thrift/trunk/lib/cpp/src/Thrift.cpp
URL: http://svn.apache.org/viewvc/incubator/thrift/trunk/lib/cpp/src/Thrift.cpp?rev=920682&r1=920681&r2=920682&view=diff
==============================================================================
--- incubator/thrift/trunk/lib/cpp/src/Thrift.cpp (original)
+++ incubator/thrift/trunk/lib/cpp/src/Thrift.cpp Tue Mar  9 05:20:07 2010
@@ -20,7 +20,6 @@
 #include <Thrift.h>
 #include <cstring>
 #include <boost/lexical_cast.hpp>
-#include <protocol/TProtocol.h>
 #include <stdarg.h>
 #include <stdio.h>
 
@@ -90,59 +89,4 @@ std::string TOutput::strerror_s(int errn
 #endif  // HAVE_STRERROR_R
 }
 
-uint32_t TApplicationException::read(apache::thrift::protocol::TProtocol* iprot) {
-  uint32_t xfer = 0;
-  std::string fname;
-  apache::thrift::protocol::TType ftype;
-  int16_t fid;
-
-  xfer += iprot->readStructBegin(fname);
-
-  while (true) {
-    xfer += iprot->readFieldBegin(fname, ftype, fid);
-    if (ftype == apache::thrift::protocol::T_STOP) {
-      break;
-    }
-    switch (fid) {
-    case 1:
-      if (ftype == apache::thrift::protocol::T_STRING) {
-        xfer += iprot->readString(message_);
-      } else {
-        xfer += iprot->skip(ftype);
-      }
-      break;
-    case 2:
-      if (ftype == apache::thrift::protocol::T_I32) {
-        int32_t type;
-        xfer += iprot->readI32(type);
-        type_ = (TApplicationExceptionType)type;
-      } else {
-        xfer += iprot->skip(ftype);
-      }
-      break;
-    default:
-      xfer += iprot->skip(ftype);
-      break;
-    }
-    xfer += iprot->readFieldEnd();
-  }
-
-  xfer += iprot->readStructEnd();
-  return xfer;
-}
-
-uint32_t TApplicationException::write(apache::thrift::protocol::TProtocol* oprot) const {
-  uint32_t xfer = 0;
-  xfer += oprot->writeStructBegin("TApplicationException");
-  xfer += oprot->writeFieldBegin("message", apache::thrift::protocol::T_STRING, 1);
-  xfer += oprot->writeString(message_);
-  xfer += oprot->writeFieldEnd();
-  xfer += oprot->writeFieldBegin("type", apache::thrift::protocol::T_I32, 2);
-  xfer += oprot->writeI32(type_);
-  xfer += oprot->writeFieldEnd();
-  xfer += oprot->writeFieldStop();
-  xfer += oprot->writeStructEnd();
-  return xfer;
-}
-
 }} // apache::thrift

Modified: incubator/thrift/trunk/lib/cpp/src/Thrift.h
URL: http://svn.apache.org/viewvc/incubator/thrift/trunk/lib/cpp/src/Thrift.h?rev=920682&r1=920681&r2=920682&view=diff
==============================================================================
--- incubator/thrift/trunk/lib/cpp/src/Thrift.h (original)
+++ incubator/thrift/trunk/lib/cpp/src/Thrift.h Tue Mar  9 05:20:07 2010
@@ -82,10 +82,6 @@ class TOutput {
 
 extern TOutput GlobalOutput;
 
-namespace protocol {
-  class TProtocol;
-}
-
 class TException : public std::exception {
  public:
   TException() {}
@@ -108,77 +104,6 @@ class TException : public std::exception
 
 };
 
-class TApplicationException : public TException {
- public:
-
-  /**
-   * Error codes for the various types of exceptions.
-   */
-  enum TApplicationExceptionType
-  { UNKNOWN = 0
-  , UNKNOWN_METHOD = 1
-  , INVALID_MESSAGE_TYPE = 2
-  , WRONG_METHOD_NAME = 3
-  , BAD_SEQUENCE_ID = 4
-  , MISSING_RESULT = 5
-  };
-
-  TApplicationException() :
-    TException(),
-    type_(UNKNOWN) {}
-
-  TApplicationException(TApplicationExceptionType type) :
-    TException(),
-    type_(type) {}
-
-  TApplicationException(const std::string& message) :
-    TException(message),
-    type_(UNKNOWN) {}
-
-  TApplicationException(TApplicationExceptionType type,
-                        const std::string& message) :
-    TException(message),
-    type_(type) {}
-
-  virtual ~TApplicationException() throw() {}
-
-  /**
-   * Returns an error code that provides information about the type of error
-   * that has occurred.
-   *
-   * @return Error code
-   */
-  TApplicationExceptionType getType() {
-    return type_;
-  }
-
-  virtual const char* what() const throw() {
-    if (message_.empty()) {
-      switch (type_) {
-        case UNKNOWN              : return "TApplicationException: Unknown application exception";
-        case UNKNOWN_METHOD       : return "TApplicationException: Unknown method";
-        case INVALID_MESSAGE_TYPE : return "TApplicationException: Invalid message type";
-        case WRONG_METHOD_NAME    : return "TApplicationException: Wrong method name";
-        case BAD_SEQUENCE_ID      : return "TApplicationException: Bad sequence identifier";
-        case MISSING_RESULT       : return "TApplicationException: Missing result";
-        default                   : return "TApplicationException: (Invalid exception type)";
-      };
-    } else {
-      return message_.c_str();
-    }
-  }
-
-  uint32_t read(protocol::TProtocol* iprot);
-  uint32_t write(protocol::TProtocol* oprot) const;
-
- protected:
-  /**
-   * Error code
-   */
-  TApplicationExceptionType type_;
-
-};
-
 
 // Forward declare this structure used by TDenseProtocol
 namespace reflection { namespace local {

Modified: incubator/thrift/trunk/lib/cpp/src/protocol/TDenseProtocol.cpp
URL: http://svn.apache.org/viewvc/incubator/thrift/trunk/lib/cpp/src/protocol/TDenseProtocol.cpp?rev=920682&r1=920681&r2=920682&view=diff
==============================================================================
--- incubator/thrift/trunk/lib/cpp/src/protocol/TDenseProtocol.cpp (original)
+++ incubator/thrift/trunk/lib/cpp/src/protocol/TDenseProtocol.cpp Tue Mar  9 05:20:07 2010
@@ -266,7 +266,7 @@ inline uint32_t TDenseProtocol::vlqWrite
 uint32_t TDenseProtocol::writeMessageBegin(const std::string& name,
                                            const TMessageType messageType,
                                            const int32_t seqid) {
-  throw TApplicationException("TDenseProtocol doesn't work with messages (yet).");
+  throw TException("TDenseProtocol doesn't work with messages (yet).");
 
   int32_t version = (VERSION_2) | ((int32_t)messageType);
   uint32_t wsize = 0;
@@ -290,7 +290,7 @@ uint32_t TDenseProtocol::writeStructBegi
 
     if (type_spec_ == NULL) {
       resetState();
-      throw TApplicationException("TDenseProtocol: No type specified.");
+      throw TException("TDenseProtocol: No type specified.");
     } else {
       assert(type_spec_->ttype == T_STRUCT);
       ts_stack_.push_back(type_spec_);
@@ -481,7 +481,7 @@ uint32_t TDenseProtocol::subWriteString(
 uint32_t TDenseProtocol::readMessageBegin(std::string& name,
                                           TMessageType& messageType,
                                           int32_t& seqid) {
-  throw TApplicationException("TDenseProtocol doesn't work with messages (yet).");
+  throw TException("TDenseProtocol doesn't work with messages (yet).");
 
   uint32_t xfer = 0;
   int32_t sz;
@@ -514,7 +514,7 @@ uint32_t TDenseProtocol::readStructBegin
 
     if (type_spec_ == NULL) {
       resetState();
-      throw TApplicationException("TDenseProtocol: No type specified.");
+      throw TException("TDenseProtocol: No type specified.");
     } else {
       assert(type_spec_->ttype == T_STRUCT);
       ts_stack_.push_back(type_spec_);