org.apache.daffodil.io.DataInputStreamImplMixin.scala Maven / Gradle / Ivy
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.daffodil.io
import org.apache.daffodil.exceptions.Assert
import org.apache.daffodil.util.MaybeULong
trait DataInputStreamImplMixin extends DataInputStream
with DataStreamCommonImplMixin
with LocalBufferMixin {
override def setDebugging(setting: Boolean) {
if (bitPos0b > 0) throw new IllegalStateException("Must call before any access to data")
cst.debugging = setting
}
final override def isAligned(bitAlignment1b: Int): Boolean = {
Assert.usage(bitAlignment1b >= 1)
val alignment = bitPos0b % bitAlignment1b
val res = alignment == 0
res
}
final override def align(bitAlignment1b: Int, finfo: FormatInfo): Boolean = {
if (isAligned(bitAlignment1b)) return true
val deltaBits = bitAlignment1b - (bitPos0b % bitAlignment1b)
skip(deltaBits, finfo)
}
final override def remainingBits = {
if (this.bitLimit0b.isEmpty) MaybeULong.Nope
else {
val lim = bitLimit0b.get
Assert.invariant(lim >= 0)
val nBits = lim - bitPos0b
MaybeULong(nBits)
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy