using a single encoder and decoder

This commit is contained in:
Radu Ioan Fericean
2012-03-01 18:23:02 +02:00
parent a49bb1ce2a
commit 8f6dd0af5a
3 changed files with 51 additions and 76 deletions

View File

@@ -27,17 +27,11 @@ import (
type KyotoStorage struct {
//db *kc.DB
db *cabinet.KCDB
buf bytes.Buffer
decAP *gob.Decoder
encAP *gob.Encoder
decDest *gob.Decoder
encDest *gob.Encoder
decTP *gob.Decoder
encTP *gob.Encoder
decUB *gob.Decoder
encUB *gob.Encoder
mux sync.Mutex // we need norma lock because we reset the buf variable
db *cabinet.KCDB
buf bytes.Buffer
dec *gob.Decoder
enc *gob.Encoder
mux sync.Mutex // we need norma lock because we reset the buf variable
}
func NewKyotoStorage(filaName string) (*KyotoStorage, error) {
@@ -45,34 +39,28 @@ func NewKyotoStorage(filaName string) (*KyotoStorage, error) {
err := ndb.Open(filaName, cabinet.KCOWRITER|cabinet.KCOCREATE)
ks := &KyotoStorage{db: ndb}
ks.decAP = gob.NewDecoder(&ks.buf)
ks.encAP = gob.NewEncoder(&ks.buf)
ks.decDest = gob.NewDecoder(&ks.buf)
ks.encDest = gob.NewEncoder(&ks.buf)
ks.decTP = gob.NewDecoder(&ks.buf)
ks.encTP = gob.NewEncoder(&ks.buf)
ks.decUB = gob.NewDecoder(&ks.buf)
ks.encUB = gob.NewEncoder(&ks.buf)
ks.trainGobEncodersAndDecoders()
ks.dec = gob.NewDecoder(&ks.buf)
ks.enc = gob.NewEncoder(&ks.buf)
ks.trainGobEncoderAndDecoder()
return ks, err
}
func (ks *KyotoStorage) trainGobEncodersAndDecoders() {
func (ks *KyotoStorage) trainGobEncoderAndDecoder() {
aps := []*ActivationPeriod{&ActivationPeriod{}}
ks.encAP.Encode(aps)
ks.decAP.Decode(&aps)
ks.enc.Encode(aps)
ks.dec.Decode(&aps)
ks.buf.Reset()
dest := &Destination{}
ks.encDest.Encode(dest)
ks.decDest.Decode(&dest)
ks.enc.Encode(dest)
ks.dec.Decode(&dest)
ks.buf.Reset()
tp := &TariffPlan{}
ks.encTP.Encode(tp)
ks.decTP.Decode(&tp)
ks.enc.Encode(tp)
ks.dec.Decode(&tp)
ks.buf.Reset()
ub := &UserBudget{}
ks.encUB.Encode(ub)
ks.decUB.Decode(&ub)
ks.enc.Encode(ub)
ks.dec.Decode(&ub)
ks.buf.Reset()
}
@@ -85,7 +73,7 @@ func (ks *KyotoStorage) SetActivationPeriods(key string, aps []*ActivationPeriod
defer ks.mux.Unlock()
ks.buf.Reset()
ks.encAP.Encode(aps)
ks.enc.Encode(aps)
return ks.db.Set([]byte(key), ks.buf.Bytes())
}
@@ -97,7 +85,7 @@ func (ks *KyotoStorage) GetActivationPeriods(key string) (aps []*ActivationPerio
ks.buf.Reset()
ks.buf.Write(values)
ks.decAP.Decode(&aps)
ks.dec.Decode(&aps)
return
}
@@ -106,7 +94,7 @@ func (ks *KyotoStorage) SetDestination(dest *Destination) error {
defer ks.mux.Unlock()
ks.buf.Reset()
ks.encDest.Encode(dest)
ks.enc.Encode(dest)
return ks.db.Set([]byte(dest.Id), ks.buf.Bytes())
}
@@ -118,7 +106,7 @@ func (ks *KyotoStorage) GetDestination(key string) (dest *Destination, err error
ks.buf.Reset()
ks.buf.Write(values)
ks.decDest.Decode(&dest)
ks.dec.Decode(&dest)
return
}
@@ -127,7 +115,7 @@ func (ks *KyotoStorage) SetTariffPlan(tp *TariffPlan) error {
defer ks.mux.Unlock()
ks.buf.Reset()
ks.encTP.Encode(tp)
ks.enc.Encode(tp)
return ks.db.Set([]byte(tp.Id), ks.buf.Bytes())
}
@@ -139,7 +127,7 @@ func (ks *KyotoStorage) GetTariffPlan(key string) (tp *TariffPlan, err error) {
ks.buf.Reset()
ks.buf.Write(values)
ks.decTP.Decode(&tp)
ks.dec.Decode(&tp)
return
}
@@ -148,7 +136,7 @@ func (ks *KyotoStorage) SetUserBudget(ub *UserBudget) error {
defer ks.mux.Unlock()
ks.buf.Reset()
ks.encUB.Encode(ub)
ks.enc.Encode(ub)
return ks.db.Set([]byte(ub.Id), ks.buf.Bytes())
}
@@ -160,6 +148,6 @@ func (ks *KyotoStorage) GetUserBudget(key string) (ub *UserBudget, err error) {
ks.buf.Reset()
ks.buf.Write(values)
ks.decUB.Decode(&ub)
ks.dec.Decode(&ub)
return
}

View File

@@ -26,52 +26,39 @@ import (
)
type RedisStorage struct {
dbNb int
db *godis.Client
buf bytes.Buffer
decAP *gob.Decoder
encAP *gob.Encoder
decDest *gob.Decoder
encDest *gob.Encoder
decTP *gob.Decoder
encTP *gob.Encoder
decUB *gob.Decoder
encUB *gob.Encoder
mux sync.Mutex
dbNb int
db *godis.Client
buf bytes.Buffer
dec *gob.Decoder
enc *gob.Encoder
mux sync.Mutex
}
func NewRedisStorage(address string, db int) (*RedisStorage, error) {
ndb := godis.New(address, db, "")
rs := &RedisStorage{db: ndb, dbNb: db}
rs.decAP = gob.NewDecoder(&rs.buf)
rs.encAP = gob.NewEncoder(&rs.buf)
rs.decDest = gob.NewDecoder(&rs.buf)
rs.encDest = gob.NewEncoder(&rs.buf)
rs.decTP = gob.NewDecoder(&rs.buf)
rs.encTP = gob.NewEncoder(&rs.buf)
rs.decUB = gob.NewDecoder(&rs.buf)
rs.encUB = gob.NewEncoder(&rs.buf)
rs.trainGobEncodersAndDecoders()
rs.dec = gob.NewDecoder(&rs.buf)
rs.enc = gob.NewEncoder(&rs.buf)
rs.trainGobEncoderAndDecoder()
return rs, nil
}
func (rs *RedisStorage) trainGobEncodersAndDecoders() {
func (rs *RedisStorage) trainGobEncoderAndDecoder() {
aps := []*ActivationPeriod{&ActivationPeriod{}}
rs.encAP.Encode(aps)
rs.decAP.Decode(&aps)
rs.enc.Encode(aps)
rs.dec.Decode(&aps)
rs.buf.Reset()
dest := &Destination{}
rs.encDest.Encode(dest)
rs.decDest.Decode(&dest)
rs.enc.Encode(dest)
rs.dec.Decode(&dest)
rs.buf.Reset()
tp := &TariffPlan{}
rs.encTP.Encode(tp)
rs.decTP.Decode(&tp)
rs.enc.Encode(tp)
rs.dec.Decode(&tp)
rs.buf.Reset()
ub := &UserBudget{}
rs.encUB.Encode(ub)
rs.decUB.Decode(&ub)
rs.enc.Encode(ub)
rs.dec.Decode(&ub)
rs.buf.Reset()
}
@@ -85,7 +72,7 @@ func (rs *RedisStorage) SetActivationPeriods(key string, aps []*ActivationPeriod
defer rs.mux.Unlock()
rs.buf.Reset()
rs.encAP.Encode(aps)
rs.enc.Encode(aps)
return rs.db.Set(key, rs.buf.Bytes())
}
@@ -98,7 +85,7 @@ func (rs *RedisStorage) GetActivationPeriods(key string) (aps []*ActivationPerio
rs.buf.Reset()
rs.buf.Write(elem.Bytes())
rs.decAP.Decode(&aps)
rs.dec.Decode(&aps)
return
}
@@ -108,7 +95,7 @@ func (rs *RedisStorage) SetDestination(dest *Destination) error {
defer rs.mux.Unlock()
rs.buf.Reset()
rs.encDest.Encode(dest)
rs.enc.Encode(dest)
return rs.db.Set(dest.Id, rs.buf.Bytes())
}
@@ -120,7 +107,7 @@ func (rs *RedisStorage) GetDestination(key string) (dest *Destination, err error
elem, err := rs.db.Get(key)
rs.buf.Reset()
rs.buf.Write(elem.Bytes())
rs.decDest.Decode(&dest)
rs.dec.Decode(&dest)
return
}
@@ -130,7 +117,7 @@ func (rs *RedisStorage) SetTariffPlan(tp *TariffPlan) error {
defer rs.mux.Unlock()
rs.buf.Reset()
rs.encTP.Encode(tp)
rs.enc.Encode(tp)
return rs.db.Set(tp.Id, rs.buf.Bytes())
}
@@ -142,7 +129,7 @@ func (rs *RedisStorage) GetTariffPlan(key string) (tp *TariffPlan, err error) {
elem, err := rs.db.Get(key)
rs.buf.Reset()
rs.buf.Write(elem.Bytes())
rs.decTP.Decode(&tp)
rs.dec.Decode(&tp)
return
}
@@ -152,7 +139,7 @@ func (rs *RedisStorage) SetUserBudget(ub *UserBudget) error {
defer rs.mux.Unlock()
rs.buf.Reset()
rs.encUB.Encode(ub)
rs.enc.Encode(ub)
return rs.db.Set(ub.Id, rs.buf.Bytes())
}
@@ -164,6 +151,6 @@ func (rs *RedisStorage) GetUserBudget(key string) (ub *UserBudget, err error) {
elem, err := rs.db.Get(key)
rs.buf.Reset()
rs.buf.Write(elem.Bytes())
rs.decUB.Decode(&ub)
rs.dec.Decode(&ub)
return
}

Binary file not shown.