"""\r
import math\r
import struct\r
+import sys\r
+import io\r
\r
\r
+def unicode(src):\r
+ """\r
+ literal to unicode for python2 and python3 compatiblity.\r
+\r
+ in python2 str to unicode.\r
+ in python3 str(as unicode) to str.\r
+ """\r
+ if sys.version_info[0]<3:\r
+ return src.decode('utf-8')\r
+ else:\r
+ return src\r
+\r
"""\r
common structures.\r
"""\r
def __str__(self):\r
return "<%f %f>" % (self.x, self.y)\r
\r
+ def __eq__(self, rhs):\r
+ return self.x==rhs.x and self.y==rhs.y\r
+\r
+ def __ne__(self, rhs):\r
+ return not self.__eq__(rhs)\r
+\r
def __getitem__(self, key):\r
if key==0:\r
return self.x\r
self.z=z\r
\r
def __str__(self):\r
- return "<%f %f %f>" % (self.x, self.y, self.z)\r
+ return "<%f %.32f %f>" % (self.x, self.y, self.z)\r
+\r
+ def __eq__(self, rhs):\r
+ return self.x==rhs.x and self.y==rhs.y and self.z==rhs.z\r
+\r
+ def __ne__(self, rhs):\r
+ return not self.__eq__(rhs)\r
\r
def __getitem__(self, key):\r
if key==0:\r
self.g=g\r
self.b=b\r
\r
+ def __eq__(self, rhs):\r
+ return self.r==rhs.r and self.g==rhs.g and self.b==rhs.b\r
+\r
+ def __ne__(self, rhs):\r
+ return not self.__eq__(rhs)\r
+\r
def __getitem__(self, key):\r
if key==0:\r
return self.r\r
self.b=b\r
self.a=a\r
\r
+ def __eq__(self, rhs):\r
+ return self.r==rhs.r and self.g==rhs.g and self.b==rhs.b and self.a==rhs.a\r
+\r
+ def __ne__(self, rhs):\r
+ return not self.__eq__(rhs)\r
+\r
def __getitem__(self, key):\r
if key==0:\r
return self.r\r
\r
\r
class ParseException(Exception):\r
+ """\r
+ Exception in reader\r
+ """\r
pass\r
\r
\r
return f.read()\r
\r
\r
-class BinaryLoader(object):\r
- """general BinaryLoader\r
+class BinaryReader(object):\r
+ """general BinaryReader\r
"""\r
- def __init__(self, io):\r
- self.io=io\r
+ def __init__(self, ios):\r
+ current=ios.tell()\r
+ ios.seek(0, io.SEEK_END)\r
+ self.end=ios.tell()\r
+ ios.seek(current)\r
+ self.ios=ios\r
\r
def is_end(self):\r
- return not self.io.readable()\r
+ #print(self.ios.tell(), self.end)\r
+ return self.ios.tell()>=self.end\r
+ #return not self.ios.readable()\r
\r
def unpack(self, fmt, size):\r
- result=struct.unpack(fmt, self.io.read(size))\r
+ result=struct.unpack(fmt, self.ios.read(size))\r
return result[0]\r
\r
+ def read_int(self, size):\r
+ if size==1:\r
+ return self.unpack("b", size)\r
+ if size==2:\r
+ return self.unpack("h", size)\r
+ if size==4:\r
+ return self.unpack("i", size)\r
+ print("not reach here")\r
+ raise ParseException("invalid int size: "+size)\r
+\r
def read_uint(self, size):\r
if size==1:\r
return self.unpack("B", size)\r
self.read_float()\r
)\r
\r
+\r
+class WriteException(Exception):\r
+ """\r
+ Exception in writer\r
+ """\r
+ pass\r
+\r
+\r
+class BinaryWriter(object):\r
+ def __init__(self, ios):\r
+ self.ios=ios\r
+\r
+ def write_bytes(self, v, size=None):\r
+ if size:\r
+ self.ios.write(struct.pack("={0}s".format(size), v))\r
+ else:\r
+ self.ios.write(v)\r
+\r
+ def write_float(self, v):\r
+ self.ios.write(struct.pack("f", v))\r
+\r
+ def write_int(self, v, size):\r
+ if size==1:\r
+ self.ios.write(struct.pack("b", v))\r
+ elif size==2:\r
+ self.ios.write(struct.pack("h", v))\r
+ elif size==4:\r
+ self.ios.write(struct.pack("i", v))\r
+ else:\r
+ raise WriteError("invalid int uint size")\r
+\r
+ def write_uint(self, v, size):\r
+ if size==1:\r
+ self.ios.write(struct.pack("B", v))\r
+ elif size==2:\r
+ self.ios.write(struct.pack("H", v))\r
+ elif size==4:\r
+ self.ios.write(struct.pack("I", v))\r
+ else:\r
+ raise WriteError("invalid int uint size")\r
+\r
+ def write_vector2(self, v):\r
+ self.ios.write(struct.pack("=2f", v.x, v.y))\r
+\r
+ def write_vector3(self, v):\r
+ self.ios.write(struct.pack("=3f", v.x, v.y, v.z))\r
+\r
+ def write_rgb(self, v):\r
+ self.ios.write(struct.pack("=3f", v.r, v.g, v.b))\r
+\r
+ def write_rgba(self, v):\r
+ self.ios.write(struct.pack("=4f", v.r, v.g, v.b, v.a))\r
+\r
+\r