Commit 601bdd59 authored by LiXiaoyu's avatar LiXiaoyu

running up

parent f47bdd9c
......@@ -6,15 +6,23 @@
#include <iostream>
leveldb::DB* db = nullptr;
leveldb::DB* db = nullptr ;
leveldb::Options options;
/*
bool leveldb_init() {
if(db != nullptr)
return true;
options.create_if_missing = true;
leveldb::Status status = leveldb::DB::Open(options, "mzya.db", &db);
return status.ok();
}*/
//todo db name
leveldb::DB* leveldb_init() {
options.create_if_missing = true;
//todo dup open?
leveldb::Status status = leveldb::DB::Open(options, "mzya.db", &db);
return status.ok() ? db : nullptr;
}
int32_t kv_get_handle(uint64_t *handle) {
......@@ -23,9 +31,11 @@ int32_t kv_get_handle(uint64_t *handle) {
if(db == nullptr)
return -1;
*/
/*
if (!leveldb_init()) {
return -1;
}
*/
*handle = reinterpret_cast<uint64_t>(db);
return 0;
}
......
#include <iostream>
#include <sstream>
#include <leveldb/db.h>
#include "../../contract/myContract.hpp"
int main() {
myContract c(9527);
std::string k = "mykey1";
std::string v1 = "myvalue1";
std::string v2;
c.set(k, v1);
c.get(k, v2);
std::cout << k << " : " << v2 << '\n';
return 0;
}
int main1() {
leveldb::DB* db;
leveldb::Options options;
options.create_if_missing = true;
leveldb::Status status = leveldb::DB::Open(options, "mzya.db", &db);
if(false == status.ok()) {
std::cerr << status.ToString() << '\n';
return -1;
}
/*
leveldb::WriteOptions wirteOpt;
for(size_t i = 0; i < 256; ++i) {
std::ostringstream key;
key << i;
db->Put(wirteOpt, key.str(), "hello");
}*/
//leveldb::Iterator
/*
auto it = db->NewIterator(leveldb::ReadOptions());
for(it->SeekToFirst(); it->Valid(); it->Next()) {
std::cout << it->key().ToString() << " : " << it->value().ToString() << '\n';
}
if (false == it->status().ok())
std::cerr << it->status().ToString() << '\n';
delete it;
*/
std::string value;
leveldb::Status s = db->Get(leveldb::ReadOptions(), "1999", &value);
if(! s.ok()) {
std::cerr << s.ToString() << '\n';
return -1;
}
std::cout << value << '\n';
delete db;
return 0;
}
/*
* #include <iostream>
#include <sstream>
#include <string>
#include "leveldb/db.h"
using namespace std;
int main(int argc, char** argv)
{
// Set up database connection information and open database
leveldb::DB* db;
leveldb::Options options;
options.create_if_missing = true;
leveldb::Status status = leveldb::DB::Open(options, "./testdb", &db);
if (false == status.ok())
{
cerr << "Unable to open/create test database './testdb'" << endl;
cerr << status.ToString() << endl;
return -1;
}
// Add 256 values to the database
leveldb::WriteOptions writeOptions;
for (unsigned int i = 0; i < 256; ++i)
{
ostringstream keyStream;
keyStream << "Key" << i;
ostringstream valueStream;
valueStream << "Test data value: " << i;
db->Put(writeOptions, keyStream.str(), valueStream.str());
}
// Iterate over each item in the database and print them
leveldb::Iterator* it = db->NewIterator(leveldb::ReadOptions());
for (it->SeekToFirst(); it->Valid(); it->Next())
{
cout << it->key().ToString() << " : " << it->value().ToString() << endl;
}
if (false == it->status().ok())
{
cerr << "An error was found during the scan" << endl;
cerr << it->status().ToString() << endl;
}
delete it;
// Close the database
delete db;
}
*/
package main
import "fmt"
func main() {
fmt.Println("hello world")
//init db
//contract obj
//action1
//action2
}
//
// Created by lxy on 9/3/18.
//
#ifndef CONTRACT_KV_INTERFACE_TMMMP_H
#define CONTRACT_KV_INTERFACE_TMMMP_H
#endif //CONTRACT_KV_INTERFACE_TMMMP_H
//
// Created by lxy on 8/30/18.
//
#include "../../contract/kv.h"
#include <leveldb/db.h>
#include <iostream>
leveldb::DB* db = nullptr ;
leveldb::Options options;
bool leveldb_init() {
if(db != nullptr)
return true;
options.create_if_missing = true;
leveldb::Status status = leveldb::DB::Open(options, "mzya.db", &db);
return status.ok();
}
int32_t kv_get_handle(uint64_t *handle) {
//or map it
/*
if(db == nullptr)
return -1;
*/
if (!leveldb_init()) {
return -1;
}
*handle = reinterpret_cast<uint64_t>(db);
return 0;
}
int32_t kv_get(uint64_t handle, const void* key, uint32_t key_len, void** data, uint32_t* data_len) {
leveldb::DB *db = reinterpret_cast<decltype(db)>(handle);
std::string value;
leveldb::Status s = db->Get(leveldb::ReadOptions(), leveldb::Slice(reinterpret_cast<const char*>(key), key_len), &value);
if(! s.ok()) {
std::cerr << s.ToString() << '\n';
return -1;
}
*data = new char[value.length() + 1];
strcpy(reinterpret_cast<char*>(*data), value.c_str());
*data_len = value.length();
return 0;
}
int32_t kv_set(uint64_t handle, const void* key, uint32_t key_len, const void* data, uint32_t data_len) {
leveldb::DB *db = reinterpret_cast<decltype(db)>(handle);
leveldb::Status s = db->Put(leveldb::WriteOptions(), leveldb::Slice(reinterpret_cast<const char*>(key), key_len),
leveldb::Slice(reinterpret_cast<const char*>(data), data_len));
if(!s.ok())
return -1;
return 0;
}
//
// Created by lxy on 9/3/18.
//
#include "myContract.hpp"
#include "../../contract/myContract.hpp"
#include "myContract.h"
uint64_t levelInit();
void initKv() {
uint64_t h = levelInit();
std::cout << "h: " << h << std::endl;
}
myContract_c myContractInit(uint64_t name, uint64_t handle) {
myContract* con = new myContract(name, handle);
std::cout << "alloc\n";
return reinterpret_cast<myContract_c >(con);
}
void myContractFree(myContract_c c) {
myContract* con = reinterpret_cast<myContract*>(c);
std::cout << "free\n";
delete con;
}
//todo arg
......@@ -22,5 +31,6 @@ void myContractAction2(myContract_c c) {
myContract* con = reinterpret_cast<myContract*>(c);
std::string s;
con->action2("key1", s);
std::cout << s << '\n';
}
File deleted
#include <stdio.h>
#include "_cgo_export.h"
void pri(){
//printf("hey");
fprintf(stdout, "hey %d\r\n", myfunc(100));
fprintf(stderr, "hey\r\n");
fflush(stdout);
fflush(stderr);
kv_get(-1, "hello world", 10);
}
void try_string() {
GoString s;
s.p = "hello";
s.n = 5;
GoString ss = myfunc1(s);
fprintf(stdout, "ssss: %s\r\n", ss.p);
fflush(stdout);
}
int add(int a,int b){
return a+b;
}
package main
/*
void pri();
int add(int, int);
void try_string();
*/
#cgo LDFLAGS: -lstdc++ -L/home/lxy/workspace/mywork/contract_kv_interface/contract/build -lcontract -lleveldb
#include "myContract.h"
*/
import "C"
import (
"fmt"
"github.com/syndtr/goleveldb/leveldb"
"unsafe"
)
import "fmt"
//export myfunc
func myfunc(arg int) int {
return arg * 2
}
//export myfunc1
func myfunc1(s string) string {
ss := s
return ss
//return s
}
func main() {
fmt.Println("hello world")
//init db
C.initKv()
//contract obj
c := C.myContractInit(0, 0)
///int32_t kv_get(uint64_t handle, const void* key, uint32_t key_len, void** data, uint32_t* data_len)
/*
//export kv_get
func kv_get(handle C.uint64_t, key *C.void, key_len C.uint32_t, data **C.void, data_len *C.uint32_t) {
}*/
//action1
C.myContractAction1(c)
//export kv_get
func kv_get(handle C.ulonglong, key unsafe.Pointer, key_len C.uint) {
fmt.Println(handle)
fmt.Println(key_len)
str := *(*string)(key)
//fmt.Println(C.GoString(key))
fmt.Println(str)
}
func main() {
C.pri()
//fmt.Println(C.add(2, 1))
//C.try_string()
//C.try_string()
//fmt.Println(C.try_string)
//fmt.Println(myfunc1("hello"))
return
}
//action2
C.myContractAction2(c)
func main1() {
db, err := leveldb.OpenFile("mzya", nil)
defer db.Close()
if err != nil {
fmt.Println(err)
return
}
err = db.Put([]byte("key"), []byte("value"), nil)
if err != nil {
fmt.Println(err)
return
}
data, err := db.Get([]byte("key"), nil)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(string(data))
db.Delete([]byte("key"), nil)
return
//
C.myContractFree(c)
}
......@@ -10,6 +10,8 @@
extern "C" {
#endif
void initKv();
typedef void* myContract_c;
myContract_c myContractInit(uint64_t, uint64_t);
void myContractFree(myContract_c);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment