@@ -728,6 +728,10 @@ | |||
<Option compile="0"/> | |||
<Option link="0"/> | |||
</Unit> | |||
<Unit filename="../../../../modules/juce_core/text/juce_StringRef.h"> | |||
<Option compile="0"/> | |||
<Option link="0"/> | |||
</Unit> | |||
<Unit filename="../../../../modules/juce_core/text/juce_TextDiff.cpp"> | |||
<Option compile="0"/> | |||
<Option link="0"/> | |||
@@ -519,6 +519,7 @@ | |||
922DB1DA01DAF63CE86B5E53 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ProjectTreeViewBase.h"; path = "../../Source/Project/jucer_ProjectTreeViewBase.h"; sourceTree = "SOURCE_ROOT"; }; | |||
925CC15E1449AED03A1CE4F8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_GraphicsContext.h"; path = "../../../../modules/juce_graphics/contexts/juce_GraphicsContext.h"; sourceTree = "SOURCE_ROOT"; }; | |||
92F91DC29B64AD85B1F508BD = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_GenericComponentHandler.h"; path = "../../Source/ComponentEditor/components/jucer_GenericComponentHandler.h"; sourceTree = "SOURCE_ROOT"; }; | |||
93260AA1B96F74E928B7B07C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StringRef.h"; path = "../../../../modules/juce_core/text/juce_StringRef.h"; sourceTree = "SOURCE_ROOT"; }; | |||
939B1B2421964EEF71768BC7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_OutputStream.cpp"; path = "../../../../modules/juce_core/streams/juce_OutputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
93B419190CCE92ACAB1ED25B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_ColouredElement.cpp"; path = "../../Source/ComponentEditor/paintelements/jucer_ColouredElement.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
93BD6F4BB776E432A4006696 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Identifier.h"; path = "../../../../modules/juce_core/text/juce_Identifier.h"; sourceTree = "SOURCE_ROOT"; }; | |||
@@ -1103,6 +1104,7 @@ | |||
D9B077E2ECDDA94961E134D7, | |||
9AEC1D0512CFF7E9173BEE4E, | |||
31ACA83BF72B34828ADA1F3F, | |||
93260AA1B96F74E928B7B07C, | |||
0D1C432D74433308E05942AD, | |||
79B3DE19D706135161A727B0 ); name = text; sourceTree = "<group>"; }; | |||
F824830BD560E7906A8CD82B = { isa = PBXGroup; children = ( | |||
@@ -610,6 +610,7 @@ | |||
</FileConfiguration> | |||
</File> | |||
<File RelativePath="..\..\..\..\modules\juce_core\text\juce_StringPool.h"/> | |||
<File RelativePath="..\..\..\..\modules\juce_core\text\juce_StringRef.h"/> | |||
<File RelativePath="..\..\..\..\modules\juce_core\text\juce_TextDiff.cpp"> | |||
<FileConfiguration Name="Debug|Win32" | |||
ExcludedFromBuild="true"> | |||
@@ -610,6 +610,7 @@ | |||
</FileConfiguration> | |||
</File> | |||
<File RelativePath="..\..\..\..\modules\juce_core\text\juce_StringPool.h"/> | |||
<File RelativePath="..\..\..\..\modules\juce_core\text\juce_StringRef.h"/> | |||
<File RelativePath="..\..\..\..\modules\juce_core\text\juce_TextDiff.cpp"> | |||
<FileConfiguration Name="Debug|Win32" | |||
ExcludedFromBuild="true"> | |||
@@ -1137,6 +1137,7 @@ | |||
<ClInclude Include="..\..\..\..\modules\juce_core\text\juce_StringArray.h"/> | |||
<ClInclude Include="..\..\..\..\modules\juce_core\text\juce_StringPairArray.h"/> | |||
<ClInclude Include="..\..\..\..\modules\juce_core\text\juce_StringPool.h"/> | |||
<ClInclude Include="..\..\..\..\modules\juce_core\text\juce_StringRef.h"/> | |||
<ClInclude Include="..\..\..\..\modules\juce_core\text\juce_TextDiff.h"/> | |||
<ClInclude Include="..\..\..\..\modules\juce_core\maths\juce_BigInteger.h"/> | |||
<ClInclude Include="..\..\..\..\modules\juce_core\maths\juce_Expression.h"/> | |||
@@ -1677,6 +1677,9 @@ | |||
<ClInclude Include="..\..\..\..\modules\juce_core\text\juce_StringPool.h"> | |||
<Filter>Juce Modules\juce_core\text</Filter> | |||
</ClInclude> | |||
<ClInclude Include="..\..\..\..\modules\juce_core\text\juce_StringRef.h"> | |||
<Filter>Juce Modules\juce_core\text</Filter> | |||
</ClInclude> | |||
<ClInclude Include="..\..\..\..\modules\juce_core\text\juce_TextDiff.h"> | |||
<Filter>Juce Modules\juce_core\text</Filter> | |||
</ClInclude> | |||
@@ -1143,6 +1143,7 @@ | |||
<ClInclude Include="..\..\..\..\modules\juce_core\text\juce_StringArray.h"/> | |||
<ClInclude Include="..\..\..\..\modules\juce_core\text\juce_StringPairArray.h"/> | |||
<ClInclude Include="..\..\..\..\modules\juce_core\text\juce_StringPool.h"/> | |||
<ClInclude Include="..\..\..\..\modules\juce_core\text\juce_StringRef.h"/> | |||
<ClInclude Include="..\..\..\..\modules\juce_core\text\juce_TextDiff.h"/> | |||
<ClInclude Include="..\..\..\..\modules\juce_core\maths\juce_BigInteger.h"/> | |||
<ClInclude Include="..\..\..\..\modules\juce_core\maths\juce_Expression.h"/> | |||
@@ -1677,6 +1677,9 @@ | |||
<ClInclude Include="..\..\..\..\modules\juce_core\text\juce_StringPool.h"> | |||
<Filter>Juce Modules\juce_core\text</Filter> | |||
</ClInclude> | |||
<ClInclude Include="..\..\..\..\modules\juce_core\text\juce_StringRef.h"> | |||
<Filter>Juce Modules\juce_core\text</Filter> | |||
</ClInclude> | |||
<ClInclude Include="..\..\..\..\modules\juce_core\text\juce_TextDiff.h"> | |||
<Filter>Juce Modules\juce_core\text</Filter> | |||
</ClInclude> | |||
@@ -407,7 +407,7 @@ bool LibraryModule::isVSTPluginHost (const Project& project) const { return get | |||
File LibraryModule::getInclude (const File& folder) const | |||
{ | |||
return folder.getChildFile (moduleInfo ["include"]); | |||
return folder.getChildFile (moduleInfo ["include"].toString()); | |||
} | |||
RelativePath LibraryModule::getModuleRelativeToProject (ProjectExporter& exporter) const | |||
@@ -905,6 +905,10 @@ | |||
<Option compile="0"/> | |||
<Option link="0"/> | |||
</Unit> | |||
<Unit filename="../../../../modules/juce_core/text/juce_StringRef.h"> | |||
<Option compile="0"/> | |||
<Option link="0"/> | |||
</Unit> | |||
<Unit filename="../../../../modules/juce_core/text/juce_TextDiff.cpp"> | |||
<Option compile="0"/> | |||
<Option link="0"/> | |||
@@ -75,6 +75,7 @@ | |||
0655D6F5C85104403FC367AC = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioPluginFormatManager.cpp"; path = "../../../../modules/juce_audio_processors/format/juce_AudioPluginFormatManager.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
06574539E17A8703E442F691 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RelativeRectangle.cpp"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativeRectangle.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
06D8EAABB6D94D55189361D0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Result.cpp"; path = "../../../../modules/juce_core/misc/juce_Result.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
06E844BBD6A9FBACCFA1D29F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StringRef.h"; path = "../../../../modules/juce_core/text/juce_StringRef.h"; sourceTree = "SOURCE_ROOT"; }; | |||
06FA4CB9F78A6F953DC83C6B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TextDiff.h"; path = "../../../../modules/juce_core/text/juce_TextDiff.h"; sourceTree = "SOURCE_ROOT"; }; | |||
070230F8B36CFD14E7EEAD71 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ThreadPool.cpp"; path = "../../../../modules/juce_core/threads/juce_ThreadPool.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
07492D83B5CEED0F975EEF77 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Image.cpp"; path = "../../../../modules/juce_graphics/images/juce_Image.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
@@ -841,7 +842,6 @@ | |||
D8081154AA3072D2F2C4B625 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_posix_SharedCode.h"; path = "../../../../modules/juce_core/native/juce_posix_SharedCode.h"; sourceTree = "SOURCE_ROOT"; }; | |||
D866C4735BF1EF0CA24FC1FB = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Draggable3DOrientation.h"; path = "../../../../modules/juce_opengl/opengl/juce_Draggable3DOrientation.h"; sourceTree = "SOURCE_ROOT"; }; | |||
D8AFC87A918360FFC9D96BE5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Atomic.h"; path = "../../../../modules/juce_core/memory/juce_Atomic.h"; sourceTree = "SOURCE_ROOT"; }; | |||
D9282DF6556197822D2BD5D4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PropertySet.cpp"; path = "../../../../modules/juce_core/containers/juce_PropertySet.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
DA0D464BE6E90C3668AD7C73 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_FileChooser.mm"; path = "../../../../modules/juce_gui_basics/native/juce_mac_FileChooser.mm"; sourceTree = "SOURCE_ROOT"; }; | |||
DA2FCB30EE2A41085FF93B9B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Files.cpp"; path = "../../../../modules/juce_core/native/juce_win32_Files.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
DD40A3E06CA320D95F3924BA = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_StretchableLayoutResizerBar.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_StretchableLayoutResizerBar.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
@@ -849,34 +849,35 @@ | |||
DEA38275A65473112CD34252 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TreeView.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_TreeView.h"; sourceTree = "SOURCE_ROOT"; }; | |||
DEB23C98FEC261260F63B6A4 = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = System/Library/Frameworks/AudioToolbox.framework; sourceTree = SDKROOT; }; | |||
DED6D04CFED991C5924B78F0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MD5.h"; path = "../../../../modules/juce_cryptography/hashing/juce_MD5.h"; sourceTree = "SOURCE_ROOT"; }; | |||
DEE1FC30E2FBB97921616CA9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Font.cpp"; path = "../../../../modules/juce_graphics/fonts/juce_Font.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
DF2D86EEA8031481C1FD08B2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileTreeComponent.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileTreeComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
DF3B7E1BC0AF0C826C47745B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ResizableWindow.h"; path = "../../../../modules/juce_gui_basics/windows/juce_ResizableWindow.h"; sourceTree = "SOURCE_ROOT"; }; | |||
DF590CD70352A30FA3BD9835 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_SystemTrayIcon.cpp"; path = "../../../../modules/juce_gui_extra/native/juce_linux_SystemTrayIcon.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
DFEAB699C98B89FF0B85F557 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_DirectWriteTypeLayout.cpp"; path = "../../../../modules/juce_graphics/native/juce_win32_DirectWriteTypeLayout.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
DFF6BF0BB64714A494A25E93 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RSAKey.h"; path = "../../../../modules/juce_cryptography/encryption/juce_RSAKey.h"; sourceTree = "SOURCE_ROOT"; }; | |||
E0AE248F52C70AA1DEA1A5A1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiOutput.h"; path = "../../../../modules/juce_audio_devices/midi_io/juce_MidiOutput.h"; sourceTree = "SOURCE_ROOT"; }; | |||
E10CA355E85B468045CDCAC7 = { isa = PBXFileReference; lastKnownFileType = file.nib; name = RecentFilesMenuTemplate.nib; path = RecentFilesMenuTemplate.nib; sourceTree = "SOURCE_ROOT"; }; | |||
E249D6583995E0E6D0B3EADF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioSourcePlayer.h"; path = "../../../../modules/juce_audio_devices/sources/juce_AudioSourcePlayer.h"; sourceTree = "SOURCE_ROOT"; }; | |||
E2732267CD7C0C3BDB17456A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BooleanPropertyComponent.h"; path = "../../../../modules/juce_gui_basics/properties/juce_BooleanPropertyComponent.h"; sourceTree = "SOURCE_ROOT"; }; | |||
E34B2BCD14634ED3BC9F5431 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioProcessorGraph.h"; path = "../../../../modules/juce_audio_processors/processors/juce_AudioProcessorGraph.h"; sourceTree = "SOURCE_ROOT"; }; | |||
E48615F1F7D8213F6DC24FC9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ThreadPool.h"; path = "../../../../modules/juce_core/threads/juce_ThreadPool.h"; sourceTree = "SOURCE_ROOT"; }; | |||
E48E2824CED9933934127522 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BasicNativeHeaders.h"; path = "../../../../modules/juce_core/native/juce_BasicNativeHeaders.h"; sourceTree = "SOURCE_ROOT"; }; | |||
E6448B3F03DD2B41519DF93D = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = DiscRecording.framework; path = System/Library/Frameworks/DiscRecording.framework; sourceTree = SDKROOT; }; | |||
D119A3871626EC2B8EFCB0D4 = { isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = JuceDemo.app; sourceTree = "BUILT_PRODUCTS_DIR"; }; | |||
D9282DF6556197822D2BD5D4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PropertySet.cpp"; path = "../../../../modules/juce_core/containers/juce_PropertySet.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
D9AB5165697DB60BA305F414 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_OpenSL.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_android_OpenSL.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
DB507A1F7BB7489344FF90A9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Range.h"; path = "../../../../modules/juce_core/maths/juce_Range.h"; sourceTree = "SOURCE_ROOT"; }; | |||
DCBC77E022F3282E7DC97642 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_HighResolutionTimer.h"; path = "../../../../modules/juce_core/threads/juce_HighResolutionTimer.h"; sourceTree = "SOURCE_ROOT"; }; | |||
DDEC339D244553357E234C92 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_DirectSound.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_win32_DirectSound.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
DE80C724F35B1464853FDE9E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SubregionStream.h"; path = "../../../../modules/juce_core/streams/juce_SubregionStream.h"; sourceTree = "SOURCE_ROOT"; }; | |||
DEE1FC30E2FBB97921616CA9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Font.cpp"; path = "../../../../modules/juce_graphics/fonts/juce_Font.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
DF3B7E1BC0AF0C826C47745B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ResizableWindow.h"; path = "../../../../modules/juce_gui_basics/windows/juce_ResizableWindow.h"; sourceTree = "SOURCE_ROOT"; }; | |||
DF590CD70352A30FA3BD9835 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_SystemTrayIcon.cpp"; path = "../../../../modules/juce_gui_extra/native/juce_linux_SystemTrayIcon.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
DFEAB699C98B89FF0B85F557 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_DirectWriteTypeLayout.cpp"; path = "../../../../modules/juce_graphics/native/juce_win32_DirectWriteTypeLayout.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
E15F577E82B2E12597447472 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ApplicationBase.h"; path = "../../../../modules/juce_events/messages/juce_ApplicationBase.h"; sourceTree = "SOURCE_ROOT"; }; | |||
E26E3AC933F70B56B7B83EFA = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MACAddress.cpp"; path = "../../../../modules/juce_core/network/juce_MACAddress.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
E2732267CD7C0C3BDB17456A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BooleanPropertyComponent.h"; path = "../../../../modules/juce_gui_basics/properties/juce_BooleanPropertyComponent.h"; sourceTree = "SOURCE_ROOT"; }; | |||
E274BFB25D87D93EDBC23114 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OggVorbisAudioFormat.h"; path = "../../../../modules/juce_audio_formats/codecs/juce_OggVorbisAudioFormat.h"; sourceTree = "SOURCE_ROOT"; }; | |||
E38DE271B32DCC95E52C72DA = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DrawableButton.h"; path = "../../../../modules/juce_gui_basics/buttons/juce_DrawableButton.h"; sourceTree = "SOURCE_ROOT"; }; | |||
E3D24CD61D75922457DB9642 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Midi.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_win32_Midi.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
E3FC888CC9FAD650C469ACC5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TextButton.cpp"; path = "../../../../modules/juce_gui_basics/buttons/juce_TextButton.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
E453E312D607E60FAA6D1BF0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MultiDocumentPanel.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_MultiDocumentPanel.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
E46977801F19277F4D3B324B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_OpenGLImage.cpp"; path = "../../../../modules/juce_opengl/opengl/juce_OpenGLImage.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
E48E2824CED9933934127522 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BasicNativeHeaders.h"; path = "../../../../modules/juce_core/native/juce_BasicNativeHeaders.h"; sourceTree = "SOURCE_ROOT"; }; | |||
E48615F1F7D8213F6DC24FC9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ThreadPool.h"; path = "../../../../modules/juce_core/threads/juce_ThreadPool.h"; sourceTree = "SOURCE_ROOT"; }; | |||
E5DC4602843749A071B17576 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Slider.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_Slider.h"; sourceTree = "SOURCE_ROOT"; }; | |||
E6B13A51A01032961340735D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_StringPairArray.cpp"; path = "../../../../modules/juce_core/text/juce_StringPairArray.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
E6C582E67DC0C4D0CCA18166 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ShapeButton.h"; path = "../../../../modules/juce_gui_basics/buttons/juce_ShapeButton.h"; sourceTree = "SOURCE_ROOT"; }; | |||
@@ -1226,6 +1227,7 @@ | |||
89ABB9AFCDB73A409754BE48, | |||
CE882EE8C05AC3A809E41332, | |||
B6ECBC8983C8C13575A3420E, | |||
06E844BBD6A9FBACCFA1D29F, | |||
6A7463E25E5C0C70C01B5054, | |||
06FA4CB9F78A6F953DC83C6B ); name = text; sourceTree = "<group>"; }; | |||
9E385EE2C33A34870884808C = { isa = PBXGroup; children = ( | |||
@@ -1240,6 +1240,7 @@ | |||
</FileConfiguration> | |||
</File> | |||
<File RelativePath="..\..\..\..\modules\juce_core\text\juce_StringPool.h"/> | |||
<File RelativePath="..\..\..\..\modules\juce_core\text\juce_StringRef.h"/> | |||
<File RelativePath="..\..\..\..\modules\juce_core\text\juce_TextDiff.cpp"> | |||
<FileConfiguration Name="Debug|Win32" | |||
ExcludedFromBuild="true"> | |||
@@ -1240,6 +1240,7 @@ | |||
</FileConfiguration> | |||
</File> | |||
<File RelativePath="..\..\..\..\modules\juce_core\text\juce_StringPool.h"/> | |||
<File RelativePath="..\..\..\..\modules\juce_core\text\juce_StringRef.h"/> | |||
<File RelativePath="..\..\..\..\modules\juce_core\text\juce_TextDiff.cpp"> | |||
<FileConfiguration Name="Debug|Win32" | |||
ExcludedFromBuild="true"> | |||
@@ -1332,6 +1332,7 @@ | |||
<ClInclude Include="..\..\..\..\modules\juce_core\text\juce_StringArray.h"/> | |||
<ClInclude Include="..\..\..\..\modules\juce_core\text\juce_StringPairArray.h"/> | |||
<ClInclude Include="..\..\..\..\modules\juce_core\text\juce_StringPool.h"/> | |||
<ClInclude Include="..\..\..\..\modules\juce_core\text\juce_StringRef.h"/> | |||
<ClInclude Include="..\..\..\..\modules\juce_core\text\juce_TextDiff.h"/> | |||
<ClInclude Include="..\..\..\..\modules\juce_core\maths\juce_BigInteger.h"/> | |||
<ClInclude Include="..\..\..\..\modules\juce_core\maths\juce_Expression.h"/> | |||
@@ -1866,6 +1866,9 @@ | |||
<ClInclude Include="..\..\..\..\modules\juce_core\text\juce_StringPool.h"> | |||
<Filter>Juce Modules\juce_core\text</Filter> | |||
</ClInclude> | |||
<ClInclude Include="..\..\..\..\modules\juce_core\text\juce_StringRef.h"> | |||
<Filter>Juce Modules\juce_core\text</Filter> | |||
</ClInclude> | |||
<ClInclude Include="..\..\..\..\modules\juce_core\text\juce_TextDiff.h"> | |||
<Filter>Juce Modules\juce_core\text</Filter> | |||
</ClInclude> | |||
@@ -1338,6 +1338,7 @@ | |||
<ClInclude Include="..\..\..\..\modules\juce_core\text\juce_StringArray.h"/> | |||
<ClInclude Include="..\..\..\..\modules\juce_core\text\juce_StringPairArray.h"/> | |||
<ClInclude Include="..\..\..\..\modules\juce_core\text\juce_StringPool.h"/> | |||
<ClInclude Include="..\..\..\..\modules\juce_core\text\juce_StringRef.h"/> | |||
<ClInclude Include="..\..\..\..\modules\juce_core\text\juce_TextDiff.h"/> | |||
<ClInclude Include="..\..\..\..\modules\juce_core\maths\juce_BigInteger.h"/> | |||
<ClInclude Include="..\..\..\..\modules\juce_core\maths\juce_Expression.h"/> | |||
@@ -1866,6 +1866,9 @@ | |||
<ClInclude Include="..\..\..\..\modules\juce_core\text\juce_StringPool.h"> | |||
<Filter>Juce Modules\juce_core\text</Filter> | |||
</ClInclude> | |||
<ClInclude Include="..\..\..\..\modules\juce_core\text\juce_StringRef.h"> | |||
<Filter>Juce Modules\juce_core\text</Filter> | |||
</ClInclude> | |||
<ClInclude Include="..\..\..\..\modules\juce_core\text\juce_TextDiff.h"> | |||
<Filter>Juce Modules\juce_core\text</Filter> | |||
</ClInclude> | |||
@@ -70,6 +70,7 @@ | |||
0655D6F5C85104403FC367AC = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioPluginFormatManager.cpp"; path = "../../../../modules/juce_audio_processors/format/juce_AudioPluginFormatManager.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
06574539E17A8703E442F691 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RelativeRectangle.cpp"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativeRectangle.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
06D8EAABB6D94D55189361D0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Result.cpp"; path = "../../../../modules/juce_core/misc/juce_Result.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
06E844BBD6A9FBACCFA1D29F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StringRef.h"; path = "../../../../modules/juce_core/text/juce_StringRef.h"; sourceTree = "SOURCE_ROOT"; }; | |||
06FA4CB9F78A6F953DC83C6B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TextDiff.h"; path = "../../../../modules/juce_core/text/juce_TextDiff.h"; sourceTree = "SOURCE_ROOT"; }; | |||
070230F8B36CFD14E7EEAD71 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ThreadPool.cpp"; path = "../../../../modules/juce_core/threads/juce_ThreadPool.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
07492D83B5CEED0F975EEF77 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Image.cpp"; path = "../../../../modules/juce_graphics/images/juce_Image.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
@@ -1216,6 +1217,7 @@ | |||
89ABB9AFCDB73A409754BE48, | |||
CE882EE8C05AC3A809E41332, | |||
B6ECBC8983C8C13575A3420E, | |||
06E844BBD6A9FBACCFA1D29F, | |||
6A7463E25E5C0C70C01B5054, | |||
06FA4CB9F78A6F953DC83C6B ); name = text; sourceTree = "<group>"; }; | |||
9E385EE2C33A34870884808C = { isa = PBXGroup; children = ( | |||
@@ -637,10 +637,11 @@ | |||
A7A527D783D3B38F455964D4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_InterprocessConnectionServer.h"; path = "../../../../modules/juce_events/interprocess/juce_InterprocessConnectionServer.h"; sourceTree = "SOURCE_ROOT"; }; | |||
A7EE73FF3A5962BBF41DC2AB = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Component.h"; path = "../../../../modules/juce_gui_basics/components/juce_Component.h"; sourceTree = "SOURCE_ROOT"; }; | |||
A7FD436305E19DF69A7AF446 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_DragAndDrop.cpp"; path = "../../../../modules/juce_gui_basics/native/juce_win32_DragAndDrop.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
A8F3FC233163016FE3B23543 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PathIterator.cpp"; path = "../../../../modules/juce_graphics/geometry/juce_PathIterator.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
A90A45FB8790A91DF1A78BE7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComponentBuilder.h"; path = "../../../../modules/juce_gui_basics/layout/juce_ComponentBuilder.h"; sourceTree = "SOURCE_ROOT"; }; | |||
A90E41C0C52BDF0CC82161C9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_AppleRemote.mm"; path = "../../../../modules/juce_gui_extra/native/juce_mac_AppleRemote.mm"; sourceTree = "SOURCE_ROOT"; }; | |||
A9133BF4A4E9DF3268BE0A5F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_HyperlinkButton.cpp"; path = "../../../../modules/juce_gui_basics/buttons/juce_HyperlinkButton.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
A935F7A0CA0C3A7FE2607D0A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ResamplingAudioSource.h"; path = "../../../../modules/juce_audio_basics/sources/juce_ResamplingAudioSource.h"; sourceTree = "SOURCE_ROOT"; }; | |||
A9801DABE20B0BC1A3405EA0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Network.cpp"; path = "../../../../modules/juce_core/native/juce_android_Network.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
A9B46A5FF98D7B9DF8598C12 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_AudioUnitPluginFormat.mm"; path = "../../../../modules/juce_audio_processors/format_types/juce_AudioUnitPluginFormat.mm"; sourceTree = "SOURCE_ROOT"; }; | |||
A9C466FBA4FCF6484BCF86A2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_VSTMidiEventList.h"; path = "../../../../modules/juce_audio_processors/format_types/juce_VSTMidiEventList.h"; sourceTree = "SOURCE_ROOT"; }; | |||
AA29B047C1A1904618B410D5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StretchableObjectResizer.h"; path = "../../../../modules/juce_gui_basics/layout/juce_StretchableObjectResizer.h"; sourceTree = "SOURCE_ROOT"; }; | |||
@@ -660,7 +661,6 @@ | |||
B43E810ABF9939F0F6E76318 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_NewLine.h"; path = "../../../../modules/juce_core/text/juce_NewLine.h"; sourceTree = "SOURCE_ROOT"; }; | |||
B7F3E4AF0F482E9F6EAF6C41 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiBuffer.h"; path = "../../../../modules/juce_audio_basics/midi/juce_MidiBuffer.h"; sourceTree = "SOURCE_ROOT"; }; | |||
BA98346EFD1037285E245CC9 = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreMIDI.framework; path = System/Library/Frameworks/CoreMIDI.framework; sourceTree = SDKROOT; }; | |||
BBECA9EB9DD3C9B6CB04B10A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Uuid.h"; path = "../../../../modules/juce_core/misc/juce_Uuid.h"; sourceTree = "SOURCE_ROOT"; }; | |||
BF9246177C0D98297F4228E1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MidiBuffer.cpp"; path = "../../../../modules/juce_audio_basics/midi/juce_MidiBuffer.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
C37123DA8D32C1B6FC09FFF2 = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreAudio.framework; path = System/Library/Frameworks/CoreAudio.framework; sourceTree = SDKROOT; }; | |||
63F8022F081E22DFFFCAC998 = { isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = JuceDemoPlugin.component; sourceTree = "BUILT_PRODUCTS_DIR"; }; | |||
@@ -669,8 +669,7 @@ | |||
97B6D6C6FABF547674BD0F19 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioFormatReader.h"; path = "../../../../modules/juce_audio_formats/format/juce_AudioFormatReader.h"; sourceTree = "SOURCE_ROOT"; }; | |||
A7055681554844E4708E27A0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileSearchPath.cpp"; path = "../../../../modules/juce_core/files/juce_FileSearchPath.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
A722B041FD2540D1380C4D02 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_AudioCDReader.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_linux_AudioCDReader.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
A8F3FC233163016FE3B23543 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PathIterator.cpp"; path = "../../../../modules/juce_graphics/geometry/juce_PathIterator.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
A9133BF4A4E9DF3268BE0A5F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_HyperlinkButton.cpp"; path = "../../../../modules/juce_gui_basics/buttons/juce_HyperlinkButton.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
A9801DABE20B0BC1A3405EA0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Network.cpp"; path = "../../../../modules/juce_core/native/juce_android_Network.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
AA012A21BE3049C205D4A44A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_AudioCDReader.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_win32_AudioCDReader.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
AAEC41BFA57E45EBF94ED3C1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DrawableImage.cpp"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawableImage.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
AB10327C69AAE4AACCFC81EB = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DrawableText.cpp"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawableText.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
@@ -710,6 +709,7 @@ | |||
BB1148DE7477E7B58ABD2B95 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioSubsectionReader.h"; path = "../../../../modules/juce_audio_formats/format/juce_AudioSubsectionReader.h"; sourceTree = "SOURCE_ROOT"; }; | |||
BB84A0B296CFBF17FAF145B0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TemporaryFile.h"; path = "../../../../modules/juce_core/files/juce_TemporaryFile.h"; sourceTree = "SOURCE_ROOT"; }; | |||
BBBE74C4A9FA85B5F29FF346 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ButtonPropertyComponent.cpp"; path = "../../../../modules/juce_gui_basics/properties/juce_ButtonPropertyComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
BBECA9EB9DD3C9B6CB04B10A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Uuid.h"; path = "../../../../modules/juce_core/misc/juce_Uuid.h"; sourceTree = "SOURCE_ROOT"; }; | |||
BBF88983012D33EFEF11EA81 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Network.cpp"; path = "../../../../modules/juce_core/native/juce_win32_Network.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
BC369095BAEED8707D12F63B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = CAStreamBasicDescription.cpp; path = Extras/CoreAudio/PublicUtility/CAStreamBasicDescription.cpp; sourceTree = "DEVELOPER_DIR"; }; | |||
BCB54D2E4C0C3357DACFD29B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_NSViewComponent.h"; path = "../../../../modules/juce_gui_extra/embedding/juce_NSViewComponent.h"; sourceTree = "SOURCE_ROOT"; }; | |||
@@ -741,6 +741,7 @@ | |||
C4BC9568B31F3E7EC4C3C7E6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_WebBrowserComponent.h"; path = "../../../../modules/juce_gui_extra/misc/juce_WebBrowserComponent.h"; sourceTree = "SOURCE_ROOT"; }; | |||
C4CA0BF69BD074C55F7BD871 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = PluginProcessor.h; path = ../../Source/PluginProcessor.h; sourceTree = "SOURCE_ROOT"; }; | |||
C4E99D3E7C558C9F14AFBB8E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PropertyComponent.h"; path = "../../../../modules/juce_gui_basics/properties/juce_PropertyComponent.h"; sourceTree = "SOURCE_ROOT"; }; | |||
C507A853557D8CA51377907F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StringRef.h"; path = "../../../../modules/juce_core/text/juce_StringRef.h"; sourceTree = "SOURCE_ROOT"; }; | |||
C5334A5D1AB867C5C4631D37 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_HyperlinkButton.h"; path = "../../../../modules/juce_gui_basics/buttons/juce_HyperlinkButton.h"; sourceTree = "SOURCE_ROOT"; }; | |||
C5ED4BF4E575F3A98F08FADA = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ScopedXLock.h"; path = "../../../../modules/juce_events/native/juce_ScopedXLock.h"; sourceTree = "SOURCE_ROOT"; }; | |||
C66971823D34B6CC6C72A0D0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_String.h"; path = "../../../../modules/juce_core/text/juce_String.h"; sourceTree = "SOURCE_ROOT"; }; | |||
@@ -1206,6 +1207,7 @@ | |||
988CB13161D84307D53770D7, | |||
D39E8327482025C181E2646E, | |||
8E8EF7A3035A5F657E18814C, | |||
C507A853557D8CA51377907F, | |||
4912E679D7789579BDF68CBE, | |||
5BE5D2C8BD79AA4B1D2A24D3 ); name = text; sourceTree = "<group>"; }; | |||
41AB523E67C8F9D07AEC9388 = { isa = PBXGroup; children = ( | |||
@@ -1192,6 +1192,7 @@ | |||
</FileConfiguration> | |||
</File> | |||
<File RelativePath="..\..\..\..\modules\juce_core\text\juce_StringPool.h"/> | |||
<File RelativePath="..\..\..\..\modules\juce_core\text\juce_StringRef.h"/> | |||
<File RelativePath="..\..\..\..\modules\juce_core\text\juce_TextDiff.cpp"> | |||
<FileConfiguration Name="Debug|Win32" | |||
ExcludedFromBuild="true"> | |||
@@ -1192,6 +1192,7 @@ | |||
</FileConfiguration> | |||
</File> | |||
<File RelativePath="..\..\..\..\modules\juce_core\text\juce_StringPool.h"/> | |||
<File RelativePath="..\..\..\..\modules\juce_core\text\juce_StringRef.h"/> | |||
<File RelativePath="..\..\..\..\modules\juce_core\text\juce_TextDiff.cpp"> | |||
<FileConfiguration Name="Debug|Win32" | |||
ExcludedFromBuild="true"> | |||
@@ -41,8 +41,8 @@ public: | |||
return dynamic_cast <SineWaveSound*> (sound) != 0; | |||
} | |||
void startNote (const int midiNoteNumber, const float velocity, | |||
SynthesiserSound* /*sound*/, const int /*currentPitchWheelPosition*/) | |||
void startNote (int midiNoteNumber, float velocity, | |||
SynthesiserSound* /*sound*/, int /*currentPitchWheelPosition*/) | |||
{ | |||
currentAngle = 0.0; | |||
level = velocity * 0.15; | |||
@@ -54,7 +54,7 @@ public: | |||
angleDelta = cyclesPerSample * 2.0 * double_Pi; | |||
} | |||
void stopNote (const bool allowTailOff) | |||
void stopNote (bool allowTailOff) | |||
{ | |||
if (allowTailOff) | |||
{ | |||
@@ -74,12 +74,12 @@ public: | |||
} | |||
} | |||
void pitchWheelMoved (const int /*newValue*/) | |||
void pitchWheelMoved (int /*newValue*/) | |||
{ | |||
// can't be bothered implementing this for the demo! | |||
} | |||
void controllerMoved (const int /*controllerNumber*/, const int /*newValue*/) | |||
void controllerMoved (int /*controllerNumber*/, int /*newValue*/) | |||
{ | |||
// not interested in controllers in this case. | |||
} | |||
@@ -491,6 +491,7 @@ | |||
873EBB357BD6D24BF4A933FC = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileBrowserComponent.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileBrowserComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
87C21E57BEAE3789837E3EE7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_Files.mm"; path = "../../../../modules/juce_core/native/juce_mac_Files.mm"; sourceTree = "SOURCE_ROOT"; }; | |||
87E1C69D47EEBB410C736057 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileTreeComponent.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileTreeComponent.h"; sourceTree = "SOURCE_ROOT"; }; | |||
882707E7AF3729EE34BC413B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StringRef.h"; path = "../../../../modules/juce_core/text/juce_StringRef.h"; sourceTree = "SOURCE_ROOT"; }; | |||
883079D96B41550931751AF6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileDragAndDropTarget.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_FileDragAndDropTarget.h"; sourceTree = "SOURCE_ROOT"; }; | |||
883C3CFCC12E44CB751A1492 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PropertyPanel.h"; path = "../../../../modules/juce_gui_basics/properties/juce_PropertyPanel.h"; sourceTree = "SOURCE_ROOT"; }; | |||
88840B304F3E4CE1F05FCD8C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Slider.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_Slider.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
@@ -1147,6 +1148,7 @@ | |||
920F595F97031574B427C153, | |||
62D82C201C4829E3F70EA188, | |||
06C1447B9CBC6813BB7BEA53, | |||
882707E7AF3729EE34BC413B, | |||
A3EE7A9FD5BFE2DF31C04EF0, | |||
6CB5AB2EA383094C2127BBDB ); name = text; sourceTree = "<group>"; }; | |||
0DA42F9BE820CD85C34E691D = { isa = PBXGroup; children = ( | |||
@@ -1163,6 +1163,7 @@ | |||
</FileConfiguration> | |||
</File> | |||
<File RelativePath="..\..\..\..\modules\juce_core\text\juce_StringPool.h"/> | |||
<File RelativePath="..\..\..\..\modules\juce_core\text\juce_StringRef.h"/> | |||
<File RelativePath="..\..\..\..\modules\juce_core\text\juce_TextDiff.cpp"> | |||
<FileConfiguration Name="Debug|Win32" | |||
ExcludedFromBuild="true"> | |||
@@ -1163,6 +1163,7 @@ | |||
</FileConfiguration> | |||
</File> | |||
<File RelativePath="..\..\..\..\modules\juce_core\text\juce_StringPool.h"/> | |||
<File RelativePath="..\..\..\..\modules\juce_core\text\juce_StringRef.h"/> | |||
<File RelativePath="..\..\..\..\modules\juce_core\text\juce_TextDiff.cpp"> | |||
<FileConfiguration Name="Debug|Win32" | |||
ExcludedFromBuild="true"> | |||
@@ -104,6 +104,7 @@ | |||
8D1215F04E8191D74F58DEBE = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Logger.h"; path = "../../../../modules/juce_core/logging/juce_Logger.h"; sourceTree = "SOURCE_ROOT"; }; | |||
8DE69053F730461605C00231 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_Files.mm"; path = "../../../../modules/juce_core/native/juce_mac_Files.mm"; sourceTree = "SOURCE_ROOT"; }; | |||
92551BCF8DEA45A929CCF97A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_GZIPCompressorOutputStream.cpp"; path = "../../../../modules/juce_core/zip/juce_GZIPCompressorOutputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
949507E2CFF41C7AAFA2BB1C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StringRef.h"; path = "../../../../modules/juce_core/text/juce_StringRef.h"; sourceTree = "SOURCE_ROOT"; }; | |||
9666FDE5D872069865B28BC4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DynamicObject.h"; path = "../../../../modules/juce_core/containers/juce_DynamicObject.h"; sourceTree = "SOURCE_ROOT"; }; | |||
979580822F8E084EF20A9A93 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RelativeTime.h"; path = "../../../../modules/juce_core/time/juce_RelativeTime.h"; sourceTree = "SOURCE_ROOT"; }; | |||
990638D213329067AD10546B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StringPairArray.h"; path = "../../../../modules/juce_core/text/juce_StringPairArray.h"; sourceTree = "SOURCE_ROOT"; }; | |||
@@ -226,6 +227,7 @@ | |||
990638D213329067AD10546B, | |||
8708F2DFDF82F27A61EFC9D5, | |||
12D525C1F3C776A69AB0938A, | |||
949507E2CFF41C7AAFA2BB1C, | |||
44E6B4B64DA8BF09F45A4703, | |||
213DF50804C369804C6B6E92 ); name = text; sourceTree = "<group>"; }; | |||
8470C95EB732572CA3419423 = { isa = PBXGroup; children = ( | |||
@@ -216,6 +216,7 @@ | |||
</FileConfiguration> | |||
</File> | |||
<File RelativePath="..\..\..\..\modules\juce_core\text\juce_StringPool.h"/> | |||
<File RelativePath="..\..\..\..\modules\juce_core\text\juce_StringRef.h"/> | |||
<File RelativePath="..\..\..\..\modules\juce_core\text\juce_TextDiff.cpp"> | |||
<FileConfiguration Name="Debug|Win32" | |||
ExcludedFromBuild="true"> | |||
@@ -396,6 +396,7 @@ | |||
9AF8A6A41A7FFACC570EBCF5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TopLevelWindow.h"; path = "../../../../modules/juce_gui_basics/windows/juce_TopLevelWindow.h"; sourceTree = "SOURCE_ROOT"; }; | |||
9B02109FBEEB89243D72FC11 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_WebBrowserComponent.cpp"; path = "../../../../modules/juce_gui_extra/native/juce_win32_WebBrowserComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
9B0ADC4932AEE1AEDBAAB8AE = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MenuBarModel.cpp"; path = "../../../../modules/juce_gui_basics/menus/juce_MenuBarModel.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
9B5E2905BAEE2A1E7B7657AF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StringRef.h"; path = "../../../../modules/juce_core/text/juce_StringRef.h"; sourceTree = "SOURCE_ROOT"; }; | |||
9CBEE085CF47C89A93F2783E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_posix_NamedPipe.cpp"; path = "../../../../modules/juce_core/native/juce_posix_NamedPipe.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
9D0323FECB030B06FBD0F627 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_LookAndFeel.cpp"; path = "../../../../modules/juce_gui_basics/lookandfeel/juce_LookAndFeel.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
9EDBF1BC8604795A1B0774C9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TextDragAndDropTarget.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_TextDragAndDropTarget.h"; sourceTree = "SOURCE_ROOT"; }; | |||
@@ -598,11 +599,11 @@ | |||
ED577465CA22A65861192A35 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TooltipClient.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_TooltipClient.h"; sourceTree = "SOURCE_ROOT"; }; | |||
ED872E47438BBE6325FE78F2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_GlyphArrangement.cpp"; path = "../../../../modules/juce_graphics/fonts/juce_GlyphArrangement.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
EE785DBFA288EFA2E7AB2108 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_GIFLoader.cpp"; path = "../../../../modules/juce_graphics/image_formats/juce_GIFLoader.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
EF28BA2B5E24F4749F732230 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OptionalScopedPointer.h"; path = "../../../../modules/juce_core/memory/juce_OptionalScopedPointer.h"; sourceTree = "SOURCE_ROOT"; }; | |||
EF3A7A1A871BAB32EA1B46EF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Logger.h"; path = "../../../../modules/juce_core/logging/juce_Logger.h"; sourceTree = "SOURCE_ROOT"; }; | |||
EF54929F7151858D8FF8107B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SystemStats.h"; path = "../../../../modules/juce_core/system/juce_SystemStats.h"; sourceTree = "SOURCE_ROOT"; }; | |||
EF932865774E86525CE7FC55 = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; }; | |||
EA398D9C544440E06637C134 = { isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = HelloWorld.app; sourceTree = "BUILT_PRODUCTS_DIR"; }; | |||
EF28BA2B5E24F4749F732230 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OptionalScopedPointer.h"; path = "../../../../modules/juce_core/memory/juce_OptionalScopedPointer.h"; sourceTree = "SOURCE_ROOT"; }; | |||
EF3A7A1A871BAB32EA1B46EF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Logger.h"; path = "../../../../modules/juce_core/logging/juce_Logger.h"; sourceTree = "SOURCE_ROOT"; }; | |||
EFE00478AEAFE39D81B0E59D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CustomTypeface.h"; path = "../../../../modules/juce_graphics/fonts/juce_CustomTypeface.h"; sourceTree = "SOURCE_ROOT"; }; | |||
EFE65E031B01332448C2BE5E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_InterprocessConnectionServer.h"; path = "../../../../modules/juce_events/interprocess/juce_InterprocessConnectionServer.h"; sourceTree = "SOURCE_ROOT"; }; | |||
F003AC63C800E3F090BF217F = { isa = PBXFileReference; lastKnownFileType = file; name = "juce_module_info"; path = "../../../../modules/juce_core/juce_module_info"; sourceTree = "SOURCE_ROOT"; }; | |||
@@ -674,6 +675,7 @@ | |||
1D68491BDF0E63AC125D454C, | |||
971270DAD06B91F5B156C362, | |||
DD7DC4C53F386AD914887EDA, | |||
9B5E2905BAEE2A1E7B7657AF, | |||
03BB1C54D9DEDDAB20B854AD, | |||
AD1F1A9815D8660FA0305028 ); name = text; sourceTree = "<group>"; }; | |||
C3BF0F36B4C2A20B594B2C17 = { isa = PBXGroup; children = ( | |||
@@ -218,6 +218,7 @@ | |||
</FileConfiguration> | |||
</File> | |||
<File RelativePath="..\..\..\..\modules\juce_core\text\juce_StringPool.h"/> | |||
<File RelativePath="..\..\..\..\modules\juce_core\text\juce_StringRef.h"/> | |||
<File RelativePath="..\..\..\..\modules\juce_core\text\juce_TextDiff.cpp"> | |||
<FileConfiguration Name="Debug|Win32" | |||
ExcludedFromBuild="true"> | |||
@@ -218,6 +218,7 @@ | |||
</FileConfiguration> | |||
</File> | |||
<File RelativePath="..\..\..\..\modules\juce_core\text\juce_StringPool.h"/> | |||
<File RelativePath="..\..\..\..\modules\juce_core\text\juce_StringRef.h"/> | |||
<File RelativePath="..\..\..\..\modules\juce_core\text\juce_TextDiff.cpp"> | |||
<FileConfiguration Name="Debug|Win32" | |||
ExcludedFromBuild="true"> | |||
@@ -393,6 +393,7 @@ | |||
9AF8A6A41A7FFACC570EBCF5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TopLevelWindow.h"; path = "../../../../modules/juce_gui_basics/windows/juce_TopLevelWindow.h"; sourceTree = "SOURCE_ROOT"; }; | |||
9B02109FBEEB89243D72FC11 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_WebBrowserComponent.cpp"; path = "../../../../modules/juce_gui_extra/native/juce_win32_WebBrowserComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
9B0ADC4932AEE1AEDBAAB8AE = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MenuBarModel.cpp"; path = "../../../../modules/juce_gui_basics/menus/juce_MenuBarModel.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
9B5E2905BAEE2A1E7B7657AF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StringRef.h"; path = "../../../../modules/juce_core/text/juce_StringRef.h"; sourceTree = "SOURCE_ROOT"; }; | |||
9CBEE085CF47C89A93F2783E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_posix_NamedPipe.cpp"; path = "../../../../modules/juce_core/native/juce_posix_NamedPipe.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
9D0323FECB030B06FBD0F627 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_LookAndFeel.cpp"; path = "../../../../modules/juce_gui_basics/lookandfeel/juce_LookAndFeel.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
9EDBF1BC8604795A1B0774C9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TextDragAndDropTarget.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_TextDragAndDropTarget.h"; sourceTree = "SOURCE_ROOT"; }; | |||
@@ -672,6 +673,7 @@ | |||
1D68491BDF0E63AC125D454C, | |||
971270DAD06B91F5B156C362, | |||
DD7DC4C53F386AD914887EDA, | |||
9B5E2905BAEE2A1E7B7657AF, | |||
03BB1C54D9DEDDAB20B854AD, | |||
AD1F1A9815D8660FA0305028 ); name = text; sourceTree = "<group>"; }; | |||
C3BF0F36B4C2A20B594B2C17 = { isa = PBXGroup; children = ( | |||
@@ -65,8 +65,7 @@ void PropertySet::clear() | |||
} | |||
} | |||
String PropertySet::getValue (const String& keyName, | |||
const String& defaultValue) const noexcept | |||
String PropertySet::getValue (StringRef keyName, const String& defaultValue) const noexcept | |||
{ | |||
const ScopedLock sl (lock); | |||
@@ -79,8 +78,7 @@ String PropertySet::getValue (const String& keyName, | |||
: defaultValue; | |||
} | |||
int PropertySet::getIntValue (const String& keyName, | |||
const int defaultValue) const noexcept | |||
int PropertySet::getIntValue (StringRef keyName, const int defaultValue) const noexcept | |||
{ | |||
const ScopedLock sl (lock); | |||
const int index = properties.getAllKeys().indexOf (keyName, ignoreCaseOfKeys); | |||
@@ -92,8 +90,7 @@ int PropertySet::getIntValue (const String& keyName, | |||
: defaultValue; | |||
} | |||
double PropertySet::getDoubleValue (const String& keyName, | |||
const double defaultValue) const noexcept | |||
double PropertySet::getDoubleValue (StringRef keyName, const double defaultValue) const noexcept | |||
{ | |||
const ScopedLock sl (lock); | |||
const int index = properties.getAllKeys().indexOf (keyName, ignoreCaseOfKeys); | |||
@@ -105,8 +102,7 @@ double PropertySet::getDoubleValue (const String& keyName, | |||
: defaultValue; | |||
} | |||
bool PropertySet::getBoolValue (const String& keyName, | |||
const bool defaultValue) const noexcept | |||
bool PropertySet::getBoolValue (StringRef keyName, const bool defaultValue) const noexcept | |||
{ | |||
const ScopedLock sl (lock); | |||
const int index = properties.getAllKeys().indexOf (keyName, ignoreCaseOfKeys); | |||
@@ -118,7 +114,7 @@ bool PropertySet::getBoolValue (const String& keyName, | |||
: defaultValue; | |||
} | |||
XmlElement* PropertySet::getXmlValue (const String& keyName) const | |||
XmlElement* PropertySet::getXmlValue (StringRef keyName) const | |||
{ | |||
return XmlDocument::parse (getValue (keyName)); | |||
} | |||
@@ -142,7 +138,7 @@ void PropertySet::setValue (const String& keyName, const var& v) | |||
} | |||
} | |||
void PropertySet::removeValue (const String& keyName) | |||
void PropertySet::removeValue (StringRef keyName) | |||
{ | |||
if (keyName.isNotEmpty()) | |||
{ | |||
@@ -163,7 +159,7 @@ void PropertySet::setValue (const String& keyName, const XmlElement* const xml) | |||
: var (xml->createDocument (String::empty, true))); | |||
} | |||
bool PropertySet::containsKey (const String& keyName) const noexcept | |||
bool PropertySet::containsKey (StringRef keyName) const noexcept | |||
{ | |||
const ScopedLock sl (lock); | |||
return properties.getAllKeys().contains (keyName, ignoreCaseOfKeys); | |||
@@ -69,8 +69,7 @@ public: | |||
@param keyName the name of the property to retrieve | |||
@param defaultReturnValue a value to return if the named property doesn't actually exist | |||
*/ | |||
String getValue (const String& keyName, | |||
const String& defaultReturnValue = String::empty) const noexcept; | |||
String getValue (StringRef keyName, const String& defaultReturnValue = String::empty) const noexcept; | |||
/** Returns one of the properties as an integer. | |||
@@ -81,8 +80,7 @@ public: | |||
@param keyName the name of the property to retrieve | |||
@param defaultReturnValue a value to return if the named property doesn't actually exist | |||
*/ | |||
int getIntValue (const String& keyName, | |||
const int defaultReturnValue = 0) const noexcept; | |||
int getIntValue (StringRef keyName, int defaultReturnValue = 0) const noexcept; | |||
/** Returns one of the properties as an double. | |||
@@ -93,8 +91,7 @@ public: | |||
@param keyName the name of the property to retrieve | |||
@param defaultReturnValue a value to return if the named property doesn't actually exist | |||
*/ | |||
double getDoubleValue (const String& keyName, | |||
const double defaultReturnValue = 0.0) const noexcept; | |||
double getDoubleValue (StringRef keyName, double defaultReturnValue = 0.0) const noexcept; | |||
/** Returns one of the properties as an boolean. | |||
@@ -108,8 +105,7 @@ public: | |||
@param keyName the name of the property to retrieve | |||
@param defaultReturnValue a value to return if the named property doesn't actually exist | |||
*/ | |||
bool getBoolValue (const String& keyName, | |||
const bool defaultReturnValue = false) const noexcept; | |||
bool getBoolValue (StringRef keyName, bool defaultReturnValue = false) const noexcept; | |||
/** Returns one of the properties as an XML element. | |||
@@ -122,7 +118,7 @@ public: | |||
@param keyName the name of the property to retrieve | |||
*/ | |||
XmlElement* getXmlValue (const String& keyName) const; | |||
XmlElement* getXmlValue (StringRef keyName) const; | |||
//============================================================================== | |||
/** Sets a named property. | |||
@@ -150,10 +146,10 @@ public: | |||
/** Deletes a property. | |||
@param keyName the name of the property to delete. (This mustn't be an empty string) | |||
*/ | |||
void removeValue (const String& keyName); | |||
void removeValue (StringRef keyName); | |||
/** Returns true if the properies include the given key. */ | |||
bool containsKey (const String& keyName) const noexcept; | |||
bool containsKey (StringRef keyName) const noexcept; | |||
/** Removes all values. */ | |||
void clear(); | |||
@@ -340,66 +340,67 @@ int File::hashCode() const { return fullPath.hashCode(); } | |||
int64 File::hashCode64() const { return fullPath.hashCode64(); } | |||
//============================================================================== | |||
bool File::isAbsolutePath (const String& path) | |||
bool File::isAbsolutePath (StringRef path) | |||
{ | |||
return path.startsWithChar (separator) | |||
return path.text[0] == separator | |||
#if JUCE_WINDOWS | |||
|| (path.isNotEmpty() && path[1] == ':'); | |||
|| (path.isNotEmpty() && path.text[1] == ':'); | |||
#else | |||
|| path.startsWithChar ('~'); | |||
|| path.text[0] == '~'; | |||
#endif | |||
} | |||
File File::getChildFile (String relativePath) const | |||
File File::getChildFile (StringRef relativePath) const | |||
{ | |||
if (isAbsolutePath (relativePath)) | |||
return File (relativePath); | |||
return File (String (relativePath.text)); | |||
if (relativePath.text[0] != '.') | |||
return File (addTrailingSeparator (fullPath) + relativePath); | |||
String path (fullPath); | |||
// It's relative, so remove any ../ or ./ bits at the start.. | |||
if (relativePath[0] == '.') | |||
#if JUCE_WINDOWS | |||
if (relativePath.text.indexOf ((juce_wchar) '/') >= 0) | |||
return getChildFile (String (relativePath.text).replaceCharacter ('/', '\\')); | |||
#endif | |||
while (relativePath[0] == '.') | |||
{ | |||
#if JUCE_WINDOWS | |||
relativePath = relativePath.replaceCharacter ('/', '\\'); | |||
#endif | |||
const juce_wchar secondChar = relativePath.text[1]; | |||
while (relativePath[0] == '.') | |||
if (secondChar == '.') | |||
{ | |||
const juce_wchar secondChar = relativePath[1]; | |||
const juce_wchar thirdChar = relativePath.text[2]; | |||
if (secondChar == '.') | |||
{ | |||
const juce_wchar thirdChar = relativePath[2]; | |||
if (thirdChar == 0 || thirdChar == separator) | |||
{ | |||
const int lastSlash = path.lastIndexOfChar (separator); | |||
if (lastSlash >= 0) | |||
path = path.substring (0, lastSlash); | |||
relativePath = relativePath.substring (3); | |||
} | |||
else | |||
{ | |||
break; | |||
} | |||
} | |||
else if (secondChar == separator) | |||
if (thirdChar == 0 || thirdChar == separator) | |||
{ | |||
relativePath = relativePath.substring (2); | |||
const int lastSlash = path.lastIndexOfChar (separator); | |||
if (lastSlash >= 0) | |||
path = path.substring (0, lastSlash); | |||
relativePath = relativePath.text + 3; | |||
} | |||
else | |||
{ | |||
break; | |||
} | |||
} | |||
else if (secondChar == separator) | |||
{ | |||
relativePath = relativePath.text + 2; | |||
} | |||
else | |||
{ | |||
break; | |||
} | |||
} | |||
return File (addTrailingSeparator (path) + relativePath); | |||
} | |||
File File::getSiblingFile (const String& fileName) const | |||
File File::getSiblingFile (StringRef fileName) const | |||
{ | |||
return getParentDirectory().getChildFile (fileName); | |||
} | |||
@@ -602,23 +603,23 @@ String File::getFileExtension() const | |||
return String::empty; | |||
} | |||
bool File::hasFileExtension (const String& possibleSuffix) const | |||
bool File::hasFileExtension (StringRef possibleSuffix) const | |||
{ | |||
if (possibleSuffix.isEmpty()) | |||
return fullPath.lastIndexOfChar ('.') <= fullPath.lastIndexOfChar (separator); | |||
const int semicolon = possibleSuffix.indexOfChar (0, ';'); | |||
const int semicolon = possibleSuffix.text.indexOf ((juce_wchar) ';'); | |||
if (semicolon >= 0) | |||
{ | |||
return hasFileExtension (possibleSuffix.substring (0, semicolon).trimEnd()) | |||
|| hasFileExtension (possibleSuffix.substring (semicolon + 1).trimStart()); | |||
return hasFileExtension (String (possibleSuffix.text).substring (0, semicolon).trimEnd()) | |||
|| hasFileExtension ((possibleSuffix.text + (semicolon + 1)).findEndOfWhitespace()); | |||
} | |||
else | |||
{ | |||
if (fullPath.endsWithIgnoreCase (possibleSuffix)) | |||
{ | |||
if (possibleSuffix.startsWithChar ('.')) | |||
if (possibleSuffix.text[0] == '.') | |||
return true; | |||
const int dotPos = fullPath.length() - possibleSuffix.length() - 1; | |||
@@ -631,7 +632,7 @@ bool File::hasFileExtension (const String& possibleSuffix) const | |||
return false; | |||
} | |||
File File::withFileExtension (const String& newExtension) const | |||
File File::withFileExtension (StringRef newExtension) const | |||
{ | |||
if (fullPath.isEmpty()) | |||
return File::nonexistent; | |||
@@ -642,7 +643,7 @@ File File::withFileExtension (const String& newExtension) const | |||
if (i >= 0) | |||
filePart = filePart.substring (0, i); | |||
if (newExtension.isNotEmpty() && ! newExtension.startsWithChar ('.')) | |||
if (newExtension.isNotEmpty() && newExtension.text[0] != '.') | |||
filePart << '.'; | |||
return getSiblingFile (filePart + newExtension); | |||
@@ -874,7 +875,7 @@ String File::getRelativePathFrom (const File& dir) const | |||
} | |||
//============================================================================== | |||
File File::createTempFile (const String& fileNameEnding) | |||
File File::createTempFile (StringRef fileNameEnding) | |||
{ | |||
const File tempFile (getSpecialLocation (tempDirectory) | |||
.getChildFile ("temp_" + String::toHexString (Random::getSystemRandom().nextInt())) | |||
@@ -203,7 +203,7 @@ public: | |||
@see getFileExtension, withFileExtension, getFileNameWithoutExtension | |||
*/ | |||
bool hasFileExtension (const String& extensionToTest) const; | |||
bool hasFileExtension (StringRef extensionToTest) const; | |||
/** Returns a version of this file with a different file extension. | |||
@@ -215,7 +215,7 @@ public: | |||
@see getFileName, getFileExtension, hasFileExtension, getFileNameWithoutExtension | |||
*/ | |||
File withFileExtension (const String& newExtension) const; | |||
File withFileExtension (StringRef newExtension) const; | |||
/** Returns the last part of the filename, without its file extension. | |||
@@ -255,7 +255,7 @@ public: | |||
@see getSiblingFile, getParentDirectory, getRelativePathFrom, isAChildOf | |||
*/ | |||
File getChildFile (String relativeOrAbsolutePath) const; | |||
File getChildFile (StringRef relativeOrAbsolutePath) const; | |||
/** Returns a file which is in the same directory as this one. | |||
@@ -263,7 +263,7 @@ public: | |||
@see getChildFile, getParentDirectory | |||
*/ | |||
File getSiblingFile (const String& siblingFileName) const; | |||
File getSiblingFile (StringRef siblingFileName) const; | |||
//============================================================================== | |||
/** Returns the directory that contains this file or directory. | |||
@@ -852,7 +852,7 @@ public: | |||
This will try to return the name of a non-existent temp file. | |||
To get the temp folder, you can use getSpecialLocation (File::tempDirectory). | |||
*/ | |||
static File createTempFile (const String& fileNameEnding); | |||
static File createTempFile (StringRef fileNameEnding); | |||
//============================================================================== | |||
@@ -908,7 +908,7 @@ public: | |||
static bool areFileNamesCaseSensitive(); | |||
/** Returns true if the string seems to be a fully-specified absolute path. */ | |||
static bool isAbsolutePath (const String& path); | |||
static bool isAbsolutePath (StringRef path); | |||
/** Creates a file that simply contains this string, without doing the sanity-checking | |||
that the normal constructors do. | |||
@@ -145,6 +145,7 @@ | |||
namespace juce | |||
{ | |||
class StringRef; | |||
class MemoryBlock; | |||
class File; | |||
class InputStream; | |||
@@ -179,6 +180,7 @@ extern JUCE_API void JUCE_CALLTYPE logAssertion (const char* file, int line) noe | |||
#endif | |||
#include "text/juce_String.h" | |||
#include "text/juce_StringRef.h" | |||
#include "logging/juce_Logger.h" | |||
#include "memory/juce_LeakedObjectDetector.h" | |||
#include "memory/juce_ContainerDeletePolicy.h" | |||
@@ -58,7 +58,7 @@ public: | |||
if (HttpQueryInfo (request, HTTP_QUERY_RAW_HEADERS_CRLF, buffer.getData(), &bufferSizeBytes, 0)) | |||
{ | |||
StringArray headersArray; | |||
headersArray.addLines (reinterpret_cast <const WCHAR*> (buffer.getData())); | |||
headersArray.addLines (String (reinterpret_cast<const WCHAR*> (buffer.getData()))); | |||
for (int i = 0; i < headersArray.size(); ++i) | |||
{ | |||
@@ -38,7 +38,7 @@ | |||
from a string, so it's much faster to keep a static identifier object to refer | |||
to frequently-used names, rather than constructing them each time you need it. | |||
@see NamedPropertySet, ValueTree | |||
@see NamedValueSet, ValueTree | |||
*/ | |||
class JUCE_API Identifier | |||
{ | |||
@@ -82,6 +82,9 @@ public: | |||
/** Returns this identifier's raw string pointer. */ | |||
const String::CharPointerType getCharPointer() const noexcept { return name; } | |||
/** Returns this identifier as a StringRef. */ | |||
operator StringRef() const noexcept { return name.getAddress(); } | |||
/** Returns true if this Identifier is not null */ | |||
bool isValid() const noexcept { return name.getAddress() != nullptr; } | |||
@@ -53,6 +53,11 @@ public: | |||
@see getDefault() | |||
*/ | |||
operator String() const { return getDefault(); } | |||
/** Returns the default new-line sequence that the library uses. | |||
@see OutputStream::setNewLineString() | |||
*/ | |||
operator StringRef() const noexcept { return getDefault(); } | |||
}; | |||
//============================================================================== | |||
@@ -512,11 +512,16 @@ int String::length() const noexcept | |||
return (int) text.length(); | |||
} | |||
size_t String::getByteOffsetOfEnd() const noexcept | |||
static size_t findByteOffsetOfEnd (String::CharPointerType text) noexcept | |||
{ | |||
return (size_t) (((char*) text.findTerminatingNull().getAddress()) - (char*) text.getAddress()); | |||
} | |||
size_t String::getByteOffsetOfEnd() const noexcept | |||
{ | |||
return findByteOffsetOfEnd (text); | |||
} | |||
juce_wchar String::operator[] (int index) const noexcept | |||
{ | |||
jassert (index == 0 || (index > 0 && index <= (int) text.lengthUpTo ((size_t) index + 1))); | |||
@@ -550,12 +555,14 @@ JUCE_API bool JUCE_CALLTYPE operator== (const String& s1, const wchar_t* const s | |||
JUCE_API bool JUCE_CALLTYPE operator== (const String& s1, const CharPointer_UTF8 s2) noexcept { return s1.getCharPointer().compare (s2) == 0; } | |||
JUCE_API bool JUCE_CALLTYPE operator== (const String& s1, const CharPointer_UTF16 s2) noexcept { return s1.getCharPointer().compare (s2) == 0; } | |||
JUCE_API bool JUCE_CALLTYPE operator== (const String& s1, const CharPointer_UTF32 s2) noexcept { return s1.getCharPointer().compare (s2) == 0; } | |||
JUCE_API bool JUCE_CALLTYPE operator== (const String& s1, StringRef s2) noexcept { return s1.getCharPointer().compare (s2.text) == 0; } | |||
JUCE_API bool JUCE_CALLTYPE operator!= (const String& s1, const String& s2) noexcept { return s1.compare (s2) != 0; } | |||
JUCE_API bool JUCE_CALLTYPE operator!= (const String& s1, const char* const s2) noexcept { return s1.compare (s2) != 0; } | |||
JUCE_API bool JUCE_CALLTYPE operator!= (const String& s1, const wchar_t* const s2) noexcept { return s1.compare (s2) != 0; } | |||
JUCE_API bool JUCE_CALLTYPE operator!= (const String& s1, const CharPointer_UTF8 s2) noexcept { return s1.getCharPointer().compare (s2) != 0; } | |||
JUCE_API bool JUCE_CALLTYPE operator!= (const String& s1, const CharPointer_UTF16 s2) noexcept { return s1.getCharPointer().compare (s2) != 0; } | |||
JUCE_API bool JUCE_CALLTYPE operator!= (const String& s1, const CharPointer_UTF32 s2) noexcept { return s1.getCharPointer().compare (s2) != 0; } | |||
JUCE_API bool JUCE_CALLTYPE operator!= (const String& s1, StringRef s2) noexcept { return s1.getCharPointer().compare (s2.text) != 0; } | |||
JUCE_API bool JUCE_CALLTYPE operator> (const String& s1, const String& s2) noexcept { return s1.compare (s2) > 0; } | |||
JUCE_API bool JUCE_CALLTYPE operator< (const String& s1, const String& s2) noexcept { return s1.compare (s2) < 0; } | |||
JUCE_API bool JUCE_CALLTYPE operator>= (const String& s1, const String& s2) noexcept { return s1.compare (s2) >= 0; } | |||
@@ -804,7 +811,7 @@ int String::lastIndexOfChar (const juce_wchar character) const noexcept | |||
return last; | |||
} | |||
int String::indexOfAnyOf (const String& charactersToLookFor, const int startIndex, const bool ignoreCase) const noexcept | |||
int String::indexOfAnyOf (StringRef charactersToLookFor, const int startIndex, const bool ignoreCase) const noexcept | |||
{ | |||
CharPointerType t (text); | |||
@@ -824,17 +831,17 @@ int String::indexOfAnyOf (const String& charactersToLookFor, const int startInde | |||
return -1; | |||
} | |||
int String::indexOf (const String& other) const noexcept | |||
int String::indexOf (StringRef other) const noexcept | |||
{ | |||
return other.isEmpty() ? 0 : text.indexOf (other.text); | |||
} | |||
int String::indexOfIgnoreCase (const String& other) const noexcept | |||
int String::indexOfIgnoreCase (StringRef other) const noexcept | |||
{ | |||
return other.isEmpty() ? 0 : CharacterFunctions::indexOfIgnoreCase (text, other.text); | |||
} | |||
int String::indexOf (const int startIndex, const String& other) const noexcept | |||
int String::indexOf (const int startIndex, StringRef other) const noexcept | |||
{ | |||
if (other.isEmpty()) | |||
return -1; | |||
@@ -855,7 +862,7 @@ int String::indexOf (const int startIndex, const String& other) const noexcept | |||
return found; | |||
} | |||
int String::indexOfIgnoreCase (const int startIndex, const String& other) const noexcept | |||
int String::indexOfIgnoreCase (const int startIndex, StringRef other) const noexcept | |||
{ | |||
if (other.isEmpty()) | |||
return -1; | |||
@@ -876,7 +883,7 @@ int String::indexOfIgnoreCase (const int startIndex, const String& other) const | |||
return found; | |||
} | |||
int String::lastIndexOf (const String& other) const noexcept | |||
int String::lastIndexOf (StringRef other) const noexcept | |||
{ | |||
if (other.isNotEmpty()) | |||
{ | |||
@@ -901,7 +908,7 @@ int String::lastIndexOf (const String& other) const noexcept | |||
return -1; | |||
} | |||
int String::lastIndexOfIgnoreCase (const String& other) const noexcept | |||
int String::lastIndexOfIgnoreCase (StringRef other) const noexcept | |||
{ | |||
if (other.isNotEmpty()) | |||
{ | |||
@@ -926,7 +933,7 @@ int String::lastIndexOfIgnoreCase (const String& other) const noexcept | |||
return -1; | |||
} | |||
int String::lastIndexOfAnyOf (const String& charactersToLookFor, const bool ignoreCase) const noexcept | |||
int String::lastIndexOfAnyOf (StringRef charactersToLookFor, const bool ignoreCase) const noexcept | |||
{ | |||
CharPointerType t (text); | |||
int last = -1; | |||
@@ -938,7 +945,7 @@ int String::lastIndexOfAnyOf (const String& charactersToLookFor, const bool igno | |||
return last; | |||
} | |||
bool String::contains (const String& other) const noexcept | |||
bool String::contains (StringRef other) const noexcept | |||
{ | |||
return indexOf (other) >= 0; | |||
} | |||
@@ -948,12 +955,12 @@ bool String::containsChar (const juce_wchar character) const noexcept | |||
return text.indexOf (character) >= 0; | |||
} | |||
bool String::containsIgnoreCase (const String& t) const noexcept | |||
bool String::containsIgnoreCase (StringRef t) const noexcept | |||
{ | |||
return indexOfIgnoreCase (t) >= 0; | |||
} | |||
int String::indexOfWholeWord (const String& word) const noexcept | |||
int String::indexOfWholeWord (StringRef word) const noexcept | |||
{ | |||
if (word.isNotEmpty()) | |||
{ | |||
@@ -975,7 +982,7 @@ int String::indexOfWholeWord (const String& word) const noexcept | |||
return -1; | |||
} | |||
int String::indexOfWholeWordIgnoreCase (const String& word) const noexcept | |||
int String::indexOfWholeWordIgnoreCase (StringRef word) const noexcept | |||
{ | |||
if (word.isNotEmpty()) | |||
{ | |||
@@ -997,12 +1004,12 @@ int String::indexOfWholeWordIgnoreCase (const String& word) const noexcept | |||
return -1; | |||
} | |||
bool String::containsWholeWord (const String& wordToLookFor) const noexcept | |||
bool String::containsWholeWord (StringRef wordToLookFor) const noexcept | |||
{ | |||
return indexOfWholeWord (wordToLookFor) >= 0; | |||
} | |||
bool String::containsWholeWordIgnoreCase (const String& wordToLookFor) const noexcept | |||
bool String::containsWholeWordIgnoreCase (StringRef wordToLookFor) const noexcept | |||
{ | |||
return indexOfWholeWordIgnoreCase (wordToLookFor) >= 0; | |||
} | |||
@@ -1044,18 +1051,18 @@ struct WildCardMatcher | |||
} | |||
}; | |||
bool String::matchesWildcard (const String& wildcard, const bool ignoreCase) const noexcept | |||
bool String::matchesWildcard (StringRef wildcard, const bool ignoreCase) const noexcept | |||
{ | |||
return WildCardMatcher<CharPointerType>::matches (wildcard.text, text, ignoreCase); | |||
} | |||
//============================================================================== | |||
String String::repeatedString (const String& stringToRepeat, int numberOfTimesToRepeat) | |||
String String::repeatedString (StringRef stringToRepeat, int numberOfTimesToRepeat) | |||
{ | |||
if (numberOfTimesToRepeat <= 0) | |||
return empty; | |||
String result (PreallocationBytes (stringToRepeat.getByteOffsetOfEnd() * (size_t) numberOfTimesToRepeat)); | |||
String result (PreallocationBytes (findByteOffsetOfEnd (stringToRepeat) * (size_t) numberOfTimesToRepeat)); | |||
CharPointerType n (result.text); | |||
while (--numberOfTimesToRepeat >= 0) | |||
@@ -1121,7 +1128,7 @@ String String::paddedRight (const juce_wchar padCharacter, int minimumLength) co | |||
} | |||
//============================================================================== | |||
String String::replaceSection (int index, int numCharsToReplace, const String& stringToInsert) const | |||
String String::replaceSection (int index, int numCharsToReplace, StringRef stringToInsert) const | |||
{ | |||
if (index < 0) | |||
{ | |||
@@ -1163,10 +1170,10 @@ String String::replaceSection (int index, int numCharsToReplace, const String& s | |||
} | |||
if (insertPoint == text && startOfRemainder.isEmpty()) | |||
return stringToInsert; | |||
return stringToInsert.text; | |||
const size_t initialBytes = (size_t) (((char*) insertPoint.getAddress()) - (char*) text.getAddress()); | |||
const size_t newStringBytes = stringToInsert.getByteOffsetOfEnd(); | |||
const size_t newStringBytes = findByteOffsetOfEnd (stringToInsert); | |||
const size_t remainderBytes = (size_t) (((char*) startOfRemainder.findTerminatingNull().getAddress()) - (char*) startOfRemainder.getAddress()); | |||
const size_t newTotalBytes = initialBytes + newStringBytes + remainderBytes; | |||
@@ -1187,7 +1194,7 @@ String String::replaceSection (int index, int numCharsToReplace, const String& s | |||
return result; | |||
} | |||
String String::replace (const String& stringToReplace, const String& stringToInsert, const bool ignoreCase) const | |||
String String::replace (StringRef stringToReplace, StringRef stringToInsert, const bool ignoreCase) const | |||
{ | |||
const int stringToReplaceLen = stringToReplace.length(); | |||
const int stringToInsertLen = stringToInsert.length(); | |||
@@ -1268,7 +1275,7 @@ String String::replaceCharacter (const juce_wchar charToReplace, const juce_wcha | |||
return builder.result; | |||
} | |||
String String::replaceCharacters (const String& charactersToReplace, const String& charactersToInsertInstead) const | |||
String String::replaceCharacters (StringRef charactersToReplace, StringRef charactersToInsertInstead) const | |||
{ | |||
StringCreationHelper builder (text); | |||
@@ -1276,7 +1283,7 @@ String String::replaceCharacters (const String& charactersToReplace, const Strin | |||
{ | |||
juce_wchar c = builder.source.getAndAdvance(); | |||
const int index = charactersToReplace.indexOfChar (c); | |||
const int index = charactersToReplace.text.indexOf (c); | |||
if (index >= 0) | |||
c = charactersToInsertInstead [index]; | |||
@@ -1290,12 +1297,12 @@ String String::replaceCharacters (const String& charactersToReplace, const Strin | |||
} | |||
//============================================================================== | |||
bool String::startsWith (const String& other) const noexcept | |||
bool String::startsWith (StringRef other) const noexcept | |||
{ | |||
return text.compareUpTo (other.text, other.length()) == 0; | |||
} | |||
bool String::startsWithIgnoreCase (const String& other) const noexcept | |||
bool String::startsWithIgnoreCase (StringRef other) const noexcept | |||
{ | |||
return text.compareIgnoreCaseUpTo (other.text, other.length()) == 0; | |||
} | |||
@@ -1318,7 +1325,7 @@ bool String::endsWithChar (const juce_wchar character) const noexcept | |||
return *--t == character; | |||
} | |||
bool String::endsWith (const String& other) const noexcept | |||
bool String::endsWith (StringRef other) const noexcept | |||
{ | |||
CharPointerType end (text.findTerminatingNull()); | |||
CharPointerType otherEnd (other.text.findTerminatingNull()); | |||
@@ -1335,7 +1342,7 @@ bool String::endsWith (const String& other) const noexcept | |||
return otherEnd == other.text; | |||
} | |||
bool String::endsWithIgnoreCase (const String& other) const noexcept | |||
bool String::endsWithIgnoreCase (StringRef other) const noexcept | |||
{ | |||
CharPointerType end (text.findTerminatingNull()); | |||
CharPointerType otherEnd (other.text.findTerminatingNull()); | |||
@@ -1459,7 +1466,7 @@ String String::getLastCharacters (const int numCharacters) const | |||
return String (text + jmax (0, length() - jmax (0, numCharacters))); | |||
} | |||
String String::fromFirstOccurrenceOf (const String& sub, | |||
String String::fromFirstOccurrenceOf (StringRef sub, | |||
const bool includeSubString, | |||
const bool ignoreCase) const | |||
{ | |||
@@ -1471,7 +1478,7 @@ String String::fromFirstOccurrenceOf (const String& sub, | |||
return substring (includeSubString ? i : i + sub.length()); | |||
} | |||
String String::fromLastOccurrenceOf (const String& sub, | |||
String String::fromLastOccurrenceOf (StringRef sub, | |||
const bool includeSubString, | |||
const bool ignoreCase) const | |||
{ | |||
@@ -1483,7 +1490,7 @@ String String::fromLastOccurrenceOf (const String& sub, | |||
return substring (includeSubString ? i : i + sub.length()); | |||
} | |||
String String::upToFirstOccurrenceOf (const String& sub, | |||
String String::upToFirstOccurrenceOf (StringRef sub, | |||
const bool includeSubString, | |||
const bool ignoreCase) const | |||
{ | |||
@@ -1495,7 +1502,7 @@ String String::upToFirstOccurrenceOf (const String& sub, | |||
return substring (0, includeSubString ? i + sub.length() : i); | |||
} | |||
String String::upToLastOccurrenceOf (const String& sub, | |||
String String::upToLastOccurrenceOf (StringRef sub, | |||
const bool includeSubString, | |||
const bool ignoreCase) const | |||
{ | |||
@@ -1607,17 +1614,17 @@ String String::trimEnd() const | |||
return *this; | |||
} | |||
String String::trimCharactersAtStart (const String& charactersToTrim) const | |||
String String::trimCharactersAtStart (StringRef charactersToTrim) const | |||
{ | |||
CharPointerType t (text); | |||
while (charactersToTrim.containsChar (*t)) | |||
while (charactersToTrim.text.indexOf (*t) >= 0) | |||
++t; | |||
return t == text ? *this : String (t); | |||
} | |||
String String::trimCharactersAtEnd (const String& charactersToTrim) const | |||
String String::trimCharactersAtEnd (StringRef charactersToTrim) const | |||
{ | |||
if (isNotEmpty()) | |||
{ | |||
@@ -1626,7 +1633,7 @@ String String::trimCharactersAtEnd (const String& charactersToTrim) const | |||
while (trimmedEnd > text) | |||
{ | |||
if (! charactersToTrim.containsChar (*--trimmedEnd)) | |||
if (charactersToTrim.text.indexOf (*--trimmedEnd) < 0) | |||
{ | |||
++trimmedEnd; | |||
break; | |||
@@ -1641,7 +1648,7 @@ String String::trimCharactersAtEnd (const String& charactersToTrim) const | |||
} | |||
//============================================================================== | |||
String String::retainCharacters (const String& charactersToRetain) const | |||
String String::retainCharacters (StringRef charactersToRetain) const | |||
{ | |||
if (isEmpty()) | |||
return empty; | |||
@@ -1652,7 +1659,7 @@ String String::retainCharacters (const String& charactersToRetain) const | |||
{ | |||
juce_wchar c = builder.source.getAndAdvance(); | |||
if (charactersToRetain.containsChar (c)) | |||
if (charactersToRetain.text.indexOf (c) >= 0) | |||
builder.write (c); | |||
if (c == 0) | |||
@@ -1663,7 +1670,7 @@ String String::retainCharacters (const String& charactersToRetain) const | |||
return builder.result; | |||
} | |||
String String::removeCharacters (const String& charactersToRemove) const | |||
String String::removeCharacters (StringRef charactersToRemove) const | |||
{ | |||
if (isEmpty()) | |||
return empty; | |||
@@ -1674,7 +1681,7 @@ String String::removeCharacters (const String& charactersToRemove) const | |||
{ | |||
juce_wchar c = builder.source.getAndAdvance(); | |||
if (! charactersToRemove.containsChar (c)) | |||
if (charactersToRemove.text.indexOf (c) < 0) | |||
builder.write (c); | |||
if (c == 0) | |||
@@ -1684,13 +1691,13 @@ String String::removeCharacters (const String& charactersToRemove) const | |||
return builder.result; | |||
} | |||
String String::initialSectionContainingOnly (const String& permittedCharacters) const | |||
String String::initialSectionContainingOnly (StringRef permittedCharacters) const | |||
{ | |||
CharPointerType t (text); | |||
while (! t.isEmpty()) | |||
{ | |||
if (! permittedCharacters.containsChar (*t)) | |||
if (permittedCharacters.text.indexOf (*t) < 0) | |||
return String (text, t); | |||
++t; | |||
@@ -1699,13 +1706,13 @@ String String::initialSectionContainingOnly (const String& permittedCharacters) | |||
return *this; | |||
} | |||
String String::initialSectionNotContaining (const String& charactersToStopAt) const | |||
String String::initialSectionNotContaining (StringRef charactersToStopAt) const | |||
{ | |||
CharPointerType t (text); | |||
while (! t.isEmpty()) | |||
{ | |||
if (charactersToStopAt.containsChar (*t)) | |||
if (charactersToStopAt.text.indexOf (*t) >= 0) | |||
return String (text, t); | |||
++t; | |||
@@ -1714,23 +1721,23 @@ String String::initialSectionNotContaining (const String& charactersToStopAt) co | |||
return *this; | |||
} | |||
bool String::containsOnly (const String& chars) const noexcept | |||
bool String::containsOnly (StringRef chars) const noexcept | |||
{ | |||
CharPointerType t (text); | |||
while (! t.isEmpty()) | |||
if (! chars.containsChar (t.getAndAdvance())) | |||
if (chars.text.indexOf (t.getAndAdvance()) < 0) | |||
return false; | |||
return true; | |||
} | |||
bool String::containsAnyOf (const String& chars) const noexcept | |||
bool String::containsAnyOf (StringRef chars) const noexcept | |||
{ | |||
CharPointerType t (text); | |||
while (! t.isEmpty()) | |||
if (chars.containsChar (t.getAndAdvance())) | |||
if (chars.text.indexOf (t.getAndAdvance()) >= 0) | |||
return true; | |||
return false; | |||
@@ -2082,6 +2089,15 @@ String String::fromUTF8 (const char* const buffer, int bufferSizeBytes) | |||
#pragma warning (pop) | |||
#endif | |||
//============================================================================== | |||
StringRef::StringRef (const String::CharPointerType::CharType* stringLiteral) noexcept : text (stringLiteral) | |||
{ | |||
jassert (stringLiteral != nullptr); // This must be a valid string literal, not a null pointer!! | |||
} | |||
StringRef::StringRef (String::CharPointerType stringLiteral) noexcept : text (stringLiteral) {} | |||
StringRef::StringRef (const String& string) noexcept : text (string.getCharPointer()) {} | |||
//============================================================================== | |||
//============================================================================== | |||
#if JUCE_UNIT_TESTS | |||
@@ -2192,12 +2208,12 @@ public: | |||
expect (s.substring (0, 100) == s); | |||
expect (s.substring (-1, 100) == s); | |||
expect (s.substring (3) == "345678"); | |||
expect (s.indexOf (L"45") == 4); | |||
expect (s.indexOf (String (L"45")) == 4); | |||
expect (String ("444445").indexOf ("45") == 4); | |||
expect (String ("444445").lastIndexOfChar ('4') == 4); | |||
expect (String ("45454545x").lastIndexOf (L"45") == 6); | |||
expect (String ("45454545x").lastIndexOf (String (L"45")) == 6); | |||
expect (String ("45454545x").lastIndexOfAnyOf ("456") == 7); | |||
expect (String ("45454545x").lastIndexOfAnyOf (L"456x") == 8); | |||
expect (String ("45454545x").lastIndexOfAnyOf (String (L"456x")) == 8); | |||
expect (String ("abABaBaBa").lastIndexOfIgnoreCase ("aB") == 6); | |||
expect (s.indexOfChar (L'4') == 4); | |||
expect (s + s == "012345678012345678"); | |||
@@ -2254,21 +2270,21 @@ public: | |||
expect (s3.compareIgnoreCase (L"ABCdeFGhiJ") == 0); | |||
expect (s3.containsIgnoreCase (s3.substring (3))); | |||
expect (s3.indexOfAnyOf ("xyzf", 2, true) == 5); | |||
expect (s3.indexOfAnyOf (L"xyzf", 2, false) == -1); | |||
expect (s3.indexOfAnyOf (String (L"xyzf"), 2, false) == -1); | |||
expect (s3.indexOfAnyOf ("xyzF", 2, false) == 5); | |||
expect (s3.containsAnyOf (L"zzzFs")); | |||
expect (s3.containsAnyOf (String (L"zzzFs"))); | |||
expect (s3.startsWith ("abcd")); | |||
expect (s3.startsWithIgnoreCase (L"abCD")); | |||
expect (s3.startsWithIgnoreCase (String (L"abCD"))); | |||
expect (s3.startsWith (String::empty)); | |||
expect (s3.startsWithChar ('a')); | |||
expect (s3.endsWith (String ("HIJ"))); | |||
expect (s3.endsWithIgnoreCase (L"Hij")); | |||
expect (s3.endsWithIgnoreCase (String (L"Hij"))); | |||
expect (s3.endsWith (String::empty)); | |||
expect (s3.endsWithChar (L'J')); | |||
expect (s3.indexOf ("HIJ") == 7); | |||
expect (s3.indexOf (L"HIJK") == -1); | |||
expect (s3.indexOf (String (L"HIJK")) == -1); | |||
expect (s3.indexOfIgnoreCase ("hij") == 7); | |||
expect (s3.indexOfIgnoreCase (L"hijk") == -1); | |||
expect (s3.indexOfIgnoreCase (String (L"hijk")) == -1); | |||
expect (s3.toStdString() == s3.toRawUTF8()); | |||
String s4 (s3); | |||
@@ -2285,25 +2301,25 @@ public: | |||
String s5 ("word word2 word3"); | |||
expect (s5.containsWholeWord (String ("word2"))); | |||
expect (s5.indexOfWholeWord ("word2") == 5); | |||
expect (s5.containsWholeWord (L"word")); | |||
expect (s5.containsWholeWord (String (L"word"))); | |||
expect (s5.containsWholeWord ("word3")); | |||
expect (s5.containsWholeWord (s5)); | |||
expect (s5.containsWholeWordIgnoreCase (L"Word2")); | |||
expect (s5.containsWholeWordIgnoreCase (String (L"Word2"))); | |||
expect (s5.indexOfWholeWordIgnoreCase ("Word2") == 5); | |||
expect (s5.containsWholeWordIgnoreCase (L"Word")); | |||
expect (s5.containsWholeWordIgnoreCase (String (L"Word"))); | |||
expect (s5.containsWholeWordIgnoreCase ("Word3")); | |||
expect (! s5.containsWholeWordIgnoreCase (L"Wordx")); | |||
expect (! s5.containsWholeWordIgnoreCase (String (L"Wordx"))); | |||
expect (! s5.containsWholeWordIgnoreCase ("xWord2")); | |||
expect (s5.containsNonWhitespaceChars()); | |||
expect (s5.containsOnly ("ordw23 ")); | |||
expect (! String (" \n\r\t").containsNonWhitespaceChars()); | |||
expect (s5.matchesWildcard (L"wor*", false)); | |||
expect (s5.matchesWildcard (String (L"wor*"), false)); | |||
expect (s5.matchesWildcard ("wOr*", true)); | |||
expect (s5.matchesWildcard (L"*word3", true)); | |||
expect (s5.matchesWildcard (String (L"*word3"), true)); | |||
expect (s5.matchesWildcard ("*word?", true)); | |||
expect (s5.matchesWildcard (L"Word*3", true)); | |||
expect (! s5.matchesWildcard (L"*34", true)); | |||
expect (s5.matchesWildcard (String (L"Word*3"), true)); | |||
expect (! s5.matchesWildcard (String (L"*34"), true)); | |||
expect (String ("xx**y").matchesWildcard ("*y", true)); | |||
expect (String ("xx**y").matchesWildcard ("x*y", true)); | |||
expect (String ("xx**y").matchesWildcard ("xx*y", true)); | |||
@@ -2315,23 +2331,23 @@ public: | |||
expectEquals (s5.fromFirstOccurrenceOf (String::empty, true, false), s5); | |||
expectEquals (s5.fromFirstOccurrenceOf ("xword2", true, false), s5.substring (100)); | |||
expectEquals (s5.fromFirstOccurrenceOf (L"word2", true, false), s5.substring (5)); | |||
expectEquals (s5.fromFirstOccurrenceOf (String (L"word2"), true, false), s5.substring (5)); | |||
expectEquals (s5.fromFirstOccurrenceOf ("Word2", true, true), s5.substring (5)); | |||
expectEquals (s5.fromFirstOccurrenceOf ("word2", false, false), s5.getLastCharacters (6)); | |||
expectEquals (s5.fromFirstOccurrenceOf (L"Word2", false, true), s5.getLastCharacters (6)); | |||
expectEquals (s5.fromFirstOccurrenceOf ("Word2", false, true), s5.getLastCharacters (6)); | |||
expectEquals (s5.fromLastOccurrenceOf (String::empty, true, false), s5); | |||
expectEquals (s5.fromLastOccurrenceOf (L"wordx", true, false), s5); | |||
expectEquals (s5.fromLastOccurrenceOf ("wordx", true, false), s5); | |||
expectEquals (s5.fromLastOccurrenceOf ("word", true, false), s5.getLastCharacters (5)); | |||
expectEquals (s5.fromLastOccurrenceOf (L"worD", true, true), s5.getLastCharacters (5)); | |||
expectEquals (s5.fromLastOccurrenceOf ("worD", true, true), s5.getLastCharacters (5)); | |||
expectEquals (s5.fromLastOccurrenceOf ("word", false, false), s5.getLastCharacters (1)); | |||
expectEquals (s5.fromLastOccurrenceOf (L"worD", false, true), s5.getLastCharacters (1)); | |||
expectEquals (s5.fromLastOccurrenceOf ("worD", false, true), s5.getLastCharacters (1)); | |||
expect (s5.upToFirstOccurrenceOf (String::empty, true, false).isEmpty()); | |||
expectEquals (s5.upToFirstOccurrenceOf ("word4", true, false), s5); | |||
expectEquals (s5.upToFirstOccurrenceOf (L"word2", true, false), s5.substring (0, 10)); | |||
expectEquals (s5.upToFirstOccurrenceOf ("word2", true, false), s5.substring (0, 10)); | |||
expectEquals (s5.upToFirstOccurrenceOf ("Word2", true, true), s5.substring (0, 10)); | |||
expectEquals (s5.upToFirstOccurrenceOf (L"word2", false, false), s5.substring (0, 5)); | |||
expectEquals (s5.upToFirstOccurrenceOf ("word2", false, false), s5.substring (0, 5)); | |||
expectEquals (s5.upToFirstOccurrenceOf ("Word2", false, true), s5.substring (0, 5)); | |||
expectEquals (s5.upToLastOccurrenceOf (String::empty, true, false), s5); | |||
@@ -2342,15 +2358,15 @@ public: | |||
expectEquals (s5.upToLastOccurrenceOf ("word", false, false), s5.dropLastCharacters (5)); | |||
expectEquals (s5.upToLastOccurrenceOf ("Word", false, true), s5.dropLastCharacters (5)); | |||
expectEquals (s5.replace ("word", L"xyz", false), String ("xyz xyz2 xyz3")); | |||
expect (s5.replace (L"Word", "xyz", true) == "xyz xyz2 xyz3"); | |||
expectEquals (s5.replace ("word", "xyz", false), String ("xyz xyz2 xyz3")); | |||
expect (s5.replace ("Word", "xyz", true) == "xyz xyz2 xyz3"); | |||
expect (s5.dropLastCharacters (1).replace ("Word", String ("xyz"), true) == L"xyz xyz2 xyz"); | |||
expect (s5.replace ("Word", "", true) == " 2 3"); | |||
expectEquals (s5.replace ("Word2", L"xyz", true), String ("word xyz word3")); | |||
expectEquals (s5.replace ("Word2", "xyz", true), String ("word xyz word3")); | |||
expect (s5.replaceCharacter (L'w', 'x') != s5); | |||
expectEquals (s5.replaceCharacter ('w', L'x').replaceCharacter ('x', 'w'), s5); | |||
expect (s5.replaceCharacters ("wo", "xy") != s5); | |||
expectEquals (s5.replaceCharacters ("wo", "xy").replaceCharacters ("xy", L"wo"), s5); | |||
expectEquals (s5.replaceCharacters ("wo", "xy").replaceCharacters ("xy", "wo"), s5); | |||
expectEquals (s5.retainCharacters ("1wordxya"), String ("wordwordword")); | |||
expect (s5.retainCharacters (String::empty).isEmpty()); | |||
expect (s5.removeCharacters ("1wordxya") == " 2 3"); | |||
@@ -340,7 +340,7 @@ public: | |||
If the parameter is an empty string, this will always return true. | |||
Uses a case-sensitive comparison. | |||
*/ | |||
bool startsWith (const String& text) const noexcept; | |||
bool startsWith (StringRef text) const noexcept; | |||
/** Tests whether the string begins with a particular character. | |||
If the character is 0, this will always return false. | |||
@@ -352,13 +352,13 @@ public: | |||
If the parameter is an empty string, this will always return true. | |||
Uses a case-insensitive comparison. | |||
*/ | |||
bool startsWithIgnoreCase (const String& text) const noexcept; | |||
bool startsWithIgnoreCase (StringRef text) const noexcept; | |||
/** Tests whether the string ends with another string. | |||
If the parameter is an empty string, this will always return true. | |||
Uses a case-sensitive comparison. | |||
*/ | |||
bool endsWith (const String& text) const noexcept; | |||
bool endsWith (StringRef text) const noexcept; | |||
/** Tests whether the string ends with a particular character. | |||
If the character is 0, this will always return false. | |||
@@ -370,13 +370,13 @@ public: | |||
If the parameter is an empty string, this will always return true. | |||
Uses a case-insensitive comparison. | |||
*/ | |||
bool endsWithIgnoreCase (const String& text) const noexcept; | |||
bool endsWithIgnoreCase (StringRef text) const noexcept; | |||
/** Tests whether the string contains another substring. | |||
If the parameter is an empty string, this will always return true. | |||
Uses a case-sensitive comparison. | |||
*/ | |||
bool contains (const String& text) const noexcept; | |||
bool contains (StringRef text) const noexcept; | |||
/** Tests whether the string contains a particular character. | |||
Uses a case-sensitive comparison. | |||
@@ -386,7 +386,7 @@ public: | |||
/** Tests whether the string contains another substring. | |||
Uses a case-insensitive comparison. | |||
*/ | |||
bool containsIgnoreCase (const String& text) const noexcept; | |||
bool containsIgnoreCase (StringRef text) const noexcept; | |||
/** Tests whether the string contains another substring as a distinct word. | |||
@@ -394,7 +394,7 @@ public: | |||
non-alphanumeric characters | |||
@see indexOfWholeWord, containsWholeWordIgnoreCase | |||
*/ | |||
bool containsWholeWord (const String& wordToLookFor) const noexcept; | |||
bool containsWholeWord (StringRef wordToLookFor) const noexcept; | |||
/** Tests whether the string contains another substring as a distinct word. | |||
@@ -402,7 +402,7 @@ public: | |||
non-alphanumeric characters | |||
@see indexOfWholeWordIgnoreCase, containsWholeWord | |||
*/ | |||
bool containsWholeWordIgnoreCase (const String& wordToLookFor) const noexcept; | |||
bool containsWholeWordIgnoreCase (StringRef wordToLookFor) const noexcept; | |||
/** Finds an instance of another substring if it exists as a distinct word. | |||
@@ -411,7 +411,7 @@ public: | |||
found, then it will return -1 | |||
@see indexOfWholeWordIgnoreCase, containsWholeWord | |||
*/ | |||
int indexOfWholeWord (const String& wordToLookFor) const noexcept; | |||
int indexOfWholeWord (StringRef wordToLookFor) const noexcept; | |||
/** Finds an instance of another substring if it exists as a distinct word. | |||
@@ -420,7 +420,7 @@ public: | |||
found, then it will return -1 | |||
@see indexOfWholeWord, containsWholeWordIgnoreCase | |||
*/ | |||
int indexOfWholeWordIgnoreCase (const String& wordToLookFor) const noexcept; | |||
int indexOfWholeWordIgnoreCase (StringRef wordToLookFor) const noexcept; | |||
/** Looks for any of a set of characters in the string. | |||
Uses a case-sensitive comparison. | |||
@@ -428,7 +428,7 @@ public: | |||
@returns true if the string contains any of the characters from | |||
the string that is passed in. | |||
*/ | |||
bool containsAnyOf (const String& charactersItMightContain) const noexcept; | |||
bool containsAnyOf (StringRef charactersItMightContain) const noexcept; | |||
/** Looks for a set of characters in the string. | |||
Uses a case-sensitive comparison. | |||
@@ -437,7 +437,7 @@ public: | |||
the parameter string. If this string is empty, the return value will | |||
always be true. | |||
*/ | |||
bool containsOnly (const String& charactersItMightContain) const noexcept; | |||
bool containsOnly (StringRef charactersItMightContain) const noexcept; | |||
/** Returns true if this string contains any non-whitespace characters. | |||
@@ -455,7 +455,7 @@ public: | |||
This isn't a full-blown regex though! The only wildcard characters supported | |||
are "*" and "?". It's mainly intended for filename pattern matching. | |||
*/ | |||
bool matchesWildcard (const String& wildcard, bool ignoreCase) const noexcept; | |||
bool matchesWildcard (StringRef wildcard, bool ignoreCase) const noexcept; | |||
//============================================================================== | |||
// Substring location methods.. | |||
@@ -488,7 +488,7 @@ public: | |||
@see indexOfChar, lastIndexOfAnyOf | |||
*/ | |||
int indexOfAnyOf (const String& charactersToLookFor, | |||
int indexOfAnyOf (StringRef charactersToLookFor, | |||
int startIndex = 0, | |||
bool ignoreCase = false) const noexcept; | |||
@@ -497,7 +497,7 @@ public: | |||
@returns the index of the first occurrence of this substring, or -1 if it's not found. | |||
If textToLookFor is an empty string, this will always return 0. | |||
*/ | |||
int indexOf (const String& textToLookFor) const noexcept; | |||
int indexOf (StringRef textToLookFor) const noexcept; | |||
/** Searches for a substring within this string. | |||
Uses a case-sensitive comparison. | |||
@@ -506,14 +506,14 @@ public: | |||
@returns the index of the first occurrence of this substring, or -1 if it's not found. | |||
If textToLookFor is an empty string, this will always return -1. | |||
*/ | |||
int indexOf (int startIndex, const String& textToLookFor) const noexcept; | |||
int indexOf (int startIndex, StringRef textToLookFor) const noexcept; | |||
/** Searches for a substring within this string. | |||
Uses a case-insensitive comparison. | |||
@returns the index of the first occurrence of this substring, or -1 if it's not found. | |||
If textToLookFor is an empty string, this will always return 0. | |||
*/ | |||
int indexOfIgnoreCase (const String& textToLookFor) const noexcept; | |||
int indexOfIgnoreCase (StringRef textToLookFor) const noexcept; | |||
/** Searches for a substring within this string. | |||
Uses a case-insensitive comparison. | |||
@@ -522,7 +522,7 @@ public: | |||
@returns the index of the first occurrence of this substring, or -1 if it's not found. | |||
If textToLookFor is an empty string, this will always return -1. | |||
*/ | |||
int indexOfIgnoreCase (int startIndex, const String& textToLookFor) const noexcept; | |||
int indexOfIgnoreCase (int startIndex, StringRef textToLookFor) const noexcept; | |||
/** Searches for a character inside this string (working backwards from the end of the string). | |||
Uses a case-sensitive comparison. | |||
@@ -535,14 +535,14 @@ public: | |||
@returns the index of the start of the last occurrence of the substring within this string, | |||
or -1 if it's not found. If textToLookFor is an empty string, this will always return -1. | |||
*/ | |||
int lastIndexOf (const String& textToLookFor) const noexcept; | |||
int lastIndexOf (StringRef textToLookFor) const noexcept; | |||
/** Searches for a substring inside this string (working backwards from the end of the string). | |||
Uses a case-insensitive comparison. | |||
@returns the index of the start of the last occurrence of the substring within this string, or -1 | |||
if it's not found. If textToLookFor is an empty string, this will always return -1. | |||
*/ | |||
int lastIndexOfIgnoreCase (const String& textToLookFor) const noexcept; | |||
int lastIndexOfIgnoreCase (StringRef textToLookFor) const noexcept; | |||
/** Returns the index of the last character in this string that matches one of the | |||
characters passed-in to this method. | |||
@@ -556,7 +556,7 @@ public: | |||
@see lastIndexOf, indexOfAnyOf | |||
*/ | |||
int lastIndexOfAnyOf (const String& charactersToLookFor, | |||
int lastIndexOfAnyOf (StringRef charactersToLookFor, | |||
bool ignoreCase = false) const noexcept; | |||
@@ -640,7 +640,7 @@ public: | |||
@see upToFirstOccurrenceOf, fromLastOccurrenceOf | |||
*/ | |||
String fromFirstOccurrenceOf (const String& substringToStartFrom, | |||
String fromFirstOccurrenceOf (StringRef substringToStartFrom, | |||
bool includeSubStringInResult, | |||
bool ignoreCase) const; | |||
@@ -652,7 +652,7 @@ public: | |||
@see fromFirstOccurrenceOf, upToLastOccurrenceOf | |||
*/ | |||
String fromLastOccurrenceOf (const String& substringToFind, | |||
String fromLastOccurrenceOf (StringRef substringToFind, | |||
bool includeSubStringInResult, | |||
bool ignoreCase) const; | |||
@@ -669,7 +669,7 @@ public: | |||
@see upToLastOccurrenceOf, fromFirstOccurrenceOf | |||
*/ | |||
String upToFirstOccurrenceOf (const String& substringToEndWith, | |||
String upToFirstOccurrenceOf (StringRef substringToEndWith, | |||
bool includeSubStringInResult, | |||
bool ignoreCase) const; | |||
@@ -680,7 +680,7 @@ public: | |||
@see upToFirstOccurrenceOf, fromFirstOccurrenceOf | |||
*/ | |||
String upToLastOccurrenceOf (const String& substringToFind, | |||
String upToLastOccurrenceOf (StringRef substringToFind, | |||
bool includeSubStringInResult, | |||
bool ignoreCase) const; | |||
@@ -700,7 +700,7 @@ public: | |||
@param charactersToTrim the set of characters to remove. | |||
@see trim, trimStart, trimCharactersAtEnd | |||
*/ | |||
String trimCharactersAtStart (const String& charactersToTrim) const; | |||
String trimCharactersAtStart (StringRef charactersToTrim) const; | |||
/** Returns a copy of this string, having removed a specified set of characters from its end. | |||
Characters are removed from the end of the string until it finds one that is not in the | |||
@@ -708,7 +708,7 @@ public: | |||
@param charactersToTrim the set of characters to remove. | |||
@see trim, trimEnd, trimCharactersAtStart | |||
*/ | |||
String trimCharactersAtEnd (const String& charactersToTrim) const; | |||
String trimCharactersAtEnd (StringRef charactersToTrim) const; | |||
//============================================================================== | |||
/** Returns an upper-case version of this string. */ | |||
@@ -735,7 +735,7 @@ public: | |||
*/ | |||
String replaceSection (int startIndex, | |||
int numCharactersToReplace, | |||
const String& stringToInsert) const; | |||
StringRef stringToInsert) const; | |||
/** Replaces all occurrences of a substring with another string. | |||
@@ -744,8 +744,8 @@ public: | |||
Note that this is a const method, and won't alter the string itself. | |||
*/ | |||
String replace (const String& stringToReplace, | |||
const String& stringToInsertInstead, | |||
String replace (StringRef stringToReplace, | |||
StringRef stringToInsertInstead, | |||
bool ignoreCase = false) const; | |||
/** Returns a string with all occurrences of a character replaced with a different one. */ | |||
@@ -762,8 +762,8 @@ public: | |||
Note that this is a const method, and won't affect the string itself. | |||
*/ | |||
String replaceCharacters (const String& charactersToReplace, | |||
const String& charactersToInsertInstead) const; | |||
String replaceCharacters (StringRef charactersToReplace, | |||
StringRef charactersToInsertInstead) const; | |||
/** Returns a version of this string that only retains a fixed set of characters. | |||
@@ -774,7 +774,7 @@ public: | |||
Note that this is a const method, and won't alter the string itself. | |||
*/ | |||
String retainCharacters (const String& charactersToRetain) const; | |||
String retainCharacters (StringRef charactersToRetain) const; | |||
/** Returns a version of this string with a set of characters removed. | |||
@@ -785,14 +785,14 @@ public: | |||
Note that this is a const method, and won't alter the string itself. | |||
*/ | |||
String removeCharacters (const String& charactersToRemove) const; | |||
String removeCharacters (StringRef charactersToRemove) const; | |||
/** Returns a section from the start of the string that only contains a certain set of characters. | |||
This returns the leftmost section of the string, up to (and not including) the | |||
first character that doesn't appear in the string passed in. | |||
*/ | |||
String initialSectionContainingOnly (const String& permittedCharacters) const; | |||
String initialSectionContainingOnly (StringRef permittedCharacters) const; | |||
/** Returns a section from the start of the string that only contains a certain set of characters. | |||
@@ -800,7 +800,7 @@ public: | |||
first character that occurs in the string passed in. (If none of the specified | |||
characters are found in the string, the return value will just be the original string). | |||
*/ | |||
String initialSectionNotContaining (const String& charactersToStopAt) const; | |||
String initialSectionNotContaining (StringRef charactersToStopAt) const; | |||
//============================================================================== | |||
/** Checks whether the string might be in quotation marks. | |||
@@ -843,7 +843,7 @@ public: | |||
@param stringToRepeat the string to repeat | |||
@param numberOfTimesToRepeat how many times to repeat it | |||
*/ | |||
static String repeatedString (const String& stringToRepeat, | |||
static String repeatedString (StringRef stringToRepeat, | |||
int numberOfTimesToRepeat); | |||
/** Returns a copy of this string with the specified character repeatedly added to its | |||
@@ -1293,6 +1293,7 @@ JUCE_API bool JUCE_CALLTYPE operator== (const String& string1, const CharPointer | |||
JUCE_API bool JUCE_CALLTYPE operator== (const String& string1, const CharPointer_UTF16 string2) noexcept; | |||
/** Case-sensitive comparison of two strings. */ | |||
JUCE_API bool JUCE_CALLTYPE operator== (const String& string1, const CharPointer_UTF32 string2) noexcept; | |||
/** Case-sensitive comparison of two strings. */ | |||
JUCE_API bool JUCE_CALLTYPE operator!= (const String& string1, const String& string2) noexcept; | |||
/** Case-sensitive comparison of two strings. */ | |||
@@ -1305,6 +1306,7 @@ JUCE_API bool JUCE_CALLTYPE operator!= (const String& string1, const CharPointer | |||
JUCE_API bool JUCE_CALLTYPE operator!= (const String& string1, const CharPointer_UTF16 string2) noexcept; | |||
/** Case-sensitive comparison of two strings. */ | |||
JUCE_API bool JUCE_CALLTYPE operator!= (const String& string1, const CharPointer_UTF32 string2) noexcept; | |||
/** Case-sensitive comparison of two strings. */ | |||
JUCE_API bool JUCE_CALLTYPE operator> (const String& string1, const String& string2) noexcept; | |||
/** Case-sensitive comparison of two strings. */ | |||
@@ -190,7 +190,7 @@ void StringArray::set (const int index, const String& newString) | |||
strings.set (index, newString); | |||
} | |||
bool StringArray::contains (const String& stringToLookFor, const bool ignoreCase) const | |||
bool StringArray::contains (StringRef stringToLookFor, const bool ignoreCase) const | |||
{ | |||
if (ignoreCase) | |||
{ | |||
@@ -208,7 +208,7 @@ bool StringArray::contains (const String& stringToLookFor, const bool ignoreCase | |||
return false; | |||
} | |||
int StringArray::indexOf (const String& stringToLookFor, const bool ignoreCase, int i) const | |||
int StringArray::indexOf (StringRef stringToLookFor, const bool ignoreCase, int i) const | |||
{ | |||
if (i < 0) | |||
i = 0; | |||
@@ -245,8 +245,7 @@ void StringArray::remove (const int index) | |||
strings.remove (index); | |||
} | |||
void StringArray::removeString (const String& stringToRemove, | |||
const bool ignoreCase) | |||
void StringArray::removeString (StringRef stringToRemove, const bool ignoreCase) | |||
{ | |||
if (ignoreCase) | |||
{ | |||
@@ -325,7 +324,7 @@ void StringArray::move (const int currentIndex, int newIndex) noexcept | |||
//============================================================================== | |||
String StringArray::joinIntoString (const String& separator, int start, int numberToJoin) const | |||
String StringArray::joinIntoString (StringRef separator, int start, int numberToJoin) const | |||
{ | |||
const int last = (numberToJoin < 0) ? size() | |||
: jmin (size(), start + numberToJoin); | |||
@@ -339,7 +338,7 @@ String StringArray::joinIntoString (const String& separator, int start, int numb | |||
if (start == last - 1) | |||
return strings.getReference (start); | |||
const size_t separatorBytes = separator.getCharPointer().sizeInBytes() - sizeof (String::CharPointerType::CharType); | |||
const size_t separatorBytes = separator.text.sizeInBytes() - sizeof (String::CharPointerType::CharType); | |||
size_t bytesNeeded = separatorBytes * (size_t) (last - start - 1); | |||
for (int i = start; i < last; ++i) | |||
@@ -358,7 +357,7 @@ String StringArray::joinIntoString (const String& separator, int start, int numb | |||
dest.writeAll (s.getCharPointer()); | |||
if (++start < last && separatorBytes > 0) | |||
dest.writeAll (separator.getCharPointer()); | |||
dest.writeAll (separator.text); | |||
} | |||
dest.writeNull(); | |||
@@ -366,23 +365,22 @@ String StringArray::joinIntoString (const String& separator, int start, int numb | |||
return result; | |||
} | |||
int StringArray::addTokens (const String& text, const bool preserveQuotedStrings) | |||
int StringArray::addTokens (StringRef text, const bool preserveQuotedStrings) | |||
{ | |||
return addTokens (text, " \n\r\t", preserveQuotedStrings ? "\"" : ""); | |||
} | |||
int StringArray::addTokens (const String& text, const String& breakCharacters, const String& quoteCharacters) | |||
int StringArray::addTokens (StringRef text, StringRef breakCharacters, StringRef quoteCharacters) | |||
{ | |||
int num = 0; | |||
String::CharPointerType t (text.getCharPointer()); | |||
if (! t.isEmpty()) | |||
if (text.isNotEmpty()) | |||
{ | |||
for (;;) | |||
for (String::CharPointerType t (text.text);;) | |||
{ | |||
String::CharPointerType tokenEnd (CharacterFunctions::findEndOfToken (t, | |||
breakCharacters.getCharPointer(), | |||
quoteCharacters.getCharPointer())); | |||
breakCharacters.text, | |||
quoteCharacters.text)); | |||
strings.add (String (t, tokenEnd)); | |||
++num; | |||
@@ -396,10 +394,10 @@ int StringArray::addTokens (const String& text, const String& breakCharacters, c | |||
return num; | |||
} | |||
int StringArray::addLines (const String& sourceText) | |||
int StringArray::addLines (StringRef sourceText) | |||
{ | |||
int numLines = 0; | |||
String::CharPointerType text (sourceText.getCharPointer()); | |||
String::CharPointerType text (sourceText.text); | |||
bool finished = text.isEmpty(); | |||
while (! finished) | |||
@@ -425,24 +423,23 @@ int StringArray::addLines (const String& sourceText) | |||
return numLines; | |||
} | |||
StringArray StringArray::fromTokens (const String& stringToTokenise, | |||
bool preserveQuotedStrings) | |||
StringArray StringArray::fromTokens (StringRef stringToTokenise, bool preserveQuotedStrings) | |||
{ | |||
StringArray s; | |||
s.addTokens (stringToTokenise, preserveQuotedStrings); | |||
return s; | |||
} | |||
StringArray StringArray::fromTokens (const String& stringToTokenise, | |||
const String& breakCharacters, | |||
const String& quoteCharacters) | |||
StringArray StringArray::fromTokens (StringRef stringToTokenise, | |||
StringRef breakCharacters, | |||
StringRef quoteCharacters) | |||
{ | |||
StringArray s; | |||
s.addTokens (stringToTokenise, breakCharacters, quoteCharacters); | |||
return s; | |||
} | |||
StringArray StringArray::fromLines (const String& stringToBreakUp) | |||
StringArray StringArray::fromLines (StringRef stringToBreakUp) | |||
{ | |||
StringArray s; | |||
s.addLines (stringToBreakUp); | |||
@@ -153,7 +153,7 @@ public: | |||
@returns true if the string is found inside the array | |||
*/ | |||
bool contains (const String& stringToLookFor, | |||
bool contains (StringRef stringToLookFor, | |||
bool ignoreCase = false) const; | |||
/** Searches for a string in the array. | |||
@@ -166,7 +166,7 @@ public: | |||
@returns the index of the first occurrence of the string in this array, | |||
or -1 if it isn't found. | |||
*/ | |||
int indexOf (const String& stringToLookFor, | |||
int indexOf (StringRef stringToLookFor, | |||
bool ignoreCase = false, | |||
int startIndex = 0) const; | |||
@@ -214,8 +214,7 @@ public: | |||
@returns the number of tokens added | |||
@see fromTokens | |||
*/ | |||
int addTokens (const String& stringToTokenise, | |||
bool preserveQuotedStrings); | |||
int addTokens (StringRef stringToTokenise, bool preserveQuotedStrings); | |||
/** Breaks up a string into tokens and adds them to this array. | |||
@@ -231,9 +230,9 @@ public: | |||
@returns the number of tokens added | |||
@see fromTokens | |||
*/ | |||
int addTokens (const String& stringToTokenise, | |||
const String& breakCharacters, | |||
const String& quoteCharacters); | |||
int addTokens (StringRef stringToTokenise, | |||
StringRef breakCharacters, | |||
StringRef quoteCharacters); | |||
/** Breaks up a string into lines and adds them to this array. | |||
@@ -241,7 +240,7 @@ public: | |||
to the array. Line-break characters are omitted from the strings that are added to | |||
the array. | |||
*/ | |||
int addLines (const String& stringToBreakUp); | |||
int addLines (StringRef stringToBreakUp); | |||
/** Returns an array containing the tokens in a given string. | |||
@@ -249,7 +248,7 @@ public: | |||
token delimiters, and return these tokens as an array. | |||
@see addTokens | |||
*/ | |||
static StringArray fromTokens (const String& stringToTokenise, | |||
static StringArray fromTokens (StringRef stringToTokenise, | |||
bool preserveQuotedStrings); | |||
/** Returns an array containing the tokens in a given string. | |||
@@ -265,9 +264,9 @@ public: | |||
between quotes is not broken up into tokens. | |||
@see addTokens | |||
*/ | |||
static StringArray fromTokens (const String& stringToTokenise, | |||
const String& breakCharacters, | |||
const String& quoteCharacters); | |||
static StringArray fromTokens (StringRef stringToTokenise, | |||
StringRef breakCharacters, | |||
StringRef quoteCharacters); | |||
/** Returns an array containing the lines in a given string. | |||
@@ -275,7 +274,7 @@ public: | |||
array containing these lines. Line-break characters are omitted from the strings that | |||
are added to the array. | |||
*/ | |||
static StringArray fromLines (const String& stringToBreakUp); | |||
static StringArray fromLines (StringRef stringToBreakUp); | |||
//============================================================================== | |||
/** Removes all elements from the array. */ | |||
@@ -295,7 +294,7 @@ public: | |||
This will remove the first occurrence of the given string from the array. The | |||
comparison may be case-insensitive depending on the ignoreCase parameter. | |||
*/ | |||
void removeString (const String& stringToRemove, | |||
void removeString (StringRef stringToRemove, | |||
bool ignoreCase = false); | |||
/** Removes a range of elements from the array. | |||
@@ -379,7 +378,7 @@ public: | |||
@param numberOfElements how many elements to join together. If this is less | |||
than zero, all available elements will be used. | |||
*/ | |||
String joinIntoString (const String& separatorString, | |||
String joinIntoString (StringRef separatorString, | |||
int startIndex = 0, | |||
int numberOfElements = -1) const; | |||
@@ -410,7 +409,7 @@ public: | |||
private: | |||
//============================================================================== | |||
Array <String> strings; | |||
Array<String> strings; | |||
JUCE_LEAK_DETECTOR (StringArray) | |||
}; | |||
@@ -63,12 +63,12 @@ bool StringPairArray::operator!= (const StringPairArray& other) const | |||
return ! operator== (other); | |||
} | |||
const String& StringPairArray::operator[] (const String& key) const | |||
const String& StringPairArray::operator[] (StringRef key) const | |||
{ | |||
return values [keys.indexOf (key, ignoreCase)]; | |||
} | |||
String StringPairArray::getValue (const String& key, const String& defaultReturnValue) const | |||
String StringPairArray::getValue (StringRef key, const String& defaultReturnValue) const | |||
{ | |||
const int i = keys.indexOf (key, ignoreCase); | |||
@@ -105,7 +105,7 @@ void StringPairArray::clear() | |||
values.clear(); | |||
} | |||
void StringPairArray::remove (const String& key) | |||
void StringPairArray::remove (StringRef key) | |||
{ | |||
remove (keys.indexOf (key, ignoreCase)); | |||
} | |||
@@ -77,15 +77,13 @@ public: | |||
@see getValue | |||
*/ | |||
const String& operator[] (const String& key) const; | |||
const String& operator[] (StringRef key) const; | |||
/** Finds the value corresponding to a key string. | |||
If no such key is found, this will just return the value provided as a default. | |||
@see operator[] | |||
*/ | |||
String getValue (const String& key, const String& defaultReturnValue) const; | |||
String getValue (StringRef, const String& defaultReturnValue) const; | |||
/** Returns a list of all keys in the array. */ | |||
@@ -100,14 +98,12 @@ public: | |||
//============================================================================== | |||
/** Adds or amends a key/value pair. | |||
If a value already exists with this key, its value will be overwritten, | |||
otherwise the key/value pair will be added to the array. | |||
*/ | |||
void set (const String& key, const String& value); | |||
/** Adds the items from another array to this one. | |||
This is equivalent to using set() to add each of the pairs from the other array. | |||
*/ | |||
void addArray (const StringPairArray& other); | |||
@@ -117,13 +113,11 @@ public: | |||
void clear(); | |||
/** Removes a string from the array based on its key. | |||
If the key isn't found, nothing will happen. | |||
*/ | |||
void remove (const String& key); | |||
void remove (StringRef key); | |||
/** Removes a string from the array based on its index. | |||
If the index is out-of-range, no action will be taken. | |||
*/ | |||
void remove (int index); | |||
@@ -0,0 +1,124 @@ | |||
/* | |||
============================================================================== | |||
This file is part of the juce_core module of the JUCE library. | |||
Copyright (c) 2013 - Raw Material Software Ltd. | |||
Permission to use, copy, modify, and/or distribute this software for any purpose with | |||
or without fee is hereby granted, provided that the above copyright notice and this | |||
permission notice appear in all copies. | |||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD | |||
TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN | |||
NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL | |||
DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER | |||
IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN | |||
CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | |||
------------------------------------------------------------------------------ | |||
NOTE! This permissive ISC license applies ONLY to files within the juce_core module! | |||
All other JUCE modules are covered by a dual GPL/commercial license, so if you are | |||
using any other modules, be sure to check that you also comply with their license. | |||
For more details, visit www.juce.com | |||
============================================================================== | |||
*/ | |||
#ifndef JUCE_STRINGREF_H_INCLUDED | |||
#define JUCE_STRINGREF_H_INCLUDED | |||
//============================================================================== | |||
/** | |||
A simple class for holding temporary references to a string literal or String. | |||
Unlike a real String object, the StringRef does not allocate any memory or | |||
take ownership of the strings you give to it - it simply holds a reference to | |||
a string that has been allocated elsewhere. | |||
The main purpose of the class is to be used instead of a const String& as the type | |||
of function arguments where the caller may pass either a string literal or a String | |||
object. This means that when the called uses a string literal, there's no need | |||
for an temporary String object to be allocated, and this cuts down overheads | |||
substantially. | |||
Because the class is simply a wrapper around a pointer, you should always pass | |||
it by value, not by reference. | |||
@code | |||
void myStringFunction1 (const String&); | |||
void myStringFunction2 (StringRef); | |||
myStringFunction1 ("abc"); // Implicitly allocates a temporary String object. | |||
myStringFunction2 ("abc"); // Much faster, as no local allocations are needed. | |||
@endcode | |||
For examples of it in use, see the XmlElement or StringArray classes. | |||
Bear in mind that there are still many cases where it's better to use an argument | |||
which is a const String&. For example if the function stores the string or needs | |||
to internally create a String from the argument, then it's better for the original | |||
argument to already be a String. | |||
@see String | |||
*/ | |||
class JUCE_API StringRef | |||
{ | |||
public: | |||
/** Creates a StringRef from a raw string literal. | |||
The StringRef object does NOT take ownership or copy this data, so you must | |||
ensure that the data does not change during the lifetime of the StringRef. | |||
Note that this pointer not be null! | |||
*/ | |||
StringRef (const String::CharPointerType::CharType* stringLiteral) noexcept; | |||
/** Creates a StringRef from a raw char pointer. | |||
The StringRef object does NOT take ownership or copy this data, so you must | |||
ensure that the data does not change during the lifetime of the StringRef. | |||
*/ | |||
StringRef (String::CharPointerType stringLiteral) noexcept; | |||
/** Creates a StringRef from a String. | |||
The StringRef object does NOT take ownership or copy the data from the String, | |||
so you must ensure that the String is not modified or deleted during the lifetime | |||
of the StringRef. | |||
*/ | |||
StringRef (const String& string) noexcept; | |||
//============================================================================== | |||
/** Returns a raw pointer to the underlying string data. */ | |||
operator const String::CharPointerType::CharType*() const noexcept { return text.getAddress(); } | |||
/** Returns a pointer to the underlying string data as a char pointer object. */ | |||
operator String::CharPointerType() const noexcept { return text; } | |||
/** Returns true if the string is empty. */ | |||
bool isEmpty() const noexcept { return text.isEmpty(); } | |||
/** Returns true if the string is not empty. */ | |||
bool isNotEmpty() const noexcept { return ! text.isEmpty(); } | |||
/** Returns the number of characters in the string. */ | |||
int length() const noexcept { return text.length(); } | |||
/** Compares this StringRef with a String. */ | |||
bool operator== (const String& s) const noexcept { return text.compare (s.getCharPointer()) == 0; } | |||
/** Compares this StringRef with a String. */ | |||
bool operator!= (const String& s) const noexcept { return text.compare (s.getCharPointer()) != 0; } | |||
/** Case-sensitive comparison of two StringRefs. */ | |||
bool operator== (StringRef s) const noexcept { return text.compare (s.text) == 0; } | |||
/** Case-sensitive comparison of two StringRefs. */ | |||
bool operator!= (StringRef s) const noexcept { return text.compare (s.text) != 0; } | |||
//============================================================================== | |||
/** The text that is referenced. */ | |||
String::CharPointerType text; | |||
}; | |||
//============================================================================== | |||
/** Case-sensitive comparison of two strings. */ | |||
JUCE_API bool JUCE_CALLTYPE operator== (const String& string1, StringRef string2) noexcept; | |||
/** Case-sensitive comparison of two strings. */ | |||
JUCE_API bool JUCE_CALLTYPE operator!= (const String& string1, StringRef string2) noexcept; | |||
#endif // JUCE_STRINGREF_H_INCLUDED |
@@ -42,7 +42,7 @@ XmlElement::XmlAttributeNode::XmlAttributeNode (const String& n, const String& v | |||
#endif | |||
} | |||
inline bool XmlElement::XmlAttributeNode::hasName (const String& nameToMatch) const noexcept | |||
bool XmlElement::XmlAttributeNode::hasName (StringRef nameToMatch) const noexcept | |||
{ | |||
return name.equalsIgnoreCase (nameToMatch); | |||
} | |||
@@ -74,9 +74,7 @@ XmlElement& XmlElement::operator= (const XmlElement& other) | |||
{ | |||
removeAllAttributes(); | |||
deleteAllChildElements(); | |||
tagName = other.tagName; | |||
copyChildrenAndAttributesFrom (other); | |||
} | |||
@@ -85,10 +83,10 @@ XmlElement& XmlElement::operator= (const XmlElement& other) | |||
#if JUCE_COMPILER_SUPPORTS_MOVE_SEMANTICS | |||
XmlElement::XmlElement (XmlElement&& other) noexcept | |||
: nextListItem (static_cast <LinkedListPointer <XmlElement>&&> (other.nextListItem)), | |||
firstChildElement (static_cast <LinkedListPointer <XmlElement>&&> (other.firstChildElement)), | |||
attributes (static_cast <LinkedListPointer <XmlAttributeNode>&&> (other.attributes)), | |||
tagName (static_cast <String&&> (other.tagName)) | |||
: nextListItem (static_cast<LinkedListPointer<XmlElement>&&> (other.nextListItem)), | |||
firstChildElement (static_cast<LinkedListPointer<XmlElement>&&> (other.firstChildElement)), | |||
attributes (static_cast<LinkedListPointer<XmlAttributeNode>&&> (other.attributes)), | |||
tagName (static_cast<String&&> (other.tagName)) | |||
{ | |||
} | |||
@@ -99,10 +97,10 @@ XmlElement& XmlElement::operator= (XmlElement&& other) noexcept | |||
removeAllAttributes(); | |||
deleteAllChildElements(); | |||
nextListItem = static_cast <LinkedListPointer <XmlElement>&&> (other.nextListItem); | |||
firstChildElement = static_cast <LinkedListPointer <XmlElement>&&> (other.firstChildElement); | |||
attributes = static_cast <LinkedListPointer <XmlAttributeNode>&&> (other.attributes); | |||
tagName = static_cast <String&&> (other.tagName); | |||
nextListItem = static_cast<LinkedListPointer<XmlElement>&&> (other.nextListItem); | |||
firstChildElement = static_cast<LinkedListPointer<XmlElement>&&> (other.firstChildElement); | |||
attributes = static_cast<LinkedListPointer<XmlAttributeNode>&&> (other.attributes); | |||
tagName = static_cast<String&&> (other.tagName); | |||
return *this; | |||
} | |||
@@ -163,8 +161,8 @@ namespace XmlOutputFunctions | |||
static bool isLegalXmlChar (const uint32 c) noexcept | |||
{ | |||
static const unsigned char legalChars[] = { 0, 0, 0, 0, 187, 255, 255, 175, 255, 255, 255, 191, 254, 255, 255, 127 }; | |||
static const unsigned char legalChars[] = { 0, 0, 0, 0, 187, 255, 255, 175, 255, | |||
255, 255, 191, 254, 255, 255, 127 }; | |||
return c < sizeof (legalChars) * 8 | |||
&& (legalChars [c >> 3] & (1 << (c & 7))) != 0; | |||
} | |||
@@ -297,10 +295,10 @@ void XmlElement::writeElementAsText (OutputStream& outputStream, | |||
} | |||
} | |||
String XmlElement::createDocument (const String& dtdToUse, | |||
String XmlElement::createDocument (StringRef dtdToUse, | |||
const bool allOnOneLine, | |||
const bool includeXmlHeader, | |||
const String& encodingType, | |||
StringRef encodingType, | |||
const int lineWrapLength) const | |||
{ | |||
MemoryOutputStream mem (2048); | |||
@@ -310,10 +308,10 @@ String XmlElement::createDocument (const String& dtdToUse, | |||
} | |||
void XmlElement::writeToStream (OutputStream& output, | |||
const String& dtdToUse, | |||
StringRef dtdToUse, | |||
const bool allOnOneLine, | |||
const bool includeXmlHeader, | |||
const String& encodingType, | |||
StringRef encodingType, | |||
const int lineWrapLength) const | |||
{ | |||
using namespace XmlOutputFunctions; | |||
@@ -345,8 +343,8 @@ void XmlElement::writeToStream (OutputStream& output, | |||
} | |||
bool XmlElement::writeToFile (const File& file, | |||
const String& dtdToUse, | |||
const String& encodingType, | |||
StringRef dtdToUse, | |||
StringRef encodingType, | |||
const int lineWrapLength) const | |||
{ | |||
TemporaryFile tempFile (file); | |||
@@ -364,7 +362,7 @@ bool XmlElement::writeToFile (const File& file, | |||
} | |||
//============================================================================== | |||
bool XmlElement::hasTagName (const String& possibleTagName) const noexcept | |||
bool XmlElement::hasTagName (StringRef possibleTagName) const noexcept | |||
{ | |||
const bool matches = tagName.equalsIgnoreCase (possibleTagName); | |||
@@ -385,12 +383,12 @@ String XmlElement::getTagNameWithoutNamespace() const | |||
return tagName.fromLastOccurrenceOf (":", false, false); | |||
} | |||
bool XmlElement::hasTagNameIgnoringNamespace (const String& possibleTagName) const | |||
bool XmlElement::hasTagNameIgnoringNamespace (StringRef possibleTagName) const | |||
{ | |||
return hasTagName (possibleTagName) || getTagNameWithoutNamespace() == possibleTagName; | |||
} | |||
XmlElement* XmlElement::getNextElementWithTagName (const String& requiredTagName) const | |||
XmlElement* XmlElement::getNextElementWithTagName (StringRef requiredTagName) const | |||
{ | |||
XmlElement* e = nextListItem; | |||
@@ -408,89 +406,90 @@ int XmlElement::getNumAttributes() const noexcept | |||
const String& XmlElement::getAttributeName (const int index) const noexcept | |||
{ | |||
const XmlAttributeNode* const att = attributes [index]; | |||
return att != nullptr ? att->name : String::empty; | |||
if (const XmlAttributeNode* const att = attributes [index]) | |||
return att->name; | |||
return String::empty; | |||
} | |||
const String& XmlElement::getAttributeValue (const int index) const noexcept | |||
{ | |||
const XmlAttributeNode* const att = attributes [index]; | |||
return att != nullptr ? att->value : String::empty; | |||
if (const XmlAttributeNode* const att = attributes [index]) | |||
return att->value; | |||
return String::empty; | |||
} | |||
bool XmlElement::hasAttribute (const String& attributeName) const noexcept | |||
XmlElement::XmlAttributeNode* XmlElement::getAttribute (StringRef attributeName) const noexcept | |||
{ | |||
for (const XmlAttributeNode* att = attributes; att != nullptr; att = att->nextListItem) | |||
for (XmlAttributeNode* att = attributes; att != nullptr; att = att->nextListItem) | |||
if (att->hasName (attributeName)) | |||
return true; | |||
return att; | |||
return false; | |||
return nullptr; | |||
} | |||
bool XmlElement::hasAttribute (StringRef attributeName) const noexcept | |||
{ | |||
return getAttribute (attributeName) != nullptr; | |||
} | |||
//============================================================================== | |||
const String& XmlElement::getStringAttribute (const String& attributeName) const noexcept | |||
const String& XmlElement::getStringAttribute (StringRef attributeName) const noexcept | |||
{ | |||
for (const XmlAttributeNode* att = attributes; att != nullptr; att = att->nextListItem) | |||
if (att->hasName (attributeName)) | |||
return att->value; | |||
if (const XmlAttributeNode* att = getAttribute (attributeName)) | |||
return att->value; | |||
return String::empty; | |||
} | |||
String XmlElement::getStringAttribute (const String& attributeName, const String& defaultReturnValue) const | |||
String XmlElement::getStringAttribute (StringRef attributeName, const String& defaultReturnValue) const | |||
{ | |||
for (const XmlAttributeNode* att = attributes; att != nullptr; att = att->nextListItem) | |||
if (att->hasName (attributeName)) | |||
return att->value; | |||
if (const XmlAttributeNode* att = getAttribute (attributeName)) | |||
return att->value; | |||
return defaultReturnValue; | |||
} | |||
int XmlElement::getIntAttribute (const String& attributeName, const int defaultReturnValue) const | |||
int XmlElement::getIntAttribute (StringRef attributeName, const int defaultReturnValue) const | |||
{ | |||
for (const XmlAttributeNode* att = attributes; att != nullptr; att = att->nextListItem) | |||
if (att->hasName (attributeName)) | |||
return att->value.getIntValue(); | |||
if (const XmlAttributeNode* att = getAttribute (attributeName)) | |||
return att->value.getIntValue(); | |||
return defaultReturnValue; | |||
} | |||
double XmlElement::getDoubleAttribute (const String& attributeName, const double defaultReturnValue) const | |||
double XmlElement::getDoubleAttribute (StringRef attributeName, const double defaultReturnValue) const | |||
{ | |||
for (const XmlAttributeNode* att = attributes; att != nullptr; att = att->nextListItem) | |||
if (att->hasName (attributeName)) | |||
return att->value.getDoubleValue(); | |||
if (const XmlAttributeNode* att = getAttribute (attributeName)) | |||
return att->value.getDoubleValue(); | |||
return defaultReturnValue; | |||
} | |||
bool XmlElement::getBoolAttribute (const String& attributeName, const bool defaultReturnValue) const | |||
bool XmlElement::getBoolAttribute (StringRef attributeName, const bool defaultReturnValue) const | |||
{ | |||
for (const XmlAttributeNode* att = attributes; att != nullptr; att = att->nextListItem) | |||
if (const XmlAttributeNode* att = getAttribute (attributeName)) | |||
{ | |||
if (att->hasName (attributeName)) | |||
{ | |||
const juce_wchar firstChar = *(att->value.getCharPointer().findEndOfWhitespace()); | |||
const juce_wchar firstChar = *(att->value.getCharPointer().findEndOfWhitespace()); | |||
return firstChar == '1' | |||
|| firstChar == 't' | |||
|| firstChar == 'y' | |||
|| firstChar == 'T' | |||
|| firstChar == 'Y'; | |||
} | |||
return firstChar == '1' | |||
|| firstChar == 't' | |||
|| firstChar == 'y' | |||
|| firstChar == 'T' | |||
|| firstChar == 'Y'; | |||
} | |||
return defaultReturnValue; | |||
} | |||
bool XmlElement::compareAttribute (const String& attributeName, | |||
const String& stringToCompareAgainst, | |||
bool XmlElement::compareAttribute (StringRef attributeName, | |||
StringRef stringToCompareAgainst, | |||
const bool ignoreCase) const noexcept | |||
{ | |||
for (const XmlAttributeNode* att = attributes; att != nullptr; att = att->nextListItem) | |||
if (att->hasName (attributeName)) | |||
return ignoreCase ? att->value.equalsIgnoreCase (stringToCompareAgainst) | |||
: att->value == stringToCompareAgainst; | |||
if (const XmlAttributeNode* att = getAttribute (attributeName)) | |||
return ignoreCase ? att->value.equalsIgnoreCase (stringToCompareAgainst) | |||
: att->value == stringToCompareAgainst; | |||
return false; | |||
} | |||
@@ -561,7 +560,7 @@ XmlElement* XmlElement::getChildElement (const int index) const noexcept | |||
return firstChildElement [index].get(); | |||
} | |||
XmlElement* XmlElement::getChildByName (const String& childName) const noexcept | |||
XmlElement* XmlElement::getChildByName (StringRef childName) const noexcept | |||
{ | |||
for (XmlElement* child = firstChildElement; child != nullptr; child = child->nextListItem) | |||
if (child->hasTagName (childName)) | |||
@@ -576,8 +575,7 @@ void XmlElement::addChildElement (XmlElement* const newNode) noexcept | |||
firstChildElement.append (newNode); | |||
} | |||
void XmlElement::insertChildElement (XmlElement* const newNode, | |||
int indexToInsertAt) noexcept | |||
void XmlElement::insertChildElement (XmlElement* const newNode, int indexToInsertAt) noexcept | |||
{ | |||
if (newNode != nullptr) | |||
{ | |||
@@ -700,7 +698,7 @@ void XmlElement::deleteAllChildElements() noexcept | |||
firstChildElement.deleteAll(); | |||
} | |||
void XmlElement::deleteAllChildElementsWithTagName (const String& name) noexcept | |||
void XmlElement::deleteAllChildElementsWithTagName (StringRef name) noexcept | |||
{ | |||
for (XmlElement* child = firstChildElement; child != nullptr;) | |||
{ | |||
@@ -791,8 +789,7 @@ String XmlElement::getAllSubText() const | |||
return mem.toUTF8(); | |||
} | |||
String XmlElement::getChildElementAllSubText (const String& childTagName, | |||
const String& defaultReturnValue) const | |||
String XmlElement::getChildElementAllSubText (StringRef childTagName, const String& defaultReturnValue) const | |||
{ | |||
if (const XmlElement* const child = getChildByName (childTagName)) | |||
return child->getAllSubText(); | |||
@@ -193,10 +193,10 @@ public: | |||
determines how lists of attributes get broken up | |||
@see writeToStream, writeToFile | |||
*/ | |||
String createDocument (const String& dtdToUse, | |||
String createDocument (StringRef dtdToUse, | |||
bool allOnOneLine = false, | |||
bool includeXmlHeader = true, | |||
const String& encodingType = "UTF-8", | |||
StringRef encodingType = "UTF-8", | |||
int lineWrapLength = 60) const; | |||
/** Writes the document to a stream as UTF-8. | |||
@@ -215,10 +215,10 @@ public: | |||
@see writeToFile, createDocument | |||
*/ | |||
void writeToStream (OutputStream& output, | |||
const String& dtdToUse, | |||
StringRef dtdToUse, | |||
bool allOnOneLine = false, | |||
bool includeXmlHeader = true, | |||
const String& encodingType = "UTF-8", | |||
StringRef encodingType = "UTF-8", | |||
int lineWrapLength = 60) const; | |||
/** Writes the element to a file as an XML document. | |||
@@ -241,8 +241,8 @@ public: | |||
@see createDocument | |||
*/ | |||
bool writeToFile (const File& destinationFile, | |||
const String& dtdToUse, | |||
const String& encodingType = "UTF-8", | |||
StringRef dtdToUse, | |||
StringRef encodingType = "UTF-8", | |||
int lineWrapLength = 60) const; | |||
//============================================================================== | |||
@@ -250,7 +250,7 @@ public: | |||
E.g. for an element such as \<MOOSE legs="4" antlers="2">, this would return "MOOSE". | |||
@see hasTagName | |||
*/ | |||
inline const String& getTagName() const noexcept { return tagName; } | |||
const String& getTagName() const noexcept { return tagName; } | |||
/** Returns the namespace portion of the tag-name, or an empty string if none is specified. */ | |||
String getNamespace() const; | |||
@@ -262,13 +262,13 @@ public: | |||
@param possibleTagName the tag name you're comparing it with | |||
@see getTagName | |||
*/ | |||
bool hasTagName (const String& possibleTagName) const noexcept; | |||
bool hasTagName (StringRef possibleTagName) const noexcept; | |||
/** Tests whether this element has a particular tag name, ignoring any XML namespace prefix. | |||
So a test for e.g. "xyz" will return true for "xyz" and also "foo:xyz", "bar::xyz", etc. | |||
@see getTagName | |||
*/ | |||
bool hasTagNameIgnoringNamespace (const String& possibleTagName) const; | |||
bool hasTagNameIgnoringNamespace (StringRef possibleTagName) const; | |||
//============================================================================== | |||
/** Returns the number of XML attributes this element contains. | |||
@@ -300,13 +300,13 @@ public: | |||
// Attribute-handling methods.. | |||
/** Checks whether the element contains an attribute with a certain name. */ | |||
bool hasAttribute (const String& attributeName) const noexcept; | |||
bool hasAttribute (StringRef attributeName) const noexcept; | |||
/** Returns the value of a named attribute. | |||
@param attributeName the name of the attribute to look up | |||
*/ | |||
const String& getStringAttribute (const String& attributeName) const noexcept; | |||
const String& getStringAttribute (StringRef attributeName) const noexcept; | |||
/** Returns the value of a named attribute. | |||
@@ -314,8 +314,7 @@ public: | |||
@param defaultReturnValue a value to return if the element doesn't have an attribute | |||
with this name | |||
*/ | |||
String getStringAttribute (const String& attributeName, | |||
const String& defaultReturnValue) const; | |||
String getStringAttribute (StringRef attributeName, const String& defaultReturnValue) const; | |||
/** Compares the value of a named attribute with a value passed-in. | |||
@@ -325,8 +324,8 @@ public: | |||
@returns true if the value of the attribute is the same as the string passed-in; | |||
false if it's different (or if no such attribute exists) | |||
*/ | |||
bool compareAttribute (const String& attributeName, | |||
const String& stringToCompareAgainst, | |||
bool compareAttribute (StringRef attributeName, | |||
StringRef stringToCompareAgainst, | |||
bool ignoreCase = false) const noexcept; | |||
/** Returns the value of a named attribute as an integer. | |||
@@ -339,8 +338,7 @@ public: | |||
with this name | |||
@see setAttribute | |||
*/ | |||
int getIntAttribute (const String& attributeName, | |||
int defaultReturnValue = 0) const; | |||
int getIntAttribute (StringRef attributeName, int defaultReturnValue = 0) const; | |||
/** Returns the value of a named attribute as floating-point. | |||
@@ -352,8 +350,7 @@ public: | |||
with this name | |||
@see setAttribute | |||
*/ | |||
double getDoubleAttribute (const String& attributeName, | |||
double defaultReturnValue = 0.0) const; | |||
double getDoubleAttribute (StringRef attributeName, double defaultReturnValue = 0.0) const; | |||
/** Returns the value of a named attribute as a boolean. | |||
@@ -365,8 +362,7 @@ public: | |||
@param defaultReturnValue a value to return if the element doesn't have an attribute | |||
with this name | |||
*/ | |||
bool getBoolAttribute (const String& attributeName, | |||
bool defaultReturnValue = false) const; | |||
bool getBoolAttribute (StringRef attributeName, bool defaultReturnValue = false) const; | |||
/** Adds a named attribute to the element. | |||
@@ -381,8 +377,7 @@ public: | |||
@param newValue the value to set it to | |||
@see removeAttribute | |||
*/ | |||
void setAttribute (const String& attributeName, | |||
const String& newValue); | |||
void setAttribute (const String& attributeName, const String& newValue); | |||
/** Adds a named attribute to the element, setting it to an integer value. | |||
@@ -396,8 +391,7 @@ public: | |||
@param attributeName the name of the attribute to set | |||
@param newValue the value to set it to | |||
*/ | |||
void setAttribute (const String& attributeName, | |||
int newValue); | |||
void setAttribute (const String& attributeName, int newValue); | |||
/** Adds a named attribute to the element, setting it to a floating-point value. | |||
@@ -411,8 +405,7 @@ public: | |||
@param attributeName the name of the attribute to set | |||
@param newValue the value to set it to | |||
*/ | |||
void setAttribute (const String& attributeName, | |||
double newValue); | |||
void setAttribute (const String& attributeName, double newValue); | |||
/** Removes a named attribute from the element. | |||
@@ -421,17 +414,14 @@ public: | |||
*/ | |||
void removeAttribute (const String& attributeName) noexcept; | |||
/** Removes all attributes from this element. | |||
*/ | |||
/** Removes all attributes from this element. */ | |||
void removeAllAttributes() noexcept; | |||
//============================================================================== | |||
// Child element methods.. | |||
/** Returns the first of this element's sub-elements. | |||
see getNextElement() for an example of how to iterate the sub-elements. | |||
@see forEachXmlChildElement | |||
*/ | |||
XmlElement* getFirstChildElement() const noexcept { return firstChildElement; } | |||
@@ -472,10 +462,9 @@ public: | |||
@see getNextElement, forEachXmlChildElementWithTagName | |||
*/ | |||
XmlElement* getNextElementWithTagName (const String& requiredTagName) const; | |||
XmlElement* getNextElementWithTagName (StringRef requiredTagName) const; | |||
/** Returns the number of sub-elements in this element. | |||
@see getChildElement | |||
*/ | |||
int getNumChildElements() const noexcept; | |||
@@ -496,7 +485,7 @@ public: | |||
@returns the first element with this tag name, or nullptr if none is found | |||
@see getNextElement, isTextElement, getChildElement | |||
*/ | |||
XmlElement* getChildByName (const String& tagNameToLookFor) const noexcept; | |||
XmlElement* getChildByName (StringRef tagNameToLookFor) const noexcept; | |||
//============================================================================== | |||
/** Appends an element to this element's list of children. | |||
@@ -560,16 +549,14 @@ public: | |||
bool shouldDeleteTheChild) noexcept; | |||
/** Deletes all the child elements in the element. | |||
@see removeChildElement, deleteAllChildElementsWithTagName | |||
*/ | |||
void deleteAllChildElements() noexcept; | |||
/** Deletes all the child elements with a given tag name. | |||
@see removeChildElement | |||
*/ | |||
void deleteAllChildElementsWithTagName (const String& tagName) noexcept; | |||
void deleteAllChildElementsWithTagName (StringRef tagName) noexcept; | |||
/** Returns true if the given element is a child of this one. */ | |||
bool containsChildElement (const XmlElement* possibleChild) const noexcept; | |||
@@ -676,23 +663,20 @@ public: | |||
@see getAllSubText | |||
*/ | |||
String getChildElementAllSubText (const String& childTagName, | |||
String getChildElementAllSubText (StringRef childTagName, | |||
const String& defaultReturnValue) const; | |||
/** Appends a section of text to this element. | |||
@see isTextElement, getText, getAllSubText | |||
*/ | |||
void addTextElement (const String& text); | |||
/** Removes all the text elements from this element. | |||
@see isTextElement, getText, getAllSubText, addTextElement | |||
*/ | |||
void deleteAllTextElements() noexcept; | |||
/** Creates a text element that can be added to a parent element. | |||
*/ | |||
/** Creates a text element that can be added to a parent element. */ | |||
static XmlElement* createTextElement (const String& text); | |||
//============================================================================== | |||
@@ -705,7 +689,7 @@ private: | |||
LinkedListPointer<XmlAttributeNode> nextListItem; | |||
String name, value; | |||
bool hasName (const String&) const noexcept; | |||
bool hasName (StringRef) const noexcept; | |||
private: | |||
XmlAttributeNode& operator= (const XmlAttributeNode&); | |||
@@ -726,6 +710,7 @@ private: | |||
void writeElementAsText (OutputStream&, int indentationLevel, int lineWrapLength) const; | |||
void getChildElementsAsArray (XmlElement**) const noexcept; | |||
void reorderChildElements (XmlElement**, int) noexcept; | |||
XmlAttributeNode* getAttribute (StringRef) const noexcept; | |||
JUCE_LEAK_DETECTOR (XmlElement) | |||
}; | |||
@@ -814,10 +814,10 @@ public: | |||
@see toString | |||
*/ | |||
static Rectangle fromString (const String& stringVersion) | |||
static Rectangle fromString (StringRef stringVersion) | |||
{ | |||
StringArray toks; | |||
toks.addTokens (stringVersion.trim(), ",; \t\r\n", String::empty); | |||
toks.addTokens (stringVersion.text.findEndOfWhitespace(), ",; \t\r\n", String::empty); | |||
return Rectangle (parseIntAfterSpace (toks[0]), | |||
parseIntAfterSpace (toks[1]), | |||
@@ -836,8 +836,8 @@ private: | |||
Point<ValueType> pos; | |||
ValueType w, h; | |||
static int parseIntAfterSpace (const String& s) noexcept | |||
{ return s.getCharPointer().findEndOfWhitespace().getIntValue32(); } | |||
static int parseIntAfterSpace (StringRef s) noexcept | |||
{ return s.text.findEndOfWhitespace().getIntValue32(); } | |||
void copyWithRounding (Rectangle<int>& result) const noexcept { result = getSmallestIntegerContainer(); } | |||
void copyWithRounding (Rectangle<float>& result) const noexcept { result = toFloat(); } | |||
@@ -1553,7 +1553,7 @@ int Component::getIndexOfChildComponent (const Component* const child) const noe | |||
return childComponentList.indexOf (const_cast <Component*> (child)); | |||
} | |||
Component* Component::findChildWithID (const String& targetID) const noexcept | |||
Component* Component::findChildWithID (StringRef targetID) const noexcept | |||
{ | |||
for (int i = childComponentList.size(); --i >= 0;) | |||
{ | |||
@@ -683,7 +683,7 @@ public: | |||
/** Looks for a child component with the specified ID. | |||
@see setComponentID, getComponentID | |||
*/ | |||
Component* findChildWithID (const String& componentID) const noexcept; | |||
Component* findChildWithID (StringRef componentID) const noexcept; | |||
/** Adds a child component to this one. | |||