susumu.yata
null+****@clear*****
Thu Dec 6 14:27:41 JST 2012
susumu.yata 2012-12-06 14:27:41 +0900 (Thu, 06 Dec 2012) New Revision: c63fa3c205a6c308bf56d46d700d1349a1d6040c https://github.com/groonga/grnxx/commit/c63fa3c205a6c308bf56d46d700d1349a1d6040c Log: Make grnxx::FlagsImpl<T> a POD type. Explicit initialization is required for zero-fill. Add grnxx::FlagsImpl<T>::none() to get a zero flags. Modified files: lib/db/blob_vector.cpp lib/flags_impl.hpp lib/io/file-posix.cpp lib/io/file-windows.cpp lib/io/file.cpp lib/io/file.hpp lib/io/pool-impl.cpp lib/io/pool.hpp lib/io/view-posix.cpp lib/io/view-windows.cpp lib/io/view.cpp lib/logger.cpp lib/string_builder.hpp lib/string_format.hpp Modified: lib/db/blob_vector.cpp (+1 -1) =================================================================== --- lib/db/blob_vector.cpp 2012-12-06 13:52:54 +0900 (351dd5b) +++ lib/db/blob_vector.cpp 2012-12-06 14:27:41 +0900 (f762202) @@ -322,7 +322,7 @@ BlobVectorLargeValueCell BlobVector::create_large_value_cell( header->set_type(BLOB_VECTOR_ACTIVE_VALUE); } } else { - BlobVectorLargeValueFlags flags; + BlobVectorLargeValueFlags flags = BlobVectorLargeValueFlags::none(); uint64_t prev_capacity = 0; const uint64_t prev_offset = header_->rearmost_large_value_offset(); Modified: lib/flags_impl.hpp (+9 -2) =================================================================== --- lib/flags_impl.hpp 2012-12-06 13:52:54 +0900 (539ba86) +++ lib/flags_impl.hpp 2012-12-06 14:27:41 +0900 (6c990e5) @@ -28,8 +28,7 @@ class FlagsImpl { typedef T Identifier; typedef U Type; - constexpr FlagsImpl() : flags_(0) {} - constexpr FlagsImpl(const FlagsImpl &flags) : flags_(flags.flags_) {} + FlagsImpl() = default; constexpr explicit operator bool() { return flags_ != 0; @@ -68,6 +67,9 @@ class FlagsImpl { return *this; } + static constexpr FlagsImpl none() { + return FlagsImpl(0); + } static constexpr FlagsImpl define(Type flags) { return FlagsImpl(flags); } @@ -78,6 +80,11 @@ class FlagsImpl { explicit constexpr FlagsImpl(Type flags) : flags_(flags) {} }; +class FlagsImplExampleIdentifier {}; +typedef FlagsImpl<FlagsImplExampleIdentifier> FlagsImplExample; + +GRNXX_ASSERT_POD(FlagsImplExample); + } // namespace grnxx #endif // GRNXX_FLAGS_IMPL_HPP Modified: lib/io/file-posix.cpp (+1 -1) =================================================================== --- lib/io/file-posix.cpp 2012-12-06 13:52:54 +0900 (febf57a) +++ lib/io/file-posix.cpp 2012-12-06 14:27:41 +0900 (4f0b140) @@ -355,7 +355,7 @@ bool FileImpl::unlink_if_exists(const char *path) { } FileImpl::FileImpl() - : path_(), flags_(), fd_(-1), locked_(false), + : path_(), flags_(Flags::none()), fd_(-1), locked_(false), unlink_at_close_(false) {} void FileImpl::open_regular_file(const char *path, Flags flags, Modified: lib/io/file-windows.cpp (+1 -1) =================================================================== --- lib/io/file-windows.cpp 2012-12-06 13:52:54 +0900 (36c5e7d) +++ lib/io/file-windows.cpp 2012-12-06 14:27:41 +0900 (e6fb0d3) @@ -334,7 +334,7 @@ bool FileImpl::unlink_if_exists(const char *path) { } FileImpl::FileImpl() - : path_(), flags_(), handle_(INVALID_HANDLE_VALUE), + : path_(), flags_(Flags::none()), handle_(INVALID_HANDLE_VALUE), append_mode_(false), locked_(false), unlink_at_close_(false) {} void FileImpl::open_regular_file(const char *path, Flags flags, Modified: lib/io/file.cpp (+1 -1) =================================================================== --- lib/io/file.cpp 2012-12-06 13:52:54 +0900 (c219763) +++ lib/io/file.cpp 2012-12-06 14:27:41 +0900 (854e57b) @@ -130,7 +130,7 @@ String File::path() const { } Flags File::flags() const { - return impl_ ? impl_->flags() : Flags(); + return impl_ ? impl_->flags() : Flags::none(); } const void *File::handle() const { Modified: lib/io/file.hpp (+1 -1) =================================================================== --- lib/io/file.hpp 2012-12-06 13:52:54 +0900 (a872e6e) +++ lib/io/file.hpp 2012-12-06 14:27:41 +0900 (697254e) @@ -35,7 +35,7 @@ class File { // GRNXX_IO_READ_ONLY, GRNXX_IO_WRITE_ONLY, GRNXX_IO_APPEND, // GRNXX_IO_CREATE, GRNXX_IO_OPEN, GRNXX_IO_TEMPORARY, GRNXX_IO_TRUNCATE. // Windows ignores permission. - explicit File(const char *path, Flags flags = Flags(), + explicit File(const char *path, Flags flags = Flags::none(), int permission = 0644); ~File(); Modified: lib/io/pool-impl.cpp (+3 -3) =================================================================== --- lib/io/pool-impl.cpp 2012-12-06 13:52:54 +0900 (130c87f) +++ lib/io/pool-impl.cpp 2012-12-06 14:27:41 +0900 (0ddbf97) @@ -268,7 +268,7 @@ bool PoolImpl::unlink_if_exists(const char *path) { PoolImpl::PoolImpl() : path_(), - flags_(), + flags_(Flags::none()), header_(nullptr), files_(), header_chunk_(), @@ -300,7 +300,7 @@ void PoolImpl::open_regular_pool(const char *path, Flags flags, } path_ = Path::full_path(path); - Flags file_flags; + Flags file_flags = Flags::none(); if ((~flags & GRNXX_IO_CREATE) && (flags & GRNXX_IO_READ_ONLY)) { flags_ |= GRNXX_IO_READ_ONLY; file_flags |= GRNXX_IO_READ_ONLY; @@ -454,7 +454,7 @@ View PoolImpl::mmap_chunk(const ChunkInfo &chunk_info) { Flags PoolImpl::get_view_flags() const { if (flags_ & GRNXX_IO_ANONYMOUS) { - return (flags_ & GRNXX_IO_HUGE_TLB) ? GRNXX_IO_HUGE_TLB : Flags(); + return (flags_ & GRNXX_IO_HUGE_TLB) ? GRNXX_IO_HUGE_TLB : Flags::none(); } else { Flags view_flags = GRNXX_IO_SHARED; if (flags_ & GRNXX_IO_READ_ONLY) { Modified: lib/io/pool.hpp (+1 -1) =================================================================== --- lib/io/pool.hpp 2012-12-06 13:52:54 +0900 (ff05b5f) +++ lib/io/pool.hpp 2012-12-06 14:27:41 +0900 (da1367f) @@ -244,7 +244,7 @@ class Pool { // Available flags are as follows: // GRNXX_IO_READ_ONLY, GRNXX_IO_ANONYMOUS, GRNXX_IO_CREATE, // GRNXX_IO_OPEN, GRNXX_IO_TEMPORARY. - Pool(const char *path, Flags flags = Flags(), + Pool(const char *path, Flags flags = Flags::none(), const PoolOptions &options = PoolOptions()); ~Pool(); Modified: lib/io/view-posix.cpp (+2 -1) =================================================================== --- lib/io/view-posix.cpp 2012-12-06 13:52:54 +0900 (e6629cb) +++ lib/io/view-posix.cpp 2012-12-06 14:27:41 +0900 (790c67d) @@ -97,7 +97,8 @@ void ViewImpl::sync(uint64_t offset, uint64_t size) { } ViewImpl::ViewImpl() - : file_(), flags_(), address_(MAP_FAILED), offset_(0), size_(0) {} + : file_(), flags_(Flags::none()), + address_(MAP_FAILED), offset_(0), size_(0) {} #ifdef MAP_HUGETLB void ViewImpl::map_on_memory(Flags flags, uint64_t size) { Modified: lib/io/view-windows.cpp (+1 -1) =================================================================== --- lib/io/view-windows.cpp 2012-12-06 13:52:54 +0900 (d938e5b) +++ lib/io/view-windows.cpp 2012-12-06 14:27:41 +0900 (4aa7c62) @@ -109,7 +109,7 @@ void ViewImpl::sync(uint64_t offset, uint64_t size) { } ViewImpl::ViewImpl() - : file_(), flags_(), handle_(nullptr), + : file_(), flags_(Flags::none()), handle_(nullptr), address_(nullptr), offset_(0), size_(0) {} void ViewImpl::map_on_memory(Flags, uint64_t size) { Modified: lib/io/view.cpp (+1 -1) =================================================================== --- lib/io/view.cpp 2012-12-06 13:52:54 +0900 (bbcede3) +++ lib/io/view.cpp 2012-12-06 14:27:41 +0900 (12e2258) @@ -70,7 +70,7 @@ File View::file() const { } Flags View::flags() const { - return impl_ ? impl_->flags() : Flags(); + return impl_ ? impl_->flags() : Flags::none(); } void *View::address() const { Modified: lib/logger.cpp (+2 -2) =================================================================== --- lib/logger.cpp 2012-12-06 13:52:54 +0900 (75c26d0) +++ lib/logger.cpp 2012-12-06 14:27:41 +0900 (6aa3db1) @@ -132,14 +132,14 @@ volatile bool LoggerSingleton::initialized_ = false; LoggerSingleton * volatile LoggerSingleton::instance_ = nullptr; Mutex LoggerSingleton::mutex_(MUTEX_UNLOCKED); -LoggerFlags Logger::flags_ = LoggerFlags(); +LoggerFlags Logger::flags_ = LoggerFlags::none(); int Logger::max_level_ = NOTICE_LOGGER; int Logger::backtrace_level_ = ERROR_LOGGER; Logger::Logger(const char *file, int line, const char *func, int level) : buf_(), builder_(buf_, (Logger::flags() & LOGGER_ENABLE_AUTO_RESIZE) ? - STRING_BUILDER_AUTO_RESIZE : StringBuilderFlags()), + STRING_BUILDER_AUTO_RESIZE : StringBuilderFlags::none()), file_(file), line_(line), func_(func), Modified: lib/string_builder.hpp (+4 -4) =================================================================== --- lib/string_builder.hpp 2012-12-06 13:52:54 +0900 (0406c6b) +++ lib/string_builder.hpp 2012-12-06 14:27:41 +0900 (9aa9bbc) @@ -34,7 +34,7 @@ const StringBuilderFlags STRING_BUILDER_AUTO_RESIZE = class StringBuilder { public: - explicit StringBuilder(StringBuilderFlags flags = StringBuilderFlags()) + explicit StringBuilder(StringBuilderFlags flags = StringBuilderFlags::none()) : buf_(), begin_(nullptr), end_(nullptr), @@ -43,11 +43,11 @@ class StringBuilder { failed_(false) {} explicit StringBuilder(size_t size, - StringBuilderFlags flags = StringBuilderFlags()); + StringBuilderFlags flags = StringBuilderFlags::none()); template <size_t T> explicit StringBuilder(char (&buf)[T], - StringBuilderFlags flags = StringBuilderFlags()) + StringBuilderFlags flags = StringBuilderFlags::none()) : buf_(), begin_(buf), end_(buf + T - 1), @@ -58,7 +58,7 @@ class StringBuilder { } StringBuilder(char *buf, size_t size, - StringBuilderFlags flags = StringBuilderFlags()) + StringBuilderFlags flags = StringBuilderFlags::none()) : buf_(), begin_(buf), end_(buf + size - 1), Modified: lib/string_format.hpp (+1 -1) =================================================================== --- lib/string_format.hpp 2012-12-06 13:52:54 +0900 (22d4efe) +++ lib/string_format.hpp 2012-12-06 14:27:41 +0900 (e35e54b) @@ -95,7 +95,7 @@ StringBuilder &operator<<(StringBuilder &builder, char local_buf[STRING_BUILDER_BUF_SIZE_MIN]; const StringBuilderFlags local_flags = (alignment.width() >= sizeof(local_buf)) ? - STRING_BUILDER_AUTO_RESIZE : StringBuilderFlags(); + STRING_BUILDER_AUTO_RESIZE : StringBuilderFlags::none(); StringBuilder local_builder(local_buf, local_flags); local_builder << alignment.value(); -------------- next part -------------- HTML����������������������������... 下载