2 * To change this template, choose Tools | Templates
3 * and open the template in the editor.
6 package com.enea.jcarder.transactionalinterfaces;
8 //import com.enea.jcarder.transactionalinterfaces.bytebuffer.byteholder;
9 import com.enea.jcarder.util.Counter;
10 import dstm2.AtomicArray;
11 import dstm2.AtomicByteArray;
14 import dstm2.factory.Factory;
15 import java.nio.BufferOverflowException;
16 import java.nio.ByteBuffer;
22 public class bytebuffer {
25 static Factory<bytebufferif> factory = Thread.makeFactory(bytebufferif.class);
26 // public static Factory<byteholder> factory2 = Thread.makeFactory(byteholder.class);
29 public bytebufferif mbuffer;
31 public int capacity(){
32 return mbuffer.getCapacity();
35 public int position(){
36 return mbuffer.getPosition();
39 public bytebufferif flip(){
40 mbuffer.setLimit(mbuffer.getPosition());
41 mbuffer.setPosition(0);
45 public final bytebufferif clear(){
46 mbuffer.setPosition(0);
47 mbuffer.setLimit(mbuffer.getCapacity());
51 public final boolean hasRemaining(){
52 return mbuffer.getPosition() < mbuffer.getLimit();
55 public final int remaining(){
56 return mbuffer.getLimit() - mbuffer.getPosition();
59 public void put(byte value){
61 AtomicByteArray ar = mbuffer.getByteHolderar();
63 ar.set(mbuffer.getPosition(),value);
64 mbuffer.setPosition(mbuffer.getPosition()+1);
70 public void put(ByteBuffer value){
72 if (remaining() < value.remaining())
73 throw new BufferOverflowException();
75 /*AtomicArray<byteholder> ar = mbuffer.getByteHolder();
76 while(value.hasRemaining()){
77 byteholder bh = mbuffer.getByteHolder().get(mbuffer.getPosition());
78 if ((bh = mbuffer.getByteHolder().get(mbuffer.getPosition())) == null){
79 bh = factory2.create();
81 bh.setByte(value.get());
82 ar.set(mbuffer.getPosition(),bh);
83 mbuffer.setPosition(mbuffer.getPosition()+1);
85 AtomicByteArray ar = mbuffer.getByteHolderar();
86 while(value.hasRemaining()){
89 ar.set(mbuffer.getPosition(),Byte.valueOf(value.get()));
90 mbuffer.setPosition(mbuffer.getPosition()+1);
92 // while(value.hasRemaining()){
93 // if (mbuffer.getByteHolder().get(mbuffer.getPosition()) == null)
94 // mbuffer.getByteHolder().set(mbuffer.getPosition(), factory2.create());
95 // mbuffer.getByteHolder.set((mbuffer.getPosition()), value.get());
96 // mbuffer.setPosition(mbuffer.getPosition()+1);
97 //System.out.println("sss");
103 public bytebuffer allocateDirect(int capacity){
104 System.out.println("allocate " + capacity);
105 mbuffer = factory.create();
106 mbuffer.setByteHolderar(new AtomicByteArray(Byte.class,capacity));
107 mbuffer.setPosition(0);
108 mbuffer.setLimit(capacity);
109 mbuffer.setCapacity(capacity);
110 // for (int i=0; i<capacity; i++){
111 // ar.set(i, factory2.create());
113 // for (int i=0; i<capacity; i++)
114 // mbuffer.getByteHolder().set(i, factory2.create());
115 // mbuffer.getByteHolder().set(0, factory2.create());
116 // mbuffer.getByteHolder().get(0).setByte((byte)2);
120 public byte[] getBytes(){
121 // System.out.println("getbytes");
122 int length = remaining();
123 byte[] result = new byte[length];
125 /* while (hasRemaining()) {
126 result[i] = mbuffer.getByteHolder().get(mbuffer.getPosition()).getByte();
127 mbuffer.setPosition(mbuffer.getPosition()+1);
130 while (hasRemaining()) {
131 result[i] = mbuffer.getByteHolderar().get(mbuffer.getPosition()).byteValue();
132 mbuffer.setPosition(mbuffer.getPosition()+1);
138 @atomic public interface bytebufferif{
140 void setLimit(int value);
142 void setPosition(int value);
144 void setCapacity(int value);
145 AtomicByteArray getByteHolderar();
146 void setByteHolderar(AtomicByteArray bytes);