예제 #1
0
 public static BitsConst Multiply(BitsConst left, int right) => left * Convert(right);
예제 #2
0
 public BitsArrayValue(BitsConst data) { _data = data; }
예제 #3
0
 public BitsConst Slash(BitsConst right, Size size) => Divide(right, size);
예제 #4
0
 public BitsStackData(BitsConst data, IOutStream outStream)
     : base(outStream)
 {
     _data = data;
     Tracer.Assert(!_data.Size.IsZero);
 }
예제 #5
0
 static BitsConst Paste(BitsConst bitsConst, NonListStackData data)
     => bitsConst.Concat(data.GetBitsConst());
예제 #6
0
 public static BitsConst Divide(BitsConst left, int right) => left / Convert(right);
예제 #7
0
 internal BitsConst BitArrayBinaryOp(string operation, Size size, BitsConst right)
 {
     var methodInfo = typeof(BitsConst).GetMethod(operation);
     if(methodInfo == null)
         throw new MissingMethodException(operation);
     return (BitsConst) methodInfo.Invoke(this, new object[] {right, size});
 }
예제 #8
0
 public BitsConst LessEqual(BitsConst right, Size size)
     => ToBitsConst(AsInteger <= right.AsInteger, size);
예제 #9
0
 public BitsConst LessGreater(BitsConst right, Size size)
     => ToBitsConst(AsInteger != right.AsInteger, size);
예제 #10
0
 public BitsConst Minus(BitsConst right, Size size) => Plus(right * -1, size);
예제 #11
0
 public BitsConst GreaterEqual(BitsConst right, Size size)
     => ToBitsConst(AsInteger >= right.AsInteger, size);
예제 #12
0
 public BitsConst Plus(BitsConst right, Size size)
 {
     var xResult = new BitsConst(this, size);
     var yResult = new BitsConst(right, size);
     xResult.AddAndKeepSize(yResult);
     return xResult;
 }
예제 #13
0
 public BitsConst BytePlus(BitsConst left, int bytes) => Plus(left, SegmentBits * bytes);
예제 #14
0
 public BitsConst Divide(BitsConst right, Size size)
 {
     if(!(Marshal.SizeOf(typeof(long)) * 8 >= size.ToInt()))
         Tracer.AssertionFailed
             (
                 @"sizeof(Int64)*8 >= size.ToInt()",
                 () => "right=" + right + ";size=" + size.Dump());
     return Convert(ToInt64() / right.ToInt64()).Resize(size);
 }
예제 #15
0
 BitsConst(BitsConst value, Size size)
     : this(size)
 {
     MoveData(_data, Size, value._data, value.Size);
 }
예제 #16
0
 public BitsConst Concat(BitsConst other)
 {
     Size.AssertAlignedSize(SegmentAlignBits);
     var result = new BitsConst(Size + other.Size);
     DataHandler.MoveBytes(DataSize(Size), result._data, 0, _data, 0);
     DataHandler.MoveBytes
         (DataSize(other.Size), result._data, DataSize(Size), other._data, 0);
     return result;
 }
예제 #17
0
 public static BitsConst Divide(BitsConst left, BitsConst right)
     => left.Divide(right, DivideSize(left.Size, right.Size));
예제 #18
0
        public void PrintNumber(BitsConst radix, IOutStream outStream)
        {
            var r = radix.ToInt64();
            if(radix.Size.IsZero)
                r = 10;
            var left = ToString((int) r);

            outStream.AddData(left);
        }
예제 #19
0
 void AddAndKeepSize(BitsConst left)
 {
     short carry = 0;
     for(var i = 0; i < _data.Length; i++)
     {
         carry += _data[i];
         carry += left._data[i];
         _data[i] = (byte) carry;
         carry /= (short) SegmentValues;
     }
     return;
 }
예제 #20
0
 public static BitsConst Add(BitsConst left, BitsConst right)
     => left.Plus(right, PlusSize(left.Size, right.Size));
예제 #21
0
 void IVisitor.BitsArray(Size size, BitsConst data)
 {
     if(size.IsZero)
         return;
     Push(new BitsStackData(data.Resize(size), _context.OutStream));
 }
예제 #22
0
 public static BitsConst Subtract(BitsConst left, BitsConst right)
     => left.Plus(right * -1, PlusSize(left.Size, right.Size));
예제 #23
0
 void IVisitor.BitsArray(Size size, BitsConst data)
     => AddCode("data.SizedPush({0}{1})", size.ByteCount, data.ByteSequence());
예제 #24
0
 public static BitsConst Subtract(int left, BitsConst right) => Convert(left) - right;
예제 #25
0
 void IVisitor.BitsArray(Size size, BitsConst data)
 {
     var startAddress = (_startAddress - size).ToInt();
     var element = FormalValueAccess.BitsArray(data);
     SetFormalValues(element, startAddress, size);
 }
예제 #26
0
 public static BitsConst Multiply(BitsConst left, BitsConst right)
     => left.Multiply(right, MultiplySize(left.Size, right.Size));
예제 #27
0
 public static IFormalValue BitsArray(BitsConst data) => new BitsArrayValue(data);
예제 #28
0
 public BitsConst Star(BitsConst right, Size size) => Multiply(right, size);