1 #include "daq/slc/nsm/NSMVar.h"
6 #include <daq/slc/base/Reader.h>
7 #include <daq/slc/base/Writer.h>
11 NSMVar::NSMVar(
const std::string& name,
const std::vector<int>& value)
14 int* v = (
int*)malloc(value.size() *
sizeof(int));
15 for (
size_t i = 0; i < value.size(); i++)
22 m_date =
Date().get();
25 NSMVar::NSMVar(
const std::string& name,
const std::vector<float>& value)
28 float* v = (
float*)malloc(value.size() *
sizeof(float));
29 for (
size_t i = 0; i < value.size(); i++)
36 m_date =
Date().get();
39 const NSMVar& NSMVar::operator=(
const std::vector<int>& val)
41 if (m_value) free(m_value);
42 int* v = (
int*)malloc(val.size() *
sizeof(int));
43 for (
size_t i = 0; i < val.size(); i++)
48 m_date =
Date().get();
52 const NSMVar& NSMVar::operator=(
const std::vector<float>& val)
54 if (m_value) free(m_value);
55 float* v = (
float*)malloc(val.size() *
sizeof(int));
56 for (
size_t i = 0; i < val.size(); i++)
61 m_date =
Date().get();
65 int NSMVar::size()
const
69 case NONE: s = 0;
return 0;
70 case INT: s = 4;
break;
71 case FLOAT: s = 4;
break;
72 case TEXT:
return m_len + 1;
75 return (m_len > 0) ? s * m_len : s;
78 const char* NSMVar::getTypeLabel()
const
82 if (m_len > 0)
return "inta";
85 if (m_len > 0)
return "floata";
87 case TEXT:
return "text";
93 void NSMVar::copy(
const std::string& name,
94 Type type,
int len,
const void* value,
97 if (m_value) free(m_value);
103 m_date = (date > 0) ? date :
Date().get();
107 memcpy(m_value, value, s);
117 if (m_value) free(m_value);
120 void NSMVar::readObject(
Reader& reader)
122 m_node = reader.readString();
123 m_name = reader.readString();
124 m_type = (Type)reader.readInt();
125 m_len = reader.readInt();
126 m_id = reader.readInt();
127 m_date = reader.readInt();
128 int len = (m_len > 0) ? m_len : 1;
131 if (m_value) free(m_value);
133 memset(m_value, 0, s);
136 int* v = (
int*)m_value;
137 for (
int i = 0; i < len; i++) {
138 v[i] = reader.readInt();
142 float* v = (
float*)m_value;
143 for (
int i = 0; i < len; i++) {
144 v[i] = reader.readFloat();
148 char* v = (
char*)m_value;
150 for (
int i = 0; i < m_len; i++) {
151 v[i] = reader.readChar();
159 void NSMVar::writeObject(
Writer& writer)
const
161 writer.writeString(m_node);
162 writer.writeString(m_name);
163 writer.writeInt((
int)m_type);
164 writer.writeInt(m_len);
165 writer.writeInt(m_id);
166 writer.writeInt(m_date);
167 int len = (m_len > 0) ? m_len : 1;
170 int* v = (
int*)m_value;
171 for (
int i = 0; i < len; i++) {
172 writer.writeInt(v[i]);
176 float* v = (
float*)m_value;
177 for (
int i = 0; i < len; i++) {
178 writer.writeFloat(v[i]);
182 char* v = (
char*)m_value;
183 writer.write(v, len);
189 int NSMVar::getInt()
const
191 return (m_type == INT&& m_len == 0) ? *(
int*)m_value : 0;
194 float NSMVar::getFloat()
const
196 return (m_type == FLOAT && m_len == 0) ? *(
float*)m_value : 0;
199 const char* NSMVar::getText()
const
201 return (m_type == TEXT && m_len > 0 && m_value != NULL) ? (
const char*)m_value :
"";
204 int NSMVar::getInt(
int i)
const
206 return (m_type == INT&& i < m_len) ? ((
int*)m_value)[i] : 0;
209 float NSMVar::getFloat(
int i)
const
211 return (m_type == FLOAT && i < m_len) ? ((
float*)m_value)[i] : 0;
214 const NSMVar& NSMVar::operator>>(std::vector<int>& val)
const
216 int* pv = (
int*)get();
217 val = std::vector<int>();
218 for (
int i = 0; i < getLength(); i++) {
219 val.push_back(pv[i]);
224 const NSMVar& NSMVar::operator>>(std::vector<float>& val)
const
226 float* pv = (
float*)get();
227 val = std::vector<float>();
228 for (
int i = 0; i < getLength(); i++) {
229 val.push_back(pv[i]);