# works against r44520

from pypy.rpython.memory.lladdress import raw_malloc, raw_free

class Buffer(object):
    def __init__(self, capacity=4096):
        self.mem = raw_malloc(capacity)
        print dir(self.mem)
        self.pos = 0
        
    def rewind(self):
        self.pos = 0

    def get_int32(self):
        addr = self.mem + self.pos
        value = addr.signed[0]
        self.pos += 4
        return value

    def put_int32(self, value):
        addr = self.mem + self.pos
        addr.signed[0] = value
        self.pos += 4

    def get_char(self):
        addr = self.mem + self.pos
        value = addr.char[0]
        self.pos += 1
        return value

    def put_char(self, value):
        addr = self.mem + self.pos
        addr.char[0] = value
        self.pos += 1

    def __del__(self):
        raw_free(self.mem)

def demo(value):
    buf = Buffer()
    buf.put_int32(value)
    buf.rewind()
    x = buf.get_int32()
    buf.rewind()
    #print "%s%s%s%s" % (buf.get_char(), buf.get_char(), buf.get_char(), buf.get_char())
    #buf.rewind()
    buf.put_char('X')
    buf.rewind()
    x += buf.get_char() == 'X'
    return x

def test_1():
    from pypy.translator.c.test.test_genc import compile

    _demo = compile(demo, [int])

    assert _demo(12345678) == 12345679


if __name__ == "__main__":
#    test_1()
    print demo(1234)



