/* * node-rdkafka - Node.js wrapper for RdKafka C/C++ library * * Copyright (c) 2016 Blizzard Entertainment * * This software may be modified and distributed under the terms * of the MIT license. See the LICENSE.txt file for details. */ #ifndef SRC_COMMON_H_ #define SRC_COMMON_H_ #include #include #include #include #include "rdkafkacpp.h" #include "rdkafka.h" // NOLINT #include "src/errors.h" typedef std::vector BrokerMetadataList; typedef std::vector PartitionMetadataList; typedef std::vector TopicMetadataList; namespace NodeKafka { void Log(std::string); template T GetParameter(v8::Local, std::string, T); template<> std::string GetParameter( v8::Local, std::string, std::string); template<> std::vector GetParameter >( v8::Local, std::string, std::vector); // template int GetParameter(v8::Local v8ArrayToStringVector(v8::Local); class scoped_mutex_lock { public: explicit scoped_mutex_lock(uv_mutex_t& lock_) : // NOLINT async_lock(lock_) { uv_mutex_lock(&async_lock); } ~scoped_mutex_lock() { uv_mutex_unlock(&async_lock); } private: uv_mutex_t &async_lock; }; /* int uv_rwlock_tryrdlock(uv_rwlock_t* rwlock) int uv_rwlock_trywrlock(uv_rwlock_t* rwlock) */ class scoped_shared_write_lock { public: explicit scoped_shared_write_lock(uv_rwlock_t& lock_) : // NOLINT async_lock(lock_) { uv_rwlock_wrlock(&async_lock); } ~scoped_shared_write_lock() { uv_rwlock_wrunlock(&async_lock); } private: uv_rwlock_t &async_lock; }; class scoped_shared_read_lock { public: explicit scoped_shared_read_lock(uv_rwlock_t& lock_) : // NOLINT async_lock(lock_) { uv_rwlock_rdlock(&async_lock); } ~scoped_shared_read_lock() { uv_rwlock_rdunlock(&async_lock); } private: uv_rwlock_t &async_lock; }; namespace Conversion { namespace Admin { // Topics from topic object, or topic object array rd_kafka_NewTopic_t* FromV8TopicObject( v8::Local, std::string &errstr); // NOLINT rd_kafka_NewTopic_t** FromV8TopicObjectArray(v8::Local); } namespace Topic { std::vector ToStringVector(v8::Local); v8::Local ToV8Array(std::vector); } // namespace Topic namespace TopicPartition { v8::Local ToV8Array(std::vector &); RdKafka::TopicPartition * FromV8Object(v8::Local); std::vector FromV8Array(const v8::Local &); // NOLINT } // namespace TopicPartition namespace Metadata { v8::Local ToV8Object(RdKafka::Metadata*); } // namespace Metadata namespace Message { v8::Local ToV8Object(RdKafka::Message*); v8::Local ToV8Object(RdKafka::Message*, bool, bool); } } // namespace Conversion namespace Util { std::string FromV8String(v8::Local); } } // namespace NodeKafka #endif // SRC_COMMON_H_