Skip to content

Commit

Permalink
[ntcore] Value: Inline constructors
Browse files Browse the repository at this point in the history
  • Loading branch information
PeterJohnson committed Oct 15, 2024
1 parent 239a2ea commit 30a997e
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 33 deletions.
30 changes: 0 additions & 30 deletions ntcore/src/main/native/cpp/Value.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@

#include "Value_internal.h"
#include "networktables/NetworkTableValue.h"
#include "ntcore_cpp.h"

using namespace nt;

Expand Down Expand Up @@ -70,35 +69,6 @@ void StringArrayStorage::InitNtStrings() {
}
}

Value::Value() {
m_val.type = NT_UNASSIGNED;
m_val.last_change = 0;
m_val.server_time = 0;
m_size = 0;
}

Value::Value(NT_Type type, size_t size, int64_t time, const private_init&)
: Value{type, size, time == 0 ? nt::Now() : time, 1, private_init{}} {}

Value::Value(NT_Type type, size_t size, int64_t time, int64_t serverTime,
const private_init&) {
m_val.type = type;
m_val.last_change = time;
m_val.server_time = serverTime;
if (m_val.type == NT_BOOLEAN_ARRAY) {
m_val.data.arr_boolean.arr = nullptr;
} else if (m_val.type == NT_INTEGER_ARRAY) {
m_val.data.arr_int.arr = nullptr;
} else if (m_val.type == NT_FLOAT_ARRAY) {
m_val.data.arr_float.arr = nullptr;
} else if (m_val.type == NT_DOUBLE_ARRAY) {
m_val.data.arr_double.arr = nullptr;
} else if (m_val.type == NT_STRING_ARRAY) {
m_val.data.arr_string.arr = nullptr;
}
m_size = size;
}

Value Value::MakeBooleanArray(std::span<const bool> value, int64_t time) {
Value val{NT_BOOLEAN_ARRAY, value.size() * sizeof(int), time, private_init{}};
auto data = AllocateArray<int>(value.size());
Expand Down
40 changes: 37 additions & 3 deletions ntcore/src/main/native/include/networktables/NetworkTableValue.h
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,9 @@

namespace nt {

// Forward declare here to avoid circular dependency on ntcore_cpp.h
int64_t Now();

#if __GNUC__ >= 13
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wmaybe-uninitialized"
Expand All @@ -33,10 +36,41 @@ class Value final {
struct private_init {};

public:
Value();
Value(NT_Type type, size_t size, int64_t time, const private_init&);
Value() {
m_val.type = NT_UNASSIGNED;
m_val.last_change = 0;
m_val.server_time = 0;
}

Value(NT_Type type, size_t size, int64_t time, const private_init&)
: Value{type, size, time == 0 ? Now() : time, 1, private_init{}} {}

Value(NT_Type type, size_t size, int64_t time, int64_t serverTime,
const private_init&);
const private_init&)
: m_size{size} {
m_val.type = type;
m_val.last_change = time;
m_val.server_time = serverTime;
switch (type) {
case NT_BOOLEAN_ARRAY:
m_val.data.arr_boolean.arr = nullptr;
break;
case NT_INTEGER_ARRAY:
m_val.data.arr_int.arr = nullptr;
break;
case NT_FLOAT_ARRAY:
m_val.data.arr_float.arr = nullptr;
break;
case NT_DOUBLE_ARRAY:
m_val.data.arr_double.arr = nullptr;
break;
case NT_STRING_ARRAY:
m_val.data.arr_string.arr = nullptr;
break;
default:
break;
}
}

explicit operator bool() const { return m_val.type != NT_UNASSIGNED; }

Expand Down

0 comments on commit 30a997e

Please sign in to comment.