*** empty log message ***
[IRC.git] / Robust / Transactions / jcarderdstm2version / src / com / enea / jcarder / transactionalinterfaces / bytebuffer.java
1 /*
2  * To change this template, choose Tools | Templates
3  * and open the template in the editor.
4  */
5
6 package com.enea.jcarder.transactionalinterfaces;
7
8 //import com.enea.jcarder.transactionalinterfaces.bytebuffer.byteholder;
9 import com.enea.jcarder.util.Counter;
10 import dstm2.AtomicArray;
11 import dstm2.AtomicByteArray;
12 import dstm2.atomic;
13 import dstm2.Thread;
14 import dstm2.factory.Factory;
15 import java.nio.BufferOverflowException;
16 import java.nio.ByteBuffer;
17
18 /**
19  *
20  * @author navid
21  */
22 public class bytebuffer {
23     
24    
25     static Factory<bytebufferif> factory = Thread.makeFactory(bytebufferif.class);
26 //    public static Factory<byteholder> factory2 = Thread.makeFactory(byteholder.class);
27    
28     
29     public bytebufferif mbuffer;
30     
31     public int capacity(){
32         return mbuffer.getCapacity();
33     }
34     
35     public int position(){
36         return mbuffer.getPosition();
37     }
38     
39     public bytebufferif flip(){
40         mbuffer.setLimit(mbuffer.getPosition());
41         mbuffer.setPosition(0);
42         return mbuffer;
43     }
44     
45     public final bytebufferif clear(){
46         mbuffer.setPosition(0);
47         mbuffer.setLimit(mbuffer.getCapacity());
48         return mbuffer;
49     }
50     
51     public final boolean hasRemaining(){
52         return mbuffer.getPosition() < mbuffer.getLimit();
53     }
54     
55     public final int remaining(){
56         return mbuffer.getLimit() - mbuffer.getPosition();
57     }
58     
59     public void put(byte value){
60
61          AtomicByteArray ar = mbuffer.getByteHolderar();
62
63          ar.set(mbuffer.getPosition(),value);
64          mbuffer.setPosition(mbuffer.getPosition()+1);
65          
66     }
67     
68    
69     
70     public void put(ByteBuffer value){
71         
72         if (remaining() < value.remaining())
73             throw new BufferOverflowException();
74         
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();
80             }
81             bh.setByte(value.get());
82             ar.set(mbuffer.getPosition(),bh);
83             mbuffer.setPosition(mbuffer.getPosition()+1);
84          }*/
85         AtomicByteArray ar = mbuffer.getByteHolderar();
86          while(value.hasRemaining()){
87             
88             
89             ar.set(mbuffer.getPosition(),Byte.valueOf(value.get()));
90             mbuffer.setPosition(mbuffer.getPosition()+1);
91          }
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");
98         //}
99     }
100     
101
102     
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());
112         //}
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);
117         return this;
118     }
119     
120     public byte[] getBytes(){
121      //   System.out.println("getbytes");
122         int length = remaining();
123         byte[] result = new byte[length];
124         int i = 0;
125        /* while (hasRemaining()) {
126             result[i] = mbuffer.getByteHolder().get(mbuffer.getPosition()).getByte();
127             mbuffer.setPosition(mbuffer.getPosition()+1);
128             i++;
129         }*/
130         while (hasRemaining()) {
131             result[i] =  mbuffer.getByteHolderar().get(mbuffer.getPosition()).byteValue();
132             mbuffer.setPosition(mbuffer.getPosition()+1);
133             i++;
134         }
135         return result;
136     }
137      
138      @atomic public interface bytebufferif{
139         int getLimit();
140         void setLimit(int value);
141         int getPosition();
142         void setPosition(int value);
143         int getCapacity();
144         void setCapacity(int value);
145         AtomicByteArray getByteHolderar();
146         void setByteHolderar(AtomicByteArray bytes);
147
148      }
149  
150      
151     
152
153 }