http://git-wip-us.apache.org/repos/asf/incubator-rocketmq-externals/blob/b9bb6cfa/rocketmq-client4cpp/src/jsoncpp/json_writer.cpp ---------------------------------------------------------------------- diff --git a/rocketmq-client4cpp/src/jsoncpp/json_writer.cpp b/rocketmq-client4cpp/src/jsoncpp/json_writer.cpp deleted file mode 100755 index 9d9e0cc..0000000 --- a/rocketmq-client4cpp/src/jsoncpp/json_writer.cpp +++ /dev/null @@ -1,1220 +0,0 @@ -// Copyright 2011 Baptiste Lepilleur -// Distributed under MIT license, or public domain if desired and -// recognized in your jurisdiction. -// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE - -#if !defined(JSON_IS_AMALGAMATION) -#include <json/writer.h> -#include "json_tool.h" -#endif // if !defined(JSON_IS_AMALGAMATION) -#include <iomanip> -#include <memory> -#include <sstream> -#include <utility> -#include <set> -#include <cassert> -#include <cstring> -#include <cstdio> - -#if defined(_MSC_VER) && _MSC_VER >= 1200 && _MSC_VER < 1800 // Between VC++ 6.0 and VC++ 11.0 -#include <float.h> -#define isfinite _finite -#elif defined(__sun) && defined(__SVR4) //Solaris -#if !defined(isfinite) -#include <ieeefp.h> -#define isfinite finite -#endif -#elif defined(_AIX) -#if !defined(isfinite) -#include <math.h> -#define isfinite finite -#endif -#elif defined(__hpux) -#if !defined(isfinite) -#if defined(__ia64) && !defined(finite) -#define isfinite(x) ((sizeof(x) == sizeof(float) ? \ - _Isfinitef(x) : _IsFinite(x))) -#else -#include <math.h> -#define isfinite finite -#endif -#endif -#else -#include <cmath> -#if !(defined(__QNXNTO__)) // QNX already defines isfinite -#define isfinite std::isfinite -#endif -#endif - -#if defined(_MSC_VER) -#if !defined(WINCE) && defined(__STDC_SECURE_LIB__) && _MSC_VER >= 1500 // VC++ 9.0 and above -#define snprintf sprintf_s -#elif _MSC_VER >= 1900 // VC++ 14.0 and above -#define snprintf std::snprintf -#else -#define snprintf _snprintf -#endif -#elif defined(__ANDROID__) || defined(__QNXNTO__) -#define snprintf snprintf -#elif __cplusplus >= 201103L -#if !defined(__MINGW32__) && !defined(__CYGWIN__) -#define snprintf std::snprintf -#endif -#endif - -#if defined(__BORLANDC__) -#include <float.h> -#define isfinite _finite -#define snprintf _snprintf -#endif - -#if defined(_MSC_VER) && _MSC_VER >= 1400 // VC++ 8.0 -// Disable warning about strdup being deprecated. -#pragma warning(disable : 4996) -#endif - -namespace rmq { -namespace Json { - -#if __cplusplus >= 201103L || (defined(_CPPLIB_VER) && _CPPLIB_VER >= 520) -typedef std::unique_ptr<StreamWriter> StreamWriterPtr; -#else -typedef std::auto_ptr<StreamWriter> StreamWriterPtr; -#endif - -static bool containsControlCharacter(const char* str) { - while (*str) { - if (isControlCharacter(*(str++))) - return true; - } - return false; -} - -static bool containsControlCharacter0(const char* str, unsigned len) { - char const* end = str + len; - while (end != str) { - if (isControlCharacter(*str) || 0==*str) - return true; - ++str; - } - return false; -} - -JSONCPP_STRING valueToString(LargestInt value) { - UIntToStringBuffer buffer; - char* current = buffer + sizeof(buffer); - if (value == Value::minLargestInt) { - uintToString(LargestUInt(Value::maxLargestInt) + 1, current); - *--current = '-'; - } else if (value < 0) { - uintToString(LargestUInt(-value), current); - *--current = '-'; - } else { - uintToString(LargestUInt(value), current); - } - assert(current >= buffer); - return current; -} - -JSONCPP_STRING valueToString(LargestUInt value) { - UIntToStringBuffer buffer; - char* current = buffer + sizeof(buffer); - uintToString(value, current); - assert(current >= buffer); - return current; -} - -#if defined(JSON_HAS_INT64) - -JSONCPP_STRING valueToString(Int value) { - return valueToString(LargestInt(value)); -} - -JSONCPP_STRING valueToString(UInt value) { - return valueToString(LargestUInt(value)); -} - -#endif // # if defined(JSON_HAS_INT64) - -namespace { -JSONCPP_STRING valueToString(double value, bool useSpecialFloats, unsigned int precision) { - // Allocate a buffer that is more than large enough to store the 16 digits of - // precision requested below. - char buffer[32]; - int len = -1; - - char formatString[10]; - snprintf(formatString, sizeof(formatString), "%%.%dg", precision); - - // Print into the buffer. We need not request the alternative representation - // that always has a decimal point because JSON doesn't distingish the - // concepts of reals and integers. - if (isfinite(value)) { - len = snprintf(buffer, sizeof(buffer), formatString, value); - } else { - // IEEE standard states that NaN values will not compare to themselves - if (value != value) { - len = snprintf(buffer, sizeof(buffer), useSpecialFloats ? "NaN" : "null"); - } else if (value < 0) { - len = snprintf(buffer, sizeof(buffer), useSpecialFloats ? "-Infinity" : "-1e+9999"); - } else { - len = snprintf(buffer, sizeof(buffer), useSpecialFloats ? "Infinity" : "1e+9999"); - } - // For those, we do not need to call fixNumLoc, but it is fast. - } - assert(len >= 0); - fixNumericLocale(buffer, buffer + len); - return buffer; -} -} - -JSONCPP_STRING valueToString(double value) { return valueToString(value, false, 17); } - -JSONCPP_STRING valueToString(bool value) { return value ? "true" : "false"; } - -JSONCPP_STRING valueToQuotedString(const char* value) { - if (value == NULL) - return ""; - // Not sure how to handle unicode... - if (strpbrk(value, "\"\\\b\f\n\r\t") == NULL && - !containsControlCharacter(value)) - return JSONCPP_STRING("\"") + value + "\""; - // We have to walk value and escape any special characters. - // Appending to JSONCPP_STRING is not efficient, but this should be rare. - // (Note: forward slashes are *not* rare, but I am not escaping them.) - JSONCPP_STRING::size_type maxsize = - strlen(value) * 2 + 3; // allescaped+quotes+NULL - JSONCPP_STRING result; - result.reserve(maxsize); // to avoid lots of mallocs - result += "\""; - for (const char* c = value; *c != 0; ++c) { - switch (*c) { - case '\"': - result += "\\\""; - break; - case '\\': - result += "\\\\"; - break; - case '\b': - result += "\\b"; - break; - case '\f': - result += "\\f"; - break; - case '\n': - result += "\\n"; - break; - case '\r': - result += "\\r"; - break; - case '\t': - result += "\\t"; - break; - // case '/': - // Even though \/ is considered a legal escape in JSON, a bare - // slash is also legal, so I see no reason to escape it. - // (I hope I am not misunderstanding something. - // blep notes: actually escaping \/ may be useful in javascript to avoid </ - // sequence. - // Should add a flag to allow this compatibility mode and prevent this - // sequence from occurring. - default: - if (isControlCharacter(*c)) { - JSONCPP_OSTRINGSTREAM oss; - oss << "\\u" << std::hex << std::uppercase << std::setfill('0') - << std::setw(4) << static_cast<int>(*c); - result += oss.str(); - } else { - result += *c; - } - break; - } - } - result += "\""; - return result; -} - -// https://github.com/upcaste/upcaste/blob/master/src/upcore/src/cstring/strnpbrk.cpp -static char const* strnpbrk(char const* s, char const* accept, size_t n) { - assert((s || !n) && accept); - - char const* const end = s + n; - for (char const* cur = s; cur < end; ++cur) { - int const c = *cur; - for (char const* a = accept; *a; ++a) { - if (*a == c) { - return cur; - } - } - } - return NULL; -} -static JSONCPP_STRING valueToQuotedStringN(const char* value, unsigned length) { - if (value == NULL) - return ""; - // Not sure how to handle unicode... - if (strnpbrk(value, "\"\\\b\f\n\r\t", length) == NULL && - !containsControlCharacter0(value, length)) - return JSONCPP_STRING("\"") + value + "\""; - // We have to walk value and escape any special characters. - // Appending to JSONCPP_STRING is not efficient, but this should be rare. - // (Note: forward slashes are *not* rare, but I am not escaping them.) - JSONCPP_STRING::size_type maxsize = - length * 2 + 3; // allescaped+quotes+NULL - JSONCPP_STRING result; - result.reserve(maxsize); // to avoid lots of mallocs - result += "\""; - char const* end = value + length; - for (const char* c = value; c != end; ++c) { - switch (*c) { - case '\"': - result += "\\\""; - break; - case '\\': - result += "\\\\"; - break; - case '\b': - result += "\\b"; - break; - case '\f': - result += "\\f"; - break; - case '\n': - result += "\\n"; - break; - case '\r': - result += "\\r"; - break; - case '\t': - result += "\\t"; - break; - // case '/': - // Even though \/ is considered a legal escape in JSON, a bare - // slash is also legal, so I see no reason to escape it. - // (I hope I am not misunderstanding something.) - // blep notes: actually escaping \/ may be useful in javascript to avoid </ - // sequence. - // Should add a flag to allow this compatibility mode and prevent this - // sequence from occurring. - default: - if ((isControlCharacter(*c)) || (*c == 0)) { - JSONCPP_OSTRINGSTREAM oss; - oss << "\\u" << std::hex << std::uppercase << std::setfill('0') - << std::setw(4) << static_cast<int>(*c); - result += oss.str(); - } else { - result += *c; - } - break; - } - } - result += "\""; - return result; -} - -// Class Writer -// ////////////////////////////////////////////////////////////////// -Writer::~Writer() {} - -// Class FastWriter -// ////////////////////////////////////////////////////////////////// - -FastWriter::FastWriter() - : yamlCompatiblityEnabled_(false), dropNullPlaceholders_(false), - omitEndingLineFeed_(false) {} - -void FastWriter::enableYAMLCompatibility() { yamlCompatiblityEnabled_ = true; } - -void FastWriter::dropNullPlaceholders() { dropNullPlaceholders_ = true; } - -void FastWriter::omitEndingLineFeed() { omitEndingLineFeed_ = true; } - -JSONCPP_STRING FastWriter::write(const Value& root) { - document_ = ""; - writeValue(root); - if (!omitEndingLineFeed_) - document_ += "\n"; - return document_; -} - -void FastWriter::writeValue(const Value& value) { - switch (value.type()) { - case nullValue: - if (!dropNullPlaceholders_) - document_ += "null"; - break; - case intValue: - document_ += valueToString(value.asLargestInt()); - break; - case uintValue: - document_ += valueToString(value.asLargestUInt()); - break; - case realValue: - document_ += valueToString(value.asDouble()); - break; - case stringValue: - { - // Is NULL possible for value.string_? No. - char const* str; - char const* end; - bool ok = value.getString(&str, &end); - if (ok) document_ += valueToQuotedStringN(str, static_cast<unsigned>(end-str)); - break; - } - case booleanValue: - document_ += valueToString(value.asBool()); - break; - case arrayValue: { - document_ += '['; - ArrayIndex size = value.size(); - for (ArrayIndex index = 0; index < size; ++index) { - if (index > 0) - document_ += ','; - writeValue(value[index]); - } - document_ += ']'; - } break; - case objectValue: { - Value::Members members(value.getMemberNames()); - document_ += '{'; - for (Value::Members::iterator it = members.begin(); it != members.end(); - ++it) { - const JSONCPP_STRING& name = *it; - if (it != members.begin()) - document_ += ','; - document_ += valueToQuotedStringN(name.data(), static_cast<unsigned>(name.length())); - document_ += yamlCompatiblityEnabled_ ? ": " : ":"; - writeValue(value[name]); - } - document_ += '}'; - } break; - } -} - -// Class StyledWriter -// ////////////////////////////////////////////////////////////////// - -StyledWriter::StyledWriter() - : rightMargin_(74), indentSize_(3), addChildValues_() {} - -JSONCPP_STRING StyledWriter::write(const Value& root) { - document_ = ""; - addChildValues_ = false; - indentString_ = ""; - writeCommentBeforeValue(root); - writeValue(root); - writeCommentAfterValueOnSameLine(root); - document_ += "\n"; - return document_; -} - -void StyledWriter::writeValue(const Value& value) { - switch (value.type()) { - case nullValue: - pushValue("null"); - break; - case intValue: - pushValue(valueToString(value.asLargestInt())); - break; - case uintValue: - pushValue(valueToString(value.asLargestUInt())); - break; - case realValue: - pushValue(valueToString(value.asDouble())); - break; - case stringValue: - { - // Is NULL possible for value.string_? No. - char const* str; - char const* end; - bool ok = value.getString(&str, &end); - if (ok) pushValue(valueToQuotedStringN(str, static_cast<unsigned>(end-str))); - else pushValue(""); - break; - } - case booleanValue: - pushValue(valueToString(value.asBool())); - break; - case arrayValue: - writeArrayValue(value); - break; - case objectValue: { - Value::Members members(value.getMemberNames()); - if (members.empty()) - pushValue("{}"); - else { - writeWithIndent("{"); - indent(); - Value::Members::iterator it = members.begin(); - for (;;) { - const JSONCPP_STRING& name = *it; - const Value& childValue = value[name]; - writeCommentBeforeValue(childValue); - writeWithIndent(valueToQuotedString(name.c_str())); - document_ += " : "; - writeValue(childValue); - if (++it == members.end()) { - writeCommentAfterValueOnSameLine(childValue); - break; - } - document_ += ','; - writeCommentAfterValueOnSameLine(childValue); - } - unindent(); - writeWithIndent("}"); - } - } break; - } -} - -void StyledWriter::writeArrayValue(const Value& value) { - unsigned size = value.size(); - if (size == 0) - pushValue("[]"); - else { - bool isArrayMultiLine = isMultineArray(value); - if (isArrayMultiLine) { - writeWithIndent("["); - indent(); - bool hasChildValue = !childValues_.empty(); - unsigned index = 0; - for (;;) { - const Value& childValue = value[index]; - writeCommentBeforeValue(childValue); - if (hasChildValue) - writeWithIndent(childValues_[index]); - else { - writeIndent(); - writeValue(childValue); - } - if (++index == size) { - writeCommentAfterValueOnSameLine(childValue); - break; - } - document_ += ','; - writeCommentAfterValueOnSameLine(childValue); - } - unindent(); - writeWithIndent("]"); - } else // output on a single line - { - assert(childValues_.size() == size); - document_ += "[ "; - for (unsigned index = 0; index < size; ++index) { - if (index > 0) - document_ += ", "; - document_ += childValues_[index]; - } - document_ += " ]"; - } - } -} - -bool StyledWriter::isMultineArray(const Value& value) { - ArrayIndex const size = value.size(); - bool isMultiLine = size * 3 >= rightMargin_; - childValues_.clear(); - for (ArrayIndex index = 0; index < size && !isMultiLine; ++index) { - const Value& childValue = value[index]; - isMultiLine = ((childValue.isArray() || childValue.isObject()) && - childValue.size() > 0); - } - if (!isMultiLine) // check if line length > max line length - { - childValues_.reserve(size); - addChildValues_ = true; - ArrayIndex lineLength = 4 + (size - 1) * 2; // '[ ' + ', '*n + ' ]' - for (ArrayIndex index = 0; index < size; ++index) { - if (hasCommentForValue(value[index])) { - isMultiLine = true; - } - writeValue(value[index]); - lineLength += static_cast<ArrayIndex>(childValues_[index].length()); - } - addChildValues_ = false; - isMultiLine = isMultiLine || lineLength >= rightMargin_; - } - return isMultiLine; -} - -void StyledWriter::pushValue(const JSONCPP_STRING& value) { - if (addChildValues_) - childValues_.push_back(value); - else - document_ += value; -} - -void StyledWriter::writeIndent() { - if (!document_.empty()) { - char last = document_[document_.length() - 1]; - if (last == ' ') // already indented - return; - if (last != '\n') // Comments may add new-line - document_ += '\n'; - } - document_ += indentString_; -} - -void StyledWriter::writeWithIndent(const JSONCPP_STRING& value) { - writeIndent(); - document_ += value; -} - -void StyledWriter::indent() { indentString_ += JSONCPP_STRING(indentSize_, ' '); } - -void StyledWriter::unindent() { - assert(indentString_.size() >= indentSize_); - indentString_.resize(indentString_.size() - indentSize_); -} - -void StyledWriter::writeCommentBeforeValue(const Value& root) { - if (!root.hasComment(commentBefore)) - return; - - document_ += "\n"; - writeIndent(); - const JSONCPP_STRING& comment = root.getComment(commentBefore); - JSONCPP_STRING::const_iterator iter = comment.begin(); - while (iter != comment.end()) { - document_ += *iter; - if (*iter == '\n' && - (iter != comment.end() && *(iter + 1) == '/')) - writeIndent(); - ++iter; - } - - // Comments are stripped of trailing newlines, so add one here - document_ += "\n"; -} - -void StyledWriter::writeCommentAfterValueOnSameLine(const Value& root) { - if (root.hasComment(commentAfterOnSameLine)) - document_ += " " + root.getComment(commentAfterOnSameLine); - - if (root.hasComment(commentAfter)) { - document_ += "\n"; - document_ += root.getComment(commentAfter); - document_ += "\n"; - } -} - -bool StyledWriter::hasCommentForValue(const Value& value) { - return value.hasComment(commentBefore) || - value.hasComment(commentAfterOnSameLine) || - value.hasComment(commentAfter); -} - -// Class StyledStreamWriter -// ////////////////////////////////////////////////////////////////// - -StyledStreamWriter::StyledStreamWriter(JSONCPP_STRING indentation) - : document_(NULL), rightMargin_(74), indentation_(indentation), - addChildValues_() {} - -void StyledStreamWriter::write(JSONCPP_OSTREAM& out, const Value& root) { - document_ = &out; - addChildValues_ = false; - indentString_ = ""; - indented_ = true; - writeCommentBeforeValue(root); - if (!indented_) writeIndent(); - indented_ = true; - writeValue(root); - writeCommentAfterValueOnSameLine(root); - *document_ << "\n"; - document_ = NULL; // Forget the stream, for safety. -} - -void StyledStreamWriter::writeValue(const Value& value) { - switch (value.type()) { - case nullValue: - pushValue("null"); - break; - case intValue: - pushValue(valueToString(value.asLargestInt())); - break; - case uintValue: - pushValue(valueToString(value.asLargestUInt())); - break; - case realValue: - pushValue(valueToString(value.asDouble())); - break; - case stringValue: - { - // Is NULL possible for value.string_? No. - char const* str; - char const* end; - bool ok = value.getString(&str, &end); - if (ok) pushValue(valueToQuotedStringN(str, static_cast<unsigned>(end-str))); - else pushValue(""); - break; - } - case booleanValue: - pushValue(valueToString(value.asBool())); - break; - case arrayValue: - writeArrayValue(value); - break; - case objectValue: { - Value::Members members(value.getMemberNames()); - if (members.empty()) - pushValue("{}"); - else { - writeWithIndent("{"); - indent(); - Value::Members::iterator it = members.begin(); - for (;;) { - const JSONCPP_STRING& name = *it; - const Value& childValue = value[name]; - writeCommentBeforeValue(childValue); - writeWithIndent(valueToQuotedString(name.c_str())); - *document_ << " : "; - writeValue(childValue); - if (++it == members.end()) { - writeCommentAfterValueOnSameLine(childValue); - break; - } - *document_ << ","; - writeCommentAfterValueOnSameLine(childValue); - } - unindent(); - writeWithIndent("}"); - } - } break; - } -} - -void StyledStreamWriter::writeArrayValue(const Value& value) { - unsigned size = value.size(); - if (size == 0) - pushValue("[]"); - else { - bool isArrayMultiLine = isMultineArray(value); - if (isArrayMultiLine) { - writeWithIndent("["); - indent(); - bool hasChildValue = !childValues_.empty(); - unsigned index = 0; - for (;;) { - const Value& childValue = value[index]; - writeCommentBeforeValue(childValue); - if (hasChildValue) - writeWithIndent(childValues_[index]); - else { - if (!indented_) writeIndent(); - indented_ = true; - writeValue(childValue); - indented_ = false; - } - if (++index == size) { - writeCommentAfterValueOnSameLine(childValue); - break; - } - *document_ << ","; - writeCommentAfterValueOnSameLine(childValue); - } - unindent(); - writeWithIndent("]"); - } else // output on a single line - { - assert(childValues_.size() == size); - *document_ << "[ "; - for (unsigned index = 0; index < size; ++index) { - if (index > 0) - *document_ << ", "; - *document_ << childValues_[index]; - } - *document_ << " ]"; - } - } -} - -bool StyledStreamWriter::isMultineArray(const Value& value) { - ArrayIndex const size = value.size(); - bool isMultiLine = size * 3 >= rightMargin_; - childValues_.clear(); - for (ArrayIndex index = 0; index < size && !isMultiLine; ++index) { - const Value& childValue = value[index]; - isMultiLine = ((childValue.isArray() || childValue.isObject()) && - childValue.size() > 0); - } - if (!isMultiLine) // check if line length > max line length - { - childValues_.reserve(size); - addChildValues_ = true; - ArrayIndex lineLength = 4 + (size - 1) * 2; // '[ ' + ', '*n + ' ]' - for (ArrayIndex index = 0; index < size; ++index) { - if (hasCommentForValue(value[index])) { - isMultiLine = true; - } - writeValue(value[index]); - lineLength += static_cast<ArrayIndex>(childValues_[index].length()); - } - addChildValues_ = false; - isMultiLine = isMultiLine || lineLength >= rightMargin_; - } - return isMultiLine; -} - -void StyledStreamWriter::pushValue(const JSONCPP_STRING& value) { - if (addChildValues_) - childValues_.push_back(value); - else - *document_ << value; -} - -void StyledStreamWriter::writeIndent() { - // blep intended this to look at the so-far-written string - // to determine whether we are already indented, but - // with a stream we cannot do that. So we rely on some saved state. - // The caller checks indented_. - *document_ << '\n' << indentString_; -} - -void StyledStreamWriter::writeWithIndent(const JSONCPP_STRING& value) { - if (!indented_) writeIndent(); - *document_ << value; - indented_ = false; -} - -void StyledStreamWriter::indent() { indentString_ += indentation_; } - -void StyledStreamWriter::unindent() { - assert(indentString_.size() >= indentation_.size()); - indentString_.resize(indentString_.size() - indentation_.size()); -} - -void StyledStreamWriter::writeCommentBeforeValue(const Value& root) { - if (!root.hasComment(commentBefore)) - return; - - if (!indented_) writeIndent(); - const JSONCPP_STRING& comment = root.getComment(commentBefore); - JSONCPP_STRING::const_iterator iter = comment.begin(); - while (iter != comment.end()) { - *document_ << *iter; - if (*iter == '\n' && - (iter != comment.end() && *(iter + 1) == '/')) - // writeIndent(); // would include newline - *document_ << indentString_; - ++iter; - } - indented_ = false; -} - -void StyledStreamWriter::writeCommentAfterValueOnSameLine(const Value& root) { - if (root.hasComment(commentAfterOnSameLine)) - *document_ << ' ' << root.getComment(commentAfterOnSameLine); - - if (root.hasComment(commentAfter)) { - writeIndent(); - *document_ << root.getComment(commentAfter); - } - indented_ = false; -} - -bool StyledStreamWriter::hasCommentForValue(const Value& value) { - return value.hasComment(commentBefore) || - value.hasComment(commentAfterOnSameLine) || - value.hasComment(commentAfter); -} - -////////////////////////// -// BuiltStyledStreamWriter - -/// Scoped enums are not available until C++11. -struct CommentStyle { - /// Decide whether to write comments. - enum Enum { - None, ///< Drop all comments. - Most, ///< Recover odd behavior of previous versions (not implemented yet). - All ///< Keep all comments. - }; -}; - -struct BuiltStyledStreamWriter : public StreamWriter -{ - BuiltStyledStreamWriter( - JSONCPP_STRING const& indentation, - CommentStyle::Enum cs, - JSONCPP_STRING const& colonSymbol, - JSONCPP_STRING const& nullSymbol, - JSONCPP_STRING const& endingLineFeedSymbol, - bool useSpecialFloats, - unsigned int precision); - int write(Value const& root, JSONCPP_OSTREAM* sout) JSONCPP_OVERRIDE; -private: - void writeValue(Value const& value); - void writeArrayValue(Value const& value); - bool isMultineArray(Value const& value); - void pushValue(JSONCPP_STRING const& value); - void writeIndent(); - void writeWithIndent(JSONCPP_STRING const& value); - void indent(); - void unindent(); - void writeCommentBeforeValue(Value const& root); - void writeCommentAfterValueOnSameLine(Value const& root); - static bool hasCommentForValue(const Value& value); - - typedef std::vector<JSONCPP_STRING> ChildValues; - - ChildValues childValues_; - JSONCPP_STRING indentString_; - unsigned int rightMargin_; - JSONCPP_STRING indentation_; - CommentStyle::Enum cs_; - JSONCPP_STRING colonSymbol_; - JSONCPP_STRING nullSymbol_; - JSONCPP_STRING endingLineFeedSymbol_; - bool addChildValues_ : 1; - bool indented_ : 1; - bool useSpecialFloats_ : 1; - unsigned int precision_; -}; -BuiltStyledStreamWriter::BuiltStyledStreamWriter( - JSONCPP_STRING const& indentation, - CommentStyle::Enum cs, - JSONCPP_STRING const& colonSymbol, - JSONCPP_STRING const& nullSymbol, - JSONCPP_STRING const& endingLineFeedSymbol, - bool useSpecialFloats, - unsigned int precision) - : rightMargin_(74) - , indentation_(indentation) - , cs_(cs) - , colonSymbol_(colonSymbol) - , nullSymbol_(nullSymbol) - , endingLineFeedSymbol_(endingLineFeedSymbol) - , addChildValues_(false) - , indented_(false) - , useSpecialFloats_(useSpecialFloats) - , precision_(precision) -{ -} -int BuiltStyledStreamWriter::write(Value const& root, JSONCPP_OSTREAM* sout) -{ - sout_ = sout; - addChildValues_ = false; - indented_ = true; - indentString_ = ""; - writeCommentBeforeValue(root); - if (!indented_) writeIndent(); - indented_ = true; - writeValue(root); - writeCommentAfterValueOnSameLine(root); - *sout_ << endingLineFeedSymbol_; - sout_ = NULL; - return 0; -} -void BuiltStyledStreamWriter::writeValue(Value const& value) { - switch (value.type()) { - case nullValue: - pushValue(nullSymbol_); - break; - case intValue: - pushValue(valueToString(value.asLargestInt())); - break; - case uintValue: - pushValue(valueToString(value.asLargestUInt())); - break; - case realValue: - pushValue(valueToString(value.asDouble(), useSpecialFloats_, precision_)); - break; - case stringValue: - { - // Is NULL is possible for value.string_? No. - char const* str; - char const* end; - bool ok = value.getString(&str, &end); - if (ok) pushValue(valueToQuotedStringN(str, static_cast<unsigned>(end-str))); - else pushValue(""); - break; - } - case booleanValue: - pushValue(valueToString(value.asBool())); - break; - case arrayValue: - writeArrayValue(value); - break; - case objectValue: { - Value::Members members(value.getMemberNames()); - if (members.empty()) - pushValue("{}"); - else { - writeWithIndent("{"); - indent(); - Value::Members::iterator it = members.begin(); - for (;;) { - JSONCPP_STRING const& name = *it; - Value const& childValue = value[name]; - writeCommentBeforeValue(childValue); - writeWithIndent(valueToQuotedStringN(name.data(), static_cast<unsigned>(name.length()))); - *sout_ << colonSymbol_; - writeValue(childValue); - if (++it == members.end()) { - writeCommentAfterValueOnSameLine(childValue); - break; - } - *sout_ << ","; - writeCommentAfterValueOnSameLine(childValue); - } - unindent(); - writeWithIndent("}"); - } - } break; - } -} - -void BuiltStyledStreamWriter::writeArrayValue(Value const& value) { - unsigned size = value.size(); - if (size == 0) - pushValue("[]"); - else { - bool isMultiLine = (cs_ == CommentStyle::All) || isMultineArray(value); - if (isMultiLine) { - writeWithIndent("["); - indent(); - bool hasChildValue = !childValues_.empty(); - unsigned index = 0; - for (;;) { - Value const& childValue = value[index]; - writeCommentBeforeValue(childValue); - if (hasChildValue) - writeWithIndent(childValues_[index]); - else { - if (!indented_) writeIndent(); - indented_ = true; - writeValue(childValue); - indented_ = false; - } - if (++index == size) { - writeCommentAfterValueOnSameLine(childValue); - break; - } - *sout_ << ","; - writeCommentAfterValueOnSameLine(childValue); - } - unindent(); - writeWithIndent("]"); - } else // output on a single line - { - assert(childValues_.size() == size); - *sout_ << "["; - if (!indentation_.empty()) *sout_ << " "; - for (unsigned index = 0; index < size; ++index) { - if (index > 0) - *sout_ << ((!indentation_.empty()) ? ", " : ","); - *sout_ << childValues_[index]; - } - if (!indentation_.empty()) *sout_ << " "; - *sout_ << "]"; - } - } -} - -bool BuiltStyledStreamWriter::isMultineArray(Value const& value) { - ArrayIndex const size = value.size(); - bool isMultiLine = size * 3 >= rightMargin_; - childValues_.clear(); - for (ArrayIndex index = 0; index < size && !isMultiLine; ++index) { - Value const& childValue = value[index]; - isMultiLine = ((childValue.isArray() || childValue.isObject()) && - childValue.size() > 0); - } - if (!isMultiLine) // check if line length > max line length - { - childValues_.reserve(size); - addChildValues_ = true; - ArrayIndex lineLength = 4 + (size - 1) * 2; // '[ ' + ', '*n + ' ]' - for (ArrayIndex index = 0; index < size; ++index) { - if (hasCommentForValue(value[index])) { - isMultiLine = true; - } - writeValue(value[index]); - lineLength += static_cast<ArrayIndex>(childValues_[index].length()); - } - addChildValues_ = false; - isMultiLine = isMultiLine || lineLength >= rightMargin_; - } - return isMultiLine; -} - -void BuiltStyledStreamWriter::pushValue(JSONCPP_STRING const& value) { - if (addChildValues_) - childValues_.push_back(value); - else - *sout_ << value; -} - -void BuiltStyledStreamWriter::writeIndent() { - // blep intended this to look at the so-far-written string - // to determine whether we are already indented, but - // with a stream we cannot do that. So we rely on some saved state. - // The caller checks indented_. - - if (!indentation_.empty()) { - // In this case, drop newlines too. - *sout_ << '\n' << indentString_; - } -} - -void BuiltStyledStreamWriter::writeWithIndent(JSONCPP_STRING const& value) { - if (!indented_) writeIndent(); - *sout_ << value; - indented_ = false; -} - -void BuiltStyledStreamWriter::indent() { indentString_ += indentation_; } - -void BuiltStyledStreamWriter::unindent() { - assert(indentString_.size() >= indentation_.size()); - indentString_.resize(indentString_.size() - indentation_.size()); -} - -void BuiltStyledStreamWriter::writeCommentBeforeValue(Value const& root) { - if (cs_ == CommentStyle::None) return; - if (!root.hasComment(commentBefore)) - return; - - if (!indented_) writeIndent(); - const JSONCPP_STRING& comment = root.getComment(commentBefore); - JSONCPP_STRING::const_iterator iter = comment.begin(); - while (iter != comment.end()) { - *sout_ << *iter; - if (*iter == '\n' && - (iter != comment.end() && *(iter + 1) == '/')) - // writeIndent(); // would write extra newline - *sout_ << indentString_; - ++iter; - } - indented_ = false; -} - -void BuiltStyledStreamWriter::writeCommentAfterValueOnSameLine(Value const& root) { - if (cs_ == CommentStyle::None) return; - if (root.hasComment(commentAfterOnSameLine)) - *sout_ << " " + root.getComment(commentAfterOnSameLine); - - if (root.hasComment(commentAfter)) { - writeIndent(); - *sout_ << root.getComment(commentAfter); - } -} - -// static -bool BuiltStyledStreamWriter::hasCommentForValue(const Value& value) { - return value.hasComment(commentBefore) || - value.hasComment(commentAfterOnSameLine) || - value.hasComment(commentAfter); -} - -/////////////// -// StreamWriter - -StreamWriter::StreamWriter() - : sout_(NULL) -{ -} -StreamWriter::~StreamWriter() -{ -} -StreamWriter::Factory::~Factory() -{} -StreamWriterBuilder::StreamWriterBuilder() -{ - setDefaults(&settings_); -} -StreamWriterBuilder::~StreamWriterBuilder() -{} -StreamWriter* StreamWriterBuilder::newStreamWriter() const -{ - JSONCPP_STRING indentation = settings_["indentation"].asString(); - JSONCPP_STRING cs_str = settings_["commentStyle"].asString(); - bool eyc = settings_["enableYAMLCompatibility"].asBool(); - bool dnp = settings_["dropNullPlaceholders"].asBool(); - bool usf = settings_["useSpecialFloats"].asBool(); - unsigned int pre = settings_["precision"].asUInt(); - CommentStyle::Enum cs = CommentStyle::All; - if (cs_str == "All") { - cs = CommentStyle::All; - } else if (cs_str == "None") { - cs = CommentStyle::None; - } else { - throwRuntimeError("commentStyle must be 'All' or 'None'"); - } - JSONCPP_STRING colonSymbol = " : "; - if (eyc) { - colonSymbol = ": "; - } else if (indentation.empty()) { - colonSymbol = ":"; - } - JSONCPP_STRING nullSymbol = "null"; - if (dnp) { - nullSymbol = ""; - } - if (pre > 17) pre = 17; - JSONCPP_STRING endingLineFeedSymbol = ""; - return new BuiltStyledStreamWriter( - indentation, cs, - colonSymbol, nullSymbol, endingLineFeedSymbol, usf, pre); -} -static void getValidWriterKeys(std::set<JSONCPP_STRING>* valid_keys) -{ - valid_keys->clear(); - valid_keys->insert("indentation"); - valid_keys->insert("commentStyle"); - valid_keys->insert("enableYAMLCompatibility"); - valid_keys->insert("dropNullPlaceholders"); - valid_keys->insert("useSpecialFloats"); - valid_keys->insert("precision"); -} -bool StreamWriterBuilder::validate(Value* invalid) const -{ - Value my_invalid; - if (!invalid) invalid = &my_invalid; // so we do not need to test for NULL - Value& inv = *invalid; - std::set<JSONCPP_STRING> valid_keys; - getValidWriterKeys(&valid_keys); - Value::Members keys = settings_.getMemberNames(); - size_t n = keys.size(); - for (size_t i = 0; i < n; ++i) { - JSONCPP_STRING const& key = keys[i]; - if (valid_keys.find(key) == valid_keys.end()) { - inv[key] = settings_[key]; - } - } - return 0u == inv.size(); -} -Value& StreamWriterBuilder::operator[](JSONCPP_STRING key) -{ - return settings_[key]; -} -// static -void StreamWriterBuilder::setDefaults(Value* settings) -{ - //! [StreamWriterBuilderDefaults] - (*settings)["commentStyle"] = "All"; - (*settings)["indentation"] = "\t"; - (*settings)["enableYAMLCompatibility"] = false; - (*settings)["dropNullPlaceholders"] = false; - (*settings)["useSpecialFloats"] = false; - (*settings)["precision"] = 17; - //! [StreamWriterBuilderDefaults] -} - -JSONCPP_STRING writeString(StreamWriter::Factory const& builder, Value const& root) { - JSONCPP_OSTRINGSTREAM sout; - StreamWriterPtr const writer(builder.newStreamWriter()); - writer->write(root, &sout); - return sout.str(); -} - -JSONCPP_OSTREAM& operator<<(JSONCPP_OSTREAM& sout, Value const& root) { - StreamWriterBuilder builder; - StreamWriterPtr const writer(builder.newStreamWriter()); - writer->write(root, &sout); - return sout; -} - -} // namespace Json -} // namespace rmq
http://git-wip-us.apache.org/repos/asf/incubator-rocketmq-externals/blob/b9bb6cfa/rocketmq-client4cpp/src/jsoncpp/version ---------------------------------------------------------------------- diff --git a/rocketmq-client4cpp/src/jsoncpp/version b/rocketmq-client4cpp/src/jsoncpp/version deleted file mode 100755 index 73c8b4f..0000000 --- a/rocketmq-client4cpp/src/jsoncpp/version +++ /dev/null @@ -1 +0,0 @@ -1.7.7 \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-rocketmq-externals/blob/b9bb6cfa/rocketmq-client4cpp/src/kpr/AtomicValue.cpp ---------------------------------------------------------------------- diff --git a/rocketmq-client4cpp/src/kpr/AtomicValue.cpp b/rocketmq-client4cpp/src/kpr/AtomicValue.cpp deleted file mode 100755 index 30777f9..0000000 --- a/rocketmq-client4cpp/src/kpr/AtomicValue.cpp +++ /dev/null @@ -1,146 +0,0 @@ -/** - * Copyright (C) 2013 kangliqiang ,kang...@163.com - * - * Licensed 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 "AtomicValue.h" - -#if !defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_8) - -#include "Mutex.h" - -namespace kpr -{ -static const size_t kSwapLockCount = 64; -static Mutex s_swapLocks[kSwapLockCount]; - -static inline Mutex& getSwapLock(const volatile int64_t* addr) -{ - return s_swapLocks[(reinterpret_cast<intptr_t>(addr) >> 3U) % kSwapLockCount]; -} - -static int64_t atomicAddAndFetch(int64_t volatile* ptr, int64_t step) -{ - Mutex& mutex = getSwapLock(ptr); - - mutex.Lock(); - int64_t value = *ptr + step; - *ptr = value; - mutex.Unlock(); - - return value; -} - -static int64_t atomicFetchAndAdd(int64_t volatile* ptr, int64_t step) -{ - Mutex& mutex = getSwapLock(ptr); - - mutex.Lock(); - int64_t value = *ptr; - *ptr += step; - mutex.Unlock(); - - return value; -} - -static bool atomicBoolCompareAndSwap(int64_t volatile* ptr, int64_t oldval, int64_t newval) -{ - Mutex& mutex = getSwapLock(ptr); - - mutex.Lock(); - if (*ptr == oldval) - { - *ptr = newval; - mutex.Unlock(); - return true; - } - - mutex.Unlock(); - return false; -} - -static int64_t atomicValCompareAndSwap(int64_t volatile* ptr, int64_t oldval, int64_t newval) -{ - Mutex& mutex = getSwapLock(ptr); - - mutex.Lock(); - int64_t value = *ptr; - if (value == oldval) - { - *ptr = newval; - mutex.Unlock(); - return value; - } - - mutex.Unlock(); - return value; -} - - -static int64_t atomicTestAndSet(int64_t volatile* ptr, int64_t val) -{ - Mutex& mutex = getSwapLock(ptr); - - mutex.Lock(); - int64_t value = *ptr; - *ptr = val; - mutex.Unlock(); - - return value; -} - - - -extern "C" { -int64_t __sync_add_and_fetch_8(int64_t volatile* ptr, int64_t value) -{ - return atomicAddAndFetch(ptr, value); -} - -int64_t __sync_sub_and_fetch_8(int64_t volatile* ptr, int64_t value) -{ - return atomicAddAndFetch(ptr, -value); -} - -int64_t __sync_fetch_and_add_8(int64_t volatile* ptr, int64_t value) -{ - return atomicFetchAndAdd(ptr, -value); -} - -int64_t __sync_fetch_and_sub_8(int64_t volatile* ptr, int64_t value) -{ - return atomicFetchAndAdd(ptr, -value); -} - -bool __sync_bool_compare_and_swap_8(volatile int64_t* ptr, int64_t oldval, int64_t newval) -{ - return atomicBoolCompareAndSwap(ptr, oldval, newval); -} - -int64_t __sync_val_compare_and_swap_8(volatile int64_t* ptr, int64_t oldval, int64_t newval) -{ - return atomicValCompareAndSwap(ptr, oldval, newval); -} - -bool __sync_lock_test_and_set_8(int64_t volatile* ptr, int64_t value) -{ - return atomicTestAndSet(ptr, value); -} - - -} // extern "C" - -} // namespace kpr -#endif - - http://git-wip-us.apache.org/repos/asf/incubator-rocketmq-externals/blob/b9bb6cfa/rocketmq-client4cpp/src/kpr/AtomicValue.h ---------------------------------------------------------------------- diff --git a/rocketmq-client4cpp/src/kpr/AtomicValue.h b/rocketmq-client4cpp/src/kpr/AtomicValue.h deleted file mode 100755 index 50d198e..0000000 --- a/rocketmq-client4cpp/src/kpr/AtomicValue.h +++ /dev/null @@ -1,200 +0,0 @@ -/** - * Copyright (C) 2013 kangliqiang ,kang...@163.com - * - * Licensed 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 __KPR_ATOMICVALUE_H__ -#define __KPR_ATOMICVALUE_H__ - -#include "KPRTypes.h" - -namespace kpr -{ - -template <class T> -class AtomicValue -{ -public: - AtomicValue() - : value(0) - { - } - - AtomicValue(T init) - : value(init) - { - } - - AtomicValue<T>& operator=(T newValue) - { - set(newValue); - return *this; - } - - AtomicValue<T>& operator=(const AtomicValue<T>& v) - { - set(v.get()); - - return *this; - } - - inline T operator+=(T n) - { - return __sync_add_and_fetch(&value, n); - } - - inline T operator-=(T n) - { - return __sync_sub_and_fetch(&value, n); - } - - inline T operator++() - { - return *this += 1; - } - - inline T operator--() - { - return *this -= 1; - } - - inline T fetchAndAdd(T n) - { - return __sync_fetch_and_add(&value, n); - } - - inline T fetchAndSub(T n) - { - return __sync_fetch_and_sub(&value, n); - } - - inline T operator++(int) - { - return fetchAndAdd(1); - } - - inline T operator--(int) - { - return fetchAndSub(1); - } - - operator T() const - { - return get(); - } - - T get() const - { - return const_cast<AtomicValue<T>*>(this)->fetchAndAdd(static_cast<T>(0)); - } - - void set(T n) - { - __sync_lock_test_and_set((T*)&value, n); - } - - inline T getAndSet(T comparand, T exchange) - { - return __sync_val_compare_and_swap((T*)&value, comparand, exchange); - } - - inline bool compareAndSet(T comparand, T exchange) - { - return __sync_bool_compare_and_swap((T*)&value, comparand, exchange); - } - -private: - volatile T value; -}; - - -template <class T> -class AtomicReference -{ -public: - AtomicReference() : value(NULL) {} - AtomicReference(T* init) : value(init) {} - - AtomicReference<T>& operator=(T* newValue) - { - set(newValue); - return *this; - } - - AtomicReference<T>& operator=(const AtomicReference<T>& v) - { - set(v.get()); - - return *this; - } - - T* operator->() const - { - return get(); - } - - T& operator*() - { - return *get(); - } - - operator T*() const - { - return get(); - } - - T* get() const - { - if (value == NULL) - { - return NULL; - } - else - { - return (T*)(__sync_fetch_and_add((uintptr_t*)&value, 0)); - } - } - - void set(T* n) - { - if (value == NULL) - { - value = n; - } - else - { - __sync_lock_test_and_set((uintptr_t*)&value, n); - } - } - - inline T getAndSet(T* comparand, T* exchange) - { - return __sync_val_compare_and_swap((uintptr_t*)&value, comparand, exchange); - } - - inline bool compareAndSet(T* comparand, T* exchange) - { - return __sync_bool_compare_and_swap((uintptr_t*)&value, comparand, exchange); - } - -private: - volatile T* value; -}; - - -typedef AtomicValue<bool> AtomicBoolean; -typedef AtomicValue<int> AtomicInteger; -typedef AtomicValue<long long> AtomicLong; - -} -#endif http://git-wip-us.apache.org/repos/asf/incubator-rocketmq-externals/blob/b9bb6cfa/rocketmq-client4cpp/src/kpr/Condition.cpp ---------------------------------------------------------------------- diff --git a/rocketmq-client4cpp/src/kpr/Condition.cpp b/rocketmq-client4cpp/src/kpr/Condition.cpp deleted file mode 100755 index c81765e..0000000 --- a/rocketmq-client4cpp/src/kpr/Condition.cpp +++ /dev/null @@ -1,158 +0,0 @@ -/** - * Copyright (C) 2013 kangliqiang ,kang...@163.com - * - * Licensed 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 "Condition.h" - -#include <errno.h> -#include <assert.h> - -#include "Mutex.h" -#include "ScopedLock.h" -#include "Semaphore.h" -#include "KPRUtil.h" -#include "Exception.h" - -namespace kpr -{ -class ConditionHelper -{ - RecursiveMutex& m_mutex; - int m_count; - -public: - - ConditionHelper(RecursiveMutex& mutex, int count) - : m_mutex(mutex), - m_count(count) - { - } - - ~ConditionHelper() - { - pthread_mutex_unlock(&m_mutex.m_mutex); - m_mutex.lock(m_count); - } -}; - - -Condition::Condition() -{ - pthread_cond_init(&m_cond, 0); -} - -Condition::~Condition() -{ - pthread_cond_destroy(&m_cond); -} - -void Condition::Wait(Mutex& mutex) -{ - wait(mutex, -1); -} - -bool Condition::Wait(Mutex& mutex, long timeout) -{ - assert(timeout >= 0 && "timeout value is negative"); - - return wait(mutex, timeout); -} - -void Condition::Wait(RecursiveMutex& mutex) -{ - wait(mutex, -1); -} - -bool Condition::Wait(RecursiveMutex& mutex, long timeout) -{ - assert(timeout >= 0 && "timeout value is negative"); - - return wait(mutex, timeout); -} - -void Condition::Notify() -{ - pthread_cond_signal(&m_cond); -} - -void Condition::NotifyAll() -{ - pthread_cond_broadcast(&m_cond); -} - -bool Condition::wait(Mutex& mutex, long timeout) -{ - int ret = 0; - if (timeout < 0) - { - ret = pthread_cond_wait(&m_cond, &mutex.m_mutex); - } - else - { - struct timespec abstime = KPRUtil::CalcAbsTime(timeout); - ret = pthread_cond_timedwait(&m_cond, &mutex.m_mutex, &abstime); - } - if (ret == 0) - { - return true; - } - else - { - if (errno == EINTR) - { - THROW_EXCEPTION(InterruptedException, "pthread_cond_timedwait failed", errno); - } - else if (errno == ETIMEDOUT && timeout >= 0) - { - return false; - } - } - return true; -} - -bool Condition::wait(RecursiveMutex& mutex, long timeout) -{ - unsigned int count = mutex.reset4Condvar(); - ConditionHelper unlock(mutex, count); - - int ret = 0; - if (timeout < 0) - { - ret = pthread_cond_wait(&m_cond, &mutex.m_mutex); - } - else - { - struct timespec abstime = KPRUtil::CalcAbsTime(timeout); - ret = pthread_cond_timedwait(&m_cond, &mutex.m_mutex, &abstime); - } - - if (ret == 0) - { - return true; - } - else - { - if (errno == EINTR) - { - THROW_EXCEPTION(InterruptedException, "pthread_cond_timedwait failed", errno); - } - else if (errno == ETIMEDOUT && timeout >= 0) - { - return false; - } - } - - return true; -} -} http://git-wip-us.apache.org/repos/asf/incubator-rocketmq-externals/blob/b9bb6cfa/rocketmq-client4cpp/src/kpr/Condition.h ---------------------------------------------------------------------- diff --git a/rocketmq-client4cpp/src/kpr/Condition.h b/rocketmq-client4cpp/src/kpr/Condition.h deleted file mode 100755 index 901e66c..0000000 --- a/rocketmq-client4cpp/src/kpr/Condition.h +++ /dev/null @@ -1,54 +0,0 @@ -/** - * Copyright (C) 2013 kangliqiang ,kang...@163.com - * - * Licensed 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 __KPR_CONDITION_H__ -#define __KPR_CONDITION_H__ - -#include "KPRTypes.h" - -namespace kpr -{ -class Mutex; -class RWMutex; -class RecursiveMutex; - -class Condition -{ -public: - Condition(); - ~Condition(); - void Wait(Mutex& mutex); - - bool Wait(Mutex& mutex, long timeout); - - void Wait(RecursiveMutex& mutex); - - bool Wait(RecursiveMutex& mutex, long timeout); - - void Notify(); - - void NotifyAll(); - -private: - bool wait(Mutex&, long timeout); - bool wait(RecursiveMutex&, long timeout); - - Condition(const Condition&); - void operator=(const Condition&); - - pthread_cond_t m_cond; -}; -} -#endif http://git-wip-us.apache.org/repos/asf/incubator-rocketmq-externals/blob/b9bb6cfa/rocketmq-client4cpp/src/kpr/Epoller.cpp ---------------------------------------------------------------------- diff --git a/rocketmq-client4cpp/src/kpr/Epoller.cpp b/rocketmq-client4cpp/src/kpr/Epoller.cpp deleted file mode 100755 index 3c4ddf3..0000000 --- a/rocketmq-client4cpp/src/kpr/Epoller.cpp +++ /dev/null @@ -1,96 +0,0 @@ -/** -* Copyright (C) 2013 suwenkuang ,hooligan_...@qq.com -* -* Licensed 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 "Epoller.h" -#include <unistd.h> - -namespace kpr -{ -Epoller::Epoller(bool bEt) -{ - _iEpollfd = -1; - _pevs = NULL; - _et = bEt; - _max_connections = 1024; -} - -Epoller::~Epoller() -{ - if (_pevs != NULL) - { - delete[] _pevs; - _pevs = NULL; - } - - if (_iEpollfd > 0) - { - close(_iEpollfd); - } -} - -void Epoller::ctrl(int fd, long long data, __uint32_t events, int op) -{ - struct epoll_event ev; - ev.data.u64 = data; - if (_et) - { - ev.events = events | EPOLLET; - } - else - { - ev.events = events; - } - - epoll_ctl(_iEpollfd, op, fd, &ev); -} - -void Epoller::create(int max_connections) -{ - _max_connections = max_connections; - - _iEpollfd = epoll_create(_max_connections + 1); - - if (_pevs != NULL) - { - delete[] _pevs; - } - - _pevs = new epoll_event[_max_connections + 1]; -} - -void Epoller::add(int fd, long long data, __uint32_t event) -{ - ctrl(fd, data, event, EPOLL_CTL_ADD); -} - -void Epoller::mod(int fd, long long data, __uint32_t event) -{ - ctrl(fd, data, event, EPOLL_CTL_MOD); -} - -void Epoller::del(int fd, long long data, __uint32_t event) -{ - ctrl(fd, data, event, EPOLL_CTL_DEL); -} - -int Epoller::wait(int millsecond) -{ - return epoll_wait(_iEpollfd, _pevs, _max_connections + 1, millsecond); -} - -} - - http://git-wip-us.apache.org/repos/asf/incubator-rocketmq-externals/blob/b9bb6cfa/rocketmq-client4cpp/src/kpr/Epoller.h ---------------------------------------------------------------------- diff --git a/rocketmq-client4cpp/src/kpr/Epoller.h b/rocketmq-client4cpp/src/kpr/Epoller.h deleted file mode 100755 index d3d161b..0000000 --- a/rocketmq-client4cpp/src/kpr/Epoller.h +++ /dev/null @@ -1,62 +0,0 @@ -/** -* Copyright (C) 2013 suwenkuang ,hooligan_...@qq.com -* -* Licensed 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 __KPR_EPOLLER_H_ -#define __KPR_EPOLLER_H_ - -#include <unistd.h> -#include <sys/epoll.h> -#include <cassert> - -namespace kpr -{ - - -class Epoller -{ -public: - Epoller(bool bEt = true); - ~Epoller(); - - - void create(int max_connections); - - void add(int fd, long long data, __uint32_t event); - void mod(int fd, long long data, __uint32_t event); - void del(int fd, long long data, __uint32_t event); - - int wait(int millsecond); - - struct epoll_event& get(int i) - { - assert(_pevs != 0); - return _pevs[i]; - } - -protected: - void ctrl(int fd, long long data, __uint32_t events, int op); - -protected: - int _iEpollfd; - int _max_connections; - struct epoll_event* _pevs; - bool _et; -}; - -} -#endif - - http://git-wip-us.apache.org/repos/asf/incubator-rocketmq-externals/blob/b9bb6cfa/rocketmq-client4cpp/src/kpr/Exception.h ---------------------------------------------------------------------- diff --git a/rocketmq-client4cpp/src/kpr/Exception.h b/rocketmq-client4cpp/src/kpr/Exception.h deleted file mode 100755 index 524af84..0000000 --- a/rocketmq-client4cpp/src/kpr/Exception.h +++ /dev/null @@ -1,100 +0,0 @@ -/** - * Copyright (C) 2013 kangliqiang ,kang...@163.com - * - * Licensed 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 __KPR_EXCEPTION_H -#define __KPR_EXCEPTION_H - -#include "KPRTypes.h" -#include <exception> -#include <string> -#include <sstream> - -namespace kpr -{ -class Exception : public std::exception -{ -public: - Exception(const char* msg, int error, const char* file, int line)throw() - : m_error(error), m_line(line), m_msg(msg), m_file(file) - { - try - { - std::stringstream ss; - ss << "[" << file << ":" << line << "]|error: " << error << "|msg:" << msg; - m_msg = ss.str(); - } - catch (...) - { - } - } - - virtual ~Exception()throw() - { - } - - const char* what() const throw() - { - return m_msg.c_str(); - } - - int GetError() const throw() - { - return m_error; - } - - virtual const char* GetType() const throw() - { - return "Exception"; - } - -protected: - int m_error; - int m_line; - std::string m_msg; - std::string m_file; -}; -} - -inline std::ostream& operator<<(std::ostream& os, const kpr::Exception& e) -{ - os << "Type:" << e.GetType() << e.what(); - return os; -} - -#define DEFINE_EXCEPTION(name) \ - class name : public kpr::Exception \ - {\ - public:\ - name(const char* msg, int error,const char* file,int line) throw ()\ - : Exception(msg,error,file,line) {}\ - virtual const char* GetType() const throw()\ - {\ - return #name;\ - }\ - }; - -namespace kpr -{ -DEFINE_EXCEPTION(SystemCallException); -DEFINE_EXCEPTION(NotImplementException); -DEFINE_EXCEPTION(InterruptedException); -DEFINE_EXCEPTION(FileUtilException); -DEFINE_EXCEPTION(RefHandleNullException); - -}; - -#define THROW_EXCEPTION(e,msg,err) throw e(msg,err,__FILE__,__LINE__); - -#endif http://git-wip-us.apache.org/repos/asf/incubator-rocketmq-externals/blob/b9bb6cfa/rocketmq-client4cpp/src/kpr/FileUtil.cpp ---------------------------------------------------------------------- diff --git a/rocketmq-client4cpp/src/kpr/FileUtil.cpp b/rocketmq-client4cpp/src/kpr/FileUtil.cpp deleted file mode 100755 index aa239e4..0000000 --- a/rocketmq-client4cpp/src/kpr/FileUtil.cpp +++ /dev/null @@ -1,523 +0,0 @@ -/** -* Copyright (C) 2013 suwenkuang ,hooligan_...@qq.com -* -* Licensed 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 <string.h> -#include <time.h> -#include <errno.h> -#include <unistd.h> -#include <stdint.h> -#include <stdlib.h> -#include <fcntl.h> -#include <stdarg.h> -#include <sys/stat.h> -#include <sys/types.h> -#include <cassert> -#include <cstdio> -#include <string> -#include <iostream> -#include <sstream> -#include <stdexcept> -#include <algorithm> -#include <map> -#include <stack> -#include <vector> - -#include "FileUtil.h" -#include "KPRUtil.h" -#include "Exception.h" - - -namespace kpr -{ - -std::ifstream::pos_type FileUtil::getFileSize(const std::string& sFullFileName) -{ - std::ifstream ifs(sFullFileName.c_str()); - ifs.seekg(0, std::ios_base::end); - return ifs.tellg(); -} - -bool FileUtil::isAbsolute(const std::string& sFullFileName) -{ - if (sFullFileName.empty()) - { - return false; - } - - unsigned i = 0; - while (isspace(sFullFileName[i])) - { - ++i; - } - - return sFullFileName[i] == '/'; -} - -bool FileUtil::isFileExist(const std::string& sFullFileName, mode_t iFileType) -{ - struct stat f_stat; - - if (lstat(sFullFileName.c_str(), &f_stat) == -1) - { - return false; - } - - if (!(f_stat.st_mode & iFileType)) - { - return false; - } - - return true; -} - -bool FileUtil::isFileExistEx(const std::string& sFullFileName, mode_t iFileType) -{ - struct stat f_stat; - - if (stat(sFullFileName.c_str(), &f_stat) == -1) - { - return false; - } - - if (!(f_stat.st_mode & iFileType)) - { - return false; - } - - return true; -} - -bool FileUtil::makeDir(const std::string& sDirectoryPath, mode_t iFlag) -{ - int iRetCode = mkdir(sDirectoryPath.c_str(), iFlag); - if (iRetCode < 0 && errno == EEXIST) - { - return isFileExistEx(sDirectoryPath, S_IFDIR); - } - - return iRetCode == 0; -} - -bool FileUtil::makeDirRecursive(const std::string& sDirectoryPath, mode_t iFlag) -{ - std::string simple = simplifyDirectory(sDirectoryPath); - - std::string::size_type pos = 0; - for (; pos != std::string::npos;) - { - pos = simple.find("/", pos + 1); - std::string s; - if (pos == std::string::npos) - { - s = simple.substr(0, simple.size()); - return makeDir(s.c_str(), iFlag); - } - else - { - s = simple.substr(0, pos); - if (!makeDir(s.c_str(), iFlag)) - { - return false; - } - } - } - return true; -} - -int FileUtil::setExecutable(const std::string& sFullFileName, bool canExecutable) -{ - struct stat f_stat; - - if (stat(sFullFileName.c_str(), &f_stat) == -1) - { - return -1; - } - - return chmod(sFullFileName.c_str(), canExecutable ? f_stat.st_mode | S_IXUSR : f_stat.st_mode & ~S_IXUSR); -} - -bool FileUtil::canExecutable(const std::string& sFullFileName) -{ - struct stat f_stat; - - if (stat(sFullFileName.c_str(), &f_stat) == -1) - { - return false; - } - - return f_stat.st_mode & S_IXUSR; -} - -int FileUtil::removeFile(const std::string& sFullFileName, bool bRecursive) -{ - std::string path = simplifyDirectory(sFullFileName); - - if (isFileExist(path, S_IFDIR)) - { - if (bRecursive) - { - std::vector<std::string> files; - listDirectory(path, files, false); - for (size_t i = 0; i < files.size(); i++) - { - removeFile(files[i], bRecursive); - } - - if (path != "/") - { - if (::rmdir(path.c_str()) == -1) - { - return -1; - } - return 0; - } - } - else - { - if (::rmdir(path.c_str()) == -1) - { - return -1; - } - } - } - else - { - if (::remove(path.c_str()) == -1) - { - return -1; - } - } - - return 0; -} - -std::string FileUtil::simplifyDirectory(const std::string& path) -{ - std::string result = path; - - std::string::size_type pos; - - pos = 0; - while ((pos = result.find("//", pos)) != std::string::npos) - { - result.erase(pos, 1); - } - - pos = 0; - while ((pos = result.find("/./", pos)) != std::string::npos) - { - result.erase(pos, 2); - } - - while (result.substr(0, 4) == "/../") - { - result.erase(0, 3); - } - - if (result == "/.") - { - return result.substr(0, result.size() - 1); - } - - if (result.size() >= 2 && result.substr(result.size() - 2, 2) == "/.") - { - result.erase(result.size() - 2, 2); - } - - if (result == "/") - { - return result; - } - - if (result.size() >= 1 && result[result.size() - 1] == '/') - { - result.erase(result.size() - 1); - } - - if (result == "/..") - { - result = "/"; - } - - return result; -} - -std::string FileUtil::load2str(const std::string& sFullFileName) -{ - std::ifstream ifs(sFullFileName.c_str()); - if (!ifs) - { - return ""; - } - return std::string(std::istreambuf_iterator<char>(ifs), std::istreambuf_iterator<char>()); -} - -void FileUtil::save2file(const std::string& sFullFileName, const std::string& sFileData) -{ - std::ofstream ofs((sFullFileName).c_str()); - ofs << sFileData; - ofs.close(); -} - -int FileUtil::save2file(const std::string& sFullFileName, const char* sFileData, size_t length) -{ - FILE* fp = fopen(sFullFileName.c_str(), "wb"); - if (fp == NULL) - { - return -1; - } - - size_t ret = fwrite((void*)sFileData, 1, length, fp); - fclose(fp); - - if (ret == length) - { - return 0; - } - return -1; -} - -std::string FileUtil::getExePath() -{ - std::string proc = "/proc/self/exe"; - char buf[2048] = "\0"; - - int bufsize = sizeof(buf) / sizeof(char); - - int count = readlink(proc.c_str(), buf, bufsize); - - if (count < 0) - { - THROW_EXCEPTION(FileUtilException, "could not get exe path error", errno); - } - - count = (count >= bufsize) ? (bufsize - 1) : count; - - buf[count] = '\0'; - return buf; -} - -std::string FileUtil::extractFileName(const std::string& sFullFileName) -{ - if (sFullFileName.length() <= 0) - { - return ""; - } - - std::string::size_type pos = sFullFileName.rfind('/'); - if (pos == std::string::npos) - { - return sFullFileName; - } - - return sFullFileName.substr(pos + 1); -} - -std::string FileUtil::extractFilePath(const std::string& sFullFileName) -{ - if (sFullFileName.length() <= 0) - { - return "./"; - } - - std::string::size_type pos = 0; - - for (pos = sFullFileName.length(); pos != 0 ; --pos) - { - if (sFullFileName[pos - 1] == '/') - { - return sFullFileName.substr(0, pos); - } - } - - return "./"; -} - -std::string FileUtil::extractFileExt(const std::string& sFullFileName) -{ - std::string::size_type pos; - if ((pos = sFullFileName.rfind('.')) == std::string::npos) - { - return std::string(""); - } - - return sFullFileName.substr(pos + 1); -} - -std::string FileUtil::excludeFileExt(const std::string& sFullFileName) -{ - std::string::size_type pos; - if ((pos = sFullFileName.rfind('.')) == std::string::npos) - { - return sFullFileName; - } - - return sFullFileName.substr(0, pos); -} - -std::string FileUtil::replaceFileExt(const std::string& sFullFileName, const std::string& sExt) -{ - return excludeFileExt(sFullFileName) + "." + sExt; -} - -std::string FileUtil::extractUrlFilePath(const std::string& sUrl) -{ - std::string sLowerUrl = KPRUtil::lower(sUrl); - std::string::size_type pos = sLowerUrl.find("http://"); - - if (pos == 0) - { - pos += strlen("http://"); - } - else if (pos == std::string::npos) - { - pos = 0; - } - - for (; pos < sUrl.length(); ++pos) - { - if (sUrl[pos] == '/') - { - if (pos < sUrl.length() - 1) - { - pos++; - break; - } - else - { - return ""; - } - } - } - - if (pos == std::string::npos || pos == sUrl.length()) - { - pos = 0; - } - - return sUrl.substr(pos); -} - -size_t FileUtil::scanDir(const std::string& sFilePath, std::vector<std::string>& vtMatchFiles, FILE_SELECT f, int iMaxSize) -{ - vtMatchFiles.clear(); - - struct dirent** namelist; - int n = scandir(sFilePath.c_str(), &namelist, f, alphasort); - - if (n < 0) - { - return 0; - } - else - { - while (n--) - { - if (iMaxSize > 0 && vtMatchFiles.size() >= (size_t)iMaxSize) - { - free(namelist[n]); - break; - } - else - { - vtMatchFiles.push_back(namelist[n]->d_name); - free(namelist[n]); - } - } - free(namelist); - } - - return vtMatchFiles.size(); -} - -void FileUtil::listDirectory(const std::string& path, std::vector<std::string>& files, bool bRecursive) -{ - std::vector<std::string> tf; - scanDir(path, tf, 0, 0); - - for (size_t i = 0; i < tf.size(); i++) - { - if (tf[i] == "." || tf[i] == "..") - { - continue; - } - - std::string s = path + "/" + tf[i]; - - if (isFileExist(s, S_IFDIR)) - { - files.push_back(simplifyDirectory(s)); - if (bRecursive) - { - listDirectory(s, files, bRecursive); - } - } - else - { - files.push_back(simplifyDirectory(s)); - } - } -} - -void FileUtil::copyFile(const std::string& sExistFile, const std::string& sNewFile, bool bRemove) -{ - if (FileUtil::isFileExist(sExistFile, S_IFDIR)) - { - FileUtil::makeDir(sNewFile); - std::vector<std::string> tf; - FileUtil::scanDir(sExistFile, tf, 0, 0); - for (size_t i = 0; i < tf.size(); i++) - { - if (tf[i] == "." || tf[i] == "..") - { - continue; - } - std::string s = sExistFile + "/" + tf[i]; - std::string d = sNewFile + "/" + tf[i]; - copyFile(s, d, bRemove); - } - } - else - { - if (bRemove) - { - std::remove(sNewFile.c_str()); - } - std::ifstream fin(sExistFile.c_str()); - if (!fin) - { - THROW_EXCEPTION(FileUtilException, "[FileUtil::copyFile] infile open fail", errno); - } - std::ofstream fout(sNewFile.c_str()); - if (!fout) - { - THROW_EXCEPTION(FileUtilException, "[FileUtil::copyFile] newfile open fail", errno); - } - struct stat f_stat; - if (stat(sExistFile.c_str(), &f_stat) == -1) - { - THROW_EXCEPTION(FileUtilException, "[FileUtil::copyFile] infile stat fail", errno); - } - chmod(sNewFile.c_str(), f_stat.st_mode); - fout << fin.rdbuf(); - fin.close(); - fout.close(); - - } -} - -} - http://git-wip-us.apache.org/repos/asf/incubator-rocketmq-externals/blob/b9bb6cfa/rocketmq-client4cpp/src/kpr/FileUtil.h ---------------------------------------------------------------------- diff --git a/rocketmq-client4cpp/src/kpr/FileUtil.h b/rocketmq-client4cpp/src/kpr/FileUtil.h deleted file mode 100755 index c1e8518..0000000 --- a/rocketmq-client4cpp/src/kpr/FileUtil.h +++ /dev/null @@ -1,90 +0,0 @@ -/** -* Copyright (C) 2013 suwenkuang ,hooligan_...@qq.com -* -* Licensed 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 __KPR_FILEUTIL_H_ -#define __KPR_FILEUTIL_H_ - -#include <iostream> -#include <fstream> -#include <unistd.h> -#include <sys/stat.h> -#include <sys/types.h> -#include <dirent.h> -#include <fnmatch.h> - - -#include <string> -#include <vector> - - -namespace kpr -{ - -class FileUtil -{ -public: - - static std::ifstream::pos_type getFileSize(const std::string& sFullFileName); - - static bool isAbsolute(const std::string& sFullFileName); - - static bool isFileExist(const std::string& sFullFileName, mode_t iFileType = S_IFREG); - - static bool isFileExistEx(const std::string& sFullFileName, mode_t iFileType = S_IFREG); - - static std::string simplifyDirectory(const std::string& path); - - static bool makeDir(const std::string& sDirectoryPath, mode_t iFlag = S_IRUSR | S_IWUSR | S_IXUSR | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH); - - static bool makeDirRecursive(const std::string& sDirectoryPath, mode_t iFlag = S_IRUSR | S_IWUSR | S_IXUSR | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH); - - static int setExecutable(const std::string& sFullFileName, bool canExecutable); - - static bool canExecutable(const std::string& sFullFileName); - - static int removeFile(const std::string& sFullFileName, bool bRecursive); - - static std::string load2str(const std::string& sFullFileName); - - static void save2file(const std::string& sFullFileName, const std::string& sFileData); - - static int save2file(const std::string& sFullFileName, const char* sFileData, size_t length); - - static std::string getExePath(); - - static std::string extractFileName(const std::string& sFullFileName); - - static std::string extractFilePath(const std::string& sFullFileName); - - static std::string extractFileExt(const std::string& sFullFileName); - - static std::string excludeFileExt(const std::string& sFullFileName); - - static std::string replaceFileExt(const std::string& sFullFileName, const std::string& sExt); - - static std::string extractUrlFilePath(const std::string& sUrl); - - typedef int (*FILE_SELECT)(const dirent*); - - static size_t scanDir(const std::string& sFilePath, std::vector<std::string>& vtMatchFiles, FILE_SELECT f = NULL, int iMaxSize = 0); - - static void listDirectory(const std::string& path, std::vector<std::string>& files, bool bRecursive); - - static void copyFile(const std::string& sExistFile, const std::string& sNewFile, bool bRemove = false); -}; - -} -#endif // __FILE_UTIL_H_ http://git-wip-us.apache.org/repos/asf/incubator-rocketmq-externals/blob/b9bb6cfa/rocketmq-client4cpp/src/kpr/KPRTypes.h ---------------------------------------------------------------------- diff --git a/rocketmq-client4cpp/src/kpr/KPRTypes.h b/rocketmq-client4cpp/src/kpr/KPRTypes.h deleted file mode 100755 index 0a54123..0000000 --- a/rocketmq-client4cpp/src/kpr/KPRTypes.h +++ /dev/null @@ -1,65 +0,0 @@ -/** - * Copyright (C) 2013 kangliqiang ,kang...@163.com - * - * Licensed 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 __KPR_TYPES_H__ -#define __KPR_TYPES_H__ - -#include <stdio.h> -#include <stdlib.h> -#include <stdint.h> -#include <unistd.h> -#include <sys/time.h> -#include <pthread.h> -#include <semaphore.h> - - -typedef pthread_key_t ThreadKey; - - -namespace kpr -{ -class ThreadId -{ -public: - ThreadId(pthread_t id = 0) - : m_threadId(id) - { - } - - bool operator==(const ThreadId& id) const - { - return m_threadId == id.m_threadId; - } - - bool operator!=(const ThreadId& id) const - { - return !(*this == id); - } - - operator pthread_t() const - { - return m_threadId; - } - - static ThreadId GetCurrentThreadId() - { - return ThreadId(pthread_self()); - } - - pthread_t m_threadId; -}; -} - -#endif http://git-wip-us.apache.org/repos/asf/incubator-rocketmq-externals/blob/b9bb6cfa/rocketmq-client4cpp/src/kpr/KPRUtil.cpp ---------------------------------------------------------------------- diff --git a/rocketmq-client4cpp/src/kpr/KPRUtil.cpp b/rocketmq-client4cpp/src/kpr/KPRUtil.cpp deleted file mode 100755 index fe2cdd2..0000000 --- a/rocketmq-client4cpp/src/kpr/KPRUtil.cpp +++ /dev/null @@ -1,76 +0,0 @@ -/** - * Copyright (C) 2013 kangliqiang ,kang...@163.com - * - * Licensed 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 "KPRUtil.h" -#include <assert.h> - - - -unsigned long long KPRUtil::GetCurrentTimeMillis() -{ - struct timeval tv; - gettimeofday(&tv, 0); - return tv.tv_sec * 1000ULL + tv.tv_usec / 1000; -} - -struct timespec KPRUtil::CalcAbsTime(long timeout) -{ - assert(timeout >= 0); - struct timeval tv; - gettimeofday(&tv, 0); - - struct timespec abstime; - abstime.tv_sec = tv.tv_sec + (timeout / 1000); - abstime.tv_nsec = (tv.tv_usec * 1000) + ((timeout % 1000) * 1000000); - if (abstime.tv_nsec >= 1000000000) - { - ++abstime.tv_sec; - abstime.tv_nsec -= 1000000000; - } - - return abstime; -} - -long long KPRUtil::str2ll(const char* str) -{ - return atoll(str); -} - - -std::string KPRUtil::lower(const std::string& s) -{ - std::string sString = s; - for (std::string::iterator iter = sString.begin(); iter != sString.end(); ++iter) - { - *iter = tolower(*iter); - } - - return sString; -} - -std::string KPRUtil::upper(const std::string& s) -{ - std::string sString = s; - - for (std::string::iterator iter = sString.begin(); iter != sString.end(); ++iter) - { - *iter = toupper(*iter); - } - - return sString; -} - - - http://git-wip-us.apache.org/repos/asf/incubator-rocketmq-externals/blob/b9bb6cfa/rocketmq-client4cpp/src/kpr/KPRUtil.h ---------------------------------------------------------------------- diff --git a/rocketmq-client4cpp/src/kpr/KPRUtil.h b/rocketmq-client4cpp/src/kpr/KPRUtil.h deleted file mode 100755 index ae2c529..0000000 --- a/rocketmq-client4cpp/src/kpr/KPRUtil.h +++ /dev/null @@ -1,38 +0,0 @@ -/** - * Copyright (C) 2013 kangliqiang ,kang...@163.com - * - * Licensed 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 __KPR_UTIL_H__ -#define __KPR_UTIL_H__ - -#include <stdio.h> -#include <unistd.h> -#include <sys/types.h> -#include <sys/time.h> -#include <stdlib.h> -#include <string> - - -class KPRUtil -{ -public: - static struct timespec CalcAbsTime(long timeout); - static unsigned long long GetCurrentTimeMillis(); - static long long str2ll(const char* str); - static std::string lower(const std::string& s); - static std::string upper(const std::string& s); -}; - - -#endif http://git-wip-us.apache.org/repos/asf/incubator-rocketmq-externals/blob/b9bb6cfa/rocketmq-client4cpp/src/kpr/Monitor.cpp ---------------------------------------------------------------------- diff --git a/rocketmq-client4cpp/src/kpr/Monitor.cpp b/rocketmq-client4cpp/src/kpr/Monitor.cpp deleted file mode 100644 index d715f55..0000000 --- a/rocketmq-client4cpp/src/kpr/Monitor.cpp +++ /dev/null @@ -1,125 +0,0 @@ -/** - * Copyright (C) 2013 kangliqiang ,kang...@163.com - * - * Licensed 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 "Monitor.h" -#include <assert.h> - -namespace kpr -{ -Monitor::Monitor() - : m_notifyCount(0) -{ -} - -Monitor::~Monitor() -{ -} - -void Monitor::Wait() -{ - validateOwner(m_mutex.GetOwner(), "wait()"); - - notify(m_notifyCount); - - try - { - m_condition.Wait(m_mutex); - } - catch (...) - { - m_notifyCount = 0; - throw; - } - m_notifyCount = 0; -} - -void Monitor::Wait(long timeout) -{ - validateOwner(m_mutex.GetOwner(), "wait(long)"); - - notify(m_notifyCount); - try - { - m_condition.Wait(m_mutex, timeout); - } - catch (...) - { - m_notifyCount = 0; - throw; - } - - m_notifyCount = 0; -} - -void Monitor::Notify() -{ - validateOwner(m_mutex.GetOwner(), "notify"); - - if (m_notifyCount != -1) - { - ++m_notifyCount; - } -} - -void Monitor::NotifyAll() -{ - validateOwner(m_mutex.GetOwner(), "notifyAll"); - - m_notifyCount = -1; -} - -void Monitor::Lock() const -{ - if (m_mutex.Lock()) - { - m_notifyCount = 0; - } -} - -void Monitor::Unlock() const -{ - if (m_mutex.GetCount() == 1) - { - ((Monitor*)this)->notify(m_notifyCount); - } - - m_mutex.Unlock(); -} - -void Monitor::notify(int nnotify) -{ - if (nnotify != 0) - { - if (nnotify == -1) - { - m_condition.NotifyAll(); - return; - } - else - { - while (nnotify > 0) - { - m_condition.Notify(); - --nnotify; - } - } - } -} - -void Monitor::validateOwner(const ThreadId& id, const char* caller) const -{ - assert(id == ThreadId::GetCurrentThreadId()); -} -} http://git-wip-us.apache.org/repos/asf/incubator-rocketmq-externals/blob/b9bb6cfa/rocketmq-client4cpp/src/kpr/Monitor.h ---------------------------------------------------------------------- diff --git a/rocketmq-client4cpp/src/kpr/Monitor.h b/rocketmq-client4cpp/src/kpr/Monitor.h deleted file mode 100644 index 345f736..0000000 --- a/rocketmq-client4cpp/src/kpr/Monitor.h +++ /dev/null @@ -1,48 +0,0 @@ -/** - * Copyright (C) 2013 kangliqiang ,kang...@163.com - * - * Licensed 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 __KPR_MONITOR_H__ -#define __KPR_MONITOR_H__ - -#include "KPRTypes.h" -#include "Condition.h" -#include "Mutex.h" -namespace kpr -{ -class Monitor -{ -public: - Monitor(); - virtual ~Monitor(); - - void Wait(); - void Wait(long msec); - - void Notify(); - void NotifyAll(); - - void Lock() const; - void Unlock() const; - -private: - void notify(int times); - void validateOwner(const ThreadId& id, const char* caller) const; - - RecursiveMutex m_mutex; - Condition m_condition; - mutable int m_notifyCount; -}; -} -#endif