116 lines
1.8 KiB
Go
116 lines
1.8 KiB
Go
|
|
package atom
|
|
|
|
import (
|
|
"io"
|
|
"io/ioutil"
|
|
)
|
|
|
|
type Fixed32 uint32
|
|
type TimeStamp uint32
|
|
|
|
func ReadBytes(r io.Reader, n int) (res []byte, err error) {
|
|
res = make([]byte, n)
|
|
if n, err = r.Read(res); err != nil {
|
|
return
|
|
}
|
|
return
|
|
}
|
|
|
|
func ReadBytesLeft(r *io.LimitedReader) (res []byte, err error) {
|
|
return ReadBytes(r, int(r.N))
|
|
}
|
|
|
|
func ReadUInt(r io.Reader, n int) (res uint, err error) {
|
|
var b []byte
|
|
if b, err = ReadBytes(r, n); err != nil {
|
|
return
|
|
}
|
|
for i := 0; i < n; i++ {
|
|
res <<= 8
|
|
res += uint(b[i])
|
|
}
|
|
return
|
|
}
|
|
|
|
func ReadInt(r io.Reader, n int) (res int, err error) {
|
|
var ui uint
|
|
if ui, err = ReadUInt(r, n); err != nil {
|
|
return
|
|
}
|
|
res = int(ui)
|
|
return
|
|
}
|
|
|
|
func ReadFixed32(r io.Reader, n int) (res Fixed32, err error) {
|
|
var ui uint
|
|
if ui, err = ReadUInt(r, n); err != nil {
|
|
return
|
|
}
|
|
res = Fixed32(ui)
|
|
return
|
|
}
|
|
|
|
func ReadTimeStamp(r io.Reader, n int) (res TimeStamp, err error) {
|
|
var ui uint
|
|
if ui, err = ReadUInt(r, n); err != nil {
|
|
return
|
|
}
|
|
res = TimeStamp(ui)
|
|
return
|
|
}
|
|
|
|
func ReadString(r io.Reader, n int) (res string, err error) {
|
|
var b []byte
|
|
if b, err = ReadBytes(r, n); err != nil {
|
|
return
|
|
}
|
|
res = string(b)
|
|
return
|
|
}
|
|
|
|
func ReadDummy(r io.Reader, n int) (res int, err error) {
|
|
_, err = io.CopyN(ioutil.Discard, r, int64(n))
|
|
return
|
|
}
|
|
|
|
/*
|
|
func (self Reader) ReadAtom(atom Atom) (res Atom, err error) {
|
|
for {
|
|
var size int
|
|
if size, err = self.ReadInt(4); err != nil {
|
|
return
|
|
}
|
|
if size == 0 {
|
|
continue
|
|
}
|
|
|
|
var cc4 string
|
|
if cc4, err = self.ReadString(4); err != nil {
|
|
return
|
|
}
|
|
if atom.CC4() != cc4 {
|
|
if err = self.Skip(size); err != nil {
|
|
return
|
|
}
|
|
continue
|
|
}
|
|
|
|
reader := &io.LimitedReader{
|
|
R: self.Reader,
|
|
N: int64(size - 8),
|
|
}
|
|
if err = atom.Read(Reader{reader}); err != nil {
|
|
return
|
|
}
|
|
if err = self.Skip(int(reader.N)); err != nil {
|
|
return
|
|
}
|
|
|
|
res = atom
|
|
return
|
|
}
|
|
}
|
|
*/
|
|
|