feat add attributes
Some checks failed
linux-x64-gcc / linux-gcc (Release) (push) Successful in 1m21s
linux-x64-gcc / linux-gcc (Debug) (push) Failing after 21m45s

This commit is contained in:
tqcq 2024-03-13 22:09:48 +08:00
parent 2df2fcb687
commit 3ca77d457b
4 changed files with 68 additions and 12 deletions

View File

@ -345,7 +345,12 @@ public:
{}
template<typename ValueType>
inline Any(ValueType &&value) : value_(std::move(value))
inline Any(
ValueType &&value,
typename std::enable_if<!std::is_same<Any &, ValueType>::value>::type
* = 0,
typename std::enable_if<!std::is_const<ValueType>::value>::type * = 0)
: value_(std::forward<ValueType &&>(value))
{}
// ~Any() noexcept {}
@ -371,13 +376,13 @@ public:
}
template<typename ValueType>
inline auto Cast() const -> ValueType
inline auto Cast() const -> ValueType const
{
return any_cast<ValueType>(value_);
}
template<typename ValueType>
inline auto Cast() -> ValueType
inline ValueType Cast() const &&
{
return any_cast<ValueType>(value_);
}
@ -414,8 +419,9 @@ public:
return *this;
}
private:
any value_;
private:
};
}// namespace sled

View File

@ -0,0 +1,5 @@
#pragma once
#ifndef SLED_LANG_ATTRIBUTES_H
#define SLED_LANG_ATTRIBUTES_H
#define SLED_DEPRECATED __attribute__((deprecated))
#endif// SLED_LANG_ATTRIBUTES_H

View File

@ -9,6 +9,7 @@
#ifndef SLED_SYNCHRONIZATION_MUTEX_H
#define SLED_SYNCHRONIZATION_MUTEX_H
#include "sled/lang/attributes.h"
#include "sled/units/time_delta.h"
#include <chrono>
#include <condition_variable>
@ -75,7 +76,7 @@ private:
template<typename TLock,
typename std::enable_if<internal::HasLockAndUnlock<TLock>::value,
TLock>::type * = nullptr>
class LockGuard final {
class SLED_DEPRECATED LockGuard final {
public:
LockGuard(const LockGuard &) = delete;
LockGuard &operator=(const LockGuard &) = delete;
@ -89,23 +90,23 @@ private:
friend class ConditionVariable;
};
class MutexGuard final {
class MutexLock final {
public:
MutexGuard(Mutex *mutex) : lock_(*mutex) {}
MutexLock(Mutex *mutex) : lock_(*mutex) {}
MutexGuard(const MutexGuard &) = delete;
MutexGuard &operator=(const MutexGuard &) = delete;
MutexLock(const MutexLock &) = delete;
MutexLock &operator=(const MutexLock &) = delete;
private:
friend class ConditionVariable;
marl::lock lock_;
};
using MutexLock = MutexGuard;
using MutexGuard SLED_DEPRECATED = MutexLock;
// using MutexGuard = marl::lock;
// using MutexLock = LockGuard<Mutex>;
// using MutexGuard = LockGuard<Mutex>;
using RecursiveMutexLock = LockGuard<RecursiveMutex>;
using RecursiveMutexLock SLED_DEPRECATED = LockGuard<RecursiveMutex>;
// class MutexLock final {
// public:

View File

@ -1,4 +1,48 @@
#include <gtest/gtest.h>
#include <sled/any.h>
#include <sled/log/log.h>
TEST(Any, Assign) {}
TEST(Any, Assign)
{
sled::Any any1;
sled::Any any2(any1);
sled::Any any3(1);
sled::Any any4(any3);
sled::Any any5 = 1;
EXPECT_FALSE(any1.HasValue());
EXPECT_FALSE(any2.HasValue());
EXPECT_TRUE(any3.HasValue());
EXPECT_TRUE(any4.HasValue());
EXPECT_TRUE(any5.HasValue());
EXPECT_EQ(any3.Cast<int>(), 1);
EXPECT_EQ(any4.Cast<int>(), 1);
EXPECT_EQ(any5.Cast<int>(), 1);
EXPECT_EQ(any3.CastOr<std::string>("def"), "def");
EXPECT_EQ(any4.CastOr<std::string>("def"), "def");
EXPECT_EQ(any5.CastOr<std::string>("def"), "def");
EXPECT_EQ(any3.CastOr<int>(11), 1);
}
TEST(Any, std_swap)
{
sled::Any a;
sled::Any b = 2;
EXPECT_FALSE(a.HasValue());
EXPECT_TRUE(b.HasValue());
std::swap(a, b);
EXPECT_TRUE(a.HasValue());
EXPECT_FALSE(b.HasValue());
EXPECT_EQ(a.Cast<int>(), 2);
}
TEST(Any, custom_swap)
{
sled::Any a;
sled::Any b = 2;
EXPECT_FALSE(a.HasValue());
EXPECT_TRUE(b.HasValue());
a.swap(b);
EXPECT_TRUE(a.HasValue());
EXPECT_FALSE(b.HasValue());
EXPECT_EQ(a.Cast<int>(), 2);
}