module HaskellWorks.Data.Xml.Succinct.Cursor.Create ( byteStringAsFastCursor , byteStringAsSlowCursor ) where import Data.Coerce import HaskellWorks.Data.BalancedParens.RangeMin2 import HaskellWorks.Data.BalancedParens.Simple import HaskellWorks.Data.Bits.BitShown import HaskellWorks.Data.RankSelect.CsPoppy1 import HaskellWorks.Data.Vector.Storable import HaskellWorks.Data.Xml.Succinct.Cursor import HaskellWorks.Data.Xml.Succinct.Cursor.BlankedXml import HaskellWorks.Data.Xml.Succinct.Cursor.Types import qualified Data.ByteString as BS import qualified HaskellWorks.Data.Xml.Internal.ToIbBp64 as I byteStringAsSlowCursor :: BS.ByteString -> SlowCursor byteStringAsSlowCursor bs = XmlCursor { cursorText = bs , interests = BitShown ib , balancedParens = SimpleBalancedParens bp , cursorRank = 1 } where blankedXml = bsToBlankedXml bs (ib, bp) = construct64UnzipN (BS.length bs) (I.toIbBp64 blankedXml) byteStringAsFastCursor :: BS.ByteString -> FastCursor byteStringAsFastCursor bs = XmlCursor bs ibCsPoppy rangeMinMax r where XmlCursor _ ib bp r = byteStringAsSlowCursor bs bpCsPoppy = makeCsPoppy (coerce bp) rangeMinMax = mkRangeMin2 bpCsPoppy ibCsPoppy = makeCsPoppy (coerce ib)