private int xClose(ref sqlite3_tokenizer_cursor pCursor) { if (this.ppCursor != IntPtr.Zero) { Marshal.FreeHGlobal(this.ppCursor); this.ppCursor = IntPtr.Zero; } return(SQLITE_OK); }
private int xNext(ref sqlite3_tokenizer_cursor pCursor, ref IntPtr ppToken, ref int pnBytes, ref int piStartOffset, ref int piEndOffset, ref int piPosition) { if (this.lastStringPtr != IntPtr.Zero) { Marshal.FreeHGlobal(this.lastStringPtr); this.lastStringPtr = IntPtr.Zero; } if (owner.MoveNext()) { byte[] bytes = SQLiteConvert.ToUTF8(owner.Token); pnBytes = bytes.Length; this.lastStringPtr = Marshal.AllocHGlobal(pnBytes); Marshal.Copy(bytes, 0, this.lastStringPtr, pnBytes); ppToken = this.lastStringPtr; pnBytes--; string prevString = owner.InputString.Substring(0, owner.TokenIndexOfString); piStartOffset = Encoding.UTF8.GetByteCount(prevString); if (owner.NextIndexOfString < 0) // default { piEndOffset = piStartOffset + pnBytes; } else { prevString = owner.InputString.Substring(0, owner.NextIndexOfString); piEndOffset = Encoding.UTF8.GetByteCount(prevString); } owner.tokenNumber++; piPosition = owner.tokenNumber; return(SQLITE_OK); } else { return(SQLITE_DONE); } }
private int xOpen(ref sqlite3_tokenizer pTokenizer, IntPtr pInput, int nBytes, ref IntPtr ppCursor) { try { sqlite3_tokenizer_cursor pCursor = new sqlite3_tokenizer_cursor(); pCursor.pTokenizer = this.ppTokenizer; this.ppCursor = this.MarshalStruct(pCursor); ppCursor = this.ppCursor; owner.inputString = SQLiteConvert.UTF8ToString(pInput, nBytes); owner.tokenNumber = -1; owner.PrepareToStart(); return(SQLITE_OK); } catch (Exception ex) { Console.WriteLine(ex.ToString()); return(SQLITE_ERROR); } }