Example String find 002

 

 

Description

Virtual Machine instructions may be used to implement the find function for better execution speed. In the findString function, the input matchString and targetString may be Text, String, Symbol, or ByteVector arguments. Between the lines (vmregRunInHardware startNoLoad:) and (vmregRunInHardware stopNoSave:), the matchString and targetString are directly placed in the registers through the use of CharPointers as register variables. Searching of matchString in the targetString is through the use of the equivalent assembler register code for each character evaluated.

 

Details

The findString function is the implementation of the find function in LISP Assembler. Although findString is less flexible, it runs 3-7 times faster than the find function. The findString function uses the naive string search algorithm. The outer loop iterates over the targetString. The inner loop iterates over the matchString and compares the character of the matchString with the next characters of the targetString. The number of iterations in the inner loop do not exceed the length of the matchString.

 (defun findString(matchString targetString)  
    regs:(m M t T n                             
          CharPointer:mPointer CharPointer:tPointer  
          tempTarget tempMatch)               
    vars:((result false))                      
     ;; Initialize the match and target pointers and lengths.   
    ;; Note: We use the faster assembler length instructions, 
    ;;       but we must eliminate any null characters.        
    (vmregRunInHardware startNoLoad:)  
    (vmregObjLength matchString M)      
    (vmregObjLength targetString T)      
    ;; assign the register pointers to point to the string inputs  
    (setq mPointer matchString)   
    (setq tPointer targetString)  
    ;; eliminate null characters  
    (if (= (setq tempMatch mPointer[M]) 0) (-- M)) 
    (if (= (setq tempMatch tPointer[T]) 0) (-- T))  
    (-= T M)     
    ;; loop for all characters in the target String  
    (loop for t from 0 until T do
       (loop for m from 0 until M do   
          ;; set the next character in the target string to be compared  
          (setq tempTarget tPointer[(setq n (+ t m))]) 
           ;; set the next character in the match string to be compared  
          (setq tempMatch mPointer[m])      
          (if (<> tempTarget tempMatch) (goto Next:))  
          ) ;; end of loop for matchString  
      (setq result t)  
      (goto Last:)    
      Next::   
      ) ;; end of loop for target String  
   Last:: 
   (vmregRunInHardware stopNoSave:)  
   result) 
    
Returns: false or integer value

When the findString function, as implemented above is invoked, it does the same thing that the find function does. It searches the matchString in the targetString and returns the integer position of the matchString in the targetString. However, the findString function executes much faster since it runs directly in hardware.

(findString "there" "Hello there") Returns: 6

 

Related Examples

Here are examples of the find function at work.

String find 001 String find 002

 

Function Links

Here is the link to the current function used in this example.

find

Here are a number of links to other related functions.

