leveldb_get() private method

private leveldb_get ( IntPtr db, IntPtr options, IntPtr key, IntPtr keylen, IntPtr &vallen, IntPtr &errptr ) : IntPtr
db System.IntPtr
options System.IntPtr
key System.IntPtr
keylen System.IntPtr
vallen System.IntPtr
errptr System.IntPtr
return System.IntPtr
Exemplo n.º 1
0
        public NativeArray <T> GetRaw <T>(NativeArray key, ReadOptions options) where T : struct
        {
            IntPtr error;
            IntPtr length;

            var handle = new LevelDbFreeHandle();

            // TODO: Remove typecast to int
            var v = (Ptr <T>)LevelDbInterop.leveldb_get(
                Handle,
                options.Handle,
                key.BaseAddr,
                key.ByteLength,
                out length,
                out error);

            handle.SetHandle((IntPtr)v);

            // round down, truncating the array slightly if needed
            var count = (IntPtr)((ulong)length / Ptr <T> .SizeofT);

            return(new NativeArray <T>(v, count, handle));
        }
Exemplo n.º 2
0
        /// <summary>
        /// If the database contains an entry for "key" return the value,
        /// otherwise return null.
        /// </summary>
        public byte[] Get(byte[] key, ReadOptions options)
        {
            IntPtr error;
            IntPtr length;
            var    v = LevelDbInterop.leveldb_get(Handle, options.Handle, key, (IntPtr)key.LongLength, out length, out error);

            Throw(error);

            if (v == IntPtr.Zero)
            {
                return(null);
            }

            try {
                var bytes = new byte[(long)length];

                // TODO: Consider copy loop, as Marshal.Copy has 2GB-1 limit, or native pointers
                Marshal.Copy(v, bytes, 0, (int)length);
                return(bytes);
            } finally {
                LevelDbInterop.leveldb_free(v);
            }
        }
Exemplo n.º 3
0
        /// <summary>
        /// If the database contains an entry for "key" return the value,
        /// otherwise return null.
        /// </summary>
        public int[] Get(int key, ReadOptions options)
        {
            IntPtr error;
            IntPtr length;
            IntPtr v;

            v = LevelDbInterop.leveldb_get(Handle, options.Handle, ref key, (IntPtr)sizeof(int), out length, out error);
            Throw(error);

            if (v == IntPtr.Zero)
            {
                return(null);
            }

            try {
                var bytes = new int[(long)length / 4];

                // TODO: consider >2GB-1
                Marshal.Copy(v, bytes, 0, checked ((int)bytes.LongLength));
                return(bytes);
            } finally {
                LevelDbInterop.leveldb_free(v);
            }
        }