diff options
| author | jsmall-nvidia <jsmall@nvidia.com> | 2020-05-07 15:00:33 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-05-07 15:00:33 -0400 |
| commit | c16abd4fe1bda5ebcd50dbb22f30c6be43bb885f (patch) | |
| tree | d127a9bd48708d909ab36efdd2ac0d9956f7541b /source/core | |
| parent | 9245460adaf739c5a4d85f7f477b65fcd07d595b (diff) | |
Enhanced C++ extractor (#1340)
* Extractor builds without any reference to syntax (as it will be helping to produce this!).
* Change macros to include the super class.
* Added indexOf(const UnownedSubString& in) to UnownedSubString.
Refactored extractor
* Output a macro for each type with the extracted info - can be used during injection in class
* Simplify the header file - as can get super type and last from macro now
* Store the 'origin' of a definition
* Some small tidy ups to the extractor.
* Improve comments on the extractor options.
* Made CPPExtractor own SourceOrigins
* Small fixes around SourceOrigin.
* Small tidy up around macroOrign
Diffstat (limited to 'source/core')
| -rw-r--r-- | source/core/slang-string.cpp | 47 | ||||
| -rw-r--r-- | source/core/slang-string.h | 17 |
2 files changed, 52 insertions, 12 deletions
diff --git a/source/core/slang-string.cpp b/source/core/slang-string.cpp index df711218c..bcf5853d5 100644 --- a/source/core/slang-string.cpp +++ b/source/core/slang-string.cpp @@ -439,4 +439,51 @@ namespace Slang sprintf_s(data, kCount, format, val); m_buffer->length += strnlen_s(data, kCount); } + + // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! UnownedStringSlice !!!!!!!!!!!!!!!!!!!!!!!!!!!!! + + Index UnownedStringSlice::indexOf(char c) const + { + const Index size = Index(m_end - m_begin); + for (Index i = 0; i < size; ++i) + { + if (m_begin[i] == c) + { + return i; + } + } + return -1; + } + + Index UnownedStringSlice::indexOf(const UnownedStringSlice& in) const + { + const Index len = getLength(); + const Index inLen = in.getLength(); + if (inLen > len) + { + return -1; + } + + const char* inChars = in.m_begin; + switch (inLen) + { + case 0: return 0; + case 1: return indexOf(inChars[0]); + default: break; + } + + const char* chars = m_begin; + const char firstChar = inChars[0]; + + for (Int i = 0; i < len - inLen; ++i) + { + if (chars[i] == firstChar && in == UnownedStringSlice(chars + i, inLen)) + { + return i; + } + } + + return -1; + } + } diff --git a/source/core/slang-string.h b/source/core/slang-string.h index 10bc76048..5eb113dc1 100644 --- a/source/core/slang-string.h +++ b/source/core/slang-string.h @@ -104,18 +104,11 @@ namespace Slang return Index(m_end - m_begin); } - Index indexOf(char c) const - { - const Index size = int(m_end - m_begin); - for (Index i = 0; i < size; ++i) - { - if (m_begin[i] == c) - { - return i; - } - } - return -1; - } + /// Finds first index of char 'c'. If not found returns -1. + Index indexOf(char c) const; + /// Find first index of slice. If not found returns -1 + Index indexOf(const UnownedStringSlice& slice) const; + Index lastIndexOf(char c) const { const Index size = Index(m_end - m_begin); |
