diff options
Diffstat (limited to 'SDL_Core/src/components/utils')
35 files changed, 0 insertions, 4750 deletions
diff --git a/SDL_Core/src/components/utils/CMakeLists.txt b/SDL_Core/src/components/utils/CMakeLists.txt deleted file mode 100644 index 726e6ad45..000000000 --- a/SDL_Core/src/components/utils/CMakeLists.txt +++ /dev/null @@ -1,34 +0,0 @@ -include_directories ( - ./include - ../config_profile/include - ../media_manager/include/ - ../protocol_handler/include/ -) - -set (SOURCES - ./src/bitstream.cc - ./src/conditional_variable_posix.cc - ./src/file_system.cc - ./src/threads/posix_thread.cc - ./src/threads/thread_manager.cc - ./src/threads/thread_validator.cc - ./src/lock_posix.cc - ./src/date_time.cc - ./src/signals_linux.cc -) - -if (BUILD_BACKTRACE_SUPPORT) - list(APPEND SOURCES - ./src/back_trace.cc - ) -endif() - -add_library("Utils" ${SOURCES}) - -IF(${CMAKE_SYSTEM_NAME} MATCHES "QNX") - target_link_libraries ("Utils" log4cxx apr-1 aprutil-1) -ELSEIF(${CMAKE_SYSTEM_NAME} MATCHES "Linux") - target_link_libraries ("Utils" log4cxx apr-1 aprutil-1 rt) -ELSE() - target_link_libraries ("Utils" log4cxx apr-1 aprutil-1) -endif() diff --git a/SDL_Core/src/components/utils/include/utils/atomic.h b/SDL_Core/src/components/utils/include/utils/atomic.h deleted file mode 100644 index bf5b4baf8..000000000 --- a/SDL_Core/src/components/utils/include/utils/atomic.h +++ /dev/null @@ -1,69 +0,0 @@ -/** - * Copyright (c) 2013, Ford Motor Company - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following - * disclaimer in the documentation and/or other materials provided with the - * distribution. - * - * Neither the name of the Ford Motor Company nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifdef __QNXNTO__ -#include <atomic.h> -#endif - -#ifndef SRC_COMPONENTS_UTILS_INCLUDE_UTILS_ATOMIC_H_ -#define SRC_COMPONENTS_UTILS_INCLUDE_UTILS_ATOMIC_H_ - -#if defined(__QNXNTO__) -#define atomic_post_inc(ptr) atomic_add_value((ptr), 1) -#elif defined(__GNUG__) -#define atomic_post_inc(ptr) __sync_fetch_and_add((ptr), 1) -#else -#warning "atomic_post_inc() implementation is not atomic" -#define atomic_post_inc(ptr) (*(ptr))++ -#endif - -#if defined(__QNXNTO__) -#define atomic_post_dec(ptr) atomic_sub_value((ptr), 1) -#elif defined(__GNUG__) -#define atomic_post_dec(ptr) __sync_fetch_and_sub((ptr), 1) -#else -#warning "atomic_post_dec() implementation is not atomic" -#define atomic_post_dec(ptr) (*(ptr))-- -#endif - -#if defined(_QNXNTO__) -// on QNX pointer assignment is believed to be atomic -#define atomic_pointer_assign(dst, src) (dst) = (src) -#elif defined(__GNUG__) -// with g++ pointer assignment is believed to be atomic -#define atomic_pointer_assign(dst, src) (dst) = (src) -#else -#warning atomic_pointer_assign() implementation may be non-atomic -#define atomic_pointer_assign(dst, src) (dst) = (src) -#endif - -#endif // SRC_COMPONENTS_UTILS_INCLUDE_UTILS_ATOMIC_H_ diff --git a/SDL_Core/src/components/utils/include/utils/back_trace.h b/SDL_Core/src/components/utils/include/utils/back_trace.h deleted file mode 100644 index 7f8912faf..000000000 --- a/SDL_Core/src/components/utils/include/utils/back_trace.h +++ /dev/null @@ -1,75 +0,0 @@ -/** - * Copyright (c) 2013, Ford Motor Company - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following - * disclaimer in the documentation and/or other materials provided with the - * distribution. - * - * Neither the name of the Ford Motor Company nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - */ -#ifndef SRC_COMPONENTS_UTILS_INCLUDE_UTILS_BACK_TRACE_H_ -#define SRC_COMPONENTS_UTILS_INCLUDE_UTILS_BACK_TRACE_H_ - -#include <ostream> -#include <vector> -#include <string> -#include "utils/threads/thread.h" - -namespace utils { - -/* - * Class that captures stack trace in place where it was created. - * Can be stored and passed for further processing - * ostream output operator is available for these objects so stacktrace - * here and now can be easily printed as - * - * std::cout<<utils::Backtrace()<<std::endl; - */ -class Backtrace { - public: - // Inspect stack up to 128 calls back - static const int32_t kDefaultDepth = 128; - static const int32_t kSkipTop = 0; - /* Capture backtrace and store. Limit captured stack length to - * count symbols and remove first skip_top elements from it - * (to avoid polluting stack trace with debugging function names) - */ - Backtrace(int32_t count = kDefaultDepth, int32_t skip_top = kSkipTop); - ~Backtrace(); - - // Captured symbols in order from topmost stack frame to last captured - std::vector<std::string> CallStack() const; - threads::Thread::Id ThreadId() const; - - private: - threads::Thread::Id thread_id_; - std::vector<void*> backtrace_; -}; - -std::ostream& operator<< (std::ostream& os, const Backtrace& bt); - -} // namespace utils - -#endif // SRC_COMPONENTS_UTILS_INCLUDE_UTILS_BACK_TRACE_H_ diff --git a/SDL_Core/src/components/utils/include/utils/bitstream.h b/SDL_Core/src/components/utils/include/utils/bitstream.h deleted file mode 100644 index cba15abd8..000000000 --- a/SDL_Core/src/components/utils/include/utils/bitstream.h +++ /dev/null @@ -1,170 +0,0 @@ -/** - * Copyright (c) 2013, Ford Motor Company - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following - * disclaimer in the documentation and/or other materials provided with the - * distribution. - * - * Neither the name of the Ford Motor Company nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - */ -#ifndef SRC_COMPONENTS_UTILS_INCLUDE_UTILS_BITSTREAM_H_ -#define SRC_COMPONENTS_UTILS_INCLUDE_UTILS_BITSTREAM_H_ - -#include "stdint.h" - -#include <climits> -#include <cstring> -#include <string> -#include <vector> - -#include "utils/macro.h" - -namespace utils { - -// Big endian input bitstream class -// Tool to read and parse incoming data in a recursive way -// Has sublte similarity to standard stream classes in a way -// it handles stream parsing errors: -// If error while parsing stream occurs, whole stream is marked as -// "bad" and all subsequent parsing is stopped. -class BitStream { - public: - BitStream(uint8_t* bytes, size_t bytes_count); - ~BitStream(); - - // Mark stream as badly-formed. - // Should be called by Extract* family of procedures if they decide - // that stream is invalid - void MarkBad() { bad_ = true; } - // Predicates to check whether there were errors while parsing - // Stream is good when it is created - bool IsGood() { return !bad_; } - bool IsBad() { return bad_; } - operator bool() { return IsGood(); } - private: - // These two functions are used for internal stream checks only - // Stream parser procedures must not define their logic depending on - // amount of data left in particular bit stream - - // Amount of full bytes left in stream - size_t FullBytesLeft(); - // Amount of total bits left in stream - size_t BitsLeft(); - - // These stream extractors are helpers for direct friend extractors - // of this class. - - // Extract single value, amount of bits read from stream depends on T size - // If there is not enough data in the stream, stream is marked bad - template<typename T> - void Extract(T& val); - - // Read single value, amount of bits read from stream is signaled by |bits| - // parameter. T must be wide enough to hold this amount of bits. - // If there is not enough data in the stream, stream is marked bad - template<typename T> - void ExtractBits(T& val, size_t bits); - - // Extract |length| bytes from the stream. Stream read position - // must be byte aligned when it is called, stream is marked bad otherwise. - // If there is not enough data in the stream, it is marked bad. - void ExtractBytes(void* buffer, size_t length); - - private: - const uint8_t* bytes_; - const size_t bytes_count_; - size_t byte_offset_; - size_t bit_offset_; - bool bad_; - private: - friend void Extract(BitStream*, uint8_t*); - friend void Extract(BitStream*, uint8_t*, size_t); - friend void Extract(BitStream*, uint32_t*); - friend void Extract(BitStream*, uint32_t*, size_t); - friend void Extract(BitStream*, std::string*, size_t); - friend void Extract(BitStream*, std::vector<uint8_t>*, size_t); - -}; - -// Extract single byte from stream -// If there is not enough data in the stream it is marked bad. -void Extract(BitStream* bs, uint8_t* val); - -// Extract defined amount of |bits| from stream and store them -// in a byte size |val|. Hence |bits| must be less than 8. -void Extract(BitStream* bs, uint8_t* val, size_t bits); - -// Extract 32 bit word from stream. -// If there is not enough data in the stream it is marked bad. -void Extract(BitStream* bs, uint32_t* val); - -// Extract up to 32 |bits| from stream and store them in a |val| -// If there is not enough data in the stream it is marked bad. -void Extract(BitStream* bs, uint32_t* val, size_t bits); - -// Extract |length| bytes from stream and store them to the -// string |str|. If stream is too short it is marked bad. -// String must not contain zero bytes. -void Extract(BitStream* bs, std::string* str, size_t length); - -// Extract |length| bytes from stream and store them to the -// vector |data|. If stream is too short it is marked bad. -void Extract(BitStream* bs, std::vector<uint8_t>* data, size_t length); - - -// Template member definitions -template<typename T> -void BitStream::Extract(T& val) { - // Slow but simple implementation - // It's a space for bit stream reading optimization - ExtractBits(val, sizeof(val) * CHAR_BIT); -} - -template<typename T> -void BitStream::ExtractBits(T& val, size_t bits) { - DCHECK(sizeof(val) * CHAR_BIT >= bits); - if (IsGood()) { - if (bits > BitsLeft()) { - MarkBad(); - return; - } - val = T(); // Clear value - for (size_t i = 0; i < bits; ++i) { - size_t next_bit_number = CHAR_BIT - 1 - bit_offset_; - uint8_t nextbit = (bytes_[byte_offset_] >> next_bit_number) & 1; - val = (val << 1) | nextbit; - ++bit_offset_; - if (bit_offset_ == CHAR_BIT) { - ++byte_offset_; - bit_offset_ = 0; - } - } - } -} - -} // namespace utils - - -#endif // SRC_COMPONENTS_UTILS_INCLUDE_UTILS_BITSTREAM_H_ diff --git a/SDL_Core/src/components/utils/include/utils/conditional_variable.h b/SDL_Core/src/components/utils/include/utils/conditional_variable.h deleted file mode 100644 index 433f8d7c0..000000000 --- a/SDL_Core/src/components/utils/include/utils/conditional_variable.h +++ /dev/null @@ -1,94 +0,0 @@ -/** - * Copyright (c) 2013, Ford Motor Company - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following - * disclaimer in the documentation and/or other materials provided with the - * distribution. - * - * Neither the name of the Ford Motor Company nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - */ -#ifndef SRC_COMPONENTS_UTILS_INCLUDE_UTILS_CONDITIONAL_VARIABLE_H_ -#define SRC_COMPONENTS_UTILS_INCLUDE_UTILS_CONDITIONAL_VARIABLE_H_ - -#if defined(OS_POSIX) -#include <pthread.h> -#else -#error Please implement conditional variable for your OS -#endif -#include <stdint.h> - -#include "utils/macro.h" - -namespace sync_primitives { -class AutoLock; - -namespace impl { -#if defined(OS_POSIX) -typedef pthread_cond_t PlatformConditionalVariable; -#endif -} // namespace impl - -/* - * Conditional variable wrapper - * Conditional variable is a thing that can be waited on - * Wait is finished when other thread puts that thing in a signaled state - * (or when timeout is over). - * Data that is conditionally accessed should be protected by - * a Lock and that lock must be taken before starting to Wait. - * When wait is performed, Lock is temporarly released. - * When wait is finished, Lock is captured back. - * WARNING: Beware of Spurious wakeups - * http://en.wikipedia.org/wiki/Spurious_wakeup - * Thread can wake up from wait spuriously, without conditional - * variable being actually set by other thread. This means - * additional check should be made right after thread awakening - * and if check fails thread should continue waiting. - * - * while(!DataReady()) cond_var.Wait(auto_lock); - * - */ -class ConditionalVariable { - public: - enum WaitStatus { kNoTimeout, kTimeout }; - ConditionalVariable(); - ~ConditionalVariable(); - // Wakes up single thread that is waiting on this conditional variable - void NotifyOne(); - // Wakes up all waiting threads - void Broadcast(); - - // Wait forever or up to milliseconds time limit - void Wait(AutoLock& auto_lock); - WaitStatus WaitFor(AutoLock& auto_lock, int32_t milliseconds ); - private: - impl::PlatformConditionalVariable cond_var_; - - private: - DISALLOW_COPY_AND_ASSIGN(ConditionalVariable); -}; - -} // namespace sync_primitives - -#endif // SRC_COMPONENTS_UTILS_INCLUDE_UTILS_CONDITIONAL_VARIABLE_H_ diff --git a/SDL_Core/src/components/utils/include/utils/date_time.h b/SDL_Core/src/components/utils/include/utils/date_time.h deleted file mode 100644 index df2d067ac..000000000 --- a/SDL_Core/src/components/utils/include/utils/date_time.h +++ /dev/null @@ -1,56 +0,0 @@ -/** -* \file request_watchdog.h -* \brief DateTime class header file. -* -* Copyright (c) 2013, Ford Motor Company -* All rights reserved. -* -* Redistribution and use in source and binary forms, with or without -* modification, are permitted provided that the following conditions are met: -* -* Redistributions of source code must retain the above copyright notice, this -* list of conditions and the following disclaimer. -* -* Redistributions in binary form must reproduce the above copyright notice, -* this list of conditions and the following -* disclaimer in the documentation and/or other materials provided with the -* distribution. -* -* Neither the name of the Ford Motor Company nor the names of its contributors -* may be used to endorse or promote products derived from this software -* without specific prior written permission. -* -* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE -* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -* POSSIBILITY OF SUCH DAMAGE. -*/ -#ifndef SRC_COMPONENTS_UTILS_INCLUDE_UTILS_DATE_TIME_H_ -#define SRC_COMPONENTS_UTILS_INCLUDE_UTILS_DATE_TIME_H_ - -#if defined(OS_POSIX) -#include <sys/time.h> -typedef struct timeval TimevalStruct; -#endif - -namespace date_time { - -class DateTime { - public: - static const int32_t MILLISECONDS_IN_SECOND = 1000; - static const int32_t MICROSECONDS_IN_MILLISECONDS = 1000; - - static TimevalStruct getCurrentTime(); - static int32_t calculateTimeSpan(TimevalStruct sinceTime); -}; - -} // namespace date_time - -#endif // SRC_COMPONENTS_UTILS_INCLUDE_UTILS_DATE_TIME_H_ diff --git a/SDL_Core/src/components/utils/include/utils/dict.h b/SDL_Core/src/components/utils/include/utils/dict.h deleted file mode 100644 index bb60390d1..000000000 --- a/SDL_Core/src/components/utils/include/utils/dict.h +++ /dev/null @@ -1,225 +0,0 @@ -/** - * Copyright (c) 2013, Ford Motor Company - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following - * disclaimer in the documentation and/or other materials provided with the - * distribution. - * - * Neither the name of the Ford Motor Company nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef SRC_COMPONENTS_UTILS_INCLUDE_UTILS_H_ -#define SRC_COMPONENTS_UTILS_INCLUDE_UTILS_H_ - -#include <map> - -namespace utils { - -template<typename Key, typename Record> -class Dictionary { - private: - typedef std::map<Key, Record> ItemContainer; - typedef std::map<Key, Dictionary> SubitemContainer; - - public: -/** - * @brief Typedef for subitems iterator - */ - typedef typename SubitemContainer::iterator iterator; -/** - * @brief Typedef for subitems const iterator - */ - typedef typename SubitemContainer::const_iterator const_iterator; - -/** - * @brief Typedef for items iterator - */ - typedef typename ItemContainer::iterator rec_iterator; -/** - * @brief Typedef for items const iterator - */ - typedef typename ItemContainer::const_iterator rec_const_iterator; - -/** - * @brief add an item to the dictionary - * @param key - item key - * @param record - item value - */ - void AddItem(const Key& key, const Record& record); -/** - * @brief add a subitem to the dictionary - * @param key - subitem key - * @param subitem - subitem dictionary - */ - void AddSubitem(const Key& key, const Dictionary& subitem); -/** - * @brief item under specified key - * @param key - item key - * @return item with specified key of default-constructed item - */ - Record& ItemAt(const Key& key); -/** - * @brief item under specified key - * @param key - item key - * @return item with specified key of default-constructed item - */ - const Record& ItemAt(const Key& key) const; -/** - * @brief subitem under specified key - * @param key - subitem key - * @return subitem with specified key of default-constructed dictionary - */ - Dictionary& SubitemAt(const Key& key); -/** - * @brief subitem under specified key - * @param key - subitem key - * @return subitem with specified key of default-constructed dictionary - */ - const Dictionary& SubitemAt(const Key& key) const; -/** - * @brief first subitem - * @return iterator pointing to the first subitem - */ - iterator begin(); - -/** - * @brief first subitem - * @return const iterator pointing to the first subitem - */ - const_iterator begin() const; - -/** - * @brief first item - * @return iterator pointing to the first item - */ - rec_iterator rec_begin(); - -/** - * @brief first item - * @return iterator pointing to the first item - */ - rec_const_iterator rec_begin() const; - -/** - * @brief end of subitem list - * @return iterator pointing to the end of subitem list - */ - iterator end(); -/** - * @brief end of subitem list - * @return const iterator pointing to the end of subitem list - */ - const_iterator end() const; - - /** - * @brief end of item list - * @return iterator pointing to the end of item list - */ - rec_iterator rec_end(); - - /** - * @brief end of item list - * @return const iterator pointing to the end of item list - */ - rec_const_iterator rec_end() const; - -private: - ItemContainer items_; - SubitemContainer subitems_; -}; - -template<typename Key, typename Record> -void Dictionary<Key, Record>::AddItem(const Key& key, const Record& record) { - items_.insert(std::make_pair(key, record)); -} - -template<typename Key, typename Record> -void Dictionary<Key, Record>::AddSubitem(const Key& key, const Dictionary& subitem) { - subitems_.insert(std::make_pair(key, subitem)); -} - -template<typename Key, typename Record> -Record& Dictionary<Key, Record>::ItemAt(const Key& key) { - return items_.at(key); -} - -template<typename Key, typename Record> -const Record& Dictionary<Key, Record>::ItemAt(const Key& key) const { - return items_.at(key); -} - -template<typename Key, typename Record> -Dictionary<Key, Record>& Dictionary<Key, Record>::SubitemAt(const Key& key) { - return subitems_.at(key); -} - -template<typename Key, typename Record> -const Dictionary<Key, Record>& Dictionary<Key, Record>::SubitemAt(const Key& key) const { - return subitems_.at(key); -} - -template<typename Key, typename Record> -typename Dictionary<Key, Record>::iterator Dictionary<Key, Record>::begin() { - return subitems_.begin(); -} - -template<typename Key, typename Record> -typename Dictionary<Key, Record>::const_iterator Dictionary<Key, Record>::begin() const { - return subitems_.begin(); -} - -template<typename Key, typename Record> -typename Dictionary<Key, Record>::rec_iterator Dictionary<Key, Record>::rec_begin() { - return items_.begin(); -} - -template<typename Key, typename Record> -typename Dictionary<Key, Record>::rec_const_iterator Dictionary<Key, Record>::rec_begin() const { - return items_.begin(); -} - -template<typename Key, typename Record> -typename Dictionary<Key, Record>::iterator Dictionary<Key, Record>::end() { - return subitems_.end(); -} - -template<typename Key, typename Record> -typename Dictionary<Key, Record>::const_iterator Dictionary<Key, Record>::end() const { - return subitems_.end(); -} - -template<typename Key, typename Record> -typename Dictionary<Key, Record>::rec_iterator Dictionary<Key, Record>::rec_end() { - return items_.end(); -} - -template<typename Key, typename Record> -typename Dictionary<Key, Record>::rec_const_iterator Dictionary<Key, Record>::rec_end() const { - return items_.end(); -} - -} // namespace utils - -#endif // SRC_COMPONENTS_UTILS_INCLUDE_UTILS_H_ diff --git a/SDL_Core/src/components/utils/include/utils/file_system.h b/SDL_Core/src/components/utils/include/utils/file_system.h deleted file mode 100644 index c40c15f39..000000000 --- a/SDL_Core/src/components/utils/include/utils/file_system.h +++ /dev/null @@ -1,207 +0,0 @@ -/** - * Copyright (c) 2013, Ford Motor Company - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following - * disclaimer in the documentation and/or other materials provided with the - * distribution. - * - * Neither the name of the Ford Motor Company nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef SRC_COMPONENTS_UTILS_INCLUDE_UTILS_FILE_SYSTEM_H_ -#define SRC_COMPONENTS_UTILS_INCLUDE_UTILS_FILE_SYSTEM_H_ - -#include <string.h> -#include <stdint.h> -#include <string> -#include <vector> -#include <iostream> -#include "utils/logger.h" - -namespace file_system { - - -/** - * @brief Get available disc space. - * - * @return free disc space. - */ -uint64_t GetAvailableDiskSpace(); - -/* - * @brief Get size of current directory - * - * @param path to directory - */ -uint32_t DirectorySize(const std::string& path); - -/* - * @brief Get size of current file - * - * @param path to file - * @return size of file, return 0 if file not exist - */ -uint32_t FileSize(const std::string& path); - - -/** - * @brief Get available app space - * @param name of app - * @return free app space. - */ -uint32_t GetAvailableSpaceForApp(const std::string& name); - -/** - * @brief Creates directory - * @param name path to directory - * @return path to created directory. - */ -std::string CreateDirectory(const std::string& name); - -/** - * @brief Checks the file to see whether the file is a directory - * @param name path to file - * @return returns true if file is directory. - */ -bool IsDirectory(const std::string& name); - -/** - * @brief Is directory exist - * @param name path to directory - * @return returns true if directory is exists. - */ -bool DirectoryExists(const std::string& name); - -/** - * @brief Is file exist - * @param name path to file - * @return returns true if file is exists. - */ -bool FileExists(const std::string& name); - -/** - * @brief Writes to file - * - * @remark - create file if it doesn't exist - * @param name path to file - * @param data data to write - * @return returns true if the operation is successfully. - */ -bool Write(const std::string& file_name, - const std::vector<uint8_t>& data, - std::ios_base::openmode mode = std::ios_base::out); - -/** - * @brief Opens file stream for writing - * @param file_name path to file to write data to - * @return returns pointer to opened stream in case of success; - * otherwise returns NULL - */ -std::ofstream* Open(const std::string& file_name, - std::ios_base::openmode mode = std::ios_base::out); - -/** - * @brief Writes to file stream - * @param file_stream file stream to be written to - * @param data data to be written to file - * @param data_size size of data to be written to file - * @return returns true if the operation is successfully. - */ -bool Write(std::ofstream* const file_stream, - const uint8_t* data, - uint32_t data_size); - -/** - * @brief Closes file stream - * @param file_stream file stream to be closed - */ -void Close(std::ofstream* file_stream); - -/** - * @brief Returns full file path - * - * @param name file name - * @return returns full file path. - */ -std::string FullPath(const std::string& name); - -/** - * @brief Removes file - * - * @param name path to file - * @return returns true if the file is successfully deleted. - */ -bool DeleteFile(const std::string& name); - -/** - * @brief Removes directory. - * - * @param name path to directory. - * @param is_recursively true if you need delete directory recursively, otherwise false. - * @return returns true if the directory is successfully deleted. - */ -bool RemoveDirectory(const std::string& directory_name, - bool is_recursively = true); - -/** - * @brief Check access rights - * - * @param name path to file. - * @param how Read/write attribute. - * @return returns true if file has the given mode. - */ -bool IsAccessible(const std::string& name, int32_t how); - -/** - * @brief Lists all files in given directory - * - * @param name path to directory. - * @return returns list of files. - */ -std::vector<std::string> ListFiles(const std::string& directory_name); - -/** - * @brief Reads from file - * - * @param name path to file - * @param result read data - * @return returns true if the operation is successfully. - */ -bool ReadBinaryFile(const std::string& name, - std::vector<uint8_t>& result); - -bool ReadFile(const std::string& name, std::string& result); - -/** - * @brief Convert special symbols in system path to percent-encoded - * - * @param name path to file - * @return returns converted path. -*/ -const std::string ConvertPathForURL(const std::string& path); - -} // namespace file_system - -#endif // SRC_COMPONENTS_UTILS_INCLUDE_UTILS_FILE_SYSTEM_H_ diff --git a/SDL_Core/src/components/utils/include/utils/lock.h b/SDL_Core/src/components/utils/include/utils/lock.h deleted file mode 100644 index 2aaddbbc6..000000000 --- a/SDL_Core/src/components/utils/include/utils/lock.h +++ /dev/null @@ -1,132 +0,0 @@ -/** - * Copyright (c) 2013, Ford Motor Company - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following - * disclaimer in the documentation and/or other materials provided with the - * distribution. - * - * Neither the name of the Ford Motor Company nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - */ -#ifndef SRC_COMPONENTS_UTILS_INCLUDE_UTILS_LOCK_H_ -#define SRC_COMPONENTS_UTILS_INCLUDE_UTILS_LOCK_H_ - -#if defined(OS_POSIX) -#include <pthread.h> -#else -#error Please implement lock for your OS -#endif - -#include "utils/macro.h" - -namespace sync_primitives { - -namespace impl { -#if defined(OS_POSIX) -typedef pthread_mutex_t PlatformMutex; -#endif -} // namespace impl - -/* Platform-indepenednt NON-RECURSIVE lock (mutex) wrapper - Please use AutoLock to ackquire and (automatically) release it - It eases balancing of multple lock taking/releasing and makes it - Impossible to forget to release the lock: - ... - ConcurentlyAccessedData data_; - sync_primitives::Lock data_lock_; - ... - { - sync_primitives::AutoLock auto_lock(data_lock_); - data_.ReadOrWriteData(); - } // lock is automatically released here -*/ -class Lock { - public: - Lock(); - ~Lock(); - - // Ackquire the lock. Must be called only once on a thread. - // Please consider using AutoLock to capture it. - void Ackquire(); - // Release the lock. Must be called only once on a thread after lock. - // was acquired. Please consider using AutoLock to automatically release - // the lock - void Release(); - // Try if lock can be captured and lock it if it was possible. - // If it captured, lock must be manually released calling to Release - // when protected resource access was finished. - // @returns wether lock was captured. - bool Try(); - - private: - impl::PlatformMutex mutex_; - -#ifndef NDEBUG - // Basic debugging aid, a flag that signals wether this lock is currently taken - // Allows detection of abandoned and recursively captured mutexes - bool lock_taken_; - void AssertFreeAndMarkTaken(); - void AssertTakenAndMarkFree(); -#else - void AssertFreeAndMarkTaken() {} - void AssertTakenAndMarkFree() {} -#endif - - private: - friend class ConditionalVariable; - DISALLOW_COPY_AND_ASSIGN(Lock); -}; - -// This class is used to automatically acquire and release the a lock -class AutoLock { - public: - explicit AutoLock(Lock& lock) - : lock_(lock) { lock_.Ackquire(); } - ~AutoLock() { lock_.Release(); } - private: - Lock& GetLock(){ return lock_; } - Lock& lock_; - - private: - friend class AutoUnlock; - friend class ConditionalVariable; - DISALLOW_COPY_AND_ASSIGN(AutoLock); -}; - -// This class is used to temporarly unlock autolocked lock -class AutoUnlock { - public: - explicit AutoUnlock(AutoLock& lock) - : lock_(lock.GetLock()) { lock_.Release(); } - ~AutoUnlock() { lock_.Ackquire(); } - private: - Lock& lock_; - - private: - DISALLOW_COPY_AND_ASSIGN(AutoUnlock); -}; - -} // sync_primitives - -#endif // SRC_COMPONENTS_UTILS_INCLUDE_UTILS_LOCK_H_ diff --git a/SDL_Core/src/components/utils/include/utils/logger.h b/SDL_Core/src/components/utils/include/utils/logger.h deleted file mode 100644 index a88c6aa16..000000000 --- a/SDL_Core/src/components/utils/include/utils/logger.h +++ /dev/null @@ -1,72 +0,0 @@ -/** - * \file LOG4CXXLogger.hpp - * \brief Definitions required by logger. - * Stores device information - * - * Copyright (c) 2013, Ford Motor Company - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following - * disclaimer in the documentation and/or other materials provided with the - * distribution. - * - * Neither the name of the Ford Motor Company nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef LOG4CXXLOGGER_HPP_ - #include <errno.h> - #include <string.h> - #include <log4cxx/logger.h> - #include <log4cxx/propertyconfigurator.h> - -namespace log4cxx -{ - #define LOG4CXX_INFO_EXT(logger, logEvent) LOG4CXX_INFO(logger, __PRETTY_FUNCTION__ << ": " << logEvent) - #define LOG4CXX_INFO_STR_EXT(logger, logEvent) LOG4CXX_INFO_STR(logger, __PRETTY_FUNCTION__ << ": " << logEvent) - - #define LOG4CXX_TRACE_EXT(logger, logEvent) LOG4CXX_TRACE(logger, __PRETTY_FUNCTION__ << ": " << logEvent) - #define LOG4CXX_TRACE_STR_EXT(logger, logEvent) LOG4CXX_TRACE_STR(logger, __PRETTY_FUNCTION__ << ": " << logEvent) - - #define LOG4CXX_DEBUG_EXT(logger, logEvent) LOG4CXX_DEBUG(logger, __PRETTY_FUNCTION__ << ": " << logEvent) - #define LOG4CXX_DEBUG_STR_EXT(logger, logEvent) LOG4CXX_DEBUG_STR(logger, __PRETTY_FUNCTION__ << ": " << logEvent) - - #define LOG4CXX_WARN_EXT(logger, logEvent) LOG4CXX_WARN(logger, __PRETTY_FUNCTION__ << ": " << logEvent) - #define LOG4CXX_WARN_STR_EXT(logger, logEvent) LOG4CXX_WARN_STR(logger, __PRETTY_FUNCTION__ << ": " << logEvent) - - #define LOG4CXX_ERROR_EXT(logger, logEvent) LOG4CXX_ERROR(logger, __PRETTY_FUNCTION__ << ": " << logEvent) - #define LOG4CXX_ERROR_STR_EXT(logger, logEvent) LOG4CXX_ERROR_STR(logger, __PRETTY_FUNCTION__ << ": " << logEvent) - - #define LOG4CXX_FATAL_EXT(logger, logEvent) LOG4CXX_FATAL(logger, __PRETTY_FUNCTION__ << ": " << logEvent) - #define LOG4CXX_FATAL_STR_EXT(logger, logEvent) LOG4CXX_FATAL_STR(logger, __PRETTY_FUNCTION__ << ": " << logEvent) - - #define LOG4CXX_TRACE_ENTER(logger) LOG4CXX_TRACE(logger, "ENTER: " << __PRETTY_FUNCTION__ ) - #define LOG4CXX_TRACE_EXIT(logger) LOG4CXX_TRACE(logger, "EXIT: " << __PRETTY_FUNCTION__ ) - - #define LOG4CXX_ERROR_WITH_ERRNO(logger, message) LOG4CXX_ERROR(logger, message << ", error code " << errno << " (" << strerror(errno) << ")") -} - -#define LOG4CXXLOGGER_HPP_ - - -#endif /* LOG4CXXLOGGER_HPP_ */ diff --git a/SDL_Core/src/components/utils/include/utils/macro.h b/SDL_Core/src/components/utils/include/utils/macro.h deleted file mode 100644 index 738f5f4eb..000000000 --- a/SDL_Core/src/components/utils/include/utils/macro.h +++ /dev/null @@ -1,77 +0,0 @@ -// -// Copyright (c) 2013, Ford Motor Company -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are met: -// -// Redistributions of source code must retain the above copyright notice, this -// list of conditions and the following disclaimer. -// -// Redistributions in binary form must reproduce the above copyright notice, -// this list of conditions and the following -// disclaimer in the documentation and/or other materials provided with the -// distribution. -// -// Neither the name of the Ford Motor Company nor the names of its contributors -// may be used to endorse or promote products derived from this software -// without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE -// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -// POSSIBILITY OF SUCH DAMAGE. -// - -#ifndef SRC_COMPONENTS_UTILS_INCLUDE_UTILS_MACRO_H_ -#define SRC_COMPONENTS_UTILS_INCLUDE_UTILS_MACRO_H_ - -#include <assert.h> -#include <stdio.h> - -// A macro to disallow the copy constructor and operator= functions -// This should be used in the private: declarations for a class -#define DISALLOW_COPY_AND_ASSIGN(TypeName) \ - TypeName(const TypeName&); \ - void operator=(const TypeName&) - -// A macro to allow utils::Singleton call derivative constructor and destructor -#define FRIEND_BASE_SINGLETON_CLASS(TypeName) \ - friend class utils::Singleton<TypeName> - -// A macro to allow utils::deleters::Deleter::~Deleter() call class destructor -#define FRIEND_DELETER_DESTRUCTOR(TypeName) \ - friend utils::deleters::Deleter<TypeName>::~Deleter() - -#define DCHECK(condition) \ - if (!(condition)) { \ - printf("\nDCHECK [%s:%d][%s]", __FILE__, __LINE__, __FUNCTION__); \ - printf("[Check failed: " #condition); \ - printf("]\n\n"); \ - assert(false); \ - } - -#define NOTREACHED() DCHECK(false) - -// Allows to perform static check that virtual function from base class is -// actually being overriden if compiler support is available -#if __cplusplus >= 201103L -#define OVERRIDE override -#else -#define OVERRIDE -#endif - -/* -* @brief Calculate size of na array -* @param arr array, which size need to calculate -*/ -#define ARRAYSIZE(arr) sizeof (arr) / sizeof(*arr) - -#endif // SRC_COMPONENTS_UTILS_INCLUDE_UTILS_MACRO_H_ diff --git a/SDL_Core/src/components/utils/include/utils/memory_barrier.h b/SDL_Core/src/components/utils/include/utils/memory_barrier.h deleted file mode 100644 index 9ac935a21..000000000 --- a/SDL_Core/src/components/utils/include/utils/memory_barrier.h +++ /dev/null @@ -1,54 +0,0 @@ -/** - * Copyright (c) 2013, Ford Motor Company - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following - * disclaimer in the documentation and/or other materials provided with the - * distribution. - * - * Neither the name of the Ford Motor Company nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef SRC_COMPONENTS_UTILS_INCLUDE_UTILS_MEMORY_BARRIER_H_ -#define SRC_COMPONENTS_UTILS_INCLUDE_UTILS_MEMORY_BARRIER_H_ - -#ifdef __QNXNTO__ -#include <sys/cpuinline.h> -#endif - -namespace utils { - -inline void memory_barrier() { -#if defined(__QNXNTO__) - __cpu_membarrier(); -#elif defined(__GNUG__) - __sync_synchronize(); -#else -#warning "memory_barrier() implementation does nothing" -#endif -} - -} // namespace utils - -#endif // SRC_COMPONENTS_UTILS_INCLUDE_UTILS_MEMORY_BARRIER_H_ diff --git a/SDL_Core/src/components/utils/include/utils/message_queue.h b/SDL_Core/src/components/utils/include/utils/message_queue.h deleted file mode 100644 index e043440d6..000000000 --- a/SDL_Core/src/components/utils/include/utils/message_queue.h +++ /dev/null @@ -1,181 +0,0 @@ -/** - * Copyright (c) 2013, Ford Motor Company - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following - * disclaimer in the documentation and/or other materials provided with the - * distribution. - * - * Neither the name of the Ford Motor Company nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef MESSAGE_QUEUE_CLASS -#define MESSAGE_QUEUE_CLASS - -#include <queue> - -#include "utils/conditional_variable.h" -#include "utils/lock.h" -#include "utils/logger.h" -#include "utils/prioritized_queue.h" - -/** - * \class MessageQueue - * \brief Wrapper for multithreading queue. - */ - -template<typename T, class Q = std::queue<T> > class MessageQueue { - public: - typedef Q Queue; - /** - * \brief Default constructor - */ - MessageQueue(); - - /** - * \brief Destructor - */ - ~MessageQueue(); - - /** - * \brief Returns size of the queue. - * \return Size of the queue. - */ - int32_t size() const; - - /** - * \brief If queue is empty. - * \return Is queue empty. - */ - bool empty() const; - - /** - * \brief Tells if queue is being shut down - */ - bool IsShuttingDown() const; - - /** - * \brief Adds element to the queue. - * \param element Element to be added to the queue.n - */ - void push(const T& element); - - /** - * \brief Removes element from the queue and returns it. - * \return To element of the queue. - */ - T pop(); - - /** - * \brief Conditional wait. - */ - void wait(); - - /** - * \brief Shutdown the queue. - * This leads to waking up everyone waiting on the queue - * Queue being shut down can be drained ( with pop() ) - * But nothing must be added to the queue after it began - * shutting down - */ - void Shutdown(); - private: - - /** - *\brief Queue - */ - Queue queue_; - volatile bool shutting_down_; - /** - *\brief Platform specific syncronisation variable - */ - mutable sync_primitives::Lock queue_lock_; - mutable sync_primitives::ConditionalVariable queue_new_items_; -}; - -template<typename T, class Q> MessageQueue<T, Q>::MessageQueue() - : shutting_down_(false) { -} - -template<typename T, class Q> MessageQueue<T, Q>::~MessageQueue() { - if (!queue_.empty()) { - log4cxx::LoggerPtr logger = - log4cxx::LoggerPtr(log4cxx::Logger::getLogger("Utils")); - LOG4CXX_ERROR(logger, "Destruction of non-drained queue"); - } -} - -template<typename T, class Q> void MessageQueue<T, Q>::wait() { - sync_primitives::AutoLock auto_lock(queue_lock_); - while (!shutting_down_ && queue_.empty()) { - queue_new_items_.Wait(auto_lock); - } -} - -template<typename T, class Q> int32_t MessageQueue<T, Q>::size() const { - sync_primitives::AutoLock auto_lock(queue_lock_); - return queue_.size(); -} - -template<typename T, class Q> bool MessageQueue<T, Q>::empty() const { - sync_primitives::AutoLock auto_lock(queue_lock_); - return queue_.empty(); -} - -template<typename T, class Q> bool MessageQueue<T, Q>::IsShuttingDown() const { - sync_primitives::AutoLock auto_lock(queue_lock_); - return shutting_down_; -} - -template<typename T, class Q> void MessageQueue<T, Q>::push(const T& element) { - sync_primitives::AutoLock auto_lock(queue_lock_); - if (shutting_down_) { - log4cxx::LoggerPtr logger = - log4cxx::LoggerPtr(log4cxx::Logger::getLogger("Utils")); - LOG4CXX_ERROR(logger, "Runtime error, pushing into queue" - " that is being shut down"); - } - queue_.push(element); - queue_new_items_.Broadcast(); -} - -template<typename T, class Q> T MessageQueue<T, Q>::pop() { - sync_primitives::AutoLock auto_lock(queue_lock_); - if (queue_.empty()) { - log4cxx::LoggerPtr logger = - log4cxx::LoggerPtr(log4cxx::Logger::getLogger("Utils")); - LOG4CXX_ERROR(logger, "Runtime error, popping out of empty que"); - } - T result = queue_.front(); - queue_.pop(); - return result; -} - -template<typename T, class Q> void MessageQueue<T, Q>::Shutdown() { - sync_primitives::AutoLock auto_lock(queue_lock_); - shutting_down_ = true; - queue_new_items_.Broadcast(); -} - -#endif // MESSAGE_QUEUE_CLASS diff --git a/SDL_Core/src/components/utils/include/utils/prioritized_queue.h b/SDL_Core/src/components/utils/include/utils/prioritized_queue.h deleted file mode 100644 index 0023c2bdb..000000000 --- a/SDL_Core/src/components/utils/include/utils/prioritized_queue.h +++ /dev/null @@ -1,89 +0,0 @@ -/** - * Copyright (c) 2013, Ford Motor Company - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following - * disclaimer in the documentation and/or other materials provided with the - * distribution. - * - * Neither the name of the Ford Motor Company nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef SRC_COMPONENTS_UTILS_INCLUDE_UTILS_PRIORITIZED_QUEUE_H_ -#define SRC_COMPONENTS_UTILS_INCLUDE_UTILS_PRIORITIZED_QUEUE_H_ - -#include <queue> -#include <map> -#include <iostream> - -#include "utils/macro.h" - -namespace utils { - -/* - * Template queue class that gives out messages respecting their priority - * Message class must have size_t PriorityOrder() method implemented - */ -template < typename M > -class PrioritizedQueue { - public: - typedef M value_type; - // std::map guarantees it's contents is sorted by key - typedef std::map<size_t, std::queue<value_type> > QueuesMap; - PrioritizedQueue() - : total_size_(0) { - } - // All api mimics usual std queue interface - void push(const value_type& message) { - size_t message_priority = message.PriorityOrder(); - queues_[message_priority].push(message); - ++total_size_; - } - size_t size() const { - return total_size_; - } - bool empty() const { - return queues_.empty(); - } - value_type front() { - DCHECK(!queues_.empty() && !queues_.rbegin()->second.empty()); - return queues_.rbegin()->second.front(); - } - void pop() { - DCHECK(!queues_.empty() && !queues_.rbegin()->second.empty()); - typename QueuesMap::iterator last = --queues_.end(); - last->second.pop(); - --total_size_; - if (last->second.empty()) { - queues_.erase(last); - } - } - private: - QueuesMap queues_; - size_t total_size_; -}; - -} - -#endif // SRC_COMPONENTS_UTILS_INCLUDE_UTILS_ diff --git a/SDL_Core/src/components/utils/include/utils/shared_ptr.h b/SDL_Core/src/components/utils/include/utils/shared_ptr.h deleted file mode 100644 index 0e06d62c6..000000000 --- a/SDL_Core/src/components/utils/include/utils/shared_ptr.h +++ /dev/null @@ -1,342 +0,0 @@ -/** - * Copyright (c) 2013, Ford Motor Company - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following - * disclaimer in the documentation and/or other materials provided with the - * distribution. - * - * Neither the name of the Ford Motor Company nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef SRC_COMPONENTS_UTILS_INCLUDE_UTILS_SHARED_PTR_H_ -#define SRC_COMPONENTS_UTILS_INCLUDE_UTILS_SHARED_PTR_H_ - -#include <assert.h> -#include <stddef.h> -#include <stdint.h> - -#include "macro.h" -#include "atomic.h" - -namespace utils { -/** - * @brief Shared pointer. - * - * Pointer to an object with reference counting. - * Object will be automatically deallocated when last shared - * pointer is destroyed. - * - * @tparam ObjectType Type of wrapped object. - **/ -template<typename ObjectType> -class SharedPtr { - public: - /** - * @brief Constructor. - * - * Initialize shared pointer with wrapped object. - * Reference counter will be initialized to 1. - * - * @param Object Wrapped object. - **/ - SharedPtr(ObjectType* Object); - - SharedPtr(); - - /** - * @brief Copy constructor. - * - * Initialize shared pointer with another shared pointer. - * Reference counter will be incremented. - * - * @param Other Other shared pointer. - **/ - SharedPtr(const SharedPtr<ObjectType>& Other); - - /** - * @brief Copy constructor. - * - * Initialize shared pointer with another shared pointer. - * Reference counter will be incremented. - * - * @tparam OtherObjectType Type of other object pointer. This - * allows creating a shared pointer to an - * intstance of a base class from a shared - * pointer to an instance of a class - * inherited from this base class. - * If OtherObjectType is not implicitly - * convertible to ObjectType it will - * cause a compile error. - * - * @param Other Other shared pointer. - **/ - template<typename OtherObjectType> - SharedPtr(const SharedPtr<OtherObjectType>& Other); - - /** - * @brief Destructor. - * - * Decrement reference counter and destroy wrapped object - * if reference counter reaches zero. - **/ - ~SharedPtr(void); - - /** - * @brief Assignment operator. - * - * Drop reference to currently referenced object and add - * reference to assigned object. - * - * @param Other Shared pointer to an object - * that must be referenced. - * - * @return Reference to this shared pointer. - **/ - SharedPtr<ObjectType>& operator =(const SharedPtr<ObjectType>& Other); - - bool operator ==(const SharedPtr<ObjectType>& Other) const; - - bool operator< (const SharedPtr<ObjectType>& other) const; - - /** - * @brief Assignment operator. - * - * Drop reference to currently referenced object and add - * reference to assigned object. - * - * @tparam OtherObjectType Type of other object pointer. This - * allows creating a shared pointer to an - * intstance of a base class from a shared - * pointer to an instance of a class - * inherited from this base class. - * If OtherObjectType is not implicitly - * convertible to ObjectType it will - * cause a compile error. - * - * @param Other Shared pointer to an object - * that must be referenced. - * - * @return Reference to this shared pointer. - **/ - template<typename OtherObjectType> - SharedPtr<ObjectType>& operator =(const SharedPtr<OtherObjectType>& Other); - - template<typename OtherObjectType> - static SharedPtr<OtherObjectType> static_pointer_cast( - const SharedPtr<ObjectType>& pointer); - - /** - * @brief Member access operator. - * - * @return Wrapped object. - **/ - ObjectType* operator->(void) const; - - ObjectType& operator*() const; - operator bool() const; - void reset(); - void reset(ObjectType* other); - ObjectType* get() const; - - /** - * @return true if mObject not NULL - */ - bool valid() const; - - private: - void reset_impl(ObjectType* other); - - // TSharedPtr needs access to other TSharedPtr private members - // for shared pointers type casts. - template<typename OtherObjectType> - friend class SharedPtr; - - /** - * @brief Drop reference to wrapped object. - * - * If reference counter reaches zero object and its reference - * counter will be deallocated. - **/ - void dropReference(void); - - /** - * @brief Wrapped object. - **/ - ObjectType* mObject; - - /** - * @brief Pointer to reference counter. - **/ - uint32_t* mReferenceCounter; -}; - -template<typename ObjectType> -inline utils::SharedPtr<ObjectType>::SharedPtr(ObjectType* Object) - : mObject(NULL), - mReferenceCounter(new uint32_t(1)) { - DCHECK(Object != NULL); - mObject = Object; -} - -template<typename ObjectType> -inline utils::SharedPtr<ObjectType>::SharedPtr() - : mObject(0), - mReferenceCounter(0) { -} - -template<typename ObjectType> -inline utils::SharedPtr<ObjectType>::SharedPtr( - const SharedPtr<ObjectType>& Other) - : mObject(0), - mReferenceCounter(0) { - *this = Other; -} - -template<typename ObjectType> -template<typename OtherObjectType> -inline utils::SharedPtr<ObjectType>::SharedPtr( - const SharedPtr<OtherObjectType>& Other) - : mObject(0), - mReferenceCounter(0) { - *this = Other; -} - -template<typename ObjectType> -inline utils::SharedPtr<ObjectType>::~SharedPtr(void) { - dropReference(); -} - -template<typename ObjectType> -inline utils::SharedPtr<ObjectType>& -utils::SharedPtr<ObjectType>::operator=(const SharedPtr<ObjectType>& Other) { - return operator=<ObjectType>(Other); -} - -template<typename ObjectType> -inline bool utils::SharedPtr<ObjectType>::operator ==( - const SharedPtr<ObjectType>& Other) const { - return (mObject == Other.mObject); -} - -template<typename ObjectType> -inline bool utils::SharedPtr<ObjectType>::operator< ( - const SharedPtr<ObjectType>& other) const { - return (mObject < other.mObject); -} - -template<typename ObjectType> -template<typename OtherObjectType> -inline utils::SharedPtr<ObjectType>& -utils::SharedPtr<ObjectType>::operator=( - const SharedPtr<OtherObjectType>& Other) { - dropReference(); - - mObject = Other.mObject; - mReferenceCounter = Other.mReferenceCounter; - - if (0 != mReferenceCounter) { - atomic_post_inc(mReferenceCounter); - } - - return *this; -} - -template<typename ObjectType> -template<typename OtherObjectType> -utils::SharedPtr<OtherObjectType> utils::SharedPtr<ObjectType>::static_pointer_cast(const SharedPtr<ObjectType>& pointer) { - SharedPtr<OtherObjectType> casted_pointer; - casted_pointer.mObject = static_cast<OtherObjectType*>(pointer.mObject); - casted_pointer.mReferenceCounter = pointer.mReferenceCounter; - - if (0 != casted_pointer.mReferenceCounter) { - atomic_post_inc(casted_pointer.mReferenceCounter); - } - - return casted_pointer; -} - -template<typename ObjectType> ObjectType* -utils::SharedPtr<ObjectType>::operator->(void) const { - return mObject; -} - -template<typename ObjectType> ObjectType& -utils::SharedPtr<ObjectType>::operator*() const { - DCHECK(mObject); - return *mObject; -} - -template<typename ObjectType> -utils::SharedPtr<ObjectType>::operator bool() const { - return 0 != mObject; -} - -template<typename ObjectType> void -utils::SharedPtr<ObjectType>::reset() { - reset_impl(0); -} - -template<typename ObjectType> void -utils::SharedPtr<ObjectType>::reset(ObjectType* other) { - DCHECK(other != NULL); - reset_impl(other); -} - -template<typename ObjectType> void -utils::SharedPtr<ObjectType>::reset_impl(ObjectType* other) { - dropReference(); - mObject = other; - mReferenceCounter = new uint32_t(1); -} - -template<typename ObjectType> -inline void SharedPtr<ObjectType>::dropReference(void) { - if (0 != mReferenceCounter) { - if (1 == atomic_post_dec(mReferenceCounter)) { - - delete mObject; - mObject = 0; - - delete mReferenceCounter; - mReferenceCounter = 0; - } - } -} - -template<typename ObjectType> -ObjectType* SharedPtr<ObjectType>::get() const { - return mObject; -} - -template<typename ObjectType> -inline bool SharedPtr<ObjectType>::valid() const { - return (mObject != NULL); -} - -} // namespace utils - -#endif // SRC_COMPONENTS_UTILS_INCLUDE_UTILS_SHARED_PTR_H_ - -// vim: set ts=2 sw=2 et: diff --git a/SDL_Core/src/components/utils/include/utils/signals.h b/SDL_Core/src/components/utils/include/utils/signals.h deleted file mode 100644 index ad2a2d183..000000000 --- a/SDL_Core/src/components/utils/include/utils/signals.h +++ /dev/null @@ -1,44 +0,0 @@ -/** -* \file signals.h -* \brief Signal (i.e. SIGINT) handling. -* Copyright (c) 2013, Ford Motor Company -* All rights reserved. -* -* Redistribution and use in source and binary forms, with or without -* modification, are permitted provided that the following conditions are met: -* -* Redistributions of source code must retain the above copyright notice, this -* list of conditions and the following disclaimer. -* -* Redistributions in binary form must reproduce the above copyright notice, -* this list of conditions and the following -* disclaimer in the documentation and/or other materials provided with the -* distribution. -* -* Neither the name of the Ford Motor Company nor the names of its contributors -* may be used to endorse or promote products derived from this software -* without specific prior written permission. -* -* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE -* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -* POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef SRC_COMPONENTS_UTILS_INCLUDE_UTILS_SIGNALS_H_ -#define SRC_COMPONENTS_UTILS_INCLUDE_UTILS_SIGNALS_H_ - -namespace utils { -bool SubscribeToTerminateSignal(void (*func)(int32_t p)); -bool ResetSubscribeToTerminateSignal(); -void ForwardSignal(); -} // namespace utils - -#endif // SRC_COMPONENTS_UTILS_INCLUDE_UTILS_SIGNALS_H_ diff --git a/SDL_Core/src/components/utils/include/utils/singleton.h b/SDL_Core/src/components/utils/include/utils/singleton.h deleted file mode 100644 index 35ad50393..000000000 --- a/SDL_Core/src/components/utils/include/utils/singleton.h +++ /dev/null @@ -1,179 +0,0 @@ -/** - * Copyright (c) 2013, Ford Motor Company - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following - * disclaimer in the documentation and/or other materials provided with the - * distribution. - * - * Neither the name of the Ford Motor Company nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef SRC_COMPONENTS_UTILS_INCLUDE_UTILS_SINGLETON_H_ -#define SRC_COMPONENTS_UTILS_INCLUDE_UTILS_SINGLETON_H_ - -#include "lock.h" -#include "memory_barrier.h" -#include "atomic.h" - -namespace utils { - -namespace deleters { - -class DummyDeleter { - public: - void grab(void* pointer) { - } -}; - -template<typename T> -class Deleter { - public: - Deleter() : pointer_(0) { - } - ~Deleter() { - if (pointer_) { - delete pointer_; - } - } - void grab(T* pointer) { - pointer_ = pointer; - } - private: - T* pointer_; -}; - -} // namespace deleters - -template<typename T, class Deleter = deleters::DummyDeleter> -class Singleton { -/** - * @brief Singleton template - * Singleton classes must derive from this template specialized with class itself: - * - * class MySingleton : public Singleton<MySingleton> {...}; - * - * All such classes must declare instance() method as friend - * by adding FRIEND_BASE_SINGLETON_CLASS macro from macro.h to class definition: - * - * FRIEND_BASE_SINGLETON_CLASS(MySingleton); - * - * Instance of this class (if created) can be deleted by Deleter destructor - * which is called after main() (or from exit()) - * This requires T destructor to be accessible for Deleter (e.g. public) - * Deleter template parameter can be specified with any class - * with public default constructor, destructor and method - * void grab(T*); - * However, default Deleter specification does nothing - * - * Also instance can be deleted explicitly by calling destroy() method - * - * Both instance() and destroy() methods are thread safe - * but not thread safety between simultaneous calls - * of instance() and destroy() is cared about - */ - public: -/** - * @brief Returns the singleton of class - */ - static T* instance(); -/** - * @brief Destroys the singleton (if it had been created) - */ - static void destroy(); -/** - * @brief Checks whether the singleton exists - */ - static bool exists(); - - private: - - static T** instance_pointer(); - static Deleter* deleter(); -}; - -template<typename T, class Deleter> -T* Singleton<T, Deleter>::instance() { - static sync_primitives::Lock lock; - - T* local_instance; - atomic_pointer_assign(local_instance, *instance_pointer()); - memory_barrier(); - - if (!local_instance) { - lock.Ackquire(); - local_instance = *instance_pointer(); - if (!local_instance) { - local_instance = new T(); - memory_barrier(); - atomic_pointer_assign(*instance_pointer(), local_instance); - deleter()->grab(local_instance); - } - lock.Release(); - } - - return local_instance; -} - -template<typename T, class Deleter> -void Singleton<T, Deleter>::destroy() { - static sync_primitives::Lock lock; - - T* local_instance; - atomic_pointer_assign(local_instance, *instance_pointer()); - memory_barrier(); - - if (local_instance) { - lock.Ackquire(); - local_instance = *instance_pointer(); - if (local_instance) { - atomic_pointer_assign(*instance_pointer(), 0); - memory_barrier(); - delete local_instance; - deleter()->grab(0); - } - lock.Release(); - } -} - -template<typename T, class Deleter> -bool Singleton<T, Deleter>::exists() { - return *instance_pointer() != 0; -} - -template<typename T, class Deleter> -T** Singleton<T, Deleter>::instance_pointer() { - static T* instance = 0; - return &instance; -} - -template<typename T, class Deleter> -Deleter* Singleton<T, Deleter>::deleter() { - static Deleter deleter; - return &deleter; -} - -} // namespace utils - -#endif // SRC_COMPONENTS_UTILS_INCLUDE_UTILS_SINGLETON_H_ diff --git a/SDL_Core/src/components/utils/include/utils/stl_utils.h b/SDL_Core/src/components/utils/include/utils/stl_utils.h deleted file mode 100644 index f525c6429..000000000 --- a/SDL_Core/src/components/utils/include/utils/stl_utils.h +++ /dev/null @@ -1,81 +0,0 @@ -/** - * Copyright (c) 2013, Ford Motor Company - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following - * disclaimer in the documentation and/or other materials provided with the - * distribution. - * - * Neither the name of the Ford Motor Company nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - */ -#ifndef SRC_COMPONENTS_UTILS_INCLUDE_UTILS_STL_UTILS_H_ -#define SRC_COMPONENTS_UTILS_INCLUDE_UTILS_STL_UTILS_H_ - -#include "utils/macro.h" - -namespace utils { - -/* - * Utility class that automatically deletes STL collection of - * freestore objects - */ -template<class T> -class StlCollectionDeleter { - public: - typedef T Collection; - StlCollectionDeleter(T* collection): collection_(collection) { - DCHECK(collection_); - } - ~StlCollectionDeleter() { - for (typename Collection::iterator i = collection_->begin(), - end = collection_->end(); - i != end; ++i) { - delete *i; - } - } - private: - Collection* collection_; -}; - -template<class T> -class StlMapDeleter { - public: - typedef T Collection; - StlMapDeleter(T* collection): collection_(collection) { - DCHECK(collection_); - } - ~StlMapDeleter() { - for (typename Collection::iterator i = collection_->begin(), - end = collection_->end(); - i != end; ++i) { - delete i->second; - } - } - private: - Collection* collection_; -}; - -} // namespace utils - -#endif /* SRC_COMPONENTS_UTILS_INCLUDE_UTILS_STL_UTILS_H_ */ diff --git a/SDL_Core/src/components/utils/include/utils/threads/message_loop_thread.h b/SDL_Core/src/components/utils/include/utils/threads/message_loop_thread.h deleted file mode 100644 index b2ff91f7b..000000000 --- a/SDL_Core/src/components/utils/include/utils/threads/message_loop_thread.h +++ /dev/null @@ -1,136 +0,0 @@ -#ifndef SRC_COMPONENTS_UTILS_INCLUDE_MESSAGE_LOOP_THREAD_H_ -#define SRC_COMPONENTS_UTILS_INCLUDE_MESSAGE_LOOP_THREAD_H_ - -#include <string> -#include <queue> - -#include "utils/logger.h" -#include "utils/macro.h" -#include "utils/message_queue.h" -#include "utils/threads/thread.h" - -namespace threads { - -/* - * Class that handles a thread which sole purpose is to pump messages pushed - * to it's queue. To handle messages someone, Handler must be implemented and - * passed to MessageLoopThread constructor. - */ -template < class Q > -class MessageLoopThread { - public: - typedef Q Queue; - typedef typename Queue::value_type Message; - /* - * Handler interface. It is called from a thread that is - * owned by MessageLoopThread so make sure is only accesses - * thread-safe data - */ - struct Handler { - /* - * Method called by MessageLoopThread to process single message - * from it's queue. After calling this method message is discarded. - */ - virtual void Handle(const Message& message) = 0; - }; - - /* - * Constructs new MessageLoopThread. Must be named to aid debugging. - */ - MessageLoopThread(const std::string& name, - Handler* handler, - const ThreadOptions& thread_opts = ThreadOptions()); - ~MessageLoopThread(); - - // Places a message to the therad's queue. Thread-safe. - void PostMessage(const Message& message); - private: - - /* - * Implementation of ThreadDelegate that actually pumps the queue and is - * able to correctly shut it down - */ - struct LoopThreadDelegate : public threads::ThreadDelegate { - LoopThreadDelegate(MessageQueue<Message, Queue>* message_queue, - Handler* handler); - - // threads::ThreadDelegate overrides - virtual void threadMain() OVERRIDE; - virtual bool exitThreadMain() OVERRIDE; - private: - // Handle all messages that are in the queue until it is empty - void DrainQue(); - private: - // Handler that processes messages - Handler& handler_; - // Message queue that is actually owned by MessageLoopThread - MessageQueue<Message, Queue>& message_queue_; - }; - private: - MessageQueue<Message, Queue> message_queue_; - threads::Thread thread_; -}; - -///////// Implementation - -template<class Q> -MessageLoopThread<Q>::MessageLoopThread(const std::string& name, - Handler* handler, - const ThreadOptions& thread_opts) - : thread_(name.c_str(), new LoopThreadDelegate(&message_queue_, handler)) { - bool started = thread_.startWithOptions(thread_opts); - if (!started) { - log4cxx::LoggerPtr logger = - log4cxx::LoggerPtr(log4cxx::Logger::getLogger("Utils")); - LOG4CXX_ERROR(logger, "Failed to start thread " << name); - } -} - -template<class Q> -MessageLoopThread<Q>::~MessageLoopThread() { - // this will join us with the thread while it drains message queue - thread_.stop(); -} - -template <class Q> -void MessageLoopThread<Q>::PostMessage(const Message& message) { - message_queue_.push(message); -} - -////////// -template<class Q> -MessageLoopThread<Q>::LoopThreadDelegate::LoopThreadDelegate( - MessageQueue<Message, Queue>* message_queue, Handler* handler) - : handler_(*handler), - message_queue_(*message_queue) { - DCHECK(handler != NULL); - DCHECK(message_queue != NULL); -} - -template<class Q> -void MessageLoopThread<Q>::LoopThreadDelegate::threadMain() { - while(!message_queue_.IsShuttingDown()){ - DrainQue(); - message_queue_.wait(); - } - // Process leftover messages - DrainQue(); -} - -template<class Q> -bool MessageLoopThread<Q>::LoopThreadDelegate::exitThreadMain() { - message_queue_.Shutdown(); - // Prevent canceling thread until queue is drained - return true; -} - -template<class Q> -void MessageLoopThread<Q>::LoopThreadDelegate::DrainQue() { - while(!message_queue_.empty()) { - handler_.Handle(message_queue_.pop()); - } -} - -} // namespace utils - -#endif // SRC_COMPONENTS_UTILS_INCLUDE_MESSAGE_LOOP_THREAD_H_ diff --git a/SDL_Core/src/components/utils/include/utils/threads/thread.h b/SDL_Core/src/components/utils/include/utils/threads/thread.h deleted file mode 100644 index bbe0acde3..000000000 --- a/SDL_Core/src/components/utils/include/utils/threads/thread.h +++ /dev/null @@ -1,237 +0,0 @@ -/** - * \file thread.h - * \brief - * - * Copyright (c) 2013, Ford Motor Company - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following - * disclaimer in the documentation and/or other materials provided with the - * distribution. - * - * Neither the name of the Ford Motor Company nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef SRC_COMPONENTS_UTILS_INCLUDE_UTILS_THREADS_THREAD_H_ -#define SRC_COMPONENTS_UTILS_INCLUDE_UTILS_THREADS_THREAD_H_ - -#if defined(OS_POSIX) -#include <pthread.h> -#endif - -#include <ostream> -#include <string> - -#include "utils/macro.h" -#include "utils/logger.h" -#include "utils/threads/thread_delegate.h" -#include "utils/threads/thread_options.h" - -namespace threads { - -namespace impl { -#if defined(OS_POSIX) -typedef pthread_t PlatformThreadHandle; -#else -#error Please implement thread for your OS -#endif -} - -/** - * Non platform specific thread abstraction that establishes a - * threads::ThreadDelegate on a new thread. - * - * ThreadDelegate example: - * class TestThread : public threads::ThreadDelegate { - * public: - * void threadMain() { - * printf("Hello, thread!\n"); - * sleep(2); - * } - * }; - * - * Example usage: - * threads::Thread thread("test thread", new TestThread()); - * thread.startWithOptions( - * threads::ThreadOptions(threads::Thread::kMinStackSize)); - * printf("join!\n"); - * thread.join(); - * printf("ok!\n"); - */ -class Thread { - public: - - /* - * Class that represents unique in-process thread identifier - * due to restriction of pthread API it only allows checks - * for equality to different thread id and no ordering. - * - * ostream<< operator is provided for this class which - * outputs thread name associated to an identifier. - */ - class Id { - public: - explicit Id(const impl::PlatformThreadHandle& id): id_(id) {} - bool operator==(const Id that) const; - private: - impl::PlatformThreadHandle id_; - friend class Thread; - }; - - // Get unique ID of currently executing thread - static Id CurrentId(); - - // Get name associated with thread identified by thread_id - static std::string NameFromId(Id thread_id); - - // Give thread thread_id a name, helpful for debugging - static void SetNameForId(Id thread_id, const std::string& name); - - /** - * Ctor. - * @param name - display string to identify the thread. - * @param delegate - thread procedure delegate. Look for - * 'threads/thread_delegate.h' for details. - * NOTE: delegate will be deleted by destructor. - */ - Thread(const char* name, ThreadDelegate* delegate); - - /** - * Dtor. - */ - virtual ~Thread(); - - /** - * Starts the thread. - * @return true if the thread was successfully started. - */ - bool start(); - - /** - * Starts the thread. Behaves exactly like Start in addition to - * allow to override the default options. - * @param options - thread options. Look for 'threads/thread_options.h' - * for details. - * @return true if the thread was successfully started. - */ - bool startWithOptions(const ThreadOptions& options); - - /** - * Signals the thread to exit and returns once the thread has exited. - * After this method returns, the Thread object is completely reset and may - * be used as if it were newly constructed (i.e., Start may be called again). - * - * Stop may be called multiple times and is simply ignored if the thread is - * already stopped. - */ - void stop(); - - /** - * Joins with a thread created via the Create function. - * This function blocks the caller until the designated thread exits. - * This will invalidate |thread_handle|. - */ - void join(); - - /** - * Get thread name. - * @return thread name - */ - const std::string &thread_name() { - return name_; - } - - /** - * Returns true if the thread has been started, and not yet stopped. - * When a thread is running, the thread_id_ is non-zero. - * @return true if the thread has been started, and not yet stopped. - */ - bool is_running() const { - return isThreadRunning_; - } - - /** - * Is thread joinable? - * @return - Returns true if the thread is joinable. - */ - bool is_joinable() const { - return thread_options_.is_joinable(); - } - - /** - * Thread stack size - * @return thread stack size - */ - size_t stack_size() const { - return thread_options_.stack_size(); - } - - /** - * The native thread handle. - * @return thread handle. - */ - impl::PlatformThreadHandle thread_handle() const { - return thread_handle_; - } - - /** - * Thread id. - * @return return thread id. - */ - Id thread_id() const { - return Id(thread_handle()); - } - - /** - * Thread options. - * @return thread options. - */ - const ThreadOptions& thread_options() const { - return thread_options_; - } - - /** - * Minimum size of thread stack for specific platform. - */ - static size_t kMinStackSize; - - protected: - std::string name_; - ThreadDelegate* delegate_; - impl::PlatformThreadHandle thread_handle_; - ThreadOptions thread_options_; - bool isThreadRunning_; - - static log4cxx::LoggerPtr logger_; - - private: - DISALLOW_COPY_AND_ASSIGN(Thread); -}; - -inline bool operator!= (Thread::Id left, Thread::Id right) {return !(left == right); } -std::ostream& operator<<(std::ostream& os, Thread::Id thread_id); - -} // namespace threads - -#endif // SRC_COMPONENTS_UTILS_INCLUDE_UTILS_THREADS_THREAD_H_ diff --git a/SDL_Core/src/components/utils/include/utils/threads/thread_delegate.h b/SDL_Core/src/components/utils/include/utils/threads/thread_delegate.h deleted file mode 100644 index 963eb3bf8..000000000 --- a/SDL_Core/src/components/utils/include/utils/threads/thread_delegate.h +++ /dev/null @@ -1,71 +0,0 @@ -/** - * \file thread_delegate.h - * \brief - * - * Copyright (c) 2013, Ford Motor Company - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following - * disclaimer in the documentation and/or other materials provided with the - * distribution. - * - * Neither the name of the Ford Motor Company nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef SRC_COMPONENTS_UTILS_INCLUDE_UTILS_THREADS_THREAD_DELEGATE_H_ -#define SRC_COMPONENTS_UTILS_INCLUDE_UTILS_THREADS_THREAD_DELEGATE_H_ - -#include <pthread.h> - -namespace threads { - -/** - * Thread procedure interface. - * Look for "threads/thread.h" for example - */ -class ThreadDelegate { - public: - /** - * Dtor. - */ - virtual ~ThreadDelegate() { - } - - /** - * Thread procedure. - */ - virtual void threadMain() = 0; - - /** - * Should be called to free all resources allocated in threadMain - * and exiting threadMain - */ - virtual bool exitThreadMain() { - return false; - } -}; - -} // namespace threads - -#endif // SRC_COMPONENTS_UTILS_INCLUDE_UTILS_THREADS_THREAD_DELEGATE_H_ diff --git a/SDL_Core/src/components/utils/include/utils/threads/thread_manager.h b/SDL_Core/src/components/utils/include/utils/threads/thread_manager.h deleted file mode 100644 index 03330170e..000000000 --- a/SDL_Core/src/components/utils/include/utils/threads/thread_manager.h +++ /dev/null @@ -1,117 +0,0 @@ -/** - * Copyright (c) 2013, Ford Motor Company - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following - * disclaimer in the documentation and/or other materials provided with the - * distribution. - * - * Neither the name of the Ford Motor Company nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef SRC_COMPONENTS_UTILS_INCLUDE_UTILS_THREADS_THREAD_MANAGER_H_ -#define SRC_COMPONENTS_UTILS_INCLUDE_UTILS_THREADS_THREAD_MANAGER_H_ - -#include "utils/threads/thread.h" -#include "utils/lock.h" - -#include <map> -#include <string> -#include <set> - -#include "utils/macro.h" -#include "utils/singleton.h" - -namespace threads { -namespace impl { - -/* - * Generates short and unique names for unnamed threads - * and remembers association between thread handle and that short name - */ -class UnnamedThreadRegistry { - public: - UnnamedThreadRegistry(); - ~UnnamedThreadRegistry(); - /* - * Returns a name for given unnamed thread id. - * If id is first seen, new name is generated and memorized - * If id is already known, previously generated name is returned - */ - std::string GetUniqueName(PlatformThreadHandle id); - private: - typedef std::map<PlatformThreadHandle, std::string> IdNameMap; - IdNameMap id_number_; - int32_t last_thread_number_; - sync_primitives::Lock state_lock_; -}; - -/* - * This class is here currently to remember names associated to threads. - * It manages raw impl::PlatformHandles because Thread::Id's do not provide - * comparison operator. Current linux implementation relies on fact that - * pthread_t is just an integer and every thread has single unique value - * associated with it. - * OS provides it's own facilities to name threads but - */ -class ThreadManager : public utils::Singleton<ThreadManager> { - public: - // Name a thread. Should be called only once for every thread. - // Threads can't be renamed - void RegisterName(PlatformThreadHandle id, const std::string& name); - - // Get a name for previously registered thread - std::string GetName(PlatformThreadHandle id) const; - - // Forget a name of (possibly destroyed) thread - // Make sure to call it after thread is finished - // Because thread id's can be recycled - void Unregister(PlatformThreadHandle id); - private: - ThreadManager(); - ~ThreadManager(); - - private: - typedef std::set<std::string> NamesSet; - typedef std::map<PlatformThreadHandle, std::string> IdNamesMap; - // Set of thread names for fast checking if name is unique - NamesSet names_; - // Map from system handle to the thread name - IdNamesMap id_names_; - mutable sync_primitives::Lock state_lock_; - - // Generator of shorter sequental names for unnamed threads - // Has to memorize every generated name this is why it is mutable - mutable UnnamedThreadRegistry unnamed_thread_namer_; - - private: - DISALLOW_COPY_AND_ASSIGN(ThreadManager); - - FRIEND_BASE_SINGLETON_CLASS(ThreadManager); -}; - -} // namespace impl -} // namespace threads - -#endif // SRC_COMPONENTS_UTILS_INCLUDE_UTILS_THREADS_THREAD_MANAGER_H_ diff --git a/SDL_Core/src/components/utils/include/utils/threads/thread_options.h b/SDL_Core/src/components/utils/include/utils/threads/thread_options.h deleted file mode 100644 index bdeaa367f..000000000 --- a/SDL_Core/src/components/utils/include/utils/threads/thread_options.h +++ /dev/null @@ -1,107 +0,0 @@ -/** - * \file thread_options.h - * \brief - * - * Copyright (c) 2013, Ford Motor Company - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following - * disclaimer in the documentation and/or other materials provided with the - * distribution. - * - * Neither the name of the Ford Motor Company nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef SRC_COMPONENTS_UTILS_INCLUDE_UTILS_THREADS_THREAD_OPTIONS_H_ -#define SRC_COMPONENTS_UTILS_INCLUDE_UTILS_THREADS_THREAD_OPTIONS_H_ - -namespace threads { - -/** - * @breif Startup options for thread. - * Look for "threads/thread.h" for example - */ -class ThreadOptions { - public: - /** - * Ctor - * @param stack_size - thread stack size. If stack size less than - * threads::Thread::kMinStackSize the default value is used. - * 0 - default stack size for current platform. - * @param is_joinable - is thread joinable? - */ - explicit ThreadOptions(size_t stack_size = 0, bool is_joinable = true) - : stack_size_(stack_size), - is_joinable_(is_joinable) { - } - - /** - * Dtor. - */ - virtual ~ThreadOptions() { - } - - /** - * Copy ctor. - * @param options - new options. - */ - ThreadOptions(const ThreadOptions& options) { - *this = options; - } - - /** - * Assign operator. - * @param options - new options. - * @return new options. - */ - ThreadOptions& operator=(const ThreadOptions& options ) { - stack_size_ = options.stack_size(); - is_joinable_ = options.is_joinable(); - return *this; - } - - /** - * Stack size. - * @return Stack size for thread. - */ - size_t stack_size() const { - return stack_size_; - } - - /** - * Is thread joinable? - * @return - Returns true if the thread is joinable. - */ - bool is_joinable() const { - return is_joinable_; - } - - protected: - size_t stack_size_; - bool is_joinable_; -}; - -} // namespace threads - -#endif // SRC_COMPONENTS_UTILS_INCLUDE_UTILS_THREADS_THREAD_OPTIONS_H_ diff --git a/SDL_Core/src/components/utils/include/utils/threads/thread_validator.h b/SDL_Core/src/components/utils/include/utils/threads/thread_validator.h deleted file mode 100644 index def1994b7..000000000 --- a/SDL_Core/src/components/utils/include/utils/threads/thread_validator.h +++ /dev/null @@ -1,105 +0,0 @@ -/** - * Copyright (c) 2013, Ford Motor Company - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following - * disclaimer in the documentation and/or other materials provided with the - * distribution. - * - * Neither the name of the Ford Motor Company nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - */ -#ifndef SRC_COMPONENTS_UTILS_INCLUDE_THREADS_THREAD_VALIDATOR_H_ -#define SRC_COMPONENTS_UTILS_INCLUDE_THREADS_THREAD_VALIDATOR_H_ - -#include "utils/threads/thread.h" - -namespace threads { -/* - * Use objects of this class to validate (in run-time) access - * to single-threaded objects. It remembers the thread it was - * created on and then allows to easily check whether an object is - * being accessed from different thread and log an error in that case - * - * Put a member of type SingleThreadValidator in your class and call - * AssertRunningOnCreationThread in it's every public method - * - * class MySingleThreadedThing { - * ..... - * public: - * void DoSomeWork(); - * ..... - * private: - * SingleThreadValidator thread_validator_; - * ..... - * }; - * - * void MySingleThreadedThing::DoSomeWork() { - * thread_validator_.AssertRunningOnCreationThread(); - * ..... - * } - */ -class SingleThreadSimpleValidator { - public: - SingleThreadSimpleValidator(); - ~SingleThreadSimpleValidator(); - - // This method should be called in every public method - // of classes being checked for absence of concurrent access - void AssertRunningOnCreationThread() const; - private: - const Thread::Id creation_thread_id_; -}; - - -/* - * This is bit more sophisticated debug helper which allows - * objects being checked to be transferred between threads. - * Make sure to pass ownership calling PassToThread before - * object is accessed from that thread! - * - * It's better to virtually inherit it to make PassToThread publicly - * available to code that uses objects of your classes and make sure - * that if your object consists of different thread-validated - * parts you'll need not to call PassToThread proxy method for - * every part of your composite object - */ -class SingleThreadValidator { - public: - SingleThreadValidator(); - ~SingleThreadValidator(); - - // Must be called prior to transferring object being validated to - // another thread or when passing it back - void PassToThread(Thread::Id thread_id) const; - // This method should be called in every public method - // of classes being checked for absence of unintended concurrent - // access - void AssertRunningOnValidThread() const; - private: - mutable Thread::Id owning_thread_id_; -}; - -} // namespace threads - -#endif // SRC_COMPONENTS_UTILS_INCLUDE_THREADS_THREAD_VALIDATOR_H_ diff --git a/SDL_Core/src/components/utils/include/utils/timer_thread.h b/SDL_Core/src/components/utils/include/utils/timer_thread.h deleted file mode 100644 index 0da5616e7..000000000 --- a/SDL_Core/src/components/utils/include/utils/timer_thread.h +++ /dev/null @@ -1,336 +0,0 @@ -/** - * Copyright (c) 2013, Ford Motor Company - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following - * disclaimer in the documentation and/or other materials provided with the - * distribution. - * - * Neither the name of the Ford Motor Company nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef SRC_COMPONENTS_UTILS_INCLUDE_UTILS_TIMER_THREAD -#define SRC_COMPONENTS_UTILS_INCLUDE_UTILS_TIMER_THREAD - -#include <time.h> - -#include "utils/conditional_variable.h" -#include "utils/lock.h" -#include "utils/logger.h" -#include "utils/macro.h" -#include "utils/timer_thread.h" -#include "utils/threads/thread.h" -#include "utils/threads/thread_delegate.h" - -namespace timer { - -class TimerDelegate; - -/* - * The TimerThread class provide possibility to run timer in a separate thread. - * The client should specify callee and const callback function. - * Example usage: - * - * Create timer in mobile request - * - * timer::TimerThread<MobileRequest> timer(this, &MobileRequest::onTimeOut); - * timer.start(10); - * - * some actions - * - * To stop timer call timer.stop(); - * - */ -template <class T> -class TimerThread { - public: - - friend class TimerDelegate; - friend class TimerLooperDelegate; - - /* - * @brief Default constructor - * - * @param callee A class that use timer - * @param f CallBackFunction which will be called on timeout - * Atantion! "f()" will be called not in main thread but in timer thread - * Never use stop() and start() methods inside f - * @param is_looper Define this timer as looer, - * if true, TimerThread will call "f()" function every time out - * until stop() - */ - TimerThread(T* callee , void (T::*f)(),bool is_looper = false); - - /* - * @brief Destructor - */ - virtual ~TimerThread(); - - /* - * @brief Starts timer for specified timeout. - * Previously started timeout will be set to new value. - * On timeout TimerThread::onTimeOut interface will be called. - * Must not be used in callback function! - * - * @param timeout_seconds Timeout in seconds to be set - */ - virtual void start(uint32_t timeout_seconds); - - /* - * @brief Stops timer execution - * Must not be used in callback function! - */ - virtual void stop(); - - protected: - - /* - * @brief Interface called by delegator on timeout - */ - void onTimeOut() const; - - private: - - /** - * @brief Delegate release timer, will call callback function one time - */ - class TimerDelegate : public threads::ThreadDelegate { - public: - - /* - * @brief Default constructor - * - * @param timer_thread The Timer_thread pointer - * @param timeout Timeout to be set - */ - TimerDelegate(const TimerThread* timer_thread); - - /* - * @brief Destructor - */ - virtual ~TimerDelegate(); - - /* - * @brief Thread main function. - */ - virtual void threadMain(); - - /* - * @brief Called by thread::thread to free all allocated resources. - */ - virtual bool exitThreadMain(); - - /* - * @brief Restart timer - * - * @param timeout_seconds New timeout to be set - */ - virtual void setTimeOut(uint32_t timeout_seconds); - - protected: - const TimerThread* timer_thread_; - uint32_t timeout_seconds_; - sync_primitives::Lock state_lock_; - sync_primitives::ConditionalVariable termination_condition_; - volatile bool stop_flag_; - - private: - DISALLOW_COPY_AND_ASSIGN(TimerDelegate); - }; - - - /** - * @brief Delegate release looper timer. - * Will call delegate every timeot function while stop() - * won't be called - */ - class TimerLooperDelegate : public TimerDelegate { - public: - - /* - * @brief Default constructor - * - * @param timer_thread The Timer_thread pointer - * @param timeout Timeout to be set - */ - TimerLooperDelegate(const TimerThread* timer_thread); - - /* - * @brief Thread main function. - */ - virtual void threadMain(); - private: - DISALLOW_COPY_AND_ASSIGN(TimerLooperDelegate); - }; - void (T::*callback_)(); - T* callee_; - TimerDelegate* delegate_; - threads::Thread* thread_; - mutable bool is_running_; - - DISALLOW_COPY_AND_ASSIGN(TimerThread); -}; - -template <class T> -TimerThread<T>::TimerThread(T* callee, void (T::*f)(), bool is_looper) - : callback_(f), - callee_(callee), - delegate_(NULL), - thread_(NULL), - is_running_(false) { - if (is_looper) { - delegate_ = new TimerLooperDelegate(this); - } else { - delegate_ = new TimerDelegate(this); - } - - if (delegate_) { - thread_ = new threads::Thread("TimerThread", delegate_); - } -} - -template <class T> -TimerThread<T>::~TimerThread() { - if (is_running_) { - stop(); - } - callback_ = NULL; - callee_ = NULL; - delete thread_; - // delegate_ will be deleted by thread_ - thread_ = NULL; - delegate_ = NULL; -} - -template <class T> -void TimerThread<T>::start(uint32_t timeout_seconds) { - if (is_running_) { - stop(); - } - - delegate_->setTimeOut(timeout_seconds); - if (delegate_ && thread_) { - is_running_ = true; - const size_t kStackSize = 16384; - thread_->startWithOptions(threads::ThreadOptions(kStackSize)); - } -} - -template <class T> -void TimerThread<T>::stop() { - if (delegate_ && thread_) { - thread_->stop(); - is_running_ = false; - } -} - -template <class T> -void TimerThread<T>::onTimeOut() const { - if (callee_ && callback_) { - (callee_->*callback_)(); - is_running_ = false; - } -} - -template <class T> -TimerThread<T>::TimerDelegate::TimerDelegate(const TimerThread* timer_thread) - : timer_thread_(timer_thread), - timeout_seconds_(0), - stop_flag_(false) { - DCHECK(timer_thread_); -} - -template <class T> -TimerThread<T>::TimerLooperDelegate::TimerLooperDelegate(const TimerThread* timer_thread) - : TimerDelegate(timer_thread) { -} - -template <class T> -TimerThread<T>::TimerDelegate::~TimerDelegate() { - timer_thread_ = NULL; -} - -template <class T> -void TimerThread<T>::TimerDelegate::threadMain() { - using sync_primitives::ConditionalVariable; - sync_primitives::AutoLock auto_lock(state_lock_); - const time_t end_time = time(NULL) + timeout_seconds_; - int32_t wait_seconds_left = int32_t(difftime(end_time, time(NULL))); - while (!stop_flag_) { - // Sleep - ConditionalVariable::WaitStatus wait_status = - termination_condition_.WaitFor(auto_lock, wait_seconds_left * 1000); - wait_seconds_left = int32_t(difftime(end_time, time(NULL))); - // Quit sleeping or continue sleeping in case of spurious wake up - if (ConditionalVariable::kTimeout == wait_status || - wait_seconds_left <= 0) { - break; - } - } - if (!stop_flag_) { - timer_thread_->onTimeOut(); - } - stop_flag_ = false; -} - -template <class T> -void TimerThread<T>::TimerLooperDelegate::threadMain() { - using sync_primitives::ConditionalVariable; - sync_primitives::AutoLock auto_lock(TimerDelegate::state_lock_); - time_t end_time = time(NULL) + TimerDelegate::timeout_seconds_; - int32_t wait_seconds_left = int32_t(difftime(end_time, time(NULL))); - while (!TimerDelegate::stop_flag_) { - // Sleep - ConditionalVariable::WaitStatus wait_status = - TimerDelegate::termination_condition_.WaitFor(auto_lock, wait_seconds_left * 1000); - wait_seconds_left = int32_t(difftime(end_time, time(NULL))); - // Quit sleeping or continue sleeping in case of spurious wake up - if (ConditionalVariable::kTimeout == wait_status || - wait_seconds_left <= 0) { - TimerDelegate::timer_thread_->onTimeOut(); - end_time = time(NULL) + TimerDelegate::timeout_seconds_; - } - } - TimerDelegate::stop_flag_ = false; -} - - -template <class T> -bool TimerThread<T>::TimerDelegate::exitThreadMain() { - { - sync_primitives::AutoLock auto_lock(state_lock_); - stop_flag_ = true; - } - termination_condition_.NotifyOne(); - return true; -} - -template <class T> -void TimerThread<T>::TimerDelegate::setTimeOut(uint32_t timeout_seconds) { - timeout_seconds_ = timeout_seconds; -} - -} // namespace timer - -#endif // SRC_COMPONENTS_UTILS_INCLUDE_UTILS_TIMER_THREAD diff --git a/SDL_Core/src/components/utils/src/back_trace.cc b/SDL_Core/src/components/utils/src/back_trace.cc deleted file mode 100644 index 23b1b4d1e..000000000 --- a/SDL_Core/src/components/utils/src/back_trace.cc +++ /dev/null @@ -1,107 +0,0 @@ -/** - * Copyright (c) 2013, Ford Motor Company - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following - * disclaimer in the documentation and/or other materials provided with the - * distribution. - * - * Neither the name of the Ford Motor Company nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - */ - -#include "utils/back_trace.h" - -#include <algorithm> -#include <vector> -#include <sstream> - -#include <cxxabi.h> -#include <execinfo.h> - -#include "utils/macro.h" - -using std::ostream; -using std::string; -using std::vector; -using threads::Thread; - -namespace utils { - -namespace { -string demangle(const char* symbol) { - char temp[2048]; - if (1 == sscanf(symbol, "%*[^(]%*[^_]%2047[^)+]", temp)) { - size_t size; - int32_t status; - char* demangled = abi::__cxa_demangle(temp, NULL, &size, &status); - if (demangled != NULL) { - string result(demangled); - free(demangled); - return result; - } - } - return symbol; -} -} - -Backtrace::Backtrace(int32_t count, int32_t skip_top) - : thread_id_(threads::Thread::CurrentId()) { - int32_t skip = skip_top + 1; // Skip this constructor - vector<void*> full_trace (count + skip); - int32_t captured = backtrace(&full_trace.front(), count + skip); - int32_t first_call = std::min(captured, skip); - int32_t last_call = std::min(first_call + count, captured); - backtrace_.assign(full_trace.begin() + first_call, full_trace.begin() + last_call); -} - -Backtrace::~Backtrace() { -} - -vector<string> Backtrace::CallStack() const { - vector<string> callstack; - callstack.reserve(backtrace_.size()); - char** mangled = backtrace_symbols(&backtrace_.front(), backtrace_.size()); - for (size_t i = 0; i != backtrace_.size(); ++i) { - callstack.push_back(demangle(mangled[i])); - } - free(mangled); - return callstack; -} - -Thread::Id Backtrace::ThreadId() const { - return thread_id_; -} - -ostream& operator<< (ostream& os, const Backtrace& bt) { - const vector<string> symbols = bt.CallStack(); - os<<"Stack trace ("<<bt.ThreadId()<<")\n"; - if (symbols.empty()) { - os<<"Not available"<<std::endl; - } else for (size_t i = 0; i < symbols.size(); ++i) { - os<<symbols[i]<<std::endl; - } - return os; -} - -} // namespace utils diff --git a/SDL_Core/src/components/utils/src/bitstream.cc b/SDL_Core/src/components/utils/src/bitstream.cc deleted file mode 100644 index faa94fb61..000000000 --- a/SDL_Core/src/components/utils/src/bitstream.cc +++ /dev/null @@ -1,134 +0,0 @@ -/** - * Copyright (c) 2013, Ford Motor Company - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following - * disclaimer in the documentation and/or other materials provided with the - * distribution. - * - * Neither the name of the Ford Motor Company nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - */ -#include "utils/bitstream.h" - -namespace utils { - -BitStream::BitStream(uint8_t* bytes, size_t bytes_count) - : bytes_(bytes), - bytes_count_(bytes_count), - byte_offset_(0), - bit_offset_(0), - bad_(false) { -} - -BitStream::~BitStream() { -} - -size_t BitStream::FullBytesLeft() { - size_t left = bytes_count_ - byte_offset_; - if (bit_offset_ != 0) - left -= 1; - return left; -} - -size_t BitStream::BitsLeft() { - return (bytes_count_ - byte_offset_) * CHAR_BIT - bit_offset_; -} - -void BitStream::ExtractBytes(void* buffer, size_t length) { - DCHECK(length == 0 || buffer != NULL); - if (IsGood()) { - if (bit_offset_ != 0 || // bytes can be extracted only when - FullBytesLeft() < length) { // stream is byte-aligned - MarkBad(); - return; - } - } - memcpy(buffer, &bytes_[byte_offset_], length); - byte_offset_ += length; -} - -void Extract(BitStream* bs, uint8_t* val) { - DCHECK(bs && val); - if (*bs) { - bs->Extract(*val); - } -} - -void Extract(BitStream* bs, uint8_t* val, size_t bits) { - DCHECK(bs && val); - if (*bs) { - bs->ExtractBits(*val, bits); - } -} - -void Extract(BitStream* bs, uint32_t* val) { - DCHECK(bs && val); - if (*bs) { - bs->Extract(*val); - } -} - -void Extract(BitStream* bs, uint32_t* val, size_t bits) { - DCHECK(bs && val); - if (*bs) { - bs->ExtractBits(*val, bits); - } -} - -void Extract(BitStream* bs, std::string* str, size_t length) { - DCHECK(bs && str); - if (*bs) { - // Prevent memory over-allocation - if (bs->FullBytesLeft() < length) { - bs->MarkBad(); - return; - } - str->resize(length+1); - void* stringdata = &(*str)[0]; - bs->ExtractBytes(stringdata, length); - str->resize(length); - } -} - -void Extract(BitStream* bs, std::vector<uint8_t>* data, size_t length) { - DCHECK(bs && data); - if (*bs) { - // Prevent memory over-allocation - if (bs->FullBytesLeft() < length) { - bs->MarkBad(); - return; - } - data->resize(length); - - // Don't call vector::front() on an empty vector (it's undefined) - if (length != 0) - { - void* dataptr = &data->front(); - bs->ExtractBytes(dataptr, length); - } - } -} - -} // namespace utils - diff --git a/SDL_Core/src/components/utils/src/conditional_variable_posix.cc b/SDL_Core/src/components/utils/src/conditional_variable_posix.cc deleted file mode 100644 index c11b063d0..000000000 --- a/SDL_Core/src/components/utils/src/conditional_variable_posix.cc +++ /dev/null @@ -1,154 +0,0 @@ -/** - * Copyright (c) 2013, Ford Motor Company - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following - * disclaimer in the documentation and/or other materials provided with the - * distribution. - * - * Neither the name of the Ford Motor Company nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - */ -#include "utils/conditional_variable.h" - -#include <errno.h> -#include <time.h> - -#include "utils/lock.h" -#include "utils/logger.h" - -namespace { -log4cxx::LoggerPtr g_logger = - log4cxx::LoggerPtr(log4cxx::Logger::getLogger("Utils")); - -const long kNanosecondsPerSecond = 1000000000; -const long kMillisecondsPerSecond = 1000; -const long kNanosecondsPerMillisecond = 1000000; -} - -namespace sync_primitives { - -ConditionalVariable::ConditionalVariable() { - pthread_condattr_t attrs; - int32_t initialized = pthread_condattr_init(&attrs); - if (initialized != 0) - LOG4CXX_ERROR(g_logger, "Failed to initialize " - "conditional variable attributes"); -#ifdef __linux__ - pthread_condattr_setclock(&attrs, CLOCK_MONOTONIC); // Default (non linux) will use the CPU clock -#endif - initialized = pthread_cond_init(&cond_var_, &attrs); - if (initialized != 0) - LOG4CXX_ERROR(g_logger, "Failed to initialize " - "conditional variable"); - int32_t rv = pthread_condattr_destroy(&attrs); - if (rv != 0) - LOG4CXX_ERROR(g_logger, "Failed to destroy " - "conditional variable attributes"); -} - -ConditionalVariable::~ConditionalVariable() { - pthread_cond_destroy(&cond_var_); - -} - -void ConditionalVariable::NotifyOne() { - int32_t signaled = pthread_cond_signal(&cond_var_); - if (signaled != 0) - LOG4CXX_ERROR(g_logger, "Failed to signal conditional variable"); - -} - -void ConditionalVariable::Broadcast() { - int32_t signaled = pthread_cond_broadcast(&cond_var_); - if (signaled != 0) - LOG4CXX_ERROR(g_logger, "Failed to broadcast conditional variable"); - -} - -void ConditionalVariable::Wait(AutoLock& auto_lock) { - Lock& lock = auto_lock.GetLock(); - lock.AssertTakenAndMarkFree(); - int32_t wait_status = pthread_cond_wait(&cond_var_, - &lock.mutex_); - lock.AssertFreeAndMarkTaken(); - if (wait_status != 0) - LOG4CXX_ERROR(g_logger, "Failed to wait for conditional variable"); -} - -#ifdef OS_LINUX -static void current_time(struct timespec *ts) { - clock_gettime(CLOCK_MONOTONIC, ts); -} -#elif OS_MACOSX -#include <mach/clock.h> -#include <mach/mach.h> -static void current_time(struct timespec *ts) { - clock_serv_t cclock; - mach_timespec_t mts; - host_get_clock_service(mach_host_self(), CALENDAR_CLOCK, &cclock); - clock_get_time(cclock, &mts); - mach_port_deallocate(mach_task_self(), cclock); - ts->tv_sec = mts.tv_sec; - ts->tv_nsec = mts.tv_nsec; -} -#endif - -ConditionalVariable::WaitStatus ConditionalVariable::WaitFor( - AutoLock& auto_lock, int32_t milliseconds){ - struct timespec now; - current_time(&now); - timespec wait_interval; - wait_interval.tv_sec = now.tv_sec + - (milliseconds / kMillisecondsPerSecond); - wait_interval.tv_nsec = now.tv_nsec + - (milliseconds % kMillisecondsPerSecond) * kNanosecondsPerMillisecond; - wait_interval.tv_sec += wait_interval.tv_nsec / kNanosecondsPerSecond; - wait_interval.tv_nsec %= kNanosecondsPerSecond; - - Lock& lock = auto_lock.GetLock(); - lock.AssertTakenAndMarkFree(); - int32_t timedwait_status = pthread_cond_timedwait(&cond_var_, - &lock.mutex_, - &wait_interval); - lock.AssertFreeAndMarkTaken(); - WaitStatus wait_status = kNoTimeout; - switch(timedwait_status) { - case 0: { - wait_status = kNoTimeout; - } break; - case EINTR: { - wait_status = kNoTimeout; - } break; - case ETIMEDOUT: { - wait_status = kTimeout; - } break; - default: { - LOG4CXX_ERROR(g_logger, "Failed to timewait for conditional variable"); - } - } - - return wait_status; -} - -} // namespace sync_primitives diff --git a/SDL_Core/src/components/utils/src/date_time.cc b/SDL_Core/src/components/utils/src/date_time.cc deleted file mode 100644 index 644e938a9..000000000 --- a/SDL_Core/src/components/utils/src/date_time.cc +++ /dev/null @@ -1,74 +0,0 @@ -/** -* \file request_watchdog.h -* \brief DateTime class source file. -* -* Copyright (c) 2013, Ford Motor Company -* All rights reserved. -* -* Redistribution and use in source and binary forms, with or without -* modification, are permitted provided that the following conditions are met: -* -* Redistributions of source code must retain the above copyright notice, this -* list of conditions and the following disclaimer. -* -* Redistributions in binary form must reproduce the above copyright notice, -* this list of conditions and the following -* disclaimer in the documentation and/or other materials provided with the -* distribution. -* -* Neither the name of the Ford Motor Company nor the names of its contributors -* may be used to endorse or promote products derived from this software -* without specific prior written permission. -* -* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE -* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -* POSSIBILITY OF SUCH DAMAGE. -*/ - -#include <sys/time.h> -#include <stdint.h> -#include "utils/date_time.h" - -namespace date_time { - -int32_t const DateTime::MILLISECONDS_IN_SECOND; -int32_t const DateTime::MICROSECONDS_IN_MILLISECONDS; - -struct timeval DateTime::getCurrentTime() { - struct timeval currentTime; - struct timezone timeZone; - - gettimeofday(¤tTime, &timeZone); - - return currentTime; -} - -int32_t DateTime::calculateTimeSpan(struct timeval sinceTime) { - struct timeval currentTime, timeDifference; - struct timezone timeZone; - - gettimeofday(¤tTime, &timeZone); - - timeDifference.tv_sec = currentTime.tv_sec - sinceTime.tv_sec; - - timeDifference.tv_usec = currentTime.tv_usec - sinceTime.tv_usec; - - if ( timeDifference.tv_usec < 0 ) { - timeDifference.tv_sec--; - timeDifference.tv_usec += MILLISECONDS_IN_SECOND - * MICROSECONDS_IN_MILLISECONDS; - } - - return timeDifference.tv_sec * MILLISECONDS_IN_SECOND - + timeDifference.tv_usec / MICROSECONDS_IN_MILLISECONDS; -} - -} // namespace date_time diff --git a/SDL_Core/src/components/utils/src/file_system.cc b/SDL_Core/src/components/utils/src/file_system.cc deleted file mode 100644 index 2e5b909af..000000000 --- a/SDL_Core/src/components/utils/src/file_system.cc +++ /dev/null @@ -1,404 +0,0 @@ -/** - * Copyright (c) 2013, Ford Motor Company - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following - * disclaimer in the documentation and/or other materials provided with the - * distribution. - * - * Neither the name of the Ford Motor Company nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - */ - -#include "utils/file_system.h" - -#include <sys/statvfs.h> -#include <sys/stat.h> -#include <sys/types.h> - -#include <dirent.h> -#include <unistd.h> -// TODO(VS): lint error: Streams are highly discouraged. -#include <fstream> -#include <cstddef> -#include <algorithm> -#include "config_profile/profile.h" - -uint64_t file_system::GetAvailableDiskSpace() { - char currentAppPath[FILENAME_MAX]; - memset(reinterpret_cast<void*>(currentAppPath), 0, FILENAME_MAX); - getcwd(currentAppPath, FILENAME_MAX - 1); - - struct statvfs fsInfo; - memset(reinterpret_cast<void*>(&fsInfo), 0, sizeof(fsInfo)); - if( statvfs(currentAppPath, &fsInfo) == 0) { - return fsInfo.f_bsize * fsInfo.f_bfree; - } else { - return 0; - } -} - -uint32_t file_system::FileSize(const std::string &path) { - if (file_system::FileExists(path)) { - struct stat file_info; - memset(reinterpret_cast<void*>(&file_info), 0, sizeof(file_info)); - stat(path.c_str(), &file_info); - return file_info.st_size; - } - return 0; -} - -uint32_t file_system::DirectorySize(const std::string& path) { - uint32_t size = 0; - int32_t return_code = 0; - DIR* directory = NULL; - -#ifndef __QNXNTO__ - struct dirent dir_element_; - struct dirent* dir_element = &dir_element_; -#else - char* direntbuffer = - new char[offsetof(struct dirent, d_name) + - pathconf(path.c_str(), _PC_NAME_MAX) + 1]; - struct dirent* dir_element = new(direntbuffer) dirent; -#endif - struct dirent* result = NULL; - struct stat file_info; - directory = opendir(path.c_str()); - if (NULL != directory) { - return_code = readdir_r(directory, dir_element, &result); - for (; NULL != result && 0 == return_code; - return_code = readdir_r(directory, dir_element, &result)) { - if (0 == strcmp(result->d_name, "..") - || 0 == strcmp(result->d_name, ".")) { - continue; - } - std::string full_element_path = path + "/" + result->d_name; - if (file_system::IsDirectory(full_element_path)) { - size += DirectorySize(full_element_path); - } else { - memset(reinterpret_cast<void*>(&file_info), 0, sizeof(file_info)); - stat(full_element_path.c_str(), &file_info); - size += file_info.st_size; - } - } - } - closedir(directory); -#ifdef __QNXNTO__ - delete[] direntbuffer; -#endif - return size; -} - -uint32_t file_system::GetAvailableSpaceForApp(const std::string& app_name) { - const uint32_t app_quota = profile::Profile::instance()->app_dir_quota(); - if (DirectoryExists(app_name)) { - std::string full_path = FullPath(app_name); - uint32_t size_of_directory = DirectorySize(full_path); - if (app_quota < size_of_directory) { - return 0; - } - uint32_t current_app_quota = app_quota - size_of_directory; - uint32_t available_disk_space = GetAvailableDiskSpace(); - if (current_app_quota > available_disk_space) { - return available_disk_space; - } else { - return current_app_quota; - } - } else { - return app_quota; - } -} - -std::string file_system::CreateDirectory(const std::string& name) { - if (!DirectoryExists(name)) { - mkdir(name.c_str(), S_IRWXU); - } - - return name; -} - -bool file_system::IsDirectory(const std::string& name) { - struct stat status; - memset(&status, 0, sizeof(status)); - - if (-1 == stat(name.c_str(), &status)) { - return false; - } - - return S_ISDIR(status.st_mode); -} - -bool file_system::DirectoryExists(const std::string& name) { - struct stat status; - memset(&status, 0, sizeof(status)); - - if (-1 == stat(name.c_str(), &status) || !S_ISDIR(status.st_mode)) { - return false; - } - - return true; -} - -bool file_system::FileExists(const std::string& name) { - struct stat status; - memset(&status, 0, sizeof(status)); - - if (-1 == stat(name.c_str(), &status)) { - return false; - } - return true; -} - -bool file_system::Write( - const std::string& file_name, const std::vector<uint8_t>& data, - std::ios_base::openmode mode) { - std::ofstream file(file_name.c_str(), std::ios_base::binary | mode); - if (file.is_open()) { - for (int32_t i = 0; i < data.size(); ++i) { - file << data[i]; - } - file.close(); - return true; - } - return false; -} - - - -std::ofstream* file_system::Open(const std::string& file_name, - std::ios_base::openmode mode) { - - - std::ofstream* file = new std::ofstream(); - file->open( file_name.c_str(),std::ios_base::binary | mode); - if (file->is_open()) { - - return file; - } - - return NULL; -} - -bool file_system::Write(std::ofstream* const file_stream, - const uint8_t* data, - uint32_t data_size) { - bool result = false; - if (file_stream) { - for (size_t i = 0; i < data_size; ++i) { - (*file_stream) << data[i]; - } - result = true; - } - return result; -} - -void file_system::Close(std::ofstream* file_stream) { - if (file_stream) { - file_stream->close(); - } -} - -std::string file_system::FullPath(const std::string& file) { - // FILENAME_MAX defined stdio_lim.h was replaced with less value - // since it seems, that is caused overflow in some cases - - size_t filename_max_lenght = 1024; - char currentAppPath[filename_max_lenght]; - memset(currentAppPath, 0, filename_max_lenght); - getcwd(currentAppPath, filename_max_lenght); - - char path[filename_max_lenght]; - memset(path, 0, filename_max_lenght); - snprintf(path, filename_max_lenght - 1, "%s/%s", currentAppPath, file.c_str()); - return std::string(path); -} - -bool file_system::DeleteFile(const std::string& name) { - if (FileExists(name) && IsAccessible(name, W_OK)) { - return !remove(name.c_str()); - } - return false; -} - -void remove_directory_content(const std::string& directory_name) { - int32_t return_code = 0; - DIR* directory = NULL; -#ifndef __QNXNTO__ - struct dirent dir_element_; - struct dirent* dir_element = &dir_element_; -#else - char* direntbuffer = - new char[offsetof(struct dirent, d_name) + - pathconf(directory_name.c_str(), _PC_NAME_MAX) + 1]; - struct dirent* dir_element = new(direntbuffer) dirent; -#endif - struct dirent* result = NULL; - - directory = opendir(directory_name.c_str()); - - if (NULL != directory) { - return_code = readdir_r(directory, dir_element, &result); - - for (; NULL != result && 0 == return_code; - return_code = readdir_r(directory, dir_element, &result)) { - if (0 == strcmp(result->d_name, "..") - || 0 == strcmp(result->d_name, ".")) { - continue; - } - - std::string full_element_path = directory_name + "/" + result->d_name; - - if (file_system::IsDirectory(full_element_path)) { - remove_directory_content(full_element_path); - rmdir(full_element_path.c_str()); - } else { - remove(full_element_path.c_str()); - } - } - } - - closedir(directory); -#ifdef __QNXNTO__ - delete[] direntbuffer; -#endif -} - -bool file_system::RemoveDirectory(const std::string& directory_name, - bool is_recursively) { - if (DirectoryExists(directory_name) - && IsAccessible(directory_name, W_OK)) { - if (is_recursively) { - remove_directory_content(directory_name); - } - - return !rmdir(directory_name.c_str()); - } - return false; -} - -bool file_system::IsAccessible(const std::string& name, int32_t how) { - return !access(name.c_str(), how); -} - -std::vector<std::string> file_system::ListFiles( - const std::string& directory_name) { - std::vector<std::string> listFiles; - if (!DirectoryExists(directory_name)) { - return listFiles; - } - - int32_t return_code = 0; - DIR* directory = NULL; -#ifndef __QNXNTO__ - struct dirent dir_element_; - struct dirent* dir_element = &dir_element_; -#else - char* direntbuffer = - new char[offsetof(struct dirent, d_name) + - pathconf(directory_name.c_str(), _PC_NAME_MAX) + 1]; - struct dirent* dir_element = new(direntbuffer) dirent; -#endif - struct dirent* result = NULL; - - directory = opendir(directory_name.c_str()); - if (NULL != directory) { - return_code = readdir_r(directory, dir_element, &result); - - for (; NULL != result && 0 == return_code; - return_code = readdir_r(directory, dir_element, &result)) { - if (0 == strcmp(result->d_name, "..") - || 0 == strcmp(result->d_name, ".")) { - continue; - } - - listFiles.push_back(std::string(result->d_name)); - } - - closedir(directory); -#ifdef __QNXNTO__ - delete[] direntbuffer; -#endif - } - - return listFiles; -} - -bool file_system::ReadBinaryFile(const std::string& name, - std::vector<uint8_t>& result) { - if (!FileExists(name) || !IsAccessible(name, R_OK)) { - return false; - } - - std::ifstream file(name.c_str(), std::ios_base::binary); - std::ostringstream ss; - ss << file.rdbuf(); - const std::string& s = ss.str(); - - result.resize(s.length()); - std::copy(s.begin(), s.end(), result.begin()); - return true; -} - -bool file_system::ReadFile(const std::string& name, std::string& result) { - if (!FileExists(name) || !IsAccessible(name, R_OK)) { - return false; - } - - std::ifstream file(name.c_str()); - std::ostringstream ss; - ss << file.rdbuf(); - result = ss.str(); - return true; -} - -const std::string file_system::ConvertPathForURL(const std::string& path) { - std::string::const_iterator it_path = path.begin(); - std::string::const_iterator it_path_end = path.end(); - - const std::string reserved_symbols = "!#$&'()*+,:;=?@[] "; - std::string::const_iterator it_sym = reserved_symbols.begin(); - std::string::const_iterator it_sym_end = reserved_symbols.end(); - - std::string converted_path; - while (it_path != it_path_end) { - - it_sym = reserved_symbols.begin(); - for (; it_sym != it_sym_end; ++it_sym) { - - if (*it_path == *it_sym) { - size_t size = 100; - char percent_value[size]; - snprintf(percent_value, size, "%%%x", *it_path); - converted_path += percent_value; - ++it_path; - continue; - } - } - - converted_path += *it_path; - ++it_path; - } - - return converted_path; -} diff --git a/SDL_Core/src/components/utils/src/lock_posix.cc b/SDL_Core/src/components/utils/src/lock_posix.cc deleted file mode 100644 index be292f3e6..000000000 --- a/SDL_Core/src/components/utils/src/lock_posix.cc +++ /dev/null @@ -1,126 +0,0 @@ -/** - * Copyright (c) 2013, Ford Motor Company - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following - * disclaimer in the documentation and/or other materials provided with the - * distribution. - * - * Neither the name of the Ford Motor Company nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - */ - -#include "utils/lock.h" - -#include <errno.h> - -#include "utils/logger.h" - -namespace { -log4cxx::LoggerPtr g_logger = - log4cxx::LoggerPtr(log4cxx::Logger::getLogger("Utils")); -} - -namespace sync_primitives { - -Lock::Lock() -#ifndef NDEBUG - : lock_taken_(false) -#endif // NDEBUG -{ - int32_t status = pthread_mutex_init(&mutex_, NULL); - if (status != 0) { - LOG4CXX_ERROR(g_logger, "Failed to initialize mutex"); - } -} - -Lock::~Lock() { -#ifndef NDEBUG - if (lock_taken_) { - LOG4CXX_ERROR(g_logger, "Destroying non-released mutex"); - } -#endif - int32_t status = pthread_mutex_destroy(&mutex_); - if (status != 0) { - LOG4CXX_ERROR(g_logger, "Failed to destroy mutex"); - } -} - -void Lock::Ackquire() { - int32_t status = pthread_mutex_lock(&mutex_); - if (status != 0) { - LOG4CXX_ERROR(g_logger, "Failed to acquire mutex"); - } - AssertFreeAndMarkTaken(); -} - -void Lock::Release() { - AssertTakenAndMarkFree(); - int32_t status = pthread_mutex_unlock(&mutex_); - if (status != 0) { - LOG4CXX_ERROR(g_logger, "Failed to unlock mutex"); - } -} - -bool Lock::Try() { - bool ackquired = false; -#ifndef NDEBUG - if (lock_taken_) { - LOG4CXX_ERROR(g_logger, "Trying to lock already taken mutex"); - } -#endif - switch(pthread_mutex_trylock(&mutex_)) { - case 0: { - ackquired = true; -#ifndef NDEBUG - lock_taken_ = true; -#endif - } break; - case EBUSY: { - ackquired = false; - } break; - default: { - ackquired = false; - LOG4CXX_ERROR(g_logger, "Failed to try lock the mutex"); - } - } - return ackquired; -} - -#ifndef NDEBUG -void Lock::AssertFreeAndMarkTaken() { - if (lock_taken_) { - LOG4CXX_ERROR(g_logger, "Locking already taken mutex"); - } - lock_taken_ = true; -} -void Lock::AssertTakenAndMarkFree() { - if (!lock_taken_) { - LOG4CXX_ERROR(g_logger, "Unlocking a mutex that is not taken"); - } - lock_taken_ = false; -} -#endif - - -} // namespace sync_primitives diff --git a/SDL_Core/src/components/utils/src/signals_linux.cc b/SDL_Core/src/components/utils/src/signals_linux.cc deleted file mode 100644 index 1821f6fbe..000000000 --- a/SDL_Core/src/components/utils/src/signals_linux.cc +++ /dev/null @@ -1,57 +0,0 @@ -/** -* \file signals.cc -* \brief Signal (i.e. SIGINT) handling. -* Copyright (c) 2013, Ford Motor Company -* All rights reserved. -* -* Redistribution and use in source and binary forms, with or without -* modification, are permitted provided that the following conditions are met: -* -* Redistributions of source code must retain the above copyright notice, this -* list of conditions and the following disclaimer. -* -* Redistributions in binary form must reproduce the above copyright notice, -* this list of conditions and the following -* disclaimer in the documentation and/or other materials provided with the -* distribution. -* -* Neither the name of the Ford Motor Company nor the names of its contributors -* may be used to endorse or promote products derived from this software -* without specific prior written permission. -* -* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE -* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -* POSSIBILITY OF SUCH DAMAGE. -*/ -#include <csignal> -#include <stdint.h> - -namespace utils { - -bool SubscribeToTerminateSignal(void (*func)(int32_t p)) { - void (*prev_func)(int32_t p); - - prev_func = signal(SIGINT, func); - return (SIG_ERR != prev_func); -} - -bool ResetSubscribeToTerminateSignal() { - void (*prev_func)(int32_t p); - prev_func = signal(SIGINT, SIG_DFL); - return (SIG_ERR != prev_func); -} - -void ForwardSignal() { - int32_t signal_id = SIGINT; - raise(signal_id); -} - -} // namespace utils diff --git a/SDL_Core/src/components/utils/src/threads/posix_thread.cc b/SDL_Core/src/components/utils/src/threads/posix_thread.cc deleted file mode 100644 index 719b3d4a5..000000000 --- a/SDL_Core/src/components/utils/src/threads/posix_thread.cc +++ /dev/null @@ -1,189 +0,0 @@ -/** - * Copyright (c) 2013, Ford Motor Company - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following - * disclaimer in the documentation and/or other materials provided with the - * distribution. - * - * Neither the name of the Ford Motor Company nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - */ - -#include <limits.h> -#include <stddef.h> - -#include "utils/threads/thread.h" -#include "utils/threads/thread_manager.h" - -using namespace std; -using namespace threads::impl; - -namespace { -static void* threadFunc(void* closure) { - threads::ThreadDelegate* delegate = - static_cast<threads::ThreadDelegate*>(closure); - delegate->threadMain(); - return NULL; -} -} - -namespace threads { -size_t Thread::kMinStackSize = PTHREAD_STACK_MIN; /* Ubuntu : 16384 ; QNX : 256; */ -log4cxx::LoggerPtr Thread::logger_ = - log4cxx::LoggerPtr(log4cxx::Logger::getLogger("threads::Thread")); - -bool Thread::Id::operator==(const Thread::Id other) const { - return pthread_equal(id_, other.id_) != 0; -} - -// static -Thread::Id Thread::CurrentId() { - return Id(pthread_self()); -} - -//static -std::string Thread::NameFromId(Id thread_id) { - return ThreadManager::instance()->GetName(thread_id.id_); -} - -//static -void Thread::SetNameForId(Id thread_id, const std::string& name) { - ThreadManager::instance()->RegisterName(thread_id.id_, name); -} - - -Thread::Thread(const char* name, ThreadDelegate* delegate) - : name_("undefined"), - delegate_(delegate), - thread_handle_(0), - thread_options_(), - isThreadRunning_(false) { - if (name) { - name_ = name; - } -} - -Thread::~Thread() { - ThreadManager::instance()->Unregister(thread_handle_); - if (delegate_) { - delete delegate_; - } -} - -bool Thread::start() { - return startWithOptions(thread_options_); -} - -bool Thread::startWithOptions(const ThreadOptions& options) { - if (!delegate_) { - NOTREACHED(); - return false; - } - - thread_options_ = options; - - bool success = false; - pthread_attr_t attributes; - int pthread_result = pthread_attr_init(&attributes); - if (pthread_result != 0) { - LOG4CXX_INFO(logger_,"Couldn't init pthread attributes." - " Error code = " << pthread_result); - } - if (!thread_options_.is_joinable()) { - pthread_result = pthread_attr_setdetachstate(&attributes, PTHREAD_CREATE_DETACHED); - if (pthread_result != 0) { - LOG4CXX_INFO(logger_,"Couldn't set detach state attribute. Error code = " << pthread_result); - } - } - - // 0 - default value - if (thread_options_.stack_size() > 0 - && thread_options_.stack_size() >= Thread::kMinStackSize) { - pthread_result = pthread_attr_setstacksize(&attributes, thread_options_.stack_size()); - if (pthread_result != 0) { - LOG4CXX_INFO(logger_,"Couldn't set stacksize = " << thread_options_.stack_size() << - "Error code = " << pthread_result); - } - } - success = !pthread_create(&thread_handle_, &attributes, threadFunc, - delegate_); - if (success) { -#ifdef __linux__ - pthread_result = pthread_setname_np(thread_handle_, name_.c_str()); -#elif OS_MACOSX - pthread_result = pthread_setname_np(name_.c_str()); -#endif -# ifdef __QNXNTO__ - if (pthread_result != EOK) { - LOG4CXX_INFO(logger_,"Couldn't set pthread name" - " Error code = " << pthread_result); - } -# endif - LOG4CXX_INFO(logger_,"Created thread: " << name_); - ThreadManager::instance()->RegisterName(thread_handle_, name_); - } - - isThreadRunning_ = success; - - pthread_result = pthread_attr_destroy(&attributes); - if (pthread_result != 0) { - LOG4CXX_INFO(logger_,"Couldn't destroy pthread attributes." - " Error code = " << pthread_result); - } - return success; -} - -void Thread::stop() { - if (!is_running()) { - return; - } - - if (NULL != delegate_) { - if (!delegate_->exitThreadMain()) { - if (thread_handle_ != pthread_self()) { - pthread_cancel(thread_handle_); - } - } - } - - // Wait for the thread to exit. It should already have terminated but make - // sure this assumption is valid. - - join(); -} - -void Thread::join() { - int pthread_result = pthread_join(thread_handle_, NULL); - if (pthread_result != 0) { - LOG4CXX_INFO(logger_,"Couldn't join thread " - " Error code = " << pthread_result); - } - isThreadRunning_ = false; -} - -std::ostream& operator<<(std::ostream& os, Thread::Id thread_id) { - return os<<Thread::NameFromId(thread_id); -} - -} // namespace threads diff --git a/SDL_Core/src/components/utils/src/threads/thread_manager.cc b/SDL_Core/src/components/utils/src/threads/thread_manager.cc deleted file mode 100644 index e4b96aa51..000000000 --- a/SDL_Core/src/components/utils/src/threads/thread_manager.cc +++ /dev/null @@ -1,120 +0,0 @@ -/** - * Copyright (c) 2013, Ford Motor Company - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following - * disclaimer in the documentation and/or other materials provided with the - * distribution. - * - * Neither the name of the Ford Motor Company nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - */ - -#include "utils/threads/thread_manager.h" - -#include <sstream> - -#if defined(OS_LINUX) -#include <sys/syscall.h> -#include <unistd.h> -#endif - -namespace threads { -namespace impl { -using namespace std; -using namespace sync_primitives; - -namespace { - -const char* kUnknownName = "UnnamedThread"; - -log4cxx::LoggerPtr g_logger = - log4cxx::LoggerPtr(log4cxx::Logger::getLogger("Utils")); - -} // namespace - -UnnamedThreadRegistry::UnnamedThreadRegistry() { - -} - -UnnamedThreadRegistry::~UnnamedThreadRegistry() { - -} - -std::string UnnamedThreadRegistry::GetUniqueName(PlatformThreadHandle id) { - AutoLock auto_lock(state_lock_); - IdNameMap::iterator found = id_number_.find(id); - if (found != id_number_.end()) { - return found->second; - } else { - ++last_thread_number_; - std::stringstream namestream; - namestream<<kUnknownName<<last_thread_number_; - return id_number_[id] = namestream.str(); - } -} - -ThreadManager::ThreadManager() { - names_.insert(kUnknownName); -} - -ThreadManager::~ThreadManager() { -} - -void ThreadManager::RegisterName(PlatformThreadHandle id, const string& name) { - AutoLock auto_lock(state_lock_); - if (names_.count(name) == 0) { - names_.insert(name); - pair<IdNamesMap::iterator, bool> inserted = - id_names_.insert(make_pair(id, name)); - if (!inserted.second) { - LOG4CXX_ERROR(g_logger, "Trying to register thread name " << name - <<", but it is already registered with name " - <<inserted.first->second); - } - } else { - LOG4CXX_ERROR(g_logger, "Ignoring duplicate thread name: " + name); - } -} - -string ThreadManager::GetName(PlatformThreadHandle id) const { - AutoLock auto_lock(state_lock_); - IdNamesMap::const_iterator found = id_names_.find(id); - if (found != id_names_.end()) { - return found->second; - } else { - LOG4CXX_WARN(g_logger, "Thread doesn't have associated name"); - return unnamed_thread_namer_.GetUniqueName(id); - } -} - -void ThreadManager::Unregister(PlatformThreadHandle id) { - AutoLock auto_lock(state_lock_); - string name = id_names_[id]; - names_.erase(name); - id_names_.erase(id); -} - - -} // namespace impl -} // namespace threads diff --git a/SDL_Core/src/components/utils/src/threads/thread_validator.cc b/SDL_Core/src/components/utils/src/threads/thread_validator.cc deleted file mode 100644 index 5bc66f138..000000000 --- a/SDL_Core/src/components/utils/src/threads/thread_validator.cc +++ /dev/null @@ -1,95 +0,0 @@ -/** - * Copyright (c) 2013, Ford Motor Company - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following - * disclaimer in the documentation and/or other materials provided with the - * distribution. - * - * Neither the name of the Ford Motor Company nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - */ -#include "utils/threads/thread_validator.h" - -#include "utils/logger.h" -#include "utils/back_trace.h" - -namespace threads { - -namespace { -log4cxx::LoggerPtr g_logger = - log4cxx::LoggerPtr(log4cxx::Logger::getLogger("Utils")); -} - -SingleThreadSimpleValidator::SingleThreadSimpleValidator() - : creation_thread_id_(Thread::CurrentId()) { -} - -SingleThreadSimpleValidator::~SingleThreadSimpleValidator() { -} - -void SingleThreadSimpleValidator::AssertRunningOnCreationThread() const { - Thread::Id current_id = Thread::CurrentId(); - if (creation_thread_id_ != current_id) { - LOG4CXX_ERROR(g_logger, "Single-threaded object created at thread " - << creation_thread_id_ - <<" is accessed from thread " - << current_id -#ifdef BACKTRACE_SUPPORT - << "\n" - << utils::Backtrace() -#endif - ); - } -} - - -SingleThreadValidator::SingleThreadValidator() - : owning_thread_id_(Thread::CurrentId()){ -} - -SingleThreadValidator::~SingleThreadValidator() { -} - -void SingleThreadValidator::PassToThread(Thread::Id thread_id) const { - owning_thread_id_ = thread_id; -} - -void SingleThreadValidator::AssertRunningOnValidThread() const { - Thread::Id current_id = Thread::CurrentId(); - if (owning_thread_id_ != current_id) { - LOG4CXX_ERROR(g_logger, "Single-threaded object owned by thread " - << owning_thread_id_ - << " is accessed from thread " - << current_id << "\n" -#ifdef BACKTRACE_SUPPORT - << utils::Backtrace() -#endif - ); - } -} - - -} // namespace threads - -// vim: set ts=2 sw=2 et: |