/*
* TOPPERS ECHONET Lite Communication Middleware
*
* Copyright (C) 2015 Cores Co., Ltd. Japan
*
* 上記著作権者は,以下の(1)~(4)の条件を満たす場合に限り,本ソフトウェ
* ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
* 変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
* (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
* 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
* スコード中に含まれていること.
* (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
* 用できる形で再配布する場合には,再配布に伴うドキュメント(利用
* 者マニュアルなど)に,上記の著作権表示,この利用条件および下記
* の無保証規定を掲載すること.
* (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
* 用できない形で再配布する場合には,次のいずれかの条件を満たすこ
* と.
* (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
* 作権表示,この利用条件および下記の無保証規定を掲載すること.
* (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
* 報告すること.
* (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
* 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
* また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
* 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
* 免責すること.
*
* 本ソフトウェアは,無保証で提供されているものである.上記著作権者お
* よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
* に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
* アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
* の責任を負わない.
*
* @(#) $Id: ValueRange.cs 108 2015-06-11 09:15:46Z coas-nagasima $
*/
using System;
using System.Collections.Generic;
using System.Text.RegularExpressions;
namespace ctrlui
{
enum TokenType
{
Separetor,
HexValue,
Numeric,
String,
End,
};
class TokenInfo
{
public string Token;
public TokenType Type;
public static string Separetor = @"[=,:\(\)\[\]~]";
public static string HexValue = "^0x[0-9A-Fa-f]+";
public static string Numeric = @"^[\-\+]?[\.]?[0-9]+[0-9,\.]*";
public TokenInfo(string token, TokenType type)
{
Token = token;
Type = type;
}
public override string ToString()
{
return Token;
}
public int ToInt32()
{
switch (Type) {
case TokenType.HexValue:
return Int32.Parse(Token.Substring(2)/*0xの削除*/, 16);
case TokenType.Numeric:
return Int32.Parse(Token);
default:
return 0;
}
}
public long ToInt64(string typeName)
{
string temp;
switch (Type) {
case TokenType.HexValue:
temp = Token.Substring(2)/*0xの削除*/;
return Int32.Parse(temp, 16);
case TokenType.Numeric:
return Int32.Parse(Token);
default:
return 0;
}
}
}
enum State
{
Value,
EqualOrRange,
Description,
UnitOrCommaOrEnd,
RengeMax,
StartParenthesis,
RangeDescription,
MinDescription,
RangeSeparetor,
MaxDescription,
EndParenthesis,
CommaOrEnd,
BitFieldLSB,
BitRange,
BitFieldMSB,
BitFieldDescription,
BitRangeEnd,
Colon,
}
public abstract class Value
{
public abstract string Disp { get; }
public abstract string GetInitialValue();
}
public class Option : Value
{
private long _Val;
private string _Disp;
public Option(long val, string disp)
{
_Val = val;
_Disp = disp;
}
public long Val { get { return _Val; } }
public override string Disp { get { return _Disp; } }
public override string GetInitialValue()
{
return _Val.ToString(16).ToUpper();
}
}
public class Range : Value
{
private long _Min;
private long _Max;
private string _Disp;
private string _MinDisp;
private string _MaxDisp;
private string _Unit;
private long _InitialValue;
public Range(long min, long max, string disp)
{
_Min = min;
_Max = max;
_Disp = disp;
_MinDisp = "";
_MaxDisp = "";
_Unit = "";
_InitialValue = min;
}
public Range(long min, long max, string disp, string minDisp, string maxDisp, string unit)
{
_Min = min;
_Max = max;
_Disp = disp;
_MinDisp = minDisp;
_MaxDisp = maxDisp;
_Unit = unit;
_InitialValue = min;
}
public long Min { get { return _Min; } }
public long Max { get { return _Max; } }
public override string Disp { get { return _Disp; } }
public string MinDisp { get { return _MinDisp; } }
public string MaxDisp { get { return _MaxDisp; } }
public string Unit { get { return _Unit; } }
public long InitialValue
{
get { return _InitialValue; }
set { _InitialValue = value; }
}
public override string GetInitialValue()
{
return _InitialValue.ToString(16).ToUpper();
}
public string GetDisp(long value)
{
return _Disp + value.ToString() + _Unit;
}
}
public class InRangeValue : Value
{
private Range _Range;
private long _Value;
public InRangeValue(Range range, long value)
{
_Range = range;
_Value = value;
}
public Range Range { get { return _Range; } }
public long Value { get { return _Value; } }
public override string Disp { get { return _Range.GetDisp(_Value); } }
public override string GetInitialValue()
{
return _Value.ToString(16).ToUpper();
}
}
public class BitField : Value
{
private int _Least;
private int _Most;
private string _Disp;
private List