Changeset 16:1d329bbc0303 in xplra for src
- Timestamp:
- 01/28/13 19:25:31 (12 years ago)
- Branch:
- default
- Phase:
- public
- Location:
- src/client/c/hu/varadiistvan/xplra
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
src/client/c/hu/varadiistvan/xplra/XPlane.cc
r15 r16 49 49 50 50 using std::auto_ptr; 51 using std::string; 51 52 52 53 //------------------------------------------------------------------------------ … … 181 182 //------------------------------------------------------------------------------ 182 183 184 size_t XPlane::getArray(const char* name, uint8_t type, 185 ssize_t length, size_t offset) throw(Exception) 186 { 187 checkStream(); 188 189 stream->writeU8(Protocol::COMMAND_GET_SINGLE); 190 stream->writeString(name, strlen(name)); 191 stream->writeU8(type); 192 stream->writeS32(static_cast<int32_t>(length)); 193 stream->writeS32(static_cast<int32_t>(offset)); 194 if (!stream->flush()) checkStream(); 195 196 uint8_t result = stream->readU8(); 197 length = stream->readS32(); 198 checkStream(); 199 checkResult(result); 200 201 return length; 202 } 203 204 //------------------------------------------------------------------------------ 205 206 size_t XPlane::getFloatArray(const char* name, float* dest, 207 size_t length, size_t offset) throw(Exception) 208 { 209 length = getArray(name, Protocol::TYPE_FLOAT_ARRAY, length, offset); 210 211 if (!stream->read(dest, length*sizeof(float))) checkStream(); 212 213 return length; 214 } 215 216 //------------------------------------------------------------------------------ 217 218 float* XPlane::getFloatArray(const char* name, size_t& length, 219 size_t offset) throw(Exception) 220 { 221 length = getArray(name, Protocol::TYPE_FLOAT_ARRAY, -1, offset); 222 223 auto_ptr<float> data(new float[length]); 224 if (!stream->read(data.get(), length*sizeof(float))) checkStream(); 225 return data.release(); 226 } 227 228 //------------------------------------------------------------------------------ 229 230 size_t XPlane::getIntArray(const char* name, int32_t* dest, 231 size_t length, size_t offset) throw(Exception) 232 { 233 length = getArray(name, Protocol::TYPE_INT_ARRAY, length, offset); 234 235 if (!stream->read(dest, length*sizeof(int32_t))) checkStream(); 236 237 return length; 238 } 239 240 //------------------------------------------------------------------------------ 241 242 int32_t* XPlane::getIntArray(const char* name, size_t& length, 243 size_t offset) throw(Exception) 244 { 245 length = getArray(name, Protocol::TYPE_INT_ARRAY, -1, offset); 246 247 auto_ptr<int32_t> data(new int32_t[length]); 248 if (!stream->read(data.get(), length*sizeof(int32_t))) checkStream(); 249 return data.release(); 250 } 251 252 //------------------------------------------------------------------------------ 253 254 size_t XPlane::getByteArray(const char* name, uint8_t* dest, 255 size_t length, size_t offset) throw(Exception) 256 { 257 length = getArray(name, Protocol::TYPE_BYTE_ARRAY, length, offset); 258 259 if (!stream->read(dest, length*sizeof(uint8_t))) checkStream(); 260 261 return length; 262 } 263 264 //------------------------------------------------------------------------------ 265 266 uint8_t* XPlane::getByteArray(const char* name, size_t& length, 267 size_t offset) throw(Exception) 268 { 269 length = getArray(name, Protocol::TYPE_BYTE_ARRAY, -1, offset); 270 271 auto_ptr<uint8_t> data(new uint8_t[length]); 272 if (!stream->read(data.get(), length*sizeof(uint8_t))) checkStream(); 273 return data.release(); 274 } 275 276 //------------------------------------------------------------------------------ 277 278 string XPlane::getString(const char* name, size_t offset) throw(Exception) 279 { 280 size_t length = 0; 281 auto_ptr<uint8_t> data(getByteArray(name, length, offset)); 282 return string(reinterpret_cast<char*>(data.get())); 283 } 284 285 //------------------------------------------------------------------------------ 286 183 287 // Local Variables: 184 288 // mode: C++ -
src/client/c/hu/varadiistvan/xplra/XPlane.h
r15 r16 118 118 double getDouble(const char* name) throw(Exception); 119 119 120 /** 121 * Get a possibly partial array of floats. 122 * 123 * @param length the length of the destination buffer 124 * @param offset the offset from which to get the array 125 * 126 * @return the number of values acquired actually 127 */ 128 size_t getFloatArray(const char* name, float* dest, 129 size_t length, size_t offset = 0) throw(Exception); 130 131 /** 132 * Get a possibly partial array of floats. The result array will 133 * be created with a length needed to hold the returned value. 134 * 135 * @param offset the offset from which to get the array 136 */ 137 float* getFloatArray(const char* name, size_t& length, 138 size_t offset = 0) throw(Exception); 139 140 /** 141 * Get a possibly partial array of integers. 142 * 143 * @param length the length of the destination buffer 144 * @param offset the offset from which to get the array 145 * 146 * @return the number of values acquired actually 147 */ 148 size_t getIntArray(const char* name, int32_t* dest, 149 size_t length, size_t offset = 0) throw(Exception); 150 151 /** 152 * Get a possibly partial array of integers. The result array will 153 * be created with a length needed to hold the returned value. 154 * 155 * @param offset the offset from which to get the array 156 */ 157 int32_t* getIntArray(const char* name, size_t& length, 158 size_t offset = 0) throw(Exception); 159 160 /** 161 * Get a possibly partial array of bytes. 162 * 163 * @param length the length of the destination buffer 164 * @param offset the offset from which to get the array 165 * 166 * @return the number of values acquired actually 167 */ 168 size_t getByteArray(const char* name, uint8_t* dest, 169 size_t length, size_t offset = 0) throw(Exception); 170 171 /** 172 * Get a possibly partial array of bytes. The result array will 173 * be created with a length needed to hold the returned value. 174 * 175 * @param offset the offset from which to get the array 176 */ 177 uint8_t* getByteArray(const char* name, size_t& lengyh, 178 size_t offset = 0) throw(Exception); 179 180 /** 181 * Get a string. A string is a byte array. 182 */ 183 std::string getString(const char* name, size_t offset = 0) throw(Exception); 184 120 185 private: 121 186 /** … … 135 200 */ 136 201 void getScalar(const char* name, uint8_t type) throw(Exception); 202 203 /** 204 * Issue the command to get an array of values of the given 205 * type. It checks the result and retrieves the number of value 206 * items available. 207 * 208 * @return the number of value items available 209 */ 210 size_t getArray(const char* name, uint8_t type, 211 ssize_t length, size_t offset) throw(Exception); 212 137 213 }; 138 214
Note:
See TracChangeset
for help on using the changeset viewer.