import {ObjectBase} from '../lang/ObjectBase';
//==========================================================
// 数据观察基类。
//
// @author maocy
// @history 150105
//==========================================================
export class DataViewer extends ObjectBase {
// 编码
public endianCd: boolean;
// 查看器
protected _viewer: DataView;
//==========================================================
// 构造处理。
//==========================================================
public constructor(memory?: any) {
super();
this.endianCd = false;
}
//==========================================================
// 获得有8位有符号整数。
//
// @param index 索引位置
// @return 8位有符号整数
//==========================================================
public getInt8(index: number): number {
return this._viewer.getInt8(index);
}
//==========================================================
// 获得有16位有符号整数。
//
// @param index 索引位置
// @return 16位有符号整数
//==========================================================
public getInt16(index: number): number {
return this._viewer.getInt16(index, this.endianCd);
}
//==========================================================
// 获得有32位有符号整数。
//
// @param index 索引位置
// @return 32位有符号整数
//==========================================================
public getInt32(index: number): number {
return this._viewer.getInt32(index, this.endianCd);
}
//==========================================================
// 获得有64位有符号整数。
//
// @param index 索引位置
// @return 64位有符号整数
//==========================================================
public getInt64(index: number): number {
var result = 0;
var value1 = this._viewer.getInt32(index, this.endianCd);
var value2 = this._viewer.getInt32(index + 4, this.endianCd);
if (this.endianCd) {
result = value1 << 32 + value2;
} else {
result = value2 << 32 + value1;
}
return result;
}
//==========================================================
// 获得有8位无符号整数。
//
// @param index 索引位置
// @return 8位无符号整数
//==========================================================
public getUint8(index: number): number {
return this._viewer.getUint8(index);
}
//==========================================================
// 获得有16位无符号整数。
//
// @param index 索引位置
// @return 16位无符号整数
//==========================================================
public getUint16(index: number): number {
return this._viewer.getUint16(index, this.endianCd);
}
//==========================================================
// 获得有32位无符号整数。
//
// @param index 索引位置
// @return 32位无符号整数
//==========================================================
public getUint32(index: number): number {
return this._viewer.getUint32(index, this.endianCd);
}
//==========================================================
// 获得有64位无符号整数。
//
// @param index 索引位置
// @return 64位无符号整数
//==========================================================
public getUint64(index: number): number {
var result = 0;
var value1 = this._viewer.getUint32(index, this.endianCd);
var value2 = this._viewer.getUint32(index + 4, this.endianCd);
if (this.endianCd) {
result = value1 << 32 + value2;
} else {
result = value2 << 32 + value1;
}
return result;
}
//==========================================================
// 获得浮点数。
//
// @param index 索引位置
// @return 浮点数
//==========================================================
public getFloat(index: number): number {
return this._viewer.getFloat32(index, this.endianCd);
}
//==========================================================
// 获得双精度浮点数。
//
// @param index 索引位置
// @return 双精度浮点数
//==========================================================
public getDouble(index: number): number {
return this._viewer.getFloat64(index, this.endianCd);
}
//==========================================================
// 设置有8位有符号整数。
//
// @param index 索引位置
// @param value 8位有符号整数
//==========================================================
public setInt8(index: number, value: number) {
this._viewer.setInt8(index, value);
}
//==========================================================
// 设置有16位有符号整数。
//
// @param index 索引位置
// @param value 16位有符号整数
//==========================================================
public setInt16(index: number, value: number) {
this._viewer.setInt16(index, value, this.endianCd);
}
//==========================================================
// 设置有32位有符号整数。
//
// @param index 索引位置
// @param value 32位有符号整数
//==========================================================
public setInt32(index: number, value: number) {
this._viewer.setInt32(index, value, this.endianCd);
}
//==========================================================
// 设置有64位有符号整数。
//
// @param index 索引位置
// @param value 64位有符号整数
//==========================================================
public setInt64(index: number, value: number) {
if (this.endianCd) {
this._viewer.setUint32(index, value >> 32, this.endianCd);
this._viewer.setUint32(index, value & 0xFFFFFFFF, this.endianCd);
} else {
this._viewer.setUint32(index, value & 0xFFFFFFFF, this.endianCd);
this._viewer.setUint32(index, value >> 32, this.endianCd);
}
}
//==========================================================
// 设置有8位无符号整数。
//
// @param index 索引位置
// @param value 8位无符号整数
//==========================================================
public setUint8(index: number, value: number) {
this._viewer.setUint8(index, value);
}
//==========================================================
// 设置有16位无符号整数。
//
// @param index 索引位置
// @param value 16位无符号整数
//==========================================================
public setUint16(index: number, value: number) {
this._viewer.setUint16(index, value, this.endianCd);
}
//==========================================================
// 设置有32位无符号整数。
//
// @param index 索引位置
// @param value 32位无符号整数
//==========================================================
public setUint32(index: number, value: number) {
this._viewer.setUint32(index, value, this.endianCd);
}
//==========================================================
// 设置有64位无符号整数。
//
// @param index 索引位置
// @param value 64位无符号整数
//==========================================================
public setUint64(index: number, value: number) {
if (this.endianCd) {
this._viewer.setUint32(index, value >> 32, this.endianCd);
this._viewer.setUint32(index, value & 0xFFFFFFFF, this.endianCd);
} else {
this._viewer.setUint32(index, value & 0xFFFFFFFF, this.endianCd);
this._viewer.setUint32(index, value >> 32, this.endianCd);
}
}
//==========================================================
// 设置浮点数。
//
// @param index 索引位置
// @param value 浮点数
//==========================================================
public setFloat(index: number, value: number) {
this._viewer.setFloat32(index, value, this.endianCd);
}
//==========================================================
// 设置双精度浮点数。
//
// @param index 索引位置
// @param value 双精度浮点数
//==========================================================
public setDouble(index: number, value: number) {
this._viewer.setFloat64(index, value, this.endianCd);
}
}