member(#void) substring(#void) mid(#void)

 

Argument Types

Here are the links to the data types of the arguments used in this example.

String Vector Integer

Here are a number of links to examples having similar argument types.

BitVector bitToIntegerVector 001 BitVector compare 018 BitVector findBlock 001 BitVector freeBlock 001
BitVector inside 007 BitVector isBitVector 001 BitVector isMember 008 BitVector isObject 012
BitVector isType 020 BitVector length 013 BitVector member 008 BitVector ref 027
BitVector resize 010 BitVector sizeof 019 BitVector vectorFill 007 Boolean bcompareEQ 001
Boolean bcompareGE 001 Boolean bcompareGT 001 Boolean bcompareLE 001 Boolean bcompareLT 001
Boolean bcompareNE 001 Boolean boolean 001 Boolean compare 009 Boolean isBoolean 001
Boolean isType 011 Boolean sizeof 009 ByteVector isByteVector 001 ByteVector isCharAlphabetic 003
ByteVector isCharAlphanumeric 003 ByteVector isCharLowercase 003 ByteVector isCharName 003 ByteVector isCharNumeric 003
ByteVector isCharUppercase 003 ByteVector isCharWhitespace 003 ByteVector isObject 013 ByteVector sizeof 020
Character cadd 001 Character ccompareEQ 001 Character ccompareGE 001 Character ccompareGT 001
Character ccompareLE 001 Character ccompareLT 001 Character ccompareNE 001 Character cdiv 001
Character character 001 Character cmod 001 Character cmul 001 Character compare 010
Character csub 001 Character isCharacter 001 Character isType 012 Character sizeof 010
Complex compare 021 Complex cos 002 Complex exp 002 Complex expt 002
Complex log 002 Complex log10 002 Complex log2 002 Complex logbase 002
Complex sin 002 Complex sqrt 002 Complex tan 002 Context debugBrowsableProcs 001
Context disassemble 001 Context globalBinding 001 CpxVector apply 010 CpxVector avg 002
CpxVector binaryInsert 008 CpxVector binarySearch 008 CpxVector compare 020 CpxVector compareEQ 020
CpxVector compareGE 020 CpxVector compareGT 020 CpxVector compareLE 020 CpxVector compareLT 020
CpxVector compareNE 020 Date compare 012 Date date 001 Date day 001
Date days360 001 Date hour 001 Date isType 014 Date julian 001
Date minute 001 Date month 001 Date second 001 Date sizeof 012
Date time 001 Date time 002 Date year 001 Dictionary compare 004
Dictionary count 002 Dictionary delete 003 Dictionary delete 004 Dictionary insert 002
Dictionary isBound 002 Dictionary isDictionary 001 Dictionary isObject 004 Dictionary isType 006
Dictionary length 005 Dictionary member 002 Dictionary new 004 Dictionary objectToDictionary 001
Dictionary objectToDictionary 002 Dictionary objectToDictionary 003 Dictionary objectToDictionary 004 Dictionary ref 007
Dictionary ref 008 Dictionary ref 009 Dictionary refAttributes 002 Dictionary refValues 002
Dictionary resize 002 Dictionary setAttributes 002 Dictionary setq 007 Dictionary setq 008
Dictionary sizeof 004 Dictionary sort 003 Directory compare 005 Directory count 003
Directory delete 005 Directory delete 006 Directory insert 003 Directory inside 003
Directory isBound 003 Directory isObject 005 Directory isType 007 Directory length 006
Directory new 005 Directory new 006 Directory objectToDirectory 001 Directory objectToDirectory 002
Directory objectToDirectory 003 Directory objectToDirectory 004 Directory ref 010 Directory ref 011
Directory ref 012 Directory refAttributes 003 Directory refValues 003 Directory resize 003
Directory setAttributes 003 Directory setq 010 Directory sizeof 005 Error error 001
Error errorTrap 001 Error isError 001 Error onError 001 FileIO closeLog 001
FltVector binaryInsert 004 FltVector compare 014 FltVector compareLE 014 FltVector compareLT 014
FltVector delete 009 FltVector insert 005 FltVector isFloatVector 001 FltVector isObject 007
FltVector isType 016 FltVector length 008 FltVector ref 022 FltVector resize 006
FltVector sizeof 014 FltVector uniqueInsert 004 FltVector vectorFill 003 Function compare 013
Function isType 015 Function sizeof 013 IntVector binaryInsert 005 IntVector bitToIntegerVector 002
IntVector compare 015 IntVector delete 010 IntVector insert 006 IntVector inside 005
IntVector isIntegerVector 001 IntVector isMember 005 IntVector isObject 008 IntVector isType 017
IntVector length 009 IntVector member 005 IntVector ref 023 IntVector resize 007
IntVector sizeof 015 IntVector uniqueInsert 005 IntVector vectorFill 004 Integer binaryNot 001
Integer bitwiseNot 001 Integer fact 001 Integer gcd 001 Integer iadd 001
Integer icompareGE 001 Integer icompareGT 001 Integer icompareLE 001 Integer icompareLT 001
Integer icompareNE 001 Integer idiv 001 Integer imod 001 Integer imul 001
Integer integer 001 Integer isub 001 Integer lcm 001 Lambda balance 001
Lambda debugBrowsableProcs 001 Lambda defchild 001 Lambda define 001 Lambda deforphan 001
Lambda defriend 001 Lambda defun 001 Lambda defun 002 Lambda disassemble 001
Lambda globalBinding 001 Lambda ref 017 List count 007 List count 008
List length 015 List sizeof 022 Matrix binaryInsert 004 Matrix binaryInsert 005
Matrix compare 007 Matrix compareGT 007 Matrix compareLT 007 Matrix count 005
Matrix delete 009 Matrix insert 005 Matrix inside 005 Matrix isMatrix 001
Matrix isMember 005 Matrix isNumberMatrix 001 Matrix isObject 007 Matrix isType 009
Matrix length 008 Matrix makeGaussianMatrix 001 Matrix makeGramMatrix 001 Matrix matrixGaussianEliminate 001
Matrix matrixGaussianSubstitute 001 Matrix member 005 Matrix rank 001 Matrix ref 015
Matrix ref 016 Matrix resize 005 Matrix sizeof 007 Matrix uniqueInsert 004
Matrix vectorFill 002 NumMatrix binaryInsert 007 NumMatrix compare 023 NumMatrix count 009
NumMatrix delete 014 NumMatrix insert 009 NumMatrix inside 009 NumMatrix isMember 010
NumMatrix isNumberMatrix 001 NumMatrix isObject 014 NumMatrix isType 022 NumMatrix length 017
NumMatrix makeGaussianMatrix 001 NumMatrix makeGramMatrix 001 NumMatrix matrixGaussianEliminate 001 NumMatrix matrixGaussianSubstitute 001
NumMatrix member 009 NumMatrix rank 002 NumMatrix ref 035 NumMatrix resize 011
NumMatrix sizeof 028 NumMatrix uniqueInsert 005 NumMatrix vectorFill 008 NumVector binaryInsert 006
NumVector compare 016 NumVector delete 011 NumVector insert 007 NumVector inside 006
NumVector isMember 006 NumVector isNumberVector 001 NumVector isObject 009 NumVector isType 018
NumVector length 010 NumVector member 006 NumVector objectToNumVector 001 NumVector ref 024
NumVector resize 008 NumVector sizeof 016 NumVector svmRegression 001 NumVector uniqueInsert 006
NumVector vectorFill 005 Number asin 001 Number atan 001 Number avg 001
Number compare 011 Number cos 001 Number cosh 001 Number deg 001
Number exp 001 Number floor 001 Number isType 013 Number kurtosis 001
Number log 001 Number log10 001 Number log2 001 Number logbase 001
Number max 001 Number median 001 Number min 001 Number mod 001
Number modi 001 Number nadd 001 Number ncompareGE 001 Number ncompareGT 001
Number ncompareLE 001 Number ncompareLT 001 Number ndiv 001 Number nmod 001
Number nmul 001 Number nsub 001 Number number 001 Number pi 001
Number product 001 Number rad 001 Number random 001 Number randomize 001
Number range 001 Number round 001 Number sign 001 Number sin 001
Number sinh 001 Number sizeof 011 Number skew 001 Number sqrt 001
Number srandom 001 Number stdev 001 Number stdevp 001 Number sumsqr 001
Number tan 001 Number tanh 001 Number var 001 Number varp 001
ObjVector compare 017 ObjVector delete 012 ObjVector insert 008 ObjVector isMember 007
ObjVector isObject 010 ObjVector isObjectVector 001 ObjVector isType 019 ObjVector length 011
ObjVector member 007 ObjVector ref 025 ObjVector resize 009 ObjVector sizeof 017
ObjVector uniqueInsert 007 ObjVector vectorFill 006 ObjectRepository delete 013 Pair compare 019
Pair compareEQ 019 Pair compareGE 019 Pair compareGT 019 Pair compareLE 019
Pair compareLT 019 Pair compareNE 019 Pair comparison 019 Pair count 006
Pair length 014 Pair sizeof 021 PcodeVector isObject 011 PcodeVector isPcodeVector 001
PcodeVector length 012 PcodeVector ref 026 PcodeVector sizeof 018 ShortVector binaryInsert 006
ShortVector compare 016 ShortVector delete 011 ShortVector insert 007 ShortVector inside 006
ShortVector isMember 006 ShortVector isObject 009 ShortVector isType 018 ShortVector length 010
ShortVector member 006 ShortVector ref 024 ShortVector resize 008 ShortVector sizeof 016
ShortVector uniqueInsert 007 ShortVector vectorFill 005 String addMethod 001 String append 001
String append 002 String clean 001 String code 001 String compare 001
String compareEQ 001 String compareGE 001 String compareGT 001 String compareLE 001
String compareLT 001 String compareNE 001 String comparison functions 001 String defMethod 001
String defMethod 002 String downcase 001 String fileRead 001 String fileRead 002
String fileReadRecord 001 String fileWrite 001 String find 001 String find 002
String hashString 001 String isChar 001 String isCharAlphabetic 001 String isCharAlphanumeric 001
String isCharLowercase 001 String isCharName 001 String isCharNumeric 001 String isCharUppercase 001
String isCharWhitespace 001 String isEqual 001 String isEqual 002 String isObject 001
String isString 001 String isText 001 String isType 001 String isType 002
String isType 003 String left 001 String length 001 String length 002
String methodsOf 001 String methodsOf 002 String methodsOf 003 String mid 001
String new 001 String parse 001 String ref 001 String ref 002
String replace 001 String rept 001 String right 001 String send 001
String sizeof 001 String string 001 String string 002 String string 003
String stringCiEQ 001 String stringCiGE 001 String stringCiGT 001 String stringCiLE 001
String stringCiLT 001 String stringCiNE 001 String stringFill 001 String stringToBVector 001
String stringToBVector 002 String stringToBVector 003 String stringToVector 001 String stringToVector 002
String stringToVector 003 String stringToVector 004 String substitute 001 String substitute 002
String substring 001 String substring 002 String substringCiEQ 001 String substringCiGE 001
String substringCiGT 001 String substringCiLE 001 String substringCiLT 001 String substringCiNE 001
String text 001 String trim 001 String type 001 String upcase 001
String upcase 002 String upcase 003 Structure apply 001 Structure apply 002
Structure binaryInsert 001 Structure binarySearch 001 Structure compareGE 003 Structure compareGT 003
Structure compareLE 003 Structure compareLT 003 Structure compareNE 003 Structure count 001
Structure defstruct 001 Structure delete 001 Structure insert 001 Structure inside 001
Structure isBound 001 Structure isObject 003 Structure length 004 Structure member 001
Structure new 003 Structure objectToStructure 001 Structure objectToStructure 002 Structure objectToStructure 003
Structure objectToStructure 004 Structure ref 004 Structure ref 006 Structure refAttributes 001
Structure refValues 001 Structure resize 001 Structure setAttributes 001 Structure setq 003
Structure setq 004 Structure setq 005 Structure setq 006 Structure sizeof 003
Structure uniqueInsert 001 Structure uniqueInsert 002 Symbol *< 001 Symbol +< 001
Symbol -< 001 Symbol /< 001 Symbol compare 002 Symbol compareEQ 002
Symbol compareGE 002 Symbol compareGT 002 Symbol compareLE 002 Symbol compareLT 002
Symbol compareNE 002 Symbol hashString 002 Symbol isCharAlphabetic 002 Symbol isCharAlphanumeric 002
Symbol isCharLowercase 002 Symbol isCharName 002 Symbol isCharNumeric 002 Symbol isCharUppercase 002
Symbol isCharWhitespace 002 Symbol isObject 002 Symbol isSymbol 001 Symbol isType 004
Symbol length 003 Symbol makeQuotedSymbol 001 Symbol new 002 Symbol send 002
Symbol sizeof 002 Symbol symbol 001 Symbol symbol 002 Symbol type 002
Vector addMethod 007 Vector append 006 Vector appendWriteln 001 Vector apply 003
Vector apply 004 Vector binaryInsert 002 Vector binaryInsert 003 Vector binarySearch 003
Vector binarySearch 004 Vector cdr 005 Vector cdr 006 Vector compare 006
Vector compareEQ 006 Vector compareGE 006 Vector compareGT 006 Vector compareLE 006
Vector compareLT 006 Vector compareNE 006 Vector comparison functions 006 Vector copy 004
Vector copy 005 Vector count 004 Vector defmethod 008 Vector delete 007
Vector delete 008 Vector insert 004 Vector inside 004 Vector isAtom 004
Vector isEqual 004 Vector isIdentical 004 Vector isMember 004 Vector isObject 006
Vector isType 008 Vector isVector 001 Vector length 007 Vector map 004
Vector mapc 004 Vector member 004 Vector methodsOf 009 Vector new 007
Vector new 008 Vector objectToVector 001 Vector ref 013 Vector ref 014
Vector refAttributes 004 Vector refValues 004 Vector remove 004 Vector resize 004
Vector reverse 001 Vector send 006 Vector setAttributes 004 Vector setAttributes 005
Vector setBlock 001 Vector setCdr 004 Vector setLastCdr 002 Vector setq 012
Vector setq 013 Vector sizeof 006 Vector sort 010 Vector sort 011
Vector type 009 Vector uniqueInsert 003 Vector vectorFill 001 Void compare 008
Void isType 010 Void ref 017 Void sizeof 008 substringEQ 001
substringFill 001 substringGE 001 substringGT 001 substringLE 001
substringLT 001 substringNE 001

Analytic Information Server (AIS)

AIS Component Systems

  • Smartbase Engine
  • QT C++ Libraries
  • MySQL Relational Database
  • AIS Lisp Libraries
  • Rapid Analytic Demo IDE