Skip to content

Commit 6ddfe89

Browse files
bnoordhuisFishrock123
authored andcommitted
src: remove VS 2013 compatibility hacks
We can remove some Visual Studio 2013-specific workarounds now that support for that compiler has officially been dropped. PR-URL: #8067 Refs: #7484 Refs: #8049 Reviewed-By: James M Snell <[email protected]> Reviewed-By: Joao Reis <[email protected]>
1 parent e9d1426 commit 6ddfe89

File tree

3 files changed

+15
-46
lines changed

3 files changed

+15
-46
lines changed

src/node_internals.h

-21
Original file line numberDiff line numberDiff line change
@@ -106,29 +106,8 @@ void RegisterSignalHandler(int signal,
106106
bool reset_handler = false);
107107
#endif
108108

109-
#ifdef _WIN32
110-
// emulate snprintf() on windows, _snprintf() doesn't zero-terminate the buffer
111-
// on overflow...
112-
// VS 2015 added a standard conform snprintf
113-
#if defined( _MSC_VER ) && (_MSC_VER < 1900)
114-
#include <stdarg.h>
115-
inline static int snprintf(char *buffer, size_t n, const char *format, ...) {
116-
va_list argp;
117-
va_start(argp, format);
118-
int ret = _vscprintf(format, argp);
119-
vsnprintf_s(buffer, n, _TRUNCATE, format, argp);
120-
va_end(argp);
121-
return ret;
122-
}
123-
#endif
124-
#endif
125-
126-
#if defined(_MSC_VER) && _MSC_VER < 1900
127-
#define arraysize(a) (sizeof(a) / sizeof(*a)) // Workaround for VS 2013.
128-
#else
129109
template <typename T, size_t N>
130110
constexpr size_t arraysize(const T(&)[N]) { return N; }
131-
#endif
132111

133112
#ifndef ROUND_UP
134113
# define ROUND_UP(a, b) ((a) % (b) ? ((a) + (b)) - ((a) % (b)) : (a))

src/util-inl.h

+12-12
Original file line numberDiff line numberDiff line change
@@ -28,33 +28,33 @@ bool ListNode<T>::IsEmpty() const {
2828
return prev_ == this;
2929
}
3030

31-
template <typename T, ListNodeMember(T) M>
31+
template <typename T, ListNode<T> (T::*M)>
3232
ListHead<T, M>::Iterator::Iterator(ListNode<T>* node) : node_(node) {}
3333

34-
template <typename T, ListNodeMember(T) M>
34+
template <typename T, ListNode<T> (T::*M)>
3535
T* ListHead<T, M>::Iterator::operator*() const {
3636
return ContainerOf(M, node_);
3737
}
3838

39-
template <typename T, ListNodeMember(T) M>
39+
template <typename T, ListNode<T> (T::*M)>
4040
const typename ListHead<T, M>::Iterator&
4141
ListHead<T, M>::Iterator::operator++() {
4242
node_ = node_->next_;
4343
return *this;
4444
}
4545

46-
template <typename T, ListNodeMember(T) M>
46+
template <typename T, ListNode<T> (T::*M)>
4747
bool ListHead<T, M>::Iterator::operator!=(const Iterator& that) const {
4848
return node_ != that.node_;
4949
}
5050

51-
template <typename T, ListNodeMember(T) M>
51+
template <typename T, ListNode<T> (T::*M)>
5252
ListHead<T, M>::~ListHead() {
5353
while (IsEmpty() == false)
5454
head_.next_->Remove();
5555
}
5656

57-
template <typename T, ListNodeMember(T) M>
57+
template <typename T, ListNode<T> (T::*M)>
5858
void ListHead<T, M>::MoveBack(ListHead* that) {
5959
if (IsEmpty())
6060
return;
@@ -67,7 +67,7 @@ void ListHead<T, M>::MoveBack(ListHead* that) {
6767
head_.next_ = &head_;
6868
}
6969

70-
template <typename T, ListNodeMember(T) M>
70+
template <typename T, ListNode<T> (T::*M)>
7171
void ListHead<T, M>::PushBack(T* element) {
7272
ListNode<T>* that = &(element->*M);
7373
head_.prev_->next_ = that;
@@ -76,7 +76,7 @@ void ListHead<T, M>::PushBack(T* element) {
7676
head_.prev_ = that;
7777
}
7878

79-
template <typename T, ListNodeMember(T) M>
79+
template <typename T, ListNode<T> (T::*M)>
8080
void ListHead<T, M>::PushFront(T* element) {
8181
ListNode<T>* that = &(element->*M);
8282
head_.next_->prev_ = that;
@@ -85,12 +85,12 @@ void ListHead<T, M>::PushFront(T* element) {
8585
head_.next_ = that;
8686
}
8787

88-
template <typename T, ListNodeMember(T) M>
88+
template <typename T, ListNode<T> (T::*M)>
8989
bool ListHead<T, M>::IsEmpty() const {
9090
return head_.IsEmpty();
9191
}
9292

93-
template <typename T, ListNodeMember(T) M>
93+
template <typename T, ListNode<T> (T::*M)>
9494
T* ListHead<T, M>::PopFront() {
9595
if (IsEmpty())
9696
return nullptr;
@@ -99,12 +99,12 @@ T* ListHead<T, M>::PopFront() {
9999
return ContainerOf(M, node);
100100
}
101101

102-
template <typename T, ListNodeMember(T) M>
102+
template <typename T, ListNode<T> (T::*M)>
103103
typename ListHead<T, M>::Iterator ListHead<T, M>::begin() const {
104104
return Iterator(head_.next_);
105105
}
106106

107-
template <typename T, ListNodeMember(T) M>
107+
template <typename T, ListNode<T> (T::*M)>
108108
typename ListHead<T, M>::Iterator ListHead<T, M>::end() const {
109109
return Iterator(const_cast<ListNode<T>*>(&head_));
110110
}

src/util.h

+3-13
Original file line numberDiff line numberDiff line change
@@ -135,18 +135,8 @@ template <typename T> using remove_reference = std::remove_reference<T>;
135135
template <typename T>
136136
class ListNode;
137137

138-
template <typename T>
139-
using ListNodeMember = ListNode<T> T::*;
140-
141-
// VS 2013 doesn't understand dependent templates.
142-
#ifdef _MSC_VER
143-
#define ListNodeMember(T) ListNodeMember
144-
#else
145-
#define ListNodeMember(T) ListNodeMember<T>
146-
#endif
147-
148138
// TAILQ-style intrusive list head.
149-
template <typename T, ListNodeMember(T) M>
139+
template <typename T, ListNode<T> (T::*M)>
150140
class ListHead;
151141

152142
template <typename T>
@@ -158,13 +148,13 @@ class ListNode {
158148
inline bool IsEmpty() const;
159149

160150
private:
161-
template <typename U, ListNodeMember(U) M> friend class ListHead;
151+
template <typename U, ListNode<U> (U::*M)> friend class ListHead;
162152
ListNode* prev_;
163153
ListNode* next_;
164154
DISALLOW_COPY_AND_ASSIGN(ListNode);
165155
};
166156

167-
template <typename T, ListNodeMember(T) M>
157+
template <typename T, ListNode<T> (T::*M)>
168158
class ListHead {
169159
public:
170160
class Iterator {

0 commit comments

Comments
 (0